finished the game

This commit is contained in:
Sage The DM 2025-04-17 19:37:05 +02:00
parent 8ceb6e1027
commit d8bde52ed6
9 changed files with 99 additions and 45 deletions

View file

@ -10,7 +10,7 @@ dock_filesystem_display_mode=0
dock_filesystem_file_sort=0 dock_filesystem_file_sort=0
dock_filesystem_file_list_display_mode=1 dock_filesystem_file_list_display_mode=1
dock_filesystem_selected_paths=PackedStringArray("res://scenes/player-npc/player.tscn") dock_filesystem_selected_paths=PackedStringArray("res://scenes/player-npc/player.tscn")
dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://sprites/particles/", "res://scenes/player-npc/", "res://assets/terrain/") dock_filesystem_uncollapsed_paths=PackedStringArray("Favorites", "res://", "res://sprites/particles/", "res://scenes/", "res://scenes/player-npc/", "res://assets/terrain/")
dock_node_current_tab=0 dock_node_current_tab=0
dock_history_include_scene=true dock_history_include_scene=true
dock_history_include_global=true dock_history_include_global=true
@ -31,29 +31,29 @@ dock_5="Inspector,Node,History"
open_scenes=PackedStringArray("res://scenes/maps/map.tscn", "res://scenes/player-npc/player.tscn", "res://scenes/enemies/slime.tscn") open_scenes=PackedStringArray("res://scenes/maps/map.tscn", "res://scenes/player-npc/player.tscn", "res://scenes/enemies/slime.tscn")
current_scene="res://scenes/player-npc/player.tscn" current_scene="res://scenes/player-npc/player.tscn"
center_split_offset=-289 center_split_offset=-289
selected_default_debugger_tab_idx=0 selected_default_debugger_tab_idx=1
selected_main_editor_idx=2 selected_main_editor_idx=2
selected_bottom_panel_item=0 selected_bottom_panel_item=0
[EditorWindow] [EditorWindow]
screen=2 screen=2
mode="maximized" mode="windowed"
position=Vector2i(1920, 23) position=Vector2i(1921, 31)
size=Vector2i(1152, 648) size=Vector2i(1416, 1000)
[ScriptEditor] [ScriptEditor]
open_scripts=["res://scripts/global.gd", "res://scripts/player.gd", "res://scripts/slime.gd"] open_scripts=["res://scripts/global.gd", "res://scripts/player.gd", "res://scripts/slime.gd"]
selected_script="res://scripts/player.gd" selected_script="res://scripts/player.gd"
open_help=[] open_help=["Node"]
script_split_offset=200 script_split_offset=200
list_split_offset=0 list_split_offset=0
zoom_factor=0.928575 zoom_factor=0.928575
[GameView] [GameView]
floating_window_rect=Rect2i(2298, 151, 1164, 695) floating_window_rect=Rect2i(2053, 94, 1164, 695)
floating_window_screen=2 floating_window_screen=2
[ShaderEditor] [ShaderEditor]

View file

