It's Cow Game! Version 2.04!

This commit is contained in:
PajamaBee 2024-09-19 23:06:51 -05:00
commit a9e1ed9ddd
3148 changed files with 95332 additions and 0 deletions

View file

@ -0,0 +1,67 @@
~ start
if get_save_value("ambiQuestComplete", false):
Ambrose: Meowdy!
Ambrose: You can change the baskets out meow if you'd like.
Ambrose: I just needed to see them in formation once :3
Ambrose: Thank you myah.
=> END
if not get_save_value("ambiQuestStarted", false):
Ambrose: meoww could you help me set up the basket spots here?
- sure => startQuest
- sorry no => declineQuest
if not DialogueBoxManager.currentSpeaker.notes_check():
Ambrose: Hi you uh need to find some of my notes still meow.
if not DialogueBoxManager.currentSpeaker.note_check_1():
Ambrose: I saw a page fly off towards the Snak Shak.
if not DialogueBoxManager.currentSpeaker.note_check_2():
Ambrose: I saw a page fly off towards the rocky island.
if not DialogueBoxManager.currentSpeaker.note_check_3():
Ambrose: I sensed that a page flew north and got stuck in a log.
Ambrose: Good luck nyaa~
=> END
~ checkRules
if not DialogueBoxManager.currentSpeaker.rules_check():
Ambrose: Hi I think something's not right meow.
if not DialogueBoxManager.currentSpeaker.basket_rule_check_1():
Ambrose: ummm maybe look at note 1 again.
if not DialogueBoxManager.currentSpeaker.basket_rule_check_2():
Ambrose: myaa I think note 2 needs to be looked at.
if not DialogueBoxManager.currentSpeaker.basket_rule_check_3():
Ambrose: meowww note 3 is a tricky one, it doesn't feel like the baskets follow it well enough.
Ambrose: Good luck nyaa~
=> END
else:
Ambrose: OwO it's perfect!!!
Ambrose: Thank you so much!!!
Ambrose: I will teach you my secret technique :3
Ambrose: *Ambrose imbues you with a deep basketing secret*
Ambrose: *You can now put an infinite amount of an item into a basket made from it*
Ambrose: Have fun basketing meow!
do set_save_value("ambiQuestComplete", true)
do QuestManager.complete_quest("Constellation of Baskets")
=> END
~ startQuest
if not LevelManager.skill_check("basketWeaving", 22) or not LevelManager.skill_check("scavenging", 15):
Ambrose: mmmyahh I think you need a little more practice first though. (Requires level 22 Basket Weaving and level 15 Scavenging)
=> END
Ambrose: Thank you! Here one moment I have some notes on how the baskets should be placed.
Ambrose: [Dexterity DC 3] Result: 1
Ambrose: *Ambrose fumbles with his pages and 3 of them fly off into the distance*
do set_save_value("ambiQuestStarted", true)
Ambrose: myaaaaaaahhhh oh no the pages all flew away!
Ambrose: I saw one fly off towards the Snak Shak.
Ambrose: And another go towards the rocky island.
Ambrose: [Perception DC 15] Result: 20
Ambrose: And I sense that a page flew north and got stuck in a log.
Ambrose: Please go get them and set up the baskets for me myah.
=> END
~ declineQuest
Ambrose: Ok let me know if you have time later nyah~
=> END

View file

@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_11"
type="Resource"
uid="uid://cyyl6ijg5du0k"
path="res://.godot/imported/Ambrose.dialogue-70c169caccb9132e6e7d41ce0a57b22f.tres"
[deps]
source_file="res://NPCs/Beach/Ambrose/Ambrose.dialogue"
dest_files=["res://.godot/imported/Ambrose.dialogue-70c169caccb9132e6e7d41ce0a57b22f.tres"]
[params]
defaults=true

View file

