@ -0,0 +1,5 @@ |
|||||||
|
This is a personalized mod for [SnekStudio] based on its existing headpat mod, with trigger and assets modified. Instead of being triggered by a Twitch redeem, this mod triggers on chat message contents, such that typing for example "copyPat" (a BTTV emote in my channel) will trigger the headpat animation. There also is an additional sound effect that plays. |
||||||
|
|
||||||
|
May be considered public domain, however .gif and .mp3 are of unknown origin. |
||||||
|
|
||||||
|
[SnekStudio]: https://github.com/ExpiredPopsicle/SnekStudio |
@ -0,0 +1,50 @@ |
|||||||
|
[gd_resource type="SpriteFrames" load_steps=11 format=3 uid="uid://dku03qom1ggul"] |
||||||
|
|
||||||
|
[ext_resource type="Texture2D" uid="uid://c0q4k8pg67x0t" path="res://Mods/copyPat/Resources/Sprites/frame0000.png" id="1_6yg0t"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://cg2qsgsfjytbo" path="res://Mods/copyPat/Resources/Sprites/frame0001.png" id="2_hok6u"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://rlt4xf6i2lwq" path="res://Mods/copyPat/Resources/Sprites/frame0002.png" id="3_56chl"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://cnj3ytdbosr22" path="res://Mods/copyPat/Resources/Sprites/frame0003.png" id="4_xs5by"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://dpilq5sol1qaa" path="res://Mods/copyPat/Resources/Sprites/frame0004.png" id="5_gqc3p"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://bib1jji1dxnre" path="res://Mods/copyPat/Resources/Sprites/frame0005.png" id="6_vrbg2"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://ddleraq15mf45" path="res://Mods/copyPat/Resources/Sprites/frame0006.png" id="7_s0f6e"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://inbtpiu0dei2" path="res://Mods/copyPat/Resources/Sprites/frame0007.png" id="8_jo2n1"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://bn4q1e3jwi8f4" path="res://Mods/copyPat/Resources/Sprites/frame0008.png" id="9_ecn1r"] |
||||||
|
[ext_resource type="Texture2D" uid="uid://bb0g2obo0qc5o" path="res://Mods/copyPat/Resources/Sprites/frame0009.png" id="10_gb6v1"] |
||||||
|
|
||||||
|
[resource] |
||||||
|
animations = [{ |
||||||
|
"frames": [{ |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("1_6yg0t") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("2_hok6u") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("3_56chl") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("4_xs5by") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("5_gqc3p") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("6_vrbg2") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("7_s0f6e") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("8_jo2n1") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("9_ecn1r") |
||||||
|
}, { |
||||||
|
"duration": 1.0, |
||||||
|
"texture": ExtResource("10_gb6v1") |
||||||
|
}], |
||||||
|
"loop": true, |
||||||
|
"name": &"default", |
||||||
|
"speed": 30.0 |
||||||
|
}] |
After Width: | Height: | Size: 8.4 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://c0q4k8pg67x0t" |
||||||
|
path.s3tc="res://.godot/imported/frame0000.png-541d8bc778e6cbbdc8e432fb4896d23f.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0000.png" |
||||||
|
dest_files=["res://.godot/imported/frame0000.png-541d8bc778e6cbbdc8e432fb4896d23f.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=0 |
After Width: | Height: | Size: 7.8 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://cg2qsgsfjytbo" |
||||||
|
path.s3tc="res://.godot/imported/frame0001.png-98b6d91eb7e60e7ea9da2190c5a1444f.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0001.png" |
||||||
|
dest_files=["res://.godot/imported/frame0001.png-98b6d91eb7e60e7ea9da2190c5a1444f.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 8.1 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://rlt4xf6i2lwq" |
||||||
|
path.s3tc="res://.godot/imported/frame0002.png-eebe31c149513c211724df17e6d00ba8.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0002.png" |
||||||
|
dest_files=["res://.godot/imported/frame0002.png-eebe31c149513c211724df17e6d00ba8.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 8.2 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://cnj3ytdbosr22" |
||||||
|
path.s3tc="res://.godot/imported/frame0003.png-3ea029b60cd63160ac773c549e33c00c.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0003.png" |
||||||
|
dest_files=["res://.godot/imported/frame0003.png-3ea029b60cd63160ac773c549e33c00c.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 8.3 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://dpilq5sol1qaa" |
||||||
|
path.s3tc="res://.godot/imported/frame0004.png-7819cbb3e99a8826fe515742b3d67886.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0004.png" |
||||||
|
dest_files=["res://.godot/imported/frame0004.png-7819cbb3e99a8826fe515742b3d67886.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 7.8 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://bib1jji1dxnre" |
||||||
|
path.s3tc="res://.godot/imported/frame0005.png-c1aab9bb59dd0f9c6ef9ffc7f3432728.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0005.png" |
||||||
|
dest_files=["res://.godot/imported/frame0005.png-c1aab9bb59dd0f9c6ef9ffc7f3432728.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 8.2 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://ddleraq15mf45" |
||||||
|
path.s3tc="res://.godot/imported/frame0006.png-1153f7b9849d779827eef7a5e37f6a7d.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0006.png" |
||||||
|
dest_files=["res://.godot/imported/frame0006.png-1153f7b9849d779827eef7a5e37f6a7d.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 8.4 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://inbtpiu0dei2" |
||||||
|
path.s3tc="res://.godot/imported/frame0007.png-ff4cac87646ef5b186ab232475f2e046.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0007.png" |
||||||
|
dest_files=["res://.godot/imported/frame0007.png-ff4cac87646ef5b186ab232475f2e046.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 8.0 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://bn4q1e3jwi8f4" |
||||||
|
path.s3tc="res://.godot/imported/frame0008.png-772a67101bbace68d40c4dfd5eeeca61.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0008.png" |
||||||
|
dest_files=["res://.godot/imported/frame0008.png-772a67101bbace68d40c4dfd5eeeca61.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
After Width: | Height: | Size: 8.2 KiB |
@ -0,0 +1,35 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="texture" |
||||||
|
type="CompressedTexture2D" |
||||||
|
uid="uid://bb0g2obo0qc5o" |
||||||
|
path.s3tc="res://.godot/imported/frame0009.png-b6fdfcfb97cdc3ede3a515d3b2a45bcc.s3tc.ctex" |
||||||
|
metadata={ |
||||||
|
"imported_formats": ["s3tc_bptc"], |
||||||
|
"vram_texture": true |
||||||
|
} |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/Sprites/frame0009.png" |
||||||
|
dest_files=["res://.godot/imported/frame0009.png-b6fdfcfb97cdc3ede3a515d3b2a45bcc.s3tc.ctex"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
compress/mode=2 |
||||||
|
compress/high_quality=false |
||||||
|
compress/lossy_quality=0.7 |
||||||
|
compress/hdr_compression=1 |
||||||
|
compress/normal_map=0 |
||||||
|
compress/channel_pack=0 |
||||||
|
mipmaps/generate=true |
||||||
|
mipmaps/limit=-1 |
||||||
|
roughness/mode=0 |
||||||
|
roughness/src_normal="" |
||||||
|
process/fix_alpha_border=true |
||||||
|
process/premult_alpha=false |
||||||
|
process/normal_map_invert_y=false |
||||||
|
process/hdr_as_srgb=false |
||||||
|
process/hdr_clamp_exposure=false |
||||||
|
process/size_limit=0 |
||||||
|
detect_3d/compress_to=1 |
@ -0,0 +1,16 @@ |
|||||||
|
extends AnimatedSprite3D |
||||||
|
|
||||||
|
# Because billboard sprites don't support rotation of any sort, this |
||||||
|
# "simulates" that by using `look_at` to point it towards the camera. |
||||||
|
|
||||||
|
# Uses the initial rotation's Z value for the rotation value. |
||||||
|
# Also rotates 180° because otherwise the sprite appears mirrored? |
||||||
|
|
||||||
|
@onready var rotation_z := self.rotation.z |
||||||
|
|
||||||
|
func _process(_delta: float) -> void: |
||||||
|
var camera := get_viewport().get_camera_3d() |
||||||
|
var look_pos := camera.global_position |
||||||
|
look_at(look_pos, camera.global_transform.basis.y) |
||||||
|
rotate_object_local(Vector3.FORWARD, rotation_z) |
||||||
|
rotate_object_local(Vector3.UP, TAU / 2) |
@ -0,0 +1,8 @@ |
|||||||
|
extends BoneAttachment3D |
||||||
|
|
||||||
|
@export var lifetime: float = 12.0 |
||||||
|
|
||||||
|
func _physics_process(delta: float) -> void: |
||||||
|
lifetime -= delta |
||||||
|
if lifetime < 0.0: |
||||||
|
queue_free() |
@ -0,0 +1,21 @@ |
|||||||
|
[gd_scene load_steps=5 format=3 uid="uid://cmprobebh47m7"] |
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Mods/copyPat/Resources/copyPat_BoneAttachment.gd" id="1_evgje"] |
||||||
|
[ext_resource type="SpriteFrames" uid="uid://dku03qom1ggul" path="res://Mods/copyPat/Resources/Sprites/copyPat_SpriteFrames.tres" id="2_n2lfi"] |
||||||
|
[ext_resource type="Script" path="res://Mods/copyPat/Resources/copyPat_AnimatedSprite3D.gd" id="3_1iqud"] |
||||||
|
[ext_resource type="AudioStream" uid="uid://bixbrsr7na817" path="res://Mods/copyPat/Resources/copyPat_Headpat.mp3" id="4_npsvc"] |
||||||
|
|
||||||
|
[node name="copyPat_BoneAttachment" type="BoneAttachment3D"] |
||||||
|
bone_name = "Head" |
||||||
|
script = ExtResource("1_evgje") |
||||||
|
|
||||||
|
[node name="copyPat_AnimatedSprite3D" type="AnimatedSprite3D" parent="."] |
||||||
|
transform = Transform3D(0.0433013, 0.025, 0, -0.025, 0.0433013, 0, 0, 0, 0.05, 0, 0.2, 0.06) |
||||||
|
no_depth_test = true |
||||||
|
sprite_frames = ExtResource("2_n2lfi") |
||||||
|
autoplay = "default" |
||||||
|
script = ExtResource("3_1iqud") |
||||||
|
|
||||||
|
[node name="copyPat_Headpat" type="AudioStreamPlayer" parent="."] |
||||||
|
stream = ExtResource("4_npsvc") |
||||||
|
autoplay = true |
@ -0,0 +1,19 @@ |
|||||||
|
[remap] |
||||||
|
|
||||||
|
importer="mp3" |
||||||
|
type="AudioStreamMP3" |
||||||
|
uid="uid://bixbrsr7na817" |
||||||
|
path="res://.godot/imported/copyPat_Headpat.mp3-015b4e5951782abb0d51b8a66f298319.mp3str" |
||||||
|
|
||||||
|
[deps] |
||||||
|
|
||||||
|
source_file="res://Mods/copyPat/Resources/copyPat_Headpat.mp3" |
||||||
|
dest_files=["res://.godot/imported/copyPat_Headpat.mp3-015b4e5951782abb0d51b8a66f298319.mp3str"] |
||||||
|
|
||||||
|
[params] |
||||||
|
|
||||||
|
loop=false |
||||||
|
loop_offset=0 |
||||||
|
bpm=0 |
||||||
|
beat_count=0 |
||||||
|
bar_beats=4 |
@ -0,0 +1,23 @@ |
|||||||
|
extends Mod_Base |
||||||
|
|
||||||
|
@export var headpats_scene: PackedScene |
||||||
|
@export var triggers: Array[String] = ["copyPat", "pats copygirl"] |
||||||
|
@export var countdown: float = 12.0 |
||||||
|
|
||||||
|
func handle_channel_chat_message(_cheerer_username: String, _cheerer_display_name: String, message: String, _bits_count: int) -> void: |
||||||
|
for trigger in triggers: |
||||||
|
if message.contains(trigger): |
||||||
|
var skel = get_skeleton() |
||||||
|
if not skel: return |
||||||
|
|
||||||
|
var node = skel.get_node("copyPat_BoneAttachment"); |
||||||
|
if not node: |
||||||
|
node = headpats_scene.instantiate() |
||||||
|
skel.add_child(node) |
||||||
|
add_autodelete_object(node) |
||||||
|
|
||||||
|
node.lifetime = countdown |
||||||
|
|
||||||
|
func _ready() -> void: |
||||||
|
add_tracked_setting("triggers", "Trigger phrases", { }) |
||||||
|
add_tracked_setting("countdown", "Seconds active", { "min": 0.0, "max": 3600.0 }) |
@ -0,0 +1,8 @@ |
|||||||
|
[gd_scene load_steps=3 format=3 uid="uid://nxxal0nb67su"] |
||||||
|
|
||||||
|
[ext_resource type="Script" path="res://Mods/copyPat/copyPat.gd" id="1_4ta2j"] |
||||||
|
[ext_resource type="PackedScene" uid="uid://cmprobebh47m7" path="res://Mods/copyPat/Resources/copyPat_BoneAttachment.tscn" id="2_r7vj1"] |
||||||
|
|
||||||
|
[node name="copyPat" type="Node"] |
||||||
|
script = ExtResource("1_4ta2j") |
||||||
|
headpats_scene = ExtResource("2_r7vj1") |