@ -1,5 +1,5 @@
ea4bc82a6ad023ab7ee23ee620429895 ea4bc82a6ad023ab7ee23ee620429895
::res://::1744892296 ::res://::1744911067
README.md::TextFile/TextFile::-1::1744816260::0::1::::<><><>0<>0<><>:: README.md::TextFile/TextFile::-1::1744816260::0::1::::<><><>0<>0<><>::
::res://addons/::1744816286 ::res://addons/::1744816286
::res://addons/dialogic/::1744816286 ::res://addons/dialogic/::1744816286
@ -638,16 +638,16 @@ impactWood_light_003.ogg::AudioStreamOggVorbis/AudioStreamOggVorbis::39778551762
dungeon_tilemap.png::CompressedTexture2D/CompressedTexture2D::8061865866911565813::1744792307::1744795216::1::::<><><>0<>0<>f72357e1a5fc8e72e24e704a7ba19886<>res://.godot/imported/dungeon_tilemap.png-68df297cfdb861c9d71310f03207f420.ctex:: dungeon_tilemap.png::CompressedTexture2D/CompressedTexture2D::8061865866911565813::1744792307::1744795216::1::::<><><>0<>0<>f72357e1a5fc8e72e24e704a7ba19886<>res://.godot/imported/dungeon_tilemap.png-68df297cfdb861c9d71310f03207f420.ctex::
town_tilemap.png::CompressedTexture2D/CompressedTexture2D::9087710348786756863::1744792307::1744795216::1::::<><><>0<>0<>3bfeccc788daeaf3e35efcb3add29f22<>res://.godot/imported/town_tilemap.png-2998e8eb9fc51ed5db3b69c6ee26a142.ctex:: town_tilemap.png::CompressedTexture2D/CompressedTexture2D::9087710348786756863::1744792307::1744795216::1::::<><><>0<>0<>3bfeccc788daeaf3e35efcb3add29f22<>res://.godot/imported/town_tilemap.png-2998e8eb9fc51ed5db3b69c6ee26a142.ctex::
::res://scenes/::1744816287 ::res://scenes/::1744816287
::res://scenes/enemies/::1744820177 ::res://scenes/enemies/::1744910723
slime.tscn::PackedScene::2402754897815220369::1744820177::0::1::::<><><>0<>0<><>::uid://bnpn02r7cngft::::res://scripts/slime.gd<>uid://ijn3ut4pdyam::::res://sprites/characters/slime.png slime.tscn::PackedScene::2402754897815220369::1744910723::0::1::::<><><>0<>0<><>::uid://bnpn02r7cngft::::res://scripts/slime.gd<>uid://ijn3ut4pdyam::::res://sprites/characters/slime.png
::res://scenes/maps/::1744838668 ::res://scenes/maps/::1744910722
map.tscn::PackedScene::3973745883842296891::1744838668::0::1::::<><><>0<>0<><>::uid://d2qfi5sncf72b::::res://assets/terrain/town_tilemap.png<>uid://dm4h0uo6gjp22::::res://assets/terrain/dungeon_tilemap.png<>uid://bah6a0tn6u066::::res://scenes/enemies/slime.tscn<>uid://d2xgp0scnb5s3::::res://scenes/player-npc/player.tscn map.tscn::PackedScene::3973745883842296891::1744910722::0::1::::<><><>0<>0<><>::uid://d2qfi5sncf72b::::res://assets/terrain/town_tilemap.png<>uid://dm4h0uo6gjp22::::res://assets/terrain/dungeon_tilemap.png<>uid://bah6a0tn6u066::::res://scenes/enemies/slime.tscn<>uid://d2xgp0scnb5s3::::res://scenes/player-npc/player.tscn
::res://scenes/player-npc/::1744816287 ::res://scenes/player-npc/::1744910723
player.tscn::PackedScene/PackedScene::9102233947513275536::1744814481::0::1::::<><><>0<>0<><>::uid://cxcuos53tbyxg::::res://scripts/player.gd<>uid://bsbojappb6j6v::::res://sprites/characters/player.png player.tscn::PackedScene::9102233947513275536::1744910723::0::1::::<><><>0<>0<><>::uid://cxcuos53tbyxg::::res://scripts/player.gd<>uid://bsbojappb6j6v::::res://sprites/characters/player.png
::res://scripts/::1744831051 ::res://scripts/::1744910719
global.gd::GDScript::5883560734693615925::1744823557::0::1::::<>Node<><>0<>0<><>:: global.gd::GDScript/GDScript::5883560734693615925::1744823557::0::1::::<>Node<><>0<>0<><>::
player.gd::GDScript::6392553860601149484::1744831051::0::1::::<>CharacterBody2D<><>0<>0<><>:: player.gd::GDScript::6392553860601149484::1744910719::0::1::::<>CharacterBody2D<><>0<>0<><>::
slime.gd::GDScript::3330676728901258397::1744823524::0::1::::<>CharacterBody2D<><>0<>0<><>:: slime.gd::GDScript/GDScript::3330676728901258397::1744823524::0::1::::<>CharacterBody2D<><>0<>0<><>::
::res://sprites/::1744816287 ::res://sprites/::1744816287
icon.svg::CompressedTexture2D/CompressedTexture2D::7419309778608950522::1744795028::1744795062::1::::<><><>0<>0<>34e689a90ac55dc880b59a651c559a89<>res://.godot/imported/icon.svg-964d8c66fbd3bda40c44ca195472a8e1.ctex:: icon.svg::CompressedTexture2D/CompressedTexture2D::7419309778608950522::1744795028::1744795062::1::::<><><>0<>0<>34e689a90ac55dc880b59a651c559a89<>res://.godot/imported/icon.svg-964d8c66fbd3bda40c44ca195472a8e1.ctex::
::res://sprites/characters/::1744816287 ::res://sprites/characters/::1744816287