@ -0,0 +1,210 @@
extends NPC
var meowDelay = 0
func _ready():
MessageManager.messageSent.connect(messageSpoken)
dialogueResource = load("res://NPCs/Beach/Ambrose/Ambrose.dialogue")
pronouns = "he/they"
func _process(delta):
if meowDelay > 0:
meowDelay -= delta
func messageSpoken(message:String):
if meowDelay > 0:
return
if GameVariables.player.global_position.distance_to(global_position) > 900:
return
var responseMessages = ["you're a cute kitty", "your a cute kitty", "cute kitty", "meow"]
message = message.to_lower().strip_edges()
for responseMessage in responseMessages:
if message.contains(responseMessage):
meowDelay = 0.5
MessageManager.addMessage("meow :3", self, "Ambrose", Color.YELLOW)
break
func notes_check():
if !note_check_1():
return false
if !note_check_2():
return false
if !note_check_3():
return false
return true
func note_check_1():
if InventoryManager.get_item_count_by_name("Basket Plan 1", "keyItems") > 0:
return true
return false
func note_check_2():
if InventoryManager.get_item_count_by_name("Basket Plan 2", "keyItems") > 0:
return true
return false
func note_check_3():
if InventoryManager.get_item_count_by_name("Basket Plan 3", "keyItems") > 0:
return true
return false
func rules_check():
if !basket_rule_check_1():
return false
if !basket_rule_check_2():
return false
if !basket_rule_check_3():
return false
return true
#Rule 1: Sort the baskets from highest to lowest edibility, left to right then top to bottom
func basket_rule_check_1():
var baskets = get_basket_items()
var highest = 500000
for basket in baskets:
if basket == null:
continue
if basket.get_edibility() > highest:
return false
else:
highest = basket.get_edibility()
return true
#Rule 2: The top row baskets must be edible and the bottom row must be inedible
func basket_rule_check_2():
var baskets = get_basket_items()
var index = 0
for basket in baskets:
if basket == null:
continue
if index <= 2:
if basket.get_edibility() < 50:
return false
else:
if basket.get_edibility() >= 50:
return false
index += 1
return true
#Rule 3: One collumn must be very red, one collumn very green, and one collumn very blue
func basket_rule_check_3():
var baskets = get_basket_items()
var colorsLeft = ["red", "green", "blue"]
var collumnOneColor = get_main_color(baskets[0])
if collumnOneColor == "none":
return false
if get_main_color(baskets[3]) != collumnOneColor:
return false
colorsLeft.erase(collumnOneColor)
var collumnTwoColor = get_main_color(baskets[1])
if collumnTwoColor == "none" or !(collumnTwoColor in colorsLeft):
return false
if get_main_color(baskets[4]) != collumnTwoColor:
return false
colorsLeft.erase(collumnTwoColor)
var collumnThreeColor = get_main_color(baskets[2])
if collumnThreeColor == "none" or !(collumnThreeColor in colorsLeft):
return false
if get_main_color(baskets[5]) != collumnThreeColor:
return false
return true
func get_main_color(basket:Item):
if basket == null:
return "none"
var color:Color = basket.get_average_color()
if color.r > color.g and color.r > color.b:
return red_check(color)
elif color.g > color.r and color.g > color.b:
return green_check(color)
elif color.b > color.r and color.b > color.g:
return blue_check(color)
else:
return "none"
func red_check(color:Color):
var otherColor = color.g + color.b
var red = color.r
if color.g > 0.2:
return "none"
if red <= 0.156:
return "none"
if red <= 0.25:
if otherColor <= 0.06:
return "red"
else:
return "none"
if red <= 0.39:
if otherColor <= 0.12:
return "red"
else:
return "none"
if red <= 0.58:
if color.g <= 0.20 and color.b <= 0.20:
return "red"
else:
return "none"
if otherColor <= 0.36:
return "red"
else:
return "none"
func green_check(color:Color):
var otherColor = color.r + color.b
var green = color.g
if green <= 0.156:
return "none"
if otherColor < green + 0.2:
return "green"
else:
return "none"
func blue_check(color:Color):
var red = color.r
var blue = color.b
if blue <= 0.156:
return "none"
if red <= float(blue/float(2.5)):
return "blue"
else:
return "none"
func get_basket_items():
var basketInvNames = ["BeachBasket1Basket", "BeachBasket2Basket", "BeachBasket3Basket",
"BeachBasket4Basket", "BeachBasket5Basket", "BeachBasket6Basket"]
var baskets = []
for basketInvName in basketInvNames:
var basketHoldingInv = InventoryManager.get_inventory(basketInvName)
if basketHoldingInv.items.size() > 0:
baskets.append(basketHoldingInv.items[0])
else:
baskets.append(null)
return baskets

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cm078afincttk"
path="res://.godot/imported/Ambrose.png-120bce5e66f898eb8e1bb2c2e03ff62d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Ambrose/Ambrose.png"
dest_files=["res://.godot/imported/Ambrose.png-120bce5e66f898eb8e1bb2c2e03ff62d.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

View file

@ -0,0 +1,62 @@
[gd_scene load_steps=8 format=3 uid="uid://ch786b3mdbxld"]
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_n3mwl"]
[ext_resource type="Script" path="res://NPCs/Beach/Ambrose/Ambrose.gd" id="2_bufsh"]
[ext_resource type="Texture2D" uid="uid://cm078afincttk" path="res://NPCs/Beach/Ambrose/Ambrose.png" id="3_66xfq"]
[ext_resource type="Texture2D" uid="uid://bh5y3lcrdavrs" path="res://NPCs/Beach/Ambrose/Blanket.png" id="4_1d11h"]
[sub_resource type="SpriteFrames" id="SpriteFrames_82e8e"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_66xfq")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_wndef"]
radius = 24.0208
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_d1c1k"]
radius = 8.0
height = 46.0
[node name="Ambrose" instance=ExtResource("1_n3mwl")]
script = ExtResource("2_bufsh")
[node name="Sprite" parent="." index="0"]
position = Vector2(6, -26)
sprite_frames = SubResource("SpriteFrames_82e8e")
[node name="Interactable" parent="." index="1"]
position = Vector2(0, -43)
[node name="Panel" parent="Interactable" index="1"]
offset_left = -27.0
offset_top = -25.0
offset_right = 26.0
offset_bottom = 60.0
metadata/_edit_use_anchors_ = true
[node name="Talkable" parent="." index="2"]
position = Vector2(1, -15)
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
position = Vector2(-1, 13)
shape = SubResource("CircleShape2D_wndef")
[node name="CollisionShape2D" parent="." index="3"]
position = Vector2(1, 7)
rotation = 1.5708
shape = SubResource("CapsuleShape2D_d1c1k")
[node name="Blanket" type="Sprite2D" parent="." index="4"]
z_index = -1
position = Vector2(-34, 8)
texture = ExtResource("4_1d11h")
[editable path="Interactable"]
[editable path="Interactable/ActionMenu"]
[editable path="Talkable"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bh5y3lcrdavrs"
path="res://.godot/imported/Blanket.png-6b2b593346e9ee89f6298a01b0a1f27f.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Ambrose/Blanket.png"
dest_files=["res://.godot/imported/Blanket.png-6b2b593346e9ee89f6298a01b0a1f27f.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 199 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dupl7qltu66cf"
path="res://.godot/imported/Ant1.png-a6b20c8a9ca49c92dec40168b11ecd06.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Ants/Ant1/Ant1.png"
dest_files=["res://.godot/imported/Ant1.png-a6b20c8a9ca49c92dec40168b11ecd06.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

View file

@ -0,0 +1,8 @@
~ start
Dino: Welcome to our Secret Island.
Dino: It's a good secret spot. Most animals can't swim way out here.
Dino: But we got the crew together and formed our bodies into a boat.
Dino: We sailed the waves. We're pretty hardcore.
=> END

View file

@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_11"
type="Resource"
uid="uid://dnjfakkeoxb1v"
path="res://.godot/imported/Dino.dialogue-7c275671523f3b4853fc0f63806f2a90.tres"
[deps]
source_file="res://NPCs/Beach/Ants/Ant1/Dino.dialogue"
dest_files=["res://.godot/imported/Dino.dialogue-7c275671523f3b4853fc0f63806f2a90.tres"]
[params]
defaults=true

View file

@ -0,0 +1,4 @@
extends NPC
func _ready():
dialogueResource = load("res://NPCs/Beach/Ants/Ant1/Dino.dialogue")

View file

@ -0,0 +1,52 @@
[gd_scene load_steps=7 format=3 uid="uid://d4f5trsrir0bl"]
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_f2ghj"]
[ext_resource type="Script" path="res://NPCs/Beach/Ants/Ant1/Dino.gd" id="2_akh2l"]
[ext_resource type="Texture2D" uid="uid://dupl7qltu66cf" path="res://NPCs/Beach/Ants/Ant1/Ant1.png" id="3_ameuk"]
[sub_resource type="SpriteFrames" id="SpriteFrames_4wy6t"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_ameuk")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_bnoc4"]
radius = 33.3766
[sub_resource type="CircleShape2D" id="CircleShape2D_8u141"]
radius = 5.38516
[node name="Dino" instance=ExtResource("1_f2ghj")]
script = ExtResource("2_akh2l")
[node name="Sprite" parent="." index="0"]
position = Vector2(-1, -4)
sprite_frames = SubResource("SpriteFrames_4wy6t")
[node name="Panel" parent="Interactable" index="1"]
offset_left = -16.0
offset_top = -13.0
offset_right = 14.0
offset_bottom = 5.0
metadata/_edit_use_anchors_ = true
[node name="Talkable" parent="." index="2"]
position = Vector2(0, -2)
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
position = Vector2(0, 2)
shape = SubResource("CircleShape2D_bnoc4")
[node name="CollisionShape2D" parent="." index="3"]
position = Vector2(0, -1)
shape = SubResource("CircleShape2D_8u141")
disabled = true
[editable path="Interactable"]
[editable path="Interactable/ActionMenu"]
[editable path="Talkable"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ce0v7qcocwui3"
path="res://.godot/imported/Ant2.png-cc96ccba492ab004eae5ed16b8e49663.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Ants/Ant2/Ant2.png"
dest_files=["res://.godot/imported/Ant2.png-cc96ccba492ab004eae5ed16b8e49663.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bqlcd7tbv3tgo"
path="res://.godot/imported/Ant2Old.png-adcec6c75f1ba5d01e4a87de7b017a9c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Ants/Ant2/Ant2Old.png"
dest_files=["res://.godot/imported/Ant2Old.png-adcec6c75f1ba5d01e4a87de7b017a9c.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 228 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cpw65tcfr1ukp"
path="res://.godot/imported/Ant3.png-269dd612c0ef6eee89c921c5847be5eb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Ants/Ant2/Ant3.png"
dest_files=["res://.godot/imported/Ant3.png-269dd612c0ef6eee89c921c5847be5eb.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

View file

@ -0,0 +1,7 @@
~ start
Ifa: *Ifa is making popping sounds with her mouth*
Ifa: *Most ants can't do that*
Ifa: *It's very impressive*
=> END

View file

@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_11"
type="Resource"
uid="uid://d2vxrn3ldxpjr"
path="res://.godot/imported/Ifa.dialogue-71f9e15253fd221c252d94c9e6ba4169.tres"
[deps]
source_file="res://NPCs/Beach/Ants/Ant2/Ifa.dialogue"
dest_files=["res://.godot/imported/Ifa.dialogue-71f9e15253fd221c252d94c9e6ba4169.tres"]
[params]
defaults=true

View file

@ -0,0 +1,4 @@
extends NPC
func _ready():
dialogueResource = load("res://NPCs/Beach/Ants/Ant2/Ifa.dialogue")

View file

@ -0,0 +1,59 @@
[gd_scene load_steps=9 format=3 uid="uid://dv5uldfglil4j"]
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_udq2m"]
[ext_resource type="Script" path="res://NPCs/Beach/Ants/Ant2/Ifa.gd" id="2_qwbac"]
[ext_resource type="Texture2D" uid="uid://ce0v7qcocwui3" path="res://NPCs/Beach/Ants/Ant2/Ant2.png" id="3_fptlx"]
[ext_resource type="Texture2D" uid="uid://cpw65tcfr1ukp" path="res://NPCs/Beach/Ants/Ant2/Ant3.png" id="4_nvoxi"]
[ext_resource type="Script" path="res://Utils/PlayOnReady.gd" id="5_s41ij"]
[sub_resource type="SpriteFrames" id="SpriteFrames_vyfcn"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_fptlx")
}, {
"duration": 1.0,
"texture": ExtResource("4_nvoxi")
}],
"loop": true,
"name": &"default",
"speed": 8.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_bnoc4"]
radius = 39.0
[sub_resource type="CircleShape2D" id="CircleShape2D_8u141"]
radius = 5.38516
[node name="Ifa" instance=ExtResource("1_udq2m")]
script = ExtResource("2_qwbac")
[node name="Sprite" parent="." index="0"]
position = Vector2(2, -5)
sprite_frames = SubResource("SpriteFrames_vyfcn")
frame_progress = 0.906665
script = ExtResource("5_s41ij")
[node name="Panel" parent="Interactable" index="1"]
offset_left = -17.0
offset_top = -14.0
offset_right = 18.0
offset_bottom = 6.0
metadata/_edit_use_anchors_ = true
[node name="Talkable" parent="." index="2"]
position = Vector2(0, -4)
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
position = Vector2(0, 4)
shape = SubResource("CircleShape2D_bnoc4")
[node name="CollisionShape2D" parent="." index="3"]
position = Vector2(0, -1)
shape = SubResource("CircleShape2D_8u141")
disabled = true
[editable path="Interactable"]
[editable path="Interactable/ActionMenu"]
[editable path="Talkable"]

Binary file not shown.

View file

@ -0,0 +1,106 @@
[gd_scene load_steps=20 format=3 uid="uid://u4vv1n4s142v"]
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_kr713"]
[ext_resource type="Script" path="res://NPCs/Beach/Fish/Fish/JudithFish.gd" id="2_a25xx"]
[ext_resource type="Texture2D" uid="uid://cf8pgymsdtl73" path="res://NPCs/Beach/Fish/Fish/Idle/Fish1.png" id="3_cj1qo"]
[ext_resource type="Texture2D" uid="uid://cqhnxieb4lrhg" path="res://NPCs/Beach/Fish/Fish/Idle/Fish2.png" id="4_rqjbk"]
[ext_resource type="Texture2D" uid="uid://ctbnmgnaldt8n" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump1.png" id="5_tvsha"]
[ext_resource type="Texture2D" uid="uid://ccrtmwpdxacfo" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump2.png" id="6_lemha"]
[ext_resource type="Texture2D" uid="uid://bhisn0x6mxebx" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump3.png" id="7_5tpqm"]
[ext_resource type="Texture2D" uid="uid://b73iuk0mo6kvb" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump4.png" id="8_4alhh"]
[ext_resource type="Texture2D" uid="uid://djvyynoarx6nt" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump5.png" id="9_xjyq2"]
[ext_resource type="Texture2D" uid="uid://dexdbb7bxtvn2" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump6.png" id="10_o2psb"]
[ext_resource type="Texture2D" uid="uid://bk8ncbv7672g3" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump7.png" id="11_c0yjn"]
[ext_resource type="Texture2D" uid="uid://du8aocscv1rqn" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump8.png" id="12_k2lae"]
[ext_resource type="Texture2D" uid="uid://dkr52dilyx1id" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump9.png" id="13_ksi30"]
[ext_resource type="Texture2D" uid="uid://inwjkinn6njv" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump10.png" id="14_bhi3k"]
[ext_resource type="Texture2D" uid="uid://crkmtq3hjivx7" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump11.png" id="15_flgmv"]
[ext_resource type="Texture2D" uid="uid://c6h7jgeg2xdak" path="res://NPCs/Beach/Fish/Fish/Jump/FishJump12.png" id="16_nyaol"]
[ext_resource type="Script" path="res://Utils/PlayOnReady.gd" id="17_lc1fu"]
[sub_resource type="SpriteFrames" id="SpriteFrames_rjglk"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_cj1qo")
}, {
"duration": 1.0,
"texture": ExtResource("4_rqjbk")
}],
"loop": true,
"name": &"Idle",
"speed": 1.0
}, {
"frames": [{
"duration": 1.0,
"texture": ExtResource("5_tvsha")
}, {
"duration": 1.0,
"texture": ExtResource("6_lemha")
}, {
"duration": 1.0,
"texture": ExtResource("7_5tpqm")
}, {
"duration": 1.0,
"texture": ExtResource("8_4alhh")
}, {
"duration": 1.0,
"texture": ExtResource("9_xjyq2")
}, {
"duration": 1.0,
"texture": ExtResource("10_o2psb")
}, {
"duration": 1.0,
"texture": ExtResource("11_c0yjn")
}, {
"duration": 1.0,
"texture": ExtResource("12_k2lae")
}, {
"duration": 1.0,
"texture": ExtResource("13_ksi30")
}, {
"duration": 1.0,
"texture": ExtResource("14_bhi3k")
}, {
"duration": 1.0,
"texture": ExtResource("15_flgmv")
}, {
"duration": 1.0,
"texture": ExtResource("16_nyaol")
}],
"loop": true,
"name": &"Jump",
"speed": 5.0
}]
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_lwjhj"]
radius = 12.0
height = 52.0
[node name="Judith" instance=ExtResource("1_kr713")]
script = ExtResource("2_a25xx")
[node name="Sprite" parent="." index="0"]
position = Vector2(0, -34)
sprite_frames = SubResource("SpriteFrames_rjglk")
animation = &"Idle"
frame_progress = 0.926387
script = ExtResource("17_lc1fu")
[node name="Panel" parent="Interactable" index="1"]
offset_left = -31.0
offset_top = -83.0
offset_right = 31.0
offset_bottom = 14.0
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
position = Vector2(0, -8)
[node name="CollisionShape2D" parent="." index="3"]
position = Vector2(-5, -11)
rotation = 1.5708
shape = SubResource("CapsuleShape2D_lwjhj")
[editable path="Interactable"]
[editable path="Interactable/ActionMenu"]
[editable path="Talkable"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cf8pgymsdtl73"
path="res://.godot/imported/Fish1.png-fd9d0985f7471e5d75c3aa5dcdae36e6.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Idle/Fish1.png"
dest_files=["res://.godot/imported/Fish1.png-fd9d0985f7471e5d75c3aa5dcdae36e6.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cqhnxieb4lrhg"
path="res://.godot/imported/Fish2.png-26fa83b30af01f4ef6acba984098fe2c.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Idle/Fish2.png"
dest_files=["res://.godot/imported/Fish2.png-26fa83b30af01f4ef6acba984098fe2c.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

View file

@ -0,0 +1,105 @@
extends NPC
var jumpAnimationPlayer:AnimationPlayer
var currentPosition = "BottomRight"
var jumping = false
var hasJumped = true
var currentlyTalking = false
var waitBetweenJumps = 12
var rng = RandomNumberGenerator.new()
func _ready():
jumpAnimationPlayer = get_parent().get_node("FishJumper")
dialogueResource = load("res://NPCs/Beach/Fish/Fish/JudithFishDialogue.dialogue")
func _process(delta):
if not currentlyTalking and not jumping:
waitBetweenJumps -= delta
if waitBetweenJumps <= 0:
jump()
elif waitBetweenJumps < 12:
waitBetweenJumps = rng.randf_range(12, 19)
func talking():
currentlyTalking = true
func dialogue_cancel():
currentlyTalking = false
func give_xp():
LevelManager.add_XP("swimming", 86)
hasJumped = false
func high_up():
z_index = 1
func landing():
z_index = 0
func arrive():
$CollisionShape2D.disabled = false
jumping = false
func jumping_check():
return jumping
func xp_ready_check():
return hasJumped
func asked_jump():
LevelManager.get_skill("appreciating").experience_event("Judith", "saw a jump from", 120)
if SaveManager.get_value_from_section("saw a jump from", "Judith", 0) >= 10:
AchievementManager.complete_achievement("Fishwatching")
jump()
func jump():
$CollisionShape2D.disabled = true
jumping = true
hasJumped = true
var result = rng.randi_range(0, 1)
if currentPosition == "BottomRight":
if result == 1:
jump_bottom_right_to_bottom_left()
else:
jump_bottom_right_to_center()
elif currentPosition == "BottomLeft":
if result == 1:
jump_bottom_left_to_bottom_right()
else:
jump_bottom_left_to_center()
elif currentPosition == "Center":
if result == 1:
jump_center_to_bottom_right()
else:
jump_center_to_bottom_left()
waitBetweenJumps = rng.randf_range(12, 19)
func jump_bottom_right_to_bottom_left():
jumpAnimationPlayer.play("JumpBottomRightToBottomLeft")
currentPosition = "BottomLeft"
func jump_center_to_bottom_left():
jumpAnimationPlayer.play("JumpCenterToBottomLeft")
currentPosition = "BottomLeft"
func jump_bottom_left_to_bottom_right():
jumpAnimationPlayer.play("JumpBottomLeftToBottomRight")
currentPosition = "BottomRight"
func jump_center_to_bottom_right():
jumpAnimationPlayer.play("JumpCenterToBottomRight")
currentPosition = "BottomRight"
func jump_bottom_right_to_center():
jumpAnimationPlayer.play("JumpBottomRightToCenter")
currentPosition = "Center"
func jump_bottom_left_to_center():
jumpAnimationPlayer.play("JumpBottomLeftToCenter")
currentPosition = "Center"

View file

@ -0,0 +1,26 @@
~ start
do DialogueBoxManager.currentSpeaker.talking()
if DialogueBoxManager.currentSpeaker.jumping_check():
Judith: Woooooooooooo!!!
=> END!
if DialogueBoxManager.currentSpeaker.xp_ready_check():
do DialogueBoxManager.currentSpeaker.give_xp()
Judith: *Talking to Judith imbues you with swimming knowledge*
Judith: Hi how's it going?
- Good => doing_good
- Not great => not_great
~ doing_good
Judith: Sweet, then you'll love to see me do a sick jump.
- hells yeah => jump
~ not_great
Judith: Oh no, I'm sure watching me do a sick jump would help.
- for sure => jump
~ jump
do DialogueBoxManager.currentSpeaker.asked_jump()
=> END

View file

@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_11"
type="Resource"
uid="uid://dcoacqopvrnkb"
path="res://.godot/imported/JudithFishDialogue.dialogue-399e329758d62d3ec9b10e32d8d9c9a3.tres"
[deps]
source_file="res://NPCs/Beach/Fish/Fish/JudithFishDialogue.dialogue"
dest_files=["res://.godot/imported/JudithFishDialogue.dialogue-399e329758d62d3ec9b10e32d8d9c9a3.tres"]
[params]
defaults=true

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ctbnmgnaldt8n"
path="res://.godot/imported/FishJump1.png-da8cd364bdaf6d18ae35b8edf819bf89.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump1.png"
dest_files=["res://.godot/imported/FishJump1.png-da8cd364bdaf6d18ae35b8edf819bf89.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://inwjkinn6njv"
path="res://.godot/imported/FishJump10.png-b838704ade6cffdcd94d735c7d55ab93.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump10.png"
dest_files=["res://.godot/imported/FishJump10.png-b838704ade6cffdcd94d735c7d55ab93.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://crkmtq3hjivx7"
path="res://.godot/imported/FishJump11.png-ba22a799df3756d3a6d40b1f5f3470f1.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump11.png"
dest_files=["res://.godot/imported/FishJump11.png-ba22a799df3756d3a6d40b1f5f3470f1.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://c6h7jgeg2xdak"
path="res://.godot/imported/FishJump12.png-01d68f7fb1819b07f8496fad4ce3a906.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump12.png"
dest_files=["res://.godot/imported/FishJump12.png-01d68f7fb1819b07f8496fad4ce3a906.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://ccrtmwpdxacfo"
path="res://.godot/imported/FishJump2.png-b3dfc6d9d154a4172951d3d34ad19db0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump2.png"
dest_files=["res://.godot/imported/FishJump2.png-b3dfc6d9d154a4172951d3d34ad19db0.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 650 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bhisn0x6mxebx"
path="res://.godot/imported/FishJump3.png-601248e730d58f63fd08238e5a2e88bc.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump3.png"
dest_files=["res://.godot/imported/FishJump3.png-601248e730d58f63fd08238e5a2e88bc.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://b73iuk0mo6kvb"
path="res://.godot/imported/FishJump4.png-42347f9297ab09d7d05fa403da60cd15.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump4.png"
dest_files=["res://.godot/imported/FishJump4.png-42347f9297ab09d7d05fa403da60cd15.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://djvyynoarx6nt"
path="res://.godot/imported/FishJump5.png-41e6c49103b7c79c8b9a38342a1fe4f2.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump5.png"
dest_files=["res://.godot/imported/FishJump5.png-41e6c49103b7c79c8b9a38342a1fe4f2.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dexdbb7bxtvn2"
path="res://.godot/imported/FishJump6.png-e73e0828cfc499a6c39320f9dbf0a55a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump6.png"
dest_files=["res://.godot/imported/FishJump6.png-e73e0828cfc499a6c39320f9dbf0a55a.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 480 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bk8ncbv7672g3"
path="res://.godot/imported/FishJump7.png-ea80164dbb7ba22b9b13ef5fb323430e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump7.png"
dest_files=["res://.godot/imported/FishJump7.png-ea80164dbb7ba22b9b13ef5fb323430e.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 427 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://du8aocscv1rqn"
path="res://.godot/imported/FishJump8.png-799f29add1b728570980208cc5f60ff0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump8.png"
dest_files=["res://.godot/imported/FishJump8.png-799f29add1b728570980208cc5f60ff0.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

Binary file not shown.

After

Width:  |  Height:  |  Size: 320 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dkr52dilyx1id"
path="res://.godot/imported/FishJump9.png-6c30711659265a30598d853535e5acc5.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Fish/Fish/Jump/FishJump9.png"
dest_files=["res://.godot/imported/FishJump9.png-6c30711659265a30598d853535e5acc5.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

View file

@ -0,0 +1,27 @@
~ start
if not get_save_value("ambiQuestStarted", false):
Bradrek: This sucks.
Bradrek: I'm the best I deserve the best.
Bradrek: But I don't even have a ball.
Bradrek: I can't wait until everything comes to me and I have what I deserve.
=> END
if not get_save_value("sealBallRetrieved", false):
Bradrek: I still don't have a ball, which is what I deserve.
Bradrek: Because I'm the best.
Bradrek: But for now I'm holding onto this note, it's a pretty cool note.
=> END
if not DialogueBoxManager.currentSpeaker.note_check():
Bradrek: Ha ha! I finally got a ball, like I deserve.
Bradrek: It just came to me, I didn't have to work for it at all.
Bradrek: That's because I'm the best and I deserve this ball.
Bradrek: Here you can have this note, it's not actually that cool.
do DialogueBoxManager.currentSpeaker.give_note()
=> END
Bradrek: This ball is the best, it came to me because I'm the best.
Bradrek: If any less best balls come to me I'll toss them to you to take care of.
=> END

View file

@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_11"
type="Resource"
uid="uid://dg5u5a27gfivq"
path="res://.godot/imported/Seal.dialogue-8ee0eecb2071ae41685076f4969dbc60.tres"
[deps]
source_file="res://NPCs/Beach/Seal/Seal.dialogue"
dest_files=["res://.godot/imported/Seal.dialogue-8ee0eecb2071ae41685076f4969dbc60.tres"]
[params]
defaults=true

57
NPCs/Beach/Seal/Seal.gd Normal file
View file

@ -0,0 +1,57 @@
extends NPC
var returnPhrases = ["Mine's better!", "You can have this one.", "This one's yours."]
var returnPhraseIndex = 0
func _ready():
dialogueResource = load("res://NPCs/Beach/Seal/Seal.dialogue")
state_check()
func note_check():
if InventoryManager.get_item_count_by_name("Basket Plan 2", "keyItems") > 0:
return true
else:
return false
func give_note():
var noteItem = preload("res://Items/Paper/BasketPlan2.gd").new()
InventoryManager.add_item_to_inventory(noteItem, 1, "keyItems")
MessageManager.item_popup(noteItem.duplicate())
state_check()
func state_check():
if SaveManager.get_save_value("sealBallRetrieved", false):
$SealBall.visible = true
else:
$SealBall.visible = false
if SaveManager.get_save_value("ambiQuestStarted", false):
if InventoryManager.get_item_count_by_name("Basket Plan 2", "keyItems") > 0:
$Sprite.frame = 0
else:
$Sprite.frame = 1
else:
$Sprite.frame = 0
func ball_caught():
if !SaveManager.get_save_value("sealBallRetrieved", false):
SaveManager.set_save_value("sealBallRetrieved", true)
MessageManager.addMessage("Finally!", self, "Bradrek", Color.YELLOW)
get_tree().get_root().get_node("MainGame/PuzzleCompleteAudio").play()
else:
MessageManager.addMessage(returnPhrases[returnPhraseIndex], self, "Bradrek", Color.YELLOW)
returnPhraseIndex += 1
if returnPhraseIndex >= returnPhrases.size():
returnPhraseIndex = 0
var ballItem = preload("res://Items/Toys/Beach/Ball.gd").new()
InventoryManager.add_item_to_inventory(ballItem)
MessageManager.item_popup(ballItem.duplicate())
state_check()
func _on_ball_catch_area_body_entered(body):
if body is Ball:
body.queue_free()
ball_caught()

BIN
NPCs/Beach/Seal/Seal.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dklkoqcx0qhf1"
path="res://.godot/imported/Seal.png-01ea9e2dad889750c597fb55bcf5c259.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Seal/Seal.png"
dest_files=["res://.godot/imported/Seal.png-01ea9e2dad889750c597fb55bcf5c259.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

72
NPCs/Beach/Seal/Seal.tscn Normal file
View file

@ -0,0 +1,72 @@
[gd_scene load_steps=8 format=3 uid="uid://cn0rlu1x4kakc"]
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_evrv5"]
[ext_resource type="Script" path="res://NPCs/Beach/Seal/Seal.gd" id="2_sblbo"]
[ext_resource type="Texture2D" uid="uid://dklkoqcx0qhf1" path="res://NPCs/Beach/Seal/Seal.png" id="3_fi4iu"]
[ext_resource type="Texture2D" uid="uid://oggti7coatvk" path="res://NPCs/Beach/Seal/SealNote.png" id="4_uqs8h"]
[ext_resource type="PackedScene" uid="uid://bwbddg5e5xi54" path="res://Objects/Beach/Ball/SealBall.tscn" id="5_fuf70"]
[sub_resource type="SpriteFrames" id="SpriteFrames_xdtoc"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_fi4iu")
}, {
"duration": 1.0,
"texture": ExtResource("4_uqs8h")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_bsf3e"]
radius = 98.2033
[node name="Seal" instance=ExtResource("1_evrv5")]
script = ExtResource("2_sblbo")
[node name="Sprite" parent="." index="0"]
position = Vector2(-1.2, 21.2)
sprite_frames = SubResource("SpriteFrames_xdtoc")
frame = 1
[node name="Interactable" parent="." index="1"]
position = Vector2(-1.2, 21.2)
[node name="Panel" parent="Interactable" index="1"]
offset_left = -104.0
offset_top = -49.0
offset_right = -32.0
offset_bottom = -23.0
scale = Vector2(3, 3.3)
metadata/_edit_use_anchors_ = true
[node name="Talkable" parent="." index="2"]
position = Vector2(-1.2, 21.2)
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
shape = SubResource("CircleShape2D_bsf3e")
[node name="CollisionShape2D" parent="." index="3"]
position = Vector2(-1.2, 25.2)
disabled = true
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="." index="4"]
position = Vector2(-1.2, 64.2)
polygon = PackedVector2Array(-102, -72, -91, -56, -30, -18, 27, -9, 53, 0, 58, -9, 103, -11, 104, -34, 92, -55, 91, -68, 72, -64, -26, -84, -71, -84, -99, -78)
[node name="SealBall" parent="." index="5" instance=ExtResource("5_fuf70")]
position = Vector2(45, -26)
lock_rotation = false
[node name="BallCatchArea" type="Area2D" parent="." index="6"]
[node name="CollisionPolygon2D" type="CollisionPolygon2D" parent="BallCatchArea" index="0"]
polygon = PackedVector2Array(-113, 18, -78, 60, 2, 79, 82, 81, 128, 63, 144, 31, 135, -8, 101, -37, 1, -64, -78, -62, -119, -26)
[connection signal="body_entered" from="BallCatchArea" to="." method="_on_ball_catch_area_body_entered"]
[editable path="Interactable"]
[editable path="Interactable/ActionMenu"]
[editable path="Talkable"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://oggti7coatvk"
path="res://.godot/imported/SealNote.png-31cbe01d5dd8ec08dcbb0cfd25653f35.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Seal/SealNote.png"
dest_files=["res://.godot/imported/SealNote.png-31cbe01d5dd8ec08dcbb0cfd25653f35.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

View file

@ -0,0 +1,8 @@
~ start
Tyler: Welcome Welcome to my Snak Shak.
Tyler: I have remodeled this old shack into the renowned Snak Shak.
Tyler: I have prepared many Delicacies that I found in the old shack.
Tyler: Please enjoy them; I recommend the Wustard.
=> END

View file

@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_11"
type="Resource"
uid="uid://drmr326qshba7"
path="res://.godot/imported/Snak.dialogue-3d0827ffb10b1a81610a9203b9a85746.tres"
[deps]
source_file="res://NPCs/Beach/Snak/Snak.dialogue"
dest_files=["res://.godot/imported/Snak.dialogue-3d0827ffb10b1a81610a9203b9a85746.tres"]
[params]
defaults=true

4
NPCs/Beach/Snak/Snak.gd Normal file
View file

@ -0,0 +1,4 @@
extends NPC
func _ready():
dialogueResource = load("res://NPCs/Beach/Snak/Snak.dialogue")

BIN
NPCs/Beach/Snak/Snak.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://d170nfxigc28x"
path="res://.godot/imported/Snak.png-a489aa675d35503a982846f49c1ed2b0.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Snak/Snak.png"
dest_files=["res://.godot/imported/Snak.png-a489aa675d35503a982846f49c1ed2b0.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

49
NPCs/Beach/Snak/Snak.tscn Normal file
View file

@ -0,0 +1,49 @@
[gd_scene load_steps=6 format=3 uid="uid://b65h8ptq88k31"]
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_ycn6h"]
[ext_resource type="Script" path="res://NPCs/Beach/Snak/Snak.gd" id="2_kaunn"]
[ext_resource type="Texture2D" uid="uid://d170nfxigc28x" path="res://NPCs/Beach/Snak/Snak.png" id="3_wsidj"]
[sub_resource type="SpriteFrames" id="SpriteFrames_bfh8j"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("3_wsidj")
}],
"loop": true,
"name": &"default",
"speed": 5.0
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_1wnv4"]
radius = 45.0
[node name="Snak" instance=ExtResource("1_ycn6h")]
script = ExtResource("2_kaunn")
[node name="Sprite" parent="." index="0"]
position = Vector2(0, -43)
sprite_frames = SubResource("SpriteFrames_bfh8j")
[node name="Interactable" parent="." index="1"]
position = Vector2(0, -43)
[node name="Panel" parent="Interactable" index="1"]
offset_left = -36.0
offset_top = -12.0
offset_right = 36.0
offset_bottom = 14.0
metadata/_edit_use_anchors_ = true
[node name="Talkable" parent="." index="2"]
position = Vector2(0, -43)
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
shape = SubResource("CircleShape2D_1wnv4")
[node name="CollisionShape2D" parent="." index="3"]
position = Vector2(0, -39)
[editable path="Interactable"]
[editable path="Interactable/ActionMenu"]
[editable path="Talkable"]

View file

@ -0,0 +1,16 @@
~ start
if DialogueBoxManager.currentSpeaker.wet_wustard_check():
Herbert: You have Wet Wustard >:)
Herbert: I'm gonna take it >:)
do DialogueBoxManager.currentSpeaker.take_wet_wustard()
do DialogueBoxManager.currentSpeaker.give_knowledge()
Herbert: Hee hee hee >:)
=> END
Herbert: Hi I'm just a normal whale.
Herbert: I'm just hanging out here, nothing to worry about.
Herbert: Please bring me Wet Wustard :)
Herbert: I am normal about Wet Wustard :)
=> END

View file

@ -0,0 +1,15 @@
[remap]
importer="dialogue_manager_compiler_11"
type="Resource"
uid="uid://ckqmceliursrw"
path="res://.godot/imported/Whale.dialogue-6f14f75a1a1816743c7d23e1522e8188.tres"
[deps]
source_file="res://NPCs/Beach/Whale/Whale.dialogue"
dest_files=["res://.godot/imported/Whale.dialogue-6f14f75a1a1816743c7d23e1522e8188.tres"]
[params]
defaults=true

56
NPCs/Beach/Whale/Whale.gd Normal file
View file

@ -0,0 +1,56 @@
extends NPC
var wetWustardItem
func _ready():
dialogueResource = load("res://NPCs/Beach/Whale/Whale.dialogue")
wetWustardItem = preload("res://Items/Foods/Condiments/Wustard.gd").new()
wetWustardItem.set_modification(Item.modifications.Wet)
MessageManager.messageSent.connect(message_spoken)
func message_spoken(message:String):
message = message.to_lower().strip_edges()
if message.contains("i got the stuff") or message.contains("i've got the stuff") or message.contains("i have got the stuff") or message.contains("i have the stuff"):
if distance_check():
if wet_wustard_count() == 0:
MessageManager.addMessage("You do not", self, "Herbert", Color.YELLOW)
elif wet_wustard_count() < 5:
MessageManager.addMessage("Not enough", self, "Herbert", Color.YELLOW)
else:
MessageManager.addMessage("I'll be taking that >:)", self, "Herbert", Color.YELLOW)
take_wet_wustard()
give_silica_gel()
func give_silica_gel():
var silicaGelPacketItem = preload("res://Items/Artificial/Products/SilicaGelPacket.gd").new()
InventoryManager.add_item_to_inventory(silicaGelPacketItem)
MessageManager.item_popup(silicaGelPacketItem.duplicate())
func distance_check():
var maxTradeDistance = 600
var distance = global_position.distance_to(GameVariables.player.global_position)
if distance < maxTradeDistance:
return true
else:
return false
func wet_wustard_count():
var amountHad = InventoryManager.get_item_count(wetWustardItem)
return amountHad
func wet_wustard_check():
if InventoryManager.check_if_in_inventory(wetWustardItem):
return true
else:
return false
func take_wet_wustard():
var wetWustardCount = wet_wustard_count()
InventoryManager.remove_item_from_inventory(wetWustardItem, wetWustardCount)
LevelManager.get_skill("appreciating").experience_event("Herbert", "gave wustard to", 140)
if wetWustardCount >= 50:
AchievementManager.complete_achievement("Wustard Whale")
func give_knowledge():
LevelManager.add_XP("swimming", 187)

View file

@ -0,0 +1,48 @@
[gd_scene load_steps=9 format=3 uid="uid://brmjavcajdu03"]
[ext_resource type="PackedScene" uid="uid://doqfsp7yxools" path="res://NPCs/NPC.tscn" id="1_3f7lk"]
[ext_resource type="Script" path="res://NPCs/Beach/Whale/Whale.gd" id="2_cs65o"]
[ext_resource type="Texture2D" uid="uid://bdddtyk2coax8" path="res://NPCs/Beach/Whale/Whale1.png" id="2_dbxph"]
[ext_resource type="Texture2D" uid="uid://do4kg2auu2dwm" path="res://NPCs/Beach/Whale/Whale2.png" id="3_r42pj"]
[ext_resource type="Script" path="res://Utils/PlayOnReady.gd" id="5_yfdiw"]
[sub_resource type="SpriteFrames" id="SpriteFrames_pa14j"]
animations = [{
"frames": [{
"duration": 1.0,
"texture": ExtResource("2_dbxph")
}, {
"duration": 1.0,
"texture": ExtResource("3_r42pj")
}],
"loop": true,
"name": &"default",
"speed": 1.2
}]
[sub_resource type="CircleShape2D" id="CircleShape2D_6t2cr"]
radius = 136.059
[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_u025d"]
radius = 22.0
height = 326.0
[node name="Whale" instance=ExtResource("1_3f7lk")]
script = ExtResource("2_cs65o")
[node name="Sprite" parent="." index="0"]
position = Vector2(56, -68)
sprite_frames = SubResource("SpriteFrames_pa14j")
frame_progress = 0.804645
script = ExtResource("5_yfdiw")
[node name="CollisionShape2D" parent="Talkable/InteractionArea" index="0"]
position = Vector2(6, -11)
shape = SubResource("CircleShape2D_6t2cr")
[node name="CollisionShape2D" parent="." index="3"]
position = Vector2(46, 17)
rotation = 1.5708
shape = SubResource("CapsuleShape2D_u025d")
[editable path="Talkable"]

BIN
NPCs/Beach/Whale/Whale1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://bdddtyk2coax8"
path="res://.godot/imported/Whale1.png-5c81db3f58300f302cbda101482eb85e.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Whale/Whale1.png"
dest_files=["res://.godot/imported/Whale1.png-5c81db3f58300f302cbda101482eb85e.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/Beach/Whale/Whale2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

View file

@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://do4kg2auu2dwm"
path="res://.godot/imported/Whale2.png-5f2e700f569fe95907484e02f0f12feb.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://NPCs/Beach/Whale/Whale2.png"
dest_files=["res://.godot/imported/Whale2.png-5f2e700f569fe95907484e02f0f12feb.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