It's Cow Game! Version 2.04!
14
NPCs/Arcade/GoatKid.dialogue
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
~ start
|
||||
|
||||
% Goat: Flappy Cow is the greatest game ever made.
|
||||
% Goat: I love Flappy Cow!!!
|
||||
% Goat: I can beat Flappy Cow with my eyes closed I'm just that good.
|
||||
% Goat: Hey you kind of look like the cow from Flappy Cow, not as cool though.
|
||||
% Goat: Flappy Cow is way better than Tears of the Cow.
|
||||
% Goat: My brother speedran Flappy Cow in 3.4 seconds using the haystack skip it's gotta be frame perfect or it doesn't work!!!
|
||||
% Goat: Flappy Cow has the best story of any video game.
|
||||
% Goat: Flappy Cow is the most engaging and most addicting and most action game of all time.
|
||||
% Goat: Flappy Cow is innovative but also true to the franchise's roots.
|
||||
% Goat: I hope they make Flappy Goat sometime, I would like to see people like myself being represented in media more!
|
||||
|
||||
=> END
|
||||
15
NPCs/Arcade/GoatKid.dialogue.import
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
[remap]
|
||||
|
||||
importer="dialogue_manager_compiler_11"
|
||||
type="Resource"
|
||||
uid="uid://cq8ckonbneirp"
|
||||
path="res://.godot/imported/GoatKid.dialogue-6b52c913e23b1a7f29fd8fc591773ce3.tres"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid.dialogue"
|
||||
dest_files=["res://.godot/imported/GoatKid.dialogue-6b52c913e23b1a7f29fd8fc591773ce3.tres"]
|
||||
|
||||
[params]
|
||||
|
||||
defaults=true
|
||||
69
NPCs/Arcade/GoatKid1/GoatKid1.gd
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
extends NPC
|
||||
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var hopSpeed = -400
|
||||
|
||||
var minX = 0
|
||||
var maxX = 0
|
||||
|
||||
var waitTimer = 0
|
||||
var hopping = false
|
||||
var flipChance = false
|
||||
|
||||
func _ready():
|
||||
characterName = "Kid"
|
||||
pronouns = "she/her"
|
||||
|
||||
minX = position.x
|
||||
maxX = position.x + 500
|
||||
|
||||
func _process(delta):
|
||||
waitTimer -= delta
|
||||
if waitTimer <= 0:
|
||||
if $Sprite.animation != "default":
|
||||
wait_between_actions()
|
||||
else:
|
||||
pick_next_action()
|
||||
|
||||
if hopping:
|
||||
if $Sprite.frame >= 1:
|
||||
position.x += hopSpeed*delta
|
||||
flipChance = true
|
||||
else:
|
||||
if flipChance:
|
||||
flipChance = false
|
||||
if rng.randi_range(0, 1) == 1:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = !$Sprite.flip_h
|
||||
|
||||
if position.x <= minX and hopSpeed < 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = true
|
||||
elif position.x >= maxX and hopSpeed > 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = false
|
||||
|
||||
func wait_between_actions():
|
||||
hopping = false
|
||||
waitTimer = rng.randf_range(0.5, 1)
|
||||
$Sprite.play("default")
|
||||
|
||||
func pick_next_action():
|
||||
hopping = false
|
||||
|
||||
var nextActionResult = rng.randi_range(0, 4)
|
||||
if nextActionResult <= 2:
|
||||
hop()
|
||||
elif nextActionResult <= 3:
|
||||
yoyo()
|
||||
elif nextActionResult <= 4:
|
||||
wait_between_actions()
|
||||
|
||||
func yoyo():
|
||||
$Sprite.play("Yoyo")
|
||||
waitTimer = rng.randi_range(3, 12)
|
||||
|
||||
func hop():
|
||||
$Sprite.play("Prance")
|
||||
waitTimer = rng.randi_range(2, 4)
|
||||
hopping = true
|
||||
BIN
NPCs/Arcade/GoatKid1/PranceAnim/goat1prance.gif
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
NPCs/Arcade/GoatKid1/PranceAnim/goatKid1Prance.png
Normal file
|
After Width: | Height: | Size: 642 B |
34
NPCs/Arcade/GoatKid1/PranceAnim/goatKid1Prance.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bryd41gd7qeda"
|
||||
path="res://.godot/imported/goatKid1Prance.png-cc623dae1373caccb0743ff095378137.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid1/PranceAnim/goatKid1Prance.png"
|
||||
dest_files=["res://.godot/imported/goatKid1Prance.png-cc623dae1373caccb0743ff095378137.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo.gif
Normal file
|
After Width: | Height: | Size: 24 KiB |
BIN
NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo1.png
Normal file
|
After Width: | Height: | Size: 631 B |
34
NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo1.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d3elfbxqrdla0"
|
||||
path="res://.godot/imported/goat1yoyo1.png-e723645ad91609b0cd1d910ba16889cb.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo1.png"
|
||||
dest_files=["res://.godot/imported/goat1yoyo1.png-e723645ad91609b0cd1d910ba16889cb.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo2.png
Normal file
|
After Width: | Height: | Size: 636 B |
34
NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo2.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bfr1pycwgr4l4"
|
||||
path="res://.godot/imported/goat1yoyo2.png-fff38f98bc5a6f1d470069c33fe0e6de.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo2.png"
|
||||
dest_files=["res://.godot/imported/goat1yoyo2.png-fff38f98bc5a6f1d470069c33fe0e6de.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo3.png
Normal file
|
After Width: | Height: | Size: 641 B |
34
NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo3.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cecuoy48savco"
|
||||
path="res://.godot/imported/goat1yoyo3.png-1ba875a35cc896a934e2ddfa24a145c6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo3.png"
|
||||
dest_files=["res://.godot/imported/goat1yoyo3.png-1ba875a35cc896a934e2ddfa24a145c6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid1/goatKid1Idle.png
Normal file
|
After Width: | Height: | Size: 596 B |
34
NPCs/Arcade/GoatKid1/goatKid1Idle.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://pc5ng2mwgkxe"
|
||||
path="res://.godot/imported/goatKid1Idle.png-ec05512ef2eef01e1183c4d12d21ba2a.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid1/goatKid1Idle.png"
|
||||
dest_files=["res://.godot/imported/goatKid1Idle.png-ec05512ef2eef01e1183c4d12d21ba2a.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
82
NPCs/Arcade/GoatKid1/goat_kid_1.tscn
Normal file
|
|
@ -0,0 +1,82 @@
|
|||
[gd_scene load_steps=12 format=3 uid="uid://dyatj06jpchgo"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_ksl6a"]
|
||||
[ext_resource type="Script" path="res://NPCs/Arcade/GoatKid1/GoatKid1.gd" id="2_5njyi"]
|
||||
[ext_resource type="Texture2D" uid="uid://pc5ng2mwgkxe" path="res://NPCs/Arcade/GoatKid1/goatKid1Idle.png" id="2_xhghv"]
|
||||
[ext_resource type="Resource" uid="uid://cq8ckonbneirp" path="res://NPCs/Arcade/GoatKid.dialogue" id="3_dgbls"]
|
||||
[ext_resource type="Texture2D" uid="uid://bryd41gd7qeda" path="res://NPCs/Arcade/GoatKid1/PranceAnim/goatKid1Prance.png" id="4_2057f"]
|
||||
[ext_resource type="Texture2D" uid="uid://d3elfbxqrdla0" path="res://NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo1.png" id="5_7kju2"]
|
||||
[ext_resource type="Texture2D" uid="uid://bfr1pycwgr4l4" path="res://NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo2.png" id="6_t1str"]
|
||||
[ext_resource type="Texture2D" uid="uid://cecuoy48savco" path="res://NPCs/Arcade/GoatKid1/YoyoAnim/goat1yoyo3.png" id="7_h1edl"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_s45os"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("2_xhghv")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_2057f")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Prance",
|
||||
"speed": 6.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 5.0,
|
||||
"texture": ExtResource("5_7kju2")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_t1str")
|
||||
}, {
|
||||
"duration": 2.0,
|
||||
"texture": ExtResource("7_h1edl")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("6_t1str")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Yoyo",
|
||||
"speed": 10.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("2_xhghv")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_im52w"]
|
||||
radius = 31.4006
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pgnks"]
|
||||
size = Vector2(60, 7)
|
||||
|
||||
[node name="GoatKid1" instance=ExtResource("1_ksl6a")]
|
||||
script = ExtResource("2_5njyi")
|
||||
dialogueResource = ExtResource("3_dgbls")
|
||||
|
||||
[node name="Sprite" parent="." index="0"]
|
||||
position = Vector2(0, -37)
|
||||
sprite_frames = SubResource("SpriteFrames_s45os")
|
||||
frame_progress = 0.92854
|
||||
|
||||
[node name="Panel" parent="Interactable" index="1"]
|
||||
offset_left = -41.0
|
||||
offset_top = -70.0
|
||||
offset_right = 44.0
|
||||
offset_bottom = 1.0
|
||||
|
||||
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
|
||||
position = Vector2(7, -30)
|
||||
shape = SubResource("CircleShape2D_im52w")
|
||||
|
||||
[node name="CollisionShape2D" parent="." index="3"]
|
||||
position = Vector2(10, -2.5)
|
||||
shape = SubResource("RectangleShape2D_pgnks")
|
||||
|
||||
[editable path="Interactable"]
|
||||
[editable path="Interactable/ActionMenu"]
|
||||
[editable path="Talkable"]
|
||||
63
NPCs/Arcade/GoatKid2/GoatKid2.gd
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
extends NPC
|
||||
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var hopSpeed = -400
|
||||
|
||||
var minX = 0
|
||||
var maxX = 0
|
||||
|
||||
var waitTimer = 0
|
||||
var hopping = false
|
||||
var flipChance = false
|
||||
|
||||
func _ready():
|
||||
characterName = "Kid"
|
||||
pronouns = "she/her"
|
||||
|
||||
minX = position.x
|
||||
maxX = position.x + 500
|
||||
|
||||
func _process(delta):
|
||||
waitTimer -= delta
|
||||
if waitTimer <= 0:
|
||||
if $Sprite.animation != "default":
|
||||
wait_between_actions()
|
||||
else:
|
||||
pick_next_action()
|
||||
|
||||
if hopping:
|
||||
if $Sprite.frame >= 1:
|
||||
position.x += hopSpeed*delta
|
||||
flipChance = true
|
||||
else:
|
||||
if flipChance:
|
||||
flipChance = false
|
||||
if rng.randi_range(0, 1) == 1:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = !$Sprite.flip_h
|
||||
|
||||
if position.x <= minX and hopSpeed < 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = true
|
||||
elif position.x >= maxX and hopSpeed > 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = false
|
||||
|
||||
func wait_between_actions():
|
||||
hopping = false
|
||||
waitTimer = rng.randf_range(0.5, 1)
|
||||
$Sprite.play("default")
|
||||
|
||||
func pick_next_action():
|
||||
hopping = false
|
||||
|
||||
var nextActionResult = rng.randi_range(0, 4)
|
||||
if nextActionResult <= 3:
|
||||
hop()
|
||||
elif nextActionResult <= 4:
|
||||
wait_between_actions()
|
||||
|
||||
func hop():
|
||||
$Sprite.play("Prance")
|
||||
waitTimer = rng.randi_range(2, 4)
|
||||
hopping = true
|
||||
BIN
NPCs/Arcade/GoatKid2/PranceAnim/goat1prance.gif
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
BIN
NPCs/Arcade/GoatKid2/PranceAnim/goat2rec.gif
Normal file
|
After Width: | Height: | Size: 2.7 KiB |
BIN
NPCs/Arcade/GoatKid2/PranceAnim/goat2rec1.png
Normal file
|
After Width: | Height: | Size: 640 B |
34
NPCs/Arcade/GoatKid2/PranceAnim/goat2rec1.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ctse0jcb6rfq8"
|
||||
path="res://.godot/imported/goat2rec1.png-3b9405be853748d7c6826d692e2468c5.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid2/PranceAnim/goat2rec1.png"
|
||||
dest_files=["res://.godot/imported/goat2rec1.png-3b9405be853748d7c6826d692e2468c5.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid2/PranceAnim/goat2rec2.png
Normal file
|
After Width: | Height: | Size: 689 B |
34
NPCs/Arcade/GoatKid2/PranceAnim/goat2rec2.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ce61spfcpd5ee"
|
||||
path="res://.godot/imported/goat2rec2.png-fcd9949809678cb37590f60828a049ac.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid2/PranceAnim/goat2rec2.png"
|
||||
dest_files=["res://.godot/imported/goat2rec2.png-fcd9949809678cb37590f60828a049ac.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
61
NPCs/Arcade/GoatKid2/goat_kid_2.tscn
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
[gd_scene load_steps=9 format=3 uid="uid://ocl31dhmccr8"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_36jri"]
|
||||
[ext_resource type="Script" path="res://NPCs/Arcade/GoatKid2/GoatKid2.gd" id="2_ugi2u"]
|
||||
[ext_resource type="Resource" uid="uid://cq8ckonbneirp" path="res://NPCs/Arcade/GoatKid.dialogue" id="3_kfihi"]
|
||||
[ext_resource type="Texture2D" uid="uid://ctse0jcb6rfq8" path="res://NPCs/Arcade/GoatKid2/PranceAnim/goat2rec1.png" id="3_xb0oq"]
|
||||
[ext_resource type="Texture2D" uid="uid://ce61spfcpd5ee" path="res://NPCs/Arcade/GoatKid2/PranceAnim/goat2rec2.png" id="4_lqho8"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_6c4d6"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_xb0oq")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_lqho8")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Prance",
|
||||
"speed": 6.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_xb0oq")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_im52w"]
|
||||
radius = 31.4006
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pgnks"]
|
||||
size = Vector2(60, 7)
|
||||
|
||||
[node name="GoatKid2" instance=ExtResource("1_36jri")]
|
||||
script = ExtResource("2_ugi2u")
|
||||
dialogueResource = ExtResource("3_kfihi")
|
||||
|
||||
[node name="Sprite" parent="." index="0"]
|
||||
position = Vector2(0, -37)
|
||||
sprite_frames = SubResource("SpriteFrames_6c4d6")
|
||||
|
||||
[node name="Panel" parent="Interactable" index="1"]
|
||||
offset_left = -41.0
|
||||
offset_top = -68.0
|
||||
offset_right = 44.0
|
||||
offset_bottom = 3.0
|
||||
|
||||
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
|
||||
position = Vector2(7, -30)
|
||||
shape = SubResource("CircleShape2D_im52w")
|
||||
|
||||
[node name="CollisionShape2D" parent="." index="3"]
|
||||
position = Vector2(10, -2.5)
|
||||
shape = SubResource("RectangleShape2D_pgnks")
|
||||
|
||||
[editable path="Interactable"]
|
||||
[editable path="Interactable/ActionMenu"]
|
||||
[editable path="Talkable"]
|
||||
89
NPCs/Arcade/GoatKid3/GoatKid3.gd
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
extends NPC
|
||||
|
||||
var rng = RandomNumberGenerator.new()
|
||||
var hopSpeed = 400
|
||||
|
||||
var minX = 0
|
||||
var maxX = 0
|
||||
|
||||
var waitTimer = 0
|
||||
var hopping = false
|
||||
var kicking = false
|
||||
var flipChance = false
|
||||
|
||||
func _ready():
|
||||
characterName = "Kid"
|
||||
pronouns = "she/her"
|
||||
|
||||
minX = position.x
|
||||
maxX = position.x + 150
|
||||
|
||||
func _process(delta):
|
||||
waitTimer -= delta
|
||||
if waitTimer <= 0:
|
||||
if $Sprite.animation != "default":
|
||||
wait_between_actions()
|
||||
else:
|
||||
pick_next_action()
|
||||
|
||||
if hopping:
|
||||
if $Sprite.frame >= 1:
|
||||
position.x += hopSpeed*delta
|
||||
flipChance = true
|
||||
else:
|
||||
if flipChance:
|
||||
flipChance = false
|
||||
if rng.randi_range(0, 1) == 1:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = !$Sprite.flip_h
|
||||
|
||||
if position.x <= minX and hopSpeed < 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = false
|
||||
elif position.x >= maxX and hopSpeed > 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = true
|
||||
|
||||
if kicking:
|
||||
if $Sprite.frame == 0:
|
||||
flipChance = true
|
||||
else:
|
||||
if flipChance:
|
||||
flipChance = false
|
||||
if rng.randi_range(0, 1) == 1:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = !$Sprite.flip_h
|
||||
|
||||
func wait_between_actions():
|
||||
hopping = false
|
||||
waitTimer = rng.randf_range(0.5, 1)
|
||||
$Sprite.play("default")
|
||||
|
||||
func pick_next_action():
|
||||
hopping = false
|
||||
kicking = false
|
||||
|
||||
var nextActionResult = rng.randi_range(0, 4)
|
||||
if nextActionResult <= 1:
|
||||
hop()
|
||||
elif nextActionResult <= 3:
|
||||
kick()
|
||||
elif nextActionResult <= 4:
|
||||
wait_between_actions()
|
||||
|
||||
func kick():
|
||||
$Sprite.play("Kick")
|
||||
waitTimer = rng.randi_range(1, 5)
|
||||
kicking = true
|
||||
|
||||
func hop():
|
||||
$Sprite.play("Prance")
|
||||
waitTimer = rng.randi_range(2, 4)
|
||||
hopping = true
|
||||
|
||||
if position.x <= minX and hopSpeed < 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = false
|
||||
elif position.x >= maxX and hopSpeed > 0:
|
||||
hopSpeed = hopSpeed*-1
|
||||
$Sprite.flip_h = true
|
||||
BIN
NPCs/Arcade/GoatKid3/KickAnim/goat3kick2.png
Normal file
|
After Width: | Height: | Size: 616 B |
34
NPCs/Arcade/GoatKid3/KickAnim/goat3kick2.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ce8kylpqax5m0"
|
||||
path="res://.godot/imported/goat3kick2.png-faaf63f3ba80b227f560ce48d296b520.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid3/KickAnim/goat3kick2.png"
|
||||
dest_files=["res://.godot/imported/goat3kick2.png-faaf63f3ba80b227f560ce48d296b520.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid3/KickAnim/goat3kick3.png
Normal file
|
After Width: | Height: | Size: 639 B |
34
NPCs/Arcade/GoatKid3/KickAnim/goat3kick3.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bttpcdaorhe0l"
|
||||
path="res://.godot/imported/goat3kick3.png-5a6f7b51737598286199487e31740771.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid3/KickAnim/goat3kick3.png"
|
||||
dest_files=["res://.godot/imported/goat3kick3.png-5a6f7b51737598286199487e31740771.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid3/KickAnim/goatkid2.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
34
NPCs/Arcade/GoatKid3/KickAnim/goatkid2.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://t7hi3ubhgo3j"
|
||||
path="res://.godot/imported/goatkid2.png-136c4d072e4073ef38c50abf713a5b75.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid3/KickAnim/goatkid2.png"
|
||||
dest_files=["res://.godot/imported/goatkid2.png-136c4d072e4073ef38c50abf713a5b75.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
BIN
NPCs/Arcade/GoatKid3/PranceAnim/goatkid2prance.png
Normal file
|
After Width: | Height: | Size: 654 B |
34
NPCs/Arcade/GoatKid3/PranceAnim/goatkid2prance.png.import
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c8cucgr3kt3r7"
|
||||
path="res://.godot/imported/goatkid2prance.png-dda064518875b21f7e26fbd88e00eb15.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://NPCs/Arcade/GoatKid3/PranceAnim/goatkid2prance.png"
|
||||
dest_files=["res://.godot/imported/goatkid2prance.png-dda064518875b21f7e26fbd88e00eb15.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
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
|
||||
81
NPCs/Arcade/GoatKid3/goat_kid_3.tscn
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
[gd_scene load_steps=11 format=3 uid="uid://c5hw3rt1is5f5"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_gwyxi"]
|
||||
[ext_resource type="Script" path="res://NPCs/Arcade/GoatKid3/GoatKid3.gd" id="2_sw4iu"]
|
||||
[ext_resource type="Resource" uid="uid://cq8ckonbneirp" path="res://NPCs/Arcade/GoatKid.dialogue" id="3_3pjim"]
|
||||
[ext_resource type="Texture2D" uid="uid://c8cucgr3kt3r7" path="res://NPCs/Arcade/GoatKid3/PranceAnim/goatkid2prance.png" id="3_hp52d"]
|
||||
[ext_resource type="Texture2D" uid="uid://ce8kylpqax5m0" path="res://NPCs/Arcade/GoatKid3/KickAnim/goat3kick2.png" id="4_3g2n6"]
|
||||
[ext_resource type="Texture2D" uid="uid://t7hi3ubhgo3j" path="res://NPCs/Arcade/GoatKid3/KickAnim/goatkid2.png" id="5_tc1ik"]
|
||||
[ext_resource type="Texture2D" uid="uid://bttpcdaorhe0l" path="res://NPCs/Arcade/GoatKid3/KickAnim/goat3kick3.png" id="5_ujuc8"]
|
||||
|
||||
[sub_resource type="SpriteFrames" id="SpriteFrames_68fp1"]
|
||||
animations = [{
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_tc1ik")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("4_3g2n6")
|
||||
}, {
|
||||
"duration": 2.0,
|
||||
"texture": ExtResource("5_ujuc8")
|
||||
}, {
|
||||
"duration": 2.0,
|
||||
"texture": ExtResource("5_tc1ik")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Kick",
|
||||
"speed": 6.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_tc1ik")
|
||||
}, {
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("3_hp52d")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"Prance",
|
||||
"speed": 6.0
|
||||
}, {
|
||||
"frames": [{
|
||||
"duration": 1.0,
|
||||
"texture": ExtResource("5_tc1ik")
|
||||
}],
|
||||
"loop": true,
|
||||
"name": &"default",
|
||||
"speed": 5.0
|
||||
}]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_im52w"]
|
||||
radius = 31.4006
|
||||
|
||||
[sub_resource type="RectangleShape2D" id="RectangleShape2D_pgnks"]
|
||||
size = Vector2(71, 7)
|
||||
|
||||
[node name="GoatKid3" instance=ExtResource("1_gwyxi")]
|
||||
script = ExtResource("2_sw4iu")
|
||||
dialogueResource = ExtResource("3_3pjim")
|
||||
|
||||
[node name="Sprite" parent="." index="0"]
|
||||
position = Vector2(0, -43)
|
||||
sprite_frames = SubResource("SpriteFrames_68fp1")
|
||||
frame_progress = 0.758279
|
||||
|
||||
[node name="Panel" parent="Interactable" index="1"]
|
||||
offset_left = -34.0
|
||||
offset_top = -71.0
|
||||
offset_right = 44.0
|
||||
offset_bottom = 3.0
|
||||
|
||||
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
|
||||
position = Vector2(7, -30)
|
||||
shape = SubResource("CircleShape2D_im52w")
|
||||
|
||||
[node name="CollisionShape2D" parent="." index="3"]
|
||||
position = Vector2(-0.5, -1)
|
||||
shape = SubResource("RectangleShape2D_pgnks")
|
||||
|
||||
[editable path="Interactable"]
|
||||
[editable path="Interactable/ActionMenu"]
|
||||
[editable path="Talkable"]
|
||||