View file

@ -1,4 +1,4 @@
res://scenes/player-npc/player.tscn
res://scripts/player.gd res://scripts/player.gd
res://scenes/maps/map.tscn res://scenes/maps/map.tscn
res://scenes/player-npc/player.tscn
res://scenes/enemies/slime.tscn res://scenes/enemies/slime.tscn

View file

@ -192,4 +192,4 @@ Game={
"hide_selection": true, "hide_selection": true,
"select_mode": 1 "select_mode": 1
} }
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Player/TextEdit")]) selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Player")])

View file

@ -8,7 +8,7 @@ Anim={
"grid_snap_active": false, "grid_snap_active": false,
"grid_step": Vector2(8, 8), "grid_step": Vector2(8, 8),
"grid_visibility": 1, "grid_visibility": 1,
"ofs": Vector2(-210.168, -100.509), "ofs": Vector2(-200.49, -85.6174),
"primary_grid_step": Vector2i(8, 8), "primary_grid_step": Vector2i(8, 8),
"show_group_gizmos": true, "show_group_gizmos": true,
"show_guides": true, "show_guides": true,
@ -192,4 +192,4 @@ Game={
"hide_selection": false, "hide_selection": false,
"select_mode": 0 "select_mode": 0
} }
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Player/TextEdit")]) selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Player")])

View file

@ -6,7 +6,7 @@ use_advanced_connections=false
[recent_files] [recent_files]
scenes=["res://scenes/enemies/slime.tscn", "res://scenes/player-npc/player.tscn", "res://scenes/maps/map.tscn", "res://scenes/maps/south.tscn", "res://scenes/maps/north.tscn", "res://scenes/maps/main.tscn", "res://scenes/maps/east.tscn", "res://scenes/enemy-no-animation.tscn", "res://scenes/main.tscn", "res://scenes/slime.tscn"] scenes=["res://scenes/enemies/slime.tscn", "res://scenes/player-npc/player.tscn", "res://scenes/maps/map.tscn", "res://scenes/maps/south.tscn", "res://scenes/maps/north.tscn", "res://scenes/maps/main.tscn", "res://scenes/maps/east.tscn", "res://scenes/enemy-no-animation.tscn", "res://scenes/main.tscn", "res://scenes/slime.tscn"]
scripts=["res://scripts/global.gd", "res://scripts/slime.gd", "res://scripts/enemy.gd", "res://scripts/player.gd", "res://scripts/world.gd", "res://scripts/cliff_side.gd"] scripts=["Node", "res://scripts/player.gd", "res://scripts/global.gd", "res://scripts/slime.gd", "res://scripts/enemy.gd", "res://scripts/world.gd", "res://scripts/cliff_side.gd"]
[uid_upgrade_tool] [uid_upgrade_tool]
@ -38,3 +38,7 @@ snap_mode=2
[game_view] [game_view]
embed_size_mode=0 embed_size_mode=0
[quick_open_dialog]
last_mode=1

View file

@ -3,11 +3,11 @@
state={ state={
"bookmarks": PackedInt32Array(), "bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(), "breakpoints": PackedInt32Array(),
"column": 28, "column": 15,
"folded_lines": Array[int]([]), "folded_lines": Array[int]([]),
"h_scroll_position": 0, "h_scroll_position": 0,
"row": 412, "row": 13,
"scroll_position": 397.0, "scroll_position": 0.0,
"selection": false, "selection": false,
"syntax_highlighter": "GDScript" "syntax_highlighter": "GDScript"
} }

View file

@ -192,4 +192,4 @@ Game={
"hide_selection": false, "hide_selection": false,
"select_mode": 0 "select_mode": 0
} }
selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Player/TextEdit")]) selected_nodes=Array[NodePath]([NodePath("/root/@EditorNode@21272/@Panel@14/@VBoxContainer@15/DockHSplitLeftL/DockHSplitLeftR/DockHSplitMain/@VBoxContainer@26/DockVSplitCenter/@VSplitContainer@54/@VBoxContainer@55/@EditorMainScreen@102/MainScreen/@CanvasItemEditor@11482/@VSplitContainer@11134/@HSplitContainer@11136/@HSplitContainer@11138/@Control@11139/@SubViewportContainer@11140/@SubViewport@11141/Player")])

View file

@ -1,7 +1,7 @@
extends CharacterBody2D extends CharacterBody2D
const speed = 250 # return to 100 before handin const speed = 100
const dodge_speed = 500 # Speed during dodge --> return to 200 before handin const dodge_speed = 200 # Speed during dodge
const dodge_duration = 0.5 # How long the dodge lasts (in seconds) const dodge_duration = 0.5 # How long the dodge lasts (in seconds)
const dodge_cooldown_time = 3.0 # Dodge cooldown (in seconds) const dodge_cooldown_time = 3.0 # Dodge cooldown (in seconds)
@ -11,7 +11,7 @@ var dodge_cooldown_active = false
var enemy_in_attack_range = false var enemy_in_attack_range = false
var enemy_attack_cooldown = true var enemy_attack_cooldown = true
var healt = 64806524502 # return to 100 before turnin var healt = 100 # return to 100 before turnin
var player_alive = true var player_alive = true
var attack_ip = false var attack_ip = false
@ -23,6 +23,63 @@ var has_red_potion = false
var has_green_potion = false var has_green_potion = false
var coin_count = 0 var coin_count = 0
var word_chunks = [] # Array to store the tokenized words
var current_chunk_index = 0 # Keeps track of the current chunk
# Function to prepare and show text in 5-word chunks
func show_text_in_chunks(full_text: String) -> void:
# Add mystical Latin phrase at the end for a wizard or knight
full_text += " Ave Domine Limosus, dominator omnium slime!"
# Split the full text into words, keeping punctuation separate
word_chunks = tokenize_text(full_text)
current_chunk_index = 0
$"TextEdit".visible = true
$"TextEdit".text = "" # Clear the text before starting
set_process(true) # Enable processing for the _process function
# Function to tokenize the text into words and punctuation separately
func tokenize_text(text: String) -> Array:
var regex = RegEx.new()
regex.compile(r"[\w']+|[.,!?;]") # Regular expression to split words and punctuation
var matches = regex.search_all(text)
var tokens = []
for match in matches:
tokens.append(match.strings[0]) # Append each matched token
return tokens
# Process function to handle input and display text chunks
func _process(delta):
# Check if there are more chunks to display and listen for input
if current_chunk_index * 5 < word_chunks.size():
if Input.is_action_just_pressed("ui_accept"): # Trigger on just pressed input
_display_next_chunk()
# If all chunks are displayed, show an empty chunk and hide the TextEdit
elif current_chunk_index * 5 >= word_chunks.size() and $"TextEdit".visible:
_display_empty_chunk()
# Function to display only the next chunk of 5 words
func _display_next_chunk() -> void:
# Clear the current text
$"TextEdit".text = ""
# Show the next 5 words
var start = current_chunk_index * 5
var end = min(start + 5, word_chunks.size()) # Ensure we don't go beyond the last word
var chunk_text = " ".join(word_chunks.slice(start, end)) # Join the next 5 words
$"TextEdit".text = chunk_text # Display only the current 5 words
# Move to the next chunk
current_chunk_index += 1
# Function to display an empty chunk before closing the text
func _display_empty_chunk() -> void:
# Display an empty chunk (effectively clearing the TextEdit)
$"TextEdit".text = ""
# Hide the TextEdit after the empty chunk
$"TextEdit".visible = false
func resetGame(): func resetGame():
has_blue_potion = false has_blue_potion = false
@ -224,11 +281,14 @@ func update_dodge_cooldown(delta):
func gameEnd() -> void: func gameEnd() -> void:
while $"TextEdit".visible:
await get_tree().create_timer(1.0).timeout
print("The game has been beaten!") print("The game has been beaten!")
queue_free() queue_free()
get_tree().quit() get_tree().quit()
func enterHouseNico(body: Node2D) -> void: func enterHouseNico(body: Node2D) -> void:
if body == self: if body == self:
self.position = Vector2(1290, 1130) self.position = Vector2(1290, 1130)
@ -386,7 +446,7 @@ func pickUpCoin7(body: Node2D) -> void:
func wizardTalking(body: Node2D) -> void: func wizardTalking(body: Node2D) -> void:
if body == self: if body == self:
if has_blue_potion and has_green_potion and has_red_potion: if has_blue_potion and has_green_potion and has_red_potion:
print( show_text_in_chunks(
"By the stars, you actually did it! You brought all three potions—red, green, and blue! "By the stars, you actually did it! You brought all three potions—red, green, and blue!
...Oh. Uh, yeahabout that. So here's the thing... ...Oh. Uh, yeahabout that. So here's the thing...
@ -397,25 +457,15 @@ func wizardTalking(body: Node2D) -> void:
No refunds!" No refunds!"
) )
gameEnd() gameEnd()
else: else:
var text = "Ah... you're not from this world, are you? Curious. Your aura—it's foreign, like a breeze from a land long forgotten. show_text_in_chunks("Ah... you're not from this world, are you? Curious. Your aura—it's foreign, like a breeze from a land long forgotten. Fear not! I can send you back... but the spell requires three ancient potions: red, green, and blue. They're scattered deep within this slime-infested forest. Charming place, really. Oh, before you go stumbling into a slime's belly, a few pointers: WASD or arrow keys to move, Spacebar for a quick dodge—handy for avoiding gooey hugs, and to deal with trouble, just left-click or press E to strike. Now go! The forest wont wait... and neither will the slimes.")
Fear not! I can send you back... but the spell requires three ancient potions: red, green, and blue. They're scattered deep within this slime-infested forest. Charming place, really.
Oh, before you go stumbling into a slime's belly, a few pointers:
WASD or arrow keys to move,
Spacebar for a quick dodgehandy for avoiding gooey hugs,
and to deal with trouble, just left-click or press E to strike.
Now go! The forest wont wait... and neither will the slimes."
$"TextEdit".visible = true
while Input.is_action_just_pressed("ui_accept"):
$"TextEdit".text = "test"
func knightTalking(body: Node2D) -> void: func knightTalking(body: Node2D) -> void:
if body == self and coin_count >= 6: if body == self and coin_count >= 6:
print( show_text_in_chunks(
"...Well now. You actually returned... and with all seven coins of Lazaret, no less. "...Well now. You actually returned... and with all seven coins of Lazaret, no less.
Many have entered that cursed dungeonmost were not so fortunate. Many have entered that cursed dungeonmost were not so fortunate.
@ -430,7 +480,7 @@ func knightTalking(body: Node2D) -> void:
$"../north/StaticBody2D2".queue_free() $"../north/StaticBody2D2".queue_free()
coin_count = 0 coin_count = 0
elif body == self: elif body == self:
print( show_text_in_chunks(
"Ah, I see your eyes are fixed on that glowing prize beyond the gate—the blue potion. So close you could almost taste it… yet still out of reach. "Ah, I see your eyes are fixed on that glowing prize beyond the gate—the blue potion. So close you could almost taste it… yet still out of reach.
Know this: that potion is not yours for the takingnot yet. Only those who prove their worth may claim it. Know this: that potion is not yours for the takingnot yet. Only those who prove their worth may claim it.