Compare commits

..

6 Commits

Author SHA1 Message Date
c6a7ab376e fix(scoreboard): show more than 25 scores, fixes #278
All checks were successful
Gymkhana exports / All exports (push) Successful in 2m51s
2025-12-29 19:57:35 +01:00
738b60248d fix(animations): godot autofixes 2025-11-23 18:33:42 +01:00
56b3007400 feat(escoria): Update Patches 2025-11-23 18:22:29 +01:00
2252a80bb9 feat(i18n): EN fixes.
All checks were successful
Gymkhana exports / All exports (push) Successful in 2m44s
2025-11-12 01:19:53 +01:00
29c9cd4828 feat(scoreboard): Label with note. 2025-11-12 01:19:23 +01:00
6d426fe4fb feat(save): new savegames for post-intro and con ajo 2025-11-12 00:30:53 +01:00
17 changed files with 243 additions and 599 deletions

View File

@@ -57,7 +57,9 @@ func _load_api_config() -> void:
func get_scores(collection: String) -> Array[RTMIScoreRow]:
var http_request = http_requests[collection]
var response_data = await _score_http_request(http_request, "%s/databases/%s/collections/%s/documents" % [api_url, database_id, collection])
var response_data = await _score_http_request(
http_request, '%s/databases/%s/collections/%s/documents?queries[1]={"method":"limit","values":[100]}' % [api_url, database_id, collection]
)
if not response_data:
return []

View File

@@ -41,6 +41,11 @@ unique_name_in_owner = true
layout_mode = 2
collection = "perfect"
[node name="Label" type="Label" parent="CenterContainer/VBoxContainer"]
layout_mode = 2
text = "SCOREBOARD_NOTE"
horizontal_alignment = 1
[node name="HBoxContainer" type="HBoxContainer" parent="CenterContainer/VBoxContainer"]
layout_mode = 2
alignment = 1

View File

@@ -9,9 +9,13 @@ DEFAULT_DESTINATION_PATH="../escoria-demo-game"
DESTINATION_PATH="${1:-$DEFAULT_DESTINATION_PATH}"
REMOTE_PATCHES=(
#"https://patch-diff.githubusercontent.com/raw/godot-escoria/escoria-demo-game/pull/777.patch"
https://patch-diff.githubusercontent.com/raw/godot-escoria/escoria-demo-game/pull/793.patch
https://patch-diff.githubusercontent.com/raw/godot-escoria/escoria-demo-game/pull/792.patch
https://patch-diff.githubusercontent.com/raw/godot-escoria/escoria-demo-game/pull/791.patch
)
WORKING_COMMIT="2f6ec324f7b5b37d9226dbc99fcd46f01283a3b6"
PROJECT_PATH=$PWD
echo -e
@@ -26,18 +30,13 @@ echo -e
echo -e "${BLUE}Cleaning and updating the repo${NOCOLOR}"
echo -e ==========================
BRANCH=$(git rev-parse --abbrev-ref HEAD)
if [ "$BRANCH" != "main" ]
then
echo -e ${RED}Not on main branch. Aborting. ${NOCOLOR}
echo -e
exit 0
fi
git clean -fx
git reset --hard
git pull origin main
git fetch
git pull origin $WORKING_COMMIT
git checkout $WORKING_COMMIT
echo -e
echo -e "${BLUE}Applying remote patches...${NOCOLOR}"

View File

@@ -145,7 +145,7 @@ animation = "idle_up"
[resource]
script = ExtResource("1")
dir_angles = [SubResource("1"), SubResource("2"), SubResource("3"), SubResource("4"), SubResource("5"), SubResource("6"), SubResource("7"), SubResource("8")]
directions = [SubResource("9"), SubResource("10"), SubResource("11"), SubResource("12"), SubResource("13"), SubResource("14"), SubResource("15"), SubResource("16")]
idles = [SubResource("17"), SubResource("18"), SubResource("19"), SubResource("20"), SubResource("21"), SubResource("22"), SubResource("23"), SubResource("24")]
speaks = [SubResource("25"), SubResource("26"), SubResource("27"), SubResource("28"), SubResource("29"), SubResource("30"), SubResource("31"), SubResource("32")]
dir_angles = Array[ExtResource("2")]([SubResource("1"), SubResource("2"), SubResource("3"), SubResource("4"), SubResource("5"), SubResource("6"), SubResource("7"), SubResource("8")])
directions = Array[ExtResource("3")]([SubResource("9"), SubResource("10"), SubResource("11"), SubResource("12"), SubResource("13"), SubResource("14"), SubResource("15"), SubResource("16")])
idles = Array[ExtResource("3")]([SubResource("17"), SubResource("18"), SubResource("19"), SubResource("20"), SubResource("21"), SubResource("22"), SubResource("23"), SubResource("24")])
speaks = Array[ExtResource("3")]([SubResource("25"), SubResource("26"), SubResource("27"), SubResource("28"), SubResource("29"), SubResource("30"), SubResource("31"), SubResource("32")])

View File

@@ -18,7 +18,7 @@ animation = "speak"
[resource]
script = ExtResource("1")
dir_angles = [SubResource("1")]
directions = [SubResource("2")]
idles = [SubResource("2")]
speaks = [SubResource("3")]
dir_angles = Array[ExtResource("2")]([SubResource("1")])
directions = Array[ExtResource("3")]([SubResource("2")])
idles = Array[ExtResource("3")]([SubResource("2")])
speaks = Array[ExtResource("3")]([SubResource("3")])

View File

@@ -18,7 +18,7 @@ animation = "speak"
[resource]
script = ExtResource("1")
dir_angles = [SubResource("1")]
directions = [SubResource("2")]
idles = [SubResource("2")]
speaks = [SubResource("3")]
dir_angles = Array[ExtResource("2")]([SubResource("1")])
directions = Array[ExtResource("3")]([SubResource("2")])
idles = Array[ExtResource("3")]([SubResource("2")])
speaks = Array[ExtResource("3")]([SubResource("3")])

View File

@@ -27,7 +27,7 @@
"SLOW_TEXT_MODE","Slow dialogs","Dialogues lents","","Dialogos lentos","Elkarrizketa mantsoak"
"SKIP_VIDEO"," Skip video","Passer la vidéo","","Saltar video","Bideoa pasa"
"ACHIEVEMENT_UNLOCKED_NOTIFICATION_LABEL","Unlocked achievement:","Objectifs débloqués:","","Logro desbloqueado:","Lorpen desblokeatua:"
"ACHIEVEMENT_SUMMARY","Achivement summary","Résumé des objectifs atteints","","Resumen de logros","Lorpenen laburpena"
"ACHIEVEMENT_SUMMARY","Achievement summary","Résumé des objectifs atteints","","Resumen de logros","Lorpenen laburpena"
"TOTAL_TIME","Total time","Temps total","","Tiempo total","Denbora totala"
"POSITION","Position","","","Posición","Postua"
"SCOREBOARD_PERFECT_TITLE","Perfect TOP 10","Parfait TOP 10",,"Perfect TOP 10","Perfect TOP 10"
@@ -35,11 +35,12 @@
"SKIP_CREDITS","Skip credits","Sauter les crédits",,"Saltar créditos","Kredituak pasa"
"SHOW_CREDITS","Continue","","","Continuar sin enviar","Jarraitu bidali gabe"
"NAME_PLACEHOLDER","Your name","","","Tu nombre","Zure izena"
"SUBMIT_SCORE","Sumbit score","Envoyer le score",,"Enviar puntuación","Puntuazioa bidali"
"SUBMIT_SCORE","Submit score","Envoyer le score",,"Enviar puntuación","Puntuazioa bidali"
"SUBMIT_PERFECT_SCORE","Submit PERFECT score","Envoyer PARFAIT score","","Enviar puntuación PERFECTA","Puntuazioa PERFEKTUA bidali"
"BACK_MAIN_MENU","Return to the main menu","Retour au menu principal","","Volver al menú principal","Menu nagusira bueltatu"
"SCOREBOARD_REFRESH","Refresh","Rafaîchir","","Refrescar","Eguneratu"
"SCOREBOARD_BACK","Back","Retour","Zurück","Volver","Itzuli"
"CURRENT_PLAYING_TIME","Current playing time:","Temps de partie :","","Tiempo de la partida:","Jolastutako denbora:"
"ACHIEVEMENTS","Achievements","Objectifs","","Logros","Lorpenak"
"ACHIEVEMENTS_MENU_NOTE","Get all the achievements to get a perfect score.","Obtenez tous les objectifs pour obtenir un score parfait.","","Consigue todos los logros para obtener una puntuación perfecta.","Lortu lorpen guztiak puntuazio perfektua lortzeko."
"ACHIEVEMENTS_MENU_NOTE","Get all the achievements to get a perfect score.","Obtenez tous les objectifs pour obtenir un score parfait.","","Consigue todos los logros para obtener una puntuación perfecta.","Lortu lorpen guztiak puntuazio perfektua lortzeko."
"SCOREBOARD_NOTE","Only the best score for each player is registered.","Seul le meilleur score de chaque joueur est enregistré.","","Solo se registra la mejor puntuación de cada jugador.","Jokalari bakoitzaren puntuaziorik onena bakarrik erregistratzen da."
1 keys en fr de es eu
27 SLOW_TEXT_MODE Slow dialogs Dialogues lents Dialogos lentos Elkarrizketa mantsoak
28 SKIP_VIDEO Skip video Passer la vidéo Saltar video Bideoa pasa
29 ACHIEVEMENT_UNLOCKED_NOTIFICATION_LABEL Unlocked achievement: Objectifs débloqués: Logro desbloqueado: Lorpen desblokeatua:
30 ACHIEVEMENT_SUMMARY Achivement summary Achievement summary Résumé des objectifs atteints Resumen de logros Lorpenen laburpena
31 TOTAL_TIME Total time Temps total Tiempo total Denbora totala
32 POSITION Position Posición Postua
33 SCOREBOARD_PERFECT_TITLE Perfect TOP 10 Parfait TOP 10 Perfect TOP 10 Perfect TOP 10
35 SKIP_CREDITS Skip credits Sauter les crédits Saltar créditos Kredituak pasa
36 SHOW_CREDITS Continue Continuar sin enviar Jarraitu bidali gabe
37 NAME_PLACEHOLDER Your name Tu nombre Zure izena
38 SUBMIT_SCORE Sumbit score Submit score Envoyer le score Enviar puntuación Puntuazioa bidali
39 SUBMIT_PERFECT_SCORE Submit PERFECT score Envoyer PARFAIT score Enviar puntuación PERFECTA Puntuazioa PERFEKTUA bidali
40 BACK_MAIN_MENU Return to the main menu Retour au menu principal Volver al menú principal Menu nagusira bueltatu
41 SCOREBOARD_REFRESH Refresh Rafaîchir Refrescar Eguneratu
42 SCOREBOARD_BACK Back Retour Zurück Volver Itzuli
43 CURRENT_PLAYING_TIME Current playing time: Temps de partie : Tiempo de la partida: Jolastutako denbora:
44 ACHIEVEMENTS Achievements Objectifs Logros Lorpenak
45 ACHIEVEMENTS_MENU_NOTE Get all the achievements to get a perfect score. Obtenez tous les objectifs pour obtenir un score parfait. Consigue todos los logros para obtener una puntuación perfecta. Lortu lorpen guztiak puntuazio perfektua lortzeko.
46 SCOREBOARD_NOTE Only the best score for each player is registered. Seul le meilleur score de chaque joueur est enregistré. Solo se registra la mejor puntuación de cada jugador. Jokalari bakoitzaren puntuaziorik onena bakarrik erregistratzen da.

View File

@@ -232,7 +232,7 @@
"cocina_cuchillos_action3_cuchillo","Leave it in place","Laisser à sa place","Dejar en su sitio","Bere tokian utzi"
"cocina_cuchillos_action3_cuchillo_say","The knife in its place!","Le couteau à sa place ","El cuchillo a su sitio!","Labana bere lekura!"
"cocina_cuerno_action1_say","Uli's horn, the call for food.","La corne d'Uli, l'appel de la nourriture.","El cuerno de Uli, la llamada para comer.","Uliko adarra, bazkaltzera deitzeko."
"cocina_cuerno_action2_say","Charge!","A l'assaut !","A la saca!","Barrura!"
"cocina_cuerno_action2_say","Into the bag!","A l'assaut !","A la saca!","Barrura!"
"cocina_cuerno_action3_say","It looks like an animal's horn. It's used to call people to the table.","On dirait la corne d'un animal. Il est utilisé pour appeler à table.","Parece un cuerno de algún animal. Lo usan para llamar a comer.","Animaliaren baten adarra dirudi. Otorduetara deitzeko erabiltzen dute."
"cocina_cuerno_action4_hint","I should ask Eneko to taste the lentils before calling people to the table.","Je devrais demander à Eneko qu'il goûte les lentilles avant d'appeler les gens à table.","Debería pedirle a Eneko que pruebe las lentejas antes de llamar a la gente.","Adarra jo aurretik Enekori dilistak dastatzeko esan beharko nioke."
"cocina_cuerno_action4_say","If I blow it here, people in the garden won't hear me. I should find a better place.","Si je la sonne ici, les gens au potager ne vont pas m'entendre. Il faudrait trouver un meilleur endroit.","Si lo toco aquí no me va a oir la gente que esté en la huerta, debería buscar un sitio mejor.","Adarra hemen jotzen badut baratzean daudenek ez dute tutik ere entzungo. Leku hobe bat bilatu beharko dut."
@@ -304,7 +304,7 @@
"cocina_ajo_action2_say","A good head of garlic, just what I needed for good lentils.","Une bonne tête d'ail, juste ce dont j'avais besoin pour de bonnes lentilles.","Una buena cabeza de ajo, justo lo que necesitaba para unas buenas lentejas.","Baratxuri oso bat, dilista goxo batzuk prestatzeko ezinbestekoa!"
"mechero_action1_say_1","My lighter, so good!","Mon briquet, trop bien !","Mi mechero, que bien!!","Nire txiskeroa, zeinen ongi!!"
"mechero_action1_say_2","Wait, I left it on the table for a minute and it disappeared.","Attends, je l'ai laissé une minute sur la table et il a disparu.","Ayer lo dejé un segundo encima de la mesa y desapareció.","Atzo mahi gainean utzi eta desagertu egin zen."
"mechero_action2_say","Charge!","A l'assaut !","A la saca!","Barrura!"
"mechero_action2_say","Into the bag!","A l'assaut !","A la saca!","Barrura!"
"mechero_action3_say_1","It looks like it has no gas.","On dirait qu'il n'a pas de gaz.","Parece que no tiene gas.","Ez zaio gasik gelditzen."
"mechero_action3_say_2","That explains why it was abandoned.","Ça explique qu'il ait été abandonné.","Eso explica que lo hayan abandonado.","Horregatik utzi dute hortik."
"mechero_action3_say_3","If you come to Uli, watch your lighter.","Si tu viens à Uli, fais gaffe à ton briquet.","Si vienes a Uli vigila tu mechero.","Ulira bazatoz zaindu zure txiskeroa."
@@ -317,7 +317,7 @@
"olla_vacia_action3_romero_say","First, I should fill the pot with water.","D'abord, il faudrait que je remplisse la casserole d'eau.","Primero debería llenar la olla de agua.","Eltzea urez bete beharko nuke lehenik."
"tooltip_olla_llena_action2","Scare the lentils","Faire peur aux lentilles","Asustar las lentejas","Dilistak izutu"
"olla_llena_action2_say","Booooooh!!","Bouuuuuh !!","Buuuuh!!","Buuuuh!!"
"olla_llena_action2_say2","Krkrkrkrkr","Krkrkrkrkr","ji ji ji","ji ji ji"
"olla_llena_action2_say2","hehehe","Krkrkrkrkr","ji ji ji","ji ji ji"
"olla_llena_action2_without_lentejas_say","First, I need to put the lentils in the pot.","D'abord, il faut que je mette les lentilles dans la casserole.","Primero tengo que poner lentejas en la olla.","Lehenik dilistak eltzean jarri behar ditut."
"olla_llena_action1_say","It's full of water.","Elle est pleine d'eau.","Está llena de agua","Urez beteta dago"
"olla_llena_action1_lentejas_say","lentils","lentilles","lentejas","dilistak"
1 keys en fr es eu
232 cocina_cuchillos_action3_cuchillo Leave it in place Laisser à sa place Dejar en su sitio Bere tokian utzi
233 cocina_cuchillos_action3_cuchillo_say The knife in its place! Le couteau à sa place El cuchillo a su sitio! Labana bere lekura!
234 cocina_cuerno_action1_say Uli's horn, the call for food. La corne d'Uli, l'appel de la nourriture. El cuerno de Uli, la llamada para comer. Uliko adarra, bazkaltzera deitzeko.
235 cocina_cuerno_action2_say Charge! Into the bag! A l'assaut ! A la saca! Barrura!
236 cocina_cuerno_action3_say It looks like an animal's horn. It's used to call people to the table. On dirait la corne d'un animal. Il est utilisé pour appeler à table. Parece un cuerno de algún animal. Lo usan para llamar a comer. Animaliaren baten adarra dirudi. Otorduetara deitzeko erabiltzen dute.
237 cocina_cuerno_action4_hint I should ask Eneko to taste the lentils before calling people to the table. Je devrais demander à Eneko qu'il goûte les lentilles avant d'appeler les gens à table. Debería pedirle a Eneko que pruebe las lentejas antes de llamar a la gente. Adarra jo aurretik Enekori dilistak dastatzeko esan beharko nioke.
238 cocina_cuerno_action4_say If I blow it here, people in the garden won't hear me. I should find a better place. Si je la sonne ici, les gens au potager ne vont pas m'entendre. Il faudrait trouver un meilleur endroit. Si lo toco aquí no me va a oir la gente que esté en la huerta, debería buscar un sitio mejor. Adarra hemen jotzen badut baratzean daudenek ez dute tutik ere entzungo. Leku hobe bat bilatu beharko dut.
304 cocina_ajo_action2_say A good head of garlic, just what I needed for good lentils. Une bonne tête d'ail, juste ce dont j'avais besoin pour de bonnes lentilles. Una buena cabeza de ajo, justo lo que necesitaba para unas buenas lentejas. Baratxuri oso bat, dilista goxo batzuk prestatzeko ezinbestekoa!
305 mechero_action1_say_1 My lighter, so good! Mon briquet, trop bien ! Mi mechero, que bien!! Nire txiskeroa, zeinen ongi!!
306 mechero_action1_say_2 Wait, I left it on the table for a minute and it disappeared. Attends, je l'ai laissé une minute sur la table et il a disparu. Ayer lo dejé un segundo encima de la mesa y desapareció. Atzo mahi gainean utzi eta desagertu egin zen.
307 mechero_action2_say Charge! Into the bag! A l'assaut ! A la saca! Barrura!
308 mechero_action3_say_1 It looks like it has no gas. On dirait qu'il n'a pas de gaz. Parece que no tiene gas. Ez zaio gasik gelditzen.
309 mechero_action3_say_2 That explains why it was abandoned. Ça explique qu'il ait été abandonné. Eso explica que lo hayan abandonado. Horregatik utzi dute hortik.
310 mechero_action3_say_3 If you come to Uli, watch your lighter. Si tu viens à Uli, fais gaffe à ton briquet. Si vienes a Uli vigila tu mechero. Ulira bazatoz zaindu zure txiskeroa.
317 olla_vacia_action3_romero_say First, I should fill the pot with water. D'abord, il faudrait que je remplisse la casserole d'eau. Primero debería llenar la olla de agua. Eltzea urez bete beharko nuke lehenik.
318 tooltip_olla_llena_action2 Scare the lentils Faire peur aux lentilles Asustar las lentejas Dilistak izutu
319 olla_llena_action2_say Booooooh!! Bouuuuuh !! Buuuuh!! Buuuuh!!
320 olla_llena_action2_say2 Krkrkrkrkr hehehe Krkrkrkrkr ji ji ji ji ji ji
321 olla_llena_action2_without_lentejas_say First, I need to put the lentils in the pot. D'abord, il faut que je mette les lentilles dans la casserole. Primero tengo que poner lentejas en la olla. Lehenik dilistak eltzean jarri behar ditut.
322 olla_llena_action1_say It's full of water. Elle est pleine d'eau. Está llena de agua Urez beteta dago
323 olla_llena_action1_lentejas_say lentils lentilles lentejas dilistak

View File

@@ -0,0 +1,28 @@
diff --git a/addons/escoria-core/game/esc_autoload.gd b/addons/escoria-core/game/esc_autoload.gd
index 6c3377dd..bebbe862 100644
--- a/addons/escoria-core/game/esc_autoload.gd
+++ b/addons/escoria-core/game/esc_autoload.gd
@@ -2,6 +2,15 @@ extends Node
## This is Escoria's singleton script.
## It holds accessors to some utils, such as Escoria's logger.
+## Signal sent when Escoria starts a new game[br]
+## [br]
+## #### Parameters[br]
+## [br]
+## None.
+## [br]
+signal new_game_started
+
+
## Signal sent when Escoria is paused[br]
## [br]
## #### Parameters[br]
@@ -221,6 +230,7 @@ func set_game_paused(p_paused: bool):
## Returns nothing.
func new_game():
get_escoria().new_game()
+ new_game_started.emit()
## Called from main menu's "quit" button.[br]
## [br]

View File

@@ -1,83 +0,0 @@
diff --git a/addons/escoria-core/game/core-scripts/esc/compiler/esc_interpreter_factory.gd b/addons/escoria-core/game/core-scripts/esc/compiler/esc_interpreter_factory.gd
index 4205f92d..26399e77 100644
--- a/addons/escoria-core/game/core-scripts/esc/compiler/esc_interpreter_factory.gd
+++ b/addons/escoria-core/game/core-scripts/esc/compiler/esc_interpreter_factory.gd
@@ -3,7 +3,7 @@ extends RefCounted
class_name ESCInterpreterFactory
-static var _interpreter: ESCInterpreter = null
+var _interpreter: ESCInterpreter = null
## Produces an interpreter as a singleton.[br]
@@ -15,7 +15,7 @@ static var _interpreter: ESCInterpreter = null
## #### Returns[br]
## [br]
## Returns a `ESCInterpreter` value. (`ESCInterpreter`)
-static func create_interpreter() -> ESCInterpreter:
+func create_interpreter() -> ESCInterpreter:
if not _interpreter:
_interpreter = load("res://addons/escoria-core/game/core-scripts/esc/compiler/esc_interpreter.gd").new(ESCCompiler.load_commands(), ESCCompiler.load_globals())
return _interpreter
@@ -25,7 +25,7 @@ static func create_interpreter() -> ESCInterpreter:
return _interpreter
-static func reset_interpreter() -> void:
+func reset_interpreter() -> void:
if is_instance_valid(_interpreter):
_interpreter.cleanup()
_interpreter = null
diff --git a/addons/escoria-core/game/core-scripts/esc/esc_action_manager.gd b/addons/escoria-core/game/core-scripts/esc/esc_action_manager.gd
index 28d867c3..d9f89017 100644
--- a/addons/escoria-core/game/core-scripts/esc/esc_action_manager.gd
+++ b/addons/escoria-core/game/core-scripts/esc/esc_action_manager.gd
@@ -726,7 +726,7 @@ func _telekinetic_applies_to(event: ESCGrammarStmts.Event) -> bool:
var tk_flag_condition = event.get_flags_with_conditions().get("TK")
if tk_flag_condition:
- var interpreter: ESCInterpreter = ESCInterpreterFactory.create_interpreter()
+ var interpreter: ESCInterpreter = escoria.interpreter_factory.create_interpreter()
var result = interpreter.look_up_global(tk_flag_condition.get_name())
diff --git a/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd b/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd
index c029f476..41536d39 100644
--- a/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd
+++ b/addons/escoria-core/game/core-scripts/esc/esc_compiler.gd
@@ -123,7 +123,7 @@ func _compiler_shim(source: String, filename: String = "", associated_global_id:
# Some static analysis
if not had_error and _run_script_analysis():
- var resolver: ESCResolver = ESCResolver.new(ESCInterpreterFactory.create_interpreter())
+ var resolver: ESCResolver = ESCResolver.new(escoria.interpreter_factory.create_interpreter())
resolver.resolve(parsed_statements)
if not filename.is_empty():
diff --git a/addons/escoria-core/game/core-scripts/esc/esc_event_manager.gd b/addons/escoria-core/game/core-scripts/esc/esc_event_manager.gd
index 78c992a0..6ee5381a 100644
--- a/addons/escoria-core/game/core-scripts/esc/esc_event_manager.gd
+++ b/addons/escoria-core/game/core-scripts/esc/esc_event_manager.gd
@@ -229,7 +229,7 @@ func _process(delta: float) -> void:
#var rc = _running_events[channel_name].run()
#escoria.interpreter.reset()
#var resolver: ESCResolver = ESCResolver.new(escoria.interpreter)
- var interpreter: ESCInterpreter = ESCInterpreterFactory.create_interpreter()
+ var interpreter: ESCInterpreter = escoria.interpreter_factory.create_interpreter()
var resolver: ESCResolver = ESCResolver.new(interpreter)
var event = _running_events[channel_name]
diff --git a/addons/escoria-core/game/core-scripts/esc/types/esc_statement.gd b/addons/escoria-core/game/core-scripts/esc/types/esc_statement.gd
index 1358239c..b91a3661 100644
--- a/addons/escoria-core/game/core-scripts/esc/types/esc_statement.gd
+++ b/addons/escoria-core/game/core-scripts/esc/types/esc_statement.gd
@@ -107,7 +107,7 @@ func is_valid() -> bool:
## Returns a `int` value. (`int`)
func run() -> int:
if parsed_statements.size() > 0:
- var interpreter = ESCInterpreterFactory.create_interpreter()
+ var interpreter = escoria.interpreter_factory.create_interpreter()
var resolver: ESCResolver = ESCResolver.new(interpreter)
resolver.resolve(parsed_statements)

View File

@@ -1,15 +0,0 @@
diff --git a/addons/escoria-core/game/core-scripts/esc/esc_inventory_manager.gd b/addons/escoria-core/game/core-scripts/esc/esc_inventory_manager.gd
index 7c550f2a..944aead7 100644
--- a/addons/escoria-core/game/core-scripts/esc/esc_inventory_manager.gd
+++ b/addons/escoria-core/game/core-scripts/esc/esc_inventory_manager.gd
@@ -16,7 +16,9 @@ class_name ESCInventoryManager
## [br]
## Returns a `bool` value. (`bool`)
func inventory_has(item: String) -> bool:
- return escoria.globals_manager.has("i/%s" % item)
+ if not escoria.globals_manager.has("i/%s" % item):
+ return false
+ return escoria.globals_manager.get_global("i/%s" % item)
## Retrieves all inventory items.[br]

View File

@@ -1,19 +0,0 @@
diff --git a/addons/escoria-core/game/core-scripts/esc_item.gd b/addons/escoria-core/game/core-scripts/esc_item.gd
index cbce2e51..3164579a 100644
--- a/addons/escoria-core/game/core-scripts/esc_item.gd
+++ b/addons/escoria-core/game/core-scripts/esc_item.gd
@@ -672,12 +672,12 @@ func get_animation_player() -> Node:
child is AnimationPlayer:
player_node_path = child.get_path()
if player_node_path.is_empty():
- ESCSafeLogging.log_warn(
+ ESCSafeLogging.log_debug(
self,
"Can not find animation_player or animated sprite for %s." % global_id
)
elif not has_node(player_node_path):
- ESCSafeLogging.log_warn(
+ ESCSafeLogging.log_debug(
self,
"Can not find animation_player node at path %s for %s." % [player_node_path, global_id]
)

View File

@@ -0,0 +1,17 @@
diff --git a/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd b/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd
index 18d4247d..f631a10b 100644
--- a/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd
+++ b/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd
@@ -293,3 +293,11 @@ func save_settings():
self,
"There was an issue writing settings %s" % save_path
)
+
+
+## Returns a custom setting by key or an optional default value. Returns null if not found and no default value is defined.
+func get_custom_setting(key: String, default_value = null):
+ if custom_settings.has(key):
+ return custom_settings.get(key)
+
+ return default_value
\ No newline at end of file

View File

@@ -1,28 +0,0 @@
diff --git a/addons/escoria-core/game/esc_inputs_manager.gd b/addons/escoria-core/game/esc_inputs_manager.gd
index 762da5ea..e2686e24 100644
--- a/addons/escoria-core/game/esc_inputs_manager.gd
+++ b/addons/escoria-core/game/esc_inputs_manager.gd
@@ -5,6 +5,9 @@
extends Resource
class_name ESCInputsManager
+## Emitted when input mode changes.
+signal input_mode_changed(new_mode)
+
## Valid input flags[br]
## * INPUT_ALL: All input is allowed[br]
@@ -27,7 +30,12 @@ const ESC_UI_PRIMARY_ACTION = "esc_ui_primary_action"
## The current input mode
-var input_mode = INPUT_ALL
+var input_mode = INPUT_ALL:
+ get:
+ return input_mode
+ set(new_mode):
+ input_mode = new_mode
+ input_mode_changed.emit(new_mode)
## A LIFO stack of hovered items
var hover_stack: HoverStack

View File

@@ -1,370 +0,0 @@
diff --git a/README.md b/README.md
index fd3d3e60..5e57540a 100644
--- a/README.md
+++ b/README.md
@@ -40,7 +40,10 @@ This is the demo game that acts as a testing ground for future Escoria developme
* “Mystical Ocean Puzzle Game” (Licence CC-BY 4.0)
by Eric Matyas
www.soundimage.org
-
+* "Ambient bird sounds"
+ License: CC0
+ [https://freesound.org/people/Garuda1982/sounds/691629/](https://freesound.org/people/Garuda1982/sounds/691629/)
+
## Cursors
* Pointers part 4 by "yd"
diff --git a/addons/escoria-core/buses/default_bus_layout.tres b/addons/escoria-core/buses/default_bus_layout.tres
index 6ff12e0a..90726934 100644
--- a/addons/escoria-core/buses/default_bus_layout.tres
+++ b/addons/escoria-core/buses/default_bus_layout.tres
@@ -19,3 +19,9 @@ bus/3/mute = false
bus/3/bypass_fx = false
bus/3/volume_db = 0.0
bus/3/send = &"Master"
+bus/4/name = &"Ambient"
+bus/4/solo = false
+bus/4/mute = false
+bus/4/bypass_fx = false
+bus/4/volume_db = 0.0
+bus/4/send = &"Master"
diff --git a/addons/escoria-core/game/core-scripts/esc/esc_object_manager.gd b/addons/escoria-core/game/core-scripts/esc/esc_object_manager.gd
index 8d1c7c1c..047fcabb 100644
--- a/addons/escoria-core/game/core-scripts/esc/esc_object_manager.gd
+++ b/addons/escoria-core/game/core-scripts/esc/esc_object_manager.gd
@@ -16,11 +16,15 @@ const SOUND = "_sound"
## Reserved speech player object.
const SPEECH = "_speech"
+## Reserved ambient player object.
+const AMBIENT = "_ambient"
+
## Array of objects that are reserved and automatically created when Escoria starts up.
const RESERVED_OBJECTS = [
MUSIC,
SOUND,
SPEECH,
+ AMBIENT,
]
@@ -489,7 +493,7 @@ func save_game(p_savegame: ESCSaveGame) -> void:
p_savegame.objects[room_obj.room_global_id] = room_objects_dict
- # Add in reserved objects (music, speech, sound), too.
+ # Add in reserved objects (music, speech, sound, ambient), too.
var reserved_objects: Dictionary = reserved_objects_container.objects
for obj_global_id in reserved_objects:
if not reserved_objects[obj_global_id] is ESCObject:
diff --git a/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd b/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd
index 76df48b1..64d3596b 100644
--- a/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd
+++ b/addons/escoria-core/game/core-scripts/esc/types/esc_object.gd
@@ -192,7 +192,7 @@ func get_save_data() -> Dictionary:
if self.node.has_method("get_custom_data"):
save_data["custom_data"] = self.node.get_custom_data()
- if self.global_id in ["_music", "_sound"] and self.node.get("state"):
+ if self.global_id in ["_music", "_sound", "_ambient"] and self.node.get("state"):
save_data["state"] = self.node.get("state")
save_data["playback_position"] = self.node.get_playback_position()
diff --git a/addons/escoria-core/game/core-scripts/save_data/esc_savesettings.gd b/addons/escoria-core/game/core-scripts/save_data/esc_savesettings.gd
index 9117d0ec..1df5a43e 100644
--- a/addons/escoria-core/game/core-scripts/save_data/esc_savesettings.gd
+++ b/addons/escoria-core/game/core-scripts/save_data/esc_savesettings.gd
@@ -37,6 +37,10 @@ class_name ESCSaveSettings
## Speech volume only.
@export var speech_volume: float = ProjectSettings.get_setting(
"escoria/sound/speech_volume")
+
+## Ambient volume only.
+@export var ambient_volume: float = ProjectSettings.get_setting(
+ "escoria/sound/ambient_volume")
## True if game has to be fullscreen.
@export var fullscreen: bool = ProjectSettings.get_setting(
diff --git a/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd b/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd
index 722f409e..23a9f855 100644
--- a/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd
+++ b/addons/escoria-core/game/core-scripts/save_data/esc_settings_manager.gd
@@ -77,6 +77,14 @@ func apply_settings() -> void:
)
)
)
+ AudioServer.set_bus_volume_db(
+ AudioServer.get_bus_index(escoria.BUS_AMBIENT),
+ linear_to_db(
+ ESCProjectSettingsManager.get_setting(
+ ESCProjectSettingsManager.AMBIENT_VOLUME
+ )
+ )
+ )
var mode = Window.MODE_EXCLUSIVE_FULLSCREEN if ESCProjectSettingsManager.get_setting(ESCProjectSettingsManager.FULLSCREEN) else Window.MODE_WINDOWED
DisplayServer.window_set_mode(mode)
@@ -130,6 +138,10 @@ func save_settings_resource_to_project_settings(settings: ESCSaveSettings):
ESCProjectSettingsManager.SPEECH_VOLUME,
settings.speech_volume
)
+ ESCProjectSettingsManager.set_setting(
+ ESCProjectSettingsManager.AMBIENT_VOLUME,
+ settings.ambient_volume
+ )
ESCProjectSettingsManager.set_setting(
ESCProjectSettingsManager.FULLSCREEN,
settings.fullscreen
@@ -196,6 +208,9 @@ func get_settings() -> ESCSaveSettings:
settings.speech_volume = ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.SPEECH_VOLUME
)
+ settings.ambient_volume = ESCProjectSettingsManager.get_setting(
+ ESCProjectSettingsManager.AMBIENT_VOLUME
+ )
settings.fullscreen = ESCProjectSettingsManager.get_setting(
ESCProjectSettingsManager.WINDOW_MODE
) in [DisplayServer.WINDOW_MODE_FULLSCREEN, DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN]
@@ -278,3 +293,10 @@ func save_settings():
self,
"There was an issue writing settings %s" % save_path
)
+
+## Returns a custom setting by key or an optional default value. Returns null if not found and no default value is defined.
+func get_custom_setting(key: String, default_value = null):
+ if custom_settings.has(key):
+ return custom_settings.get(key)
+
+ return default_value
\ No newline at end of file
diff --git a/addons/escoria-core/game/esc_autoload.gd b/addons/escoria-core/game/esc_autoload.gd
index 24b14687..1a224469 100644
--- a/addons/escoria-core/game/esc_autoload.gd
+++ b/addons/escoria-core/game/esc_autoload.gd
@@ -2,6 +2,14 @@ extends Node
## This is Escoria's singleton script.
## It holds accessors to some utils, such as Escoria's logger.
+## Signal sent when Escoria starts a new game[br]
+## [br]
+## #### Parameters[br]
+## [br]
+## None.
+## [br]
+signal new_game_started
+
## Signal sent when Escoria is paused[br]
## [br]
## #### Parameters[br]
@@ -45,6 +53,9 @@ const BUS_MUSIC = "Music"
## Speech audio bus
const BUS_SPEECH = "Speech"
+## Ambient sound audio bus
+const BUS_AMBIENT = "Ambient"
+
# Path to camera scene
const CAMERA_SCENE_PATH = "res://addons/escoria-core/game/scenes/camera_player/camera.tscn"
@@ -218,6 +229,7 @@ func set_game_paused(p_paused: bool):
## Returns nothing.
func new_game():
get_escoria().new_game()
+ new_game_started.emit()
## Called from main menu's "quit" button.[br]
## [br]
diff --git a/addons/escoria-core/game/esc_project_settings_manager.gd b/addons/escoria-core/game/esc_project_settings_manager.gd
index 1e0bee53..3a2b10be 100644
--- a/addons/escoria-core/game/esc_project_settings_manager.gd
+++ b/addons/escoria-core/game/esc_project_settings_manager.gd
@@ -89,6 +89,8 @@ const SPEECH_EXTENSION = _ESCORIA_SETTINGS_ROOT + "/" + _SOUND_ROOT + "/" + "spe
const SPEECH_FOLDER = _ESCORIA_SETTINGS_ROOT + "/" + _SOUND_ROOT + "/" + "speech_folder"
## Path to the speech volume setting.
const SPEECH_VOLUME = _ESCORIA_SETTINGS_ROOT + "/" + _SOUND_ROOT + "/" + "speech_volume"
+## Path to the ambient volume setting.
+const AMBIENT_VOLUME = _ESCORIA_SETTINGS_ROOT + "/" + _SOUND_ROOT + "/" + "ambient_volume"
## Platform-related Escoria project settings root.
const _PLATFORM_ROOT = "platform"
diff --git a/addons/escoria-core/game/main.tscn b/addons/escoria-core/game/main.tscn
index 66e7755b..60f548b5 100644
--- a/addons/escoria-core/game/main.tscn
+++ b/addons/escoria-core/game/main.tscn
@@ -1,10 +1,11 @@
-[gd_scene load_steps=6 format=3 uid="uid://dwlr0gu4erswn"]
+[gd_scene load_steps=7 format=3 uid="uid://dwlr0gu4erswn"]
[ext_resource type="Script" uid="uid://cgvex4ltwyld6" path="res://addons/escoria-core/game/main.gd" id="1"]
[ext_resource type="PackedScene" uid="uid://b0q36us3uuimq" path="res://addons/escoria-core/game/scenes/esc_prompt/esc_prompt_popup.tscn" id="2"]
[ext_resource type="PackedScene" uid="uid://c1txn45mpksqd" path="res://addons/escoria-core/game/scenes/sound/esc_music_player.tscn" id="3"]
[ext_resource type="PackedScene" uid="uid://uwqpnwjmp6aq" path="res://addons/escoria-core/game/scenes/sound/esc_sound_player.tscn" id="5"]
[ext_resource type="PackedScene" uid="uid://c8ecyitwga1dx" path="res://addons/escoria-core/game/scenes/sound/esc_speech_player.tscn" id="6"]
+[ext_resource type="PackedScene" uid="uid://wsdpiju6bxqd" path="res://addons/escoria-core/game/scenes/sound/esc_ambient_player.tscn" id="6_sy38t"]
[node name="main" type="Node"]
script = ExtResource("1")
@@ -41,3 +42,11 @@ layout_mode = 3
anchors_preset = 15
grow_horizontal = 2
grow_vertical = 2
+
+[node name="bg_ambient" parent="." instance=ExtResource("6_sy38t")]
+layout_mode = 3
+anchors_preset = 15
+offset_right = 0.0
+offset_bottom = 0.0
+grow_horizontal = 2
+grow_vertical = 2
diff --git a/addons/escoria-core/game/scenes/sound/esc_sound_player.gd b/addons/escoria-core/game/scenes/sound/esc_sound_player.gd
index 05f839a8..2a9fa64c 100644
--- a/addons/escoria-core/game/scenes/sound/esc_sound_player.gd
+++ b/addons/escoria-core/game/scenes/sound/esc_sound_player.gd
@@ -2,7 +2,7 @@
extends Control
class_name ESCSoundPlayer
-## Global id of the background sound player.
+## Global id of the sfx sound player.
@export var global_id: String = "_sound"
## The state of the sound player. "default" or "off" disable sound. Any other
diff --git a/addons/escoria-core/game/scenes/sound/esc_speech_player.gd b/addons/escoria-core/game/scenes/sound/esc_speech_player.gd
index 74e2ceb8..31fc6681 100644
--- a/addons/escoria-core/game/scenes/sound/esc_speech_player.gd
+++ b/addons/escoria-core/game/scenes/sound/esc_speech_player.gd
@@ -2,7 +2,7 @@
extends Control
class_name ESCSpeechPlayer
-## Global id of the background music player.
+## Global id of the speech player.
@export var global_id: String = "_speech"
## Reference to the audio player.
diff --git a/addons/escoria-core/ui_library/menus/options/options.gd b/addons/escoria-core/ui_library/menus/options/options.gd
index 2ba85861..32a97586 100644
--- a/addons/escoria-core/ui_library/menus/options/options.gd
+++ b/addons/escoria-core/ui_library/menus/options/options.gd
@@ -61,6 +61,7 @@ func initialize_options(p_settings):
_options.get_node("sound_volume").value = p_settings["sfx_volume"]
_options.get_node("music_volume").value = p_settings["music_volume"]
_options.get_node("speech_volume").value = p_settings["speech_volume"]
+ _options.get_node("ambient_volume").value = p_settings["ambient_volume"]
_options.get_node("fullscreen").set_pressed_no_signal(p_settings["fullscreen"])
@@ -142,6 +143,21 @@ func _on_speech_volume_value_changed(value: float) -> void:
escoria.settings_manager.apply_settings()
changed = true
+# Ambient volume was changed
+#
+# #### Parameters
+# - value: The new volume level
+func _on_ambient_volume_value_changed(value: float) -> void:
+ if ESCProjectSettingsManager.get_setting(
+ ESCProjectSettingsManager.AMBIENT_VOLUME
+ ) != value:
+ ESCProjectSettingsManager.set_setting(
+ ESCProjectSettingsManager.AMBIENT_VOLUME,
+ value
+ )
+ escoria.settings_manager.apply_settings()
+ changed = true
+
# Fullscreen was changed
#
diff --git a/addons/escoria-core/ui_library/menus/options/options.tscn b/addons/escoria-core/ui_library/menus/options/options.tscn
index cbcab577..133315cf 100644
--- a/addons/escoria-core/ui_library/menus/options/options.tscn
+++ b/addons/escoria-core/ui_library/menus/options/options.tscn
@@ -1,6 +1,6 @@
[gd_scene load_steps=3 format=3 uid="uid://bhcfnds3yy2yv"]
-[ext_resource type="Texture2D" uid="uid://gwy5bljr0ik1" path="res://addons/escoria-core/ui_library/menus/options/flags/de.png" id="1"]
+[ext_resource type="Texture2D" uid="uid://r6b3dp6ipv5k" path="res://addons/escoria-core/ui_library/menus/options/flags/de.png" id="1"]
[ext_resource type="Script" uid="uid://btyrwps5h2qn7" path="res://addons/escoria-core/ui_library/menus/options/options.gd" id="4"]
[node name="options" type="Control"]
@@ -98,6 +98,16 @@ step = 0.001
[node name="label6" type="Label" parent="VBoxContainer/MarginContainer/options"]
layout_mode = 2
+text = "AMBIENT_VOLUME"
+
+[node name="ambient_volume" type="HSlider" parent="VBoxContainer/MarginContainer/options"]
+layout_mode = 2
+size_flags_horizontal = 3
+max_value = 1.0
+step = 0.001
+
+[node name="label7" type="Label" parent="VBoxContainer/MarginContainer/options"]
+layout_mode = 2
text = "FULLSCREEN"
[node name="fullscreen" type="CheckBox" parent="VBoxContainer/MarginContainer/options"]
@@ -120,6 +130,7 @@ text = "APPLY"
[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/sound_volume" to="." method="_on_sound_volume_changed"]
[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/music_volume" to="." method="_on_music_volume_changed"]
[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/speech_volume" to="." method="_on_speech_volume_value_changed"]
+[connection signal="value_changed" from="VBoxContainer/MarginContainer/options/ambient_volume" to="." method="_on_ambient_volume_value_changed"]
[connection signal="toggled" from="VBoxContainer/MarginContainer/options/fullscreen" to="." method="_on_fullscreen_toggled"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/back" to="." method="_on_back_pressed"]
[connection signal="pressed" from="VBoxContainer/HBoxContainer/apply" to="." method="_on_apply_pressed"]
diff --git a/game/rooms/room04/esc/left_exit.esc b/game/rooms/room04/esc/left_exit.esc
index a5fe6648..bd0a2aa5 100644
--- a/game/rooms/room04/esc/left_exit.esc
+++ b/game/rooms/room04/esc/left_exit.esc
@@ -1,4 +1,5 @@
:exit_scene
+ stop_snd(_ambient)
change_scene("res://game/rooms/room03/room03.tscn")
:look
diff --git a/game/rooms/room04/esc/right_exit.esc b/game/rooms/room04/esc/right_exit.esc
index 20d5cd16..658ff435 100644
--- a/game/rooms/room04/esc/right_exit.esc
+++ b/game/rooms/room04/esc/right_exit.esc
@@ -1,2 +1,3 @@
:exit_scene
+ stop_snd(_ambient)
change_scene("res://game/rooms/room05/room05.tscn")
diff --git a/game/rooms/room04/esc/room04.esc b/game/rooms/room04/esc/room04.esc
index 6545739b..4e281146 100644
--- a/game/rooms/room04/esc/room04.esc
+++ b/game/rooms/room04/esc/room04.esc
@@ -1,6 +1,8 @@
:setup
global r4_door_look_count = 0
+ play_snd("res://game/sfx/sounds/birds_ambient_loop.ogg", _ambient)
+
if ESC_LAST_SCENE == "room3":
teleport($player, $l_exit)
# Set player look right
diff --git a/game/translations/main_menu.csv b/game/translations/main_menu.csv
index fae9a28a..9e51686f 100644
--- a/game/translations/main_menu.csv
+++ b/game/translations/main_menu.csv
@@ -11,6 +11,7 @@ GENERAL_VOLUME,General,Général,Allgemein,General
MUSIC_VOLUME,Music,Musique,Musik,Música
SOUND_VOLUME,Sound effects,Effets sonores,Soundeffekte,Efectos de sonido
SPEECH_VOLUME,Speech,Voix,Sprachausgabe,Voz
+AMBIENT_VOLUME,Ambient,Ambiance,Atmosphäre,Ambiente
FULLSCREEN,Fullscreen,Plein écran,Vollbild,Pantalla completa
CANCEL,Cancel,Annuler,Abbrechen,Cancelar
OK,OK,Ok,Ok,Ok
diff --git a/project.godot b/project.godot
index 742cd758..37462240 100644
--- a/project.godot
+++ b/project.godot
@@ -74,6 +74,7 @@ sound/sfx_volume=1
sound/speech_volume=1
sound/speech_folder="res://game/speech"
sound/speech_extension="ogg"
+sound/ambient_volume=1
platform/skip_cache=false
platform/skip_cache.mobile=true
sound/speech_enabled=1

View File

@@ -8,13 +8,13 @@ escoria_version = "1.0.0"
game_version = "Local"
name = "post-intro"
date = {
"day": 9,
"day": 12,
"dst": false,
"hour": 14,
"minute": 27,
"hour": 0,
"minute": 22,
"month": 11,
"second": 30,
"weekday": 0,
"second": 58,
"weekday": 3,
"year": 2025
}
main = {
@@ -50,16 +50,10 @@ globals = {
}
inventory = ["turno_cocina_frontal", "turno_cocina_libro_de_cocina"]
objects = {
"_ambient": {
"active": true,
"interactive": true,
"playback_position": 4.716553,
"state": "res://gymkhana/sounds/birds_ambient_loop.ogg"
},
"_music": {
"active": true,
"interactive": true,
"playback_position": 7.9789567,
"playback_position": 9.395374,
"state": "res://gymkhana/sounds/pause_menu_loop.ogg"
},
"_sound": {
@@ -260,7 +254,7 @@ settings = {
"custom_settings": {
"clear_text_by_click_only": false,
"slow_text_mode": false,
"video_subtitles": false
"video_subtitles": true
},
"escoria_version": "1.0.0",
"fullscreen": false,
@@ -269,7 +263,7 @@ settings = {
"sfx_volume": 1.0,
"speech_enabled": true,
"speech_volume": 1.0,
"text_lang": "es",
"text_lang": "en",
"voice_lang": "es_ES"
}
custom_data = {

View File

@@ -8,13 +8,13 @@ escoria_version = "1.0.0"
game_version = "Local"
name = "con ajo"
date = {
"day": 2,
"day": 12,
"dst": false,
"hour": 2,
"minute": 32,
"hour": 0,
"minute": 28,
"month": 11,
"second": 33,
"weekday": 0,
"second": 52,
"weekday": 3,
"year": 2025
}
main = {
@@ -23,7 +23,6 @@ main = {
}
globals = {
"ESC_CURRENT_SCENE": "cocina_delante",
"ESC_DIALOG_CHOSEN_OPTION": "Ya he hecho las lentejas!",
"ESC_LAST_SCENE": "cocina",
"FORCE_LAST_SCENE_NULL": false,
"_COUNT_turno_cocina_patata": 4,
@@ -40,12 +39,13 @@ globals = {
"turno_cocina_carton_encendido_picked": true,
"turno_cocina_carton_picked": true,
"turno_cocina_cocina_gas_encendida": false,
"turno_cocina_cuchillo_en_su_sitio": false,
"turno_cocina_cuchillo_picked": true,
"turno_cocina_cuerno_picked": true,
"turno_cocina_economica_con_madera": true,
"turno_cocina_economica_con_olla": true,
"turno_cocina_economica_encendida": true,
"turno_cocina_eneko_cata_ok": false,
"turno_cocina_eneko_cata_ok": true,
"turno_cocina_eneko_catando": false,
"turno_cocina_frontal_debajo_sofa": true,
"turno_cocina_frontal_entregado": false,
@@ -56,7 +56,6 @@ globals = {
"turno_cocina_ingrediente_patatas": true,
"turno_cocina_ingrediente_romero": false,
"turno_cocina_libro_de_cocina_picked": true,
"turno_cocina_libro_leido_count": 0.0,
"turno_cocina_madera_picked": true,
"turno_cocina_mechero_picked": true,
"turno_cocina_mikel_played_times": 0.0,
@@ -76,17 +75,11 @@ globals = {
}
inventory = ["turno_cocina_cuchillo", "turno_cocina_cuerno", "turno_cocina_frontal", "turno_cocina_libro_de_cocina", "turno_cocina_mechero", "turno_cocina_pegatina"]
objects = {
"_ambient": {
"active": true,
"interactive": true,
"playback_position": 7.0617685,
"state": "res://gymkhana/sounds/birds_ambient_loop.ogg"
},
"_music": {
"active": true,
"interactive": true,
"playback_position": 9.000635,
"state": "res://gymkhana/sounds/intro_menu_loop.ogg"
"playback_position": 7.6190476,
"state": "res://gymkhana/sounds/pause_menu_loop.ogg"
},
"_sound": {
"active": true,
@@ -112,7 +105,7 @@ objects = {
"interactive": true,
"state": "default"
},
"turno_cocina_bol_lentejas": {
"turno_cocina_carton_encendido": {
"active": true,
"custom_data": {
"tooltips": {
@@ -139,20 +132,30 @@ objects = {
"interactive": true,
"state": "default"
},
"turno_cocina_frontal": {
"active": true,
"turno_cocina_mechero": {
"active": false,
"custom_data": {
"tooltips": {
"action3": "tooltip_frontal_action3",
"action4": "tooltip_frontal_action4"
"action1": "tooltip_common_look",
"action2": "tooltip_common_pick",
"action3": "tooltip_common_look",
"action4": "tooltip_common_use"
}
},
"interactive": true,
"state": "default"
},
"turno_cocina_mechero": {
"active": true,
"turno_cocina_olla_vacia": {
"active": false,
"custom_data": {
"target_tooltips": {
"action3": {
"turno_cocina_ajo": "tooltip_turno_cocina_olla_vacia_action3_drop_in",
"turno_cocina_bol_lentejas": "tooltip_turno_cocina_olla_vacia_action3_drop_in",
"turno_cocina_patata": "tooltip_turno_cocina_olla_vacia_action3_drop_in",
"turno_cocina_romero": "tooltip_turno_cocina_olla_vacia_action3_drop_in"
}
},
"tooltips": {
"action1": "tooltip_common_look",
"action2": "tooltip_common_pick",
@@ -166,6 +169,7 @@ objects = {
"turno_cocina_patata": {
"active": true,
"custom_data": {
"count": 4,
"count_textures": [{
"start": 1,
"texture": "res://gymkhana/items/assets/turno_cocina_patata.png"
@@ -194,16 +198,6 @@ objects = {
},
"interactive": true,
"state": "default"
},
"turno_cocina_peso_usado": {
"active": true,
"custom_data": {
"tooltips": {
"action3": "tooltip_common_look"
}
},
"interactive": true,
"state": "default"
}
},
"cocina_delante": {
@@ -284,10 +278,10 @@ objects = {
"player": {
"active": true,
"custom_data": {},
"global_transform": Transform2D(0.85431373, 0, 0, 0.85431373, 716, 473),
"global_transform": Transform2D(0.96705884, 0, 0, 0.96705884, 677.6001, 541.60004),
"interactive": false,
"last_deg": 71,
"last_dir": 4,
"last_deg": 21,
"last_dir": 3,
"state": "idle_down"
},
"puerta_cocina_start": {
@@ -365,6 +359,17 @@ objects = {
"interactive": true,
"state": "default"
},
"turno_cocina_frontal": {
"active": true,
"custom_data": {
"tooltips": {
"action3": "tooltip_frontal_action3",
"action4": "tooltip_frontal_action4"
}
},
"interactive": true,
"state": "default"
},
"turno_cocina_libro_de_cocina": {
"active": false,
"custom_data": {
@@ -391,6 +396,27 @@ objects = {
"interactive": true,
"state": "default"
},
"turno_cocina_patata_grande": {
"active": false,
"custom_data": {
"target_tooltips": {
"action3": {
"turno_cocina_cuchillo": "tooltip_turno_cocina_patata_grande_action3_turno_cocina_cuchillo"
},
"action4": {
"turno_cocina_cuchillo": "tooltip_turno_cocina_patata_grande_action4_turno_cocina_cuchillo"
}
},
"tooltips": {
"action1": "tooltip_common_look",
"action2": "tooltip_turno_cocina_patata_grande_action2",
"action3": "tooltip_common_look",
"action4": "tooltip_common_use"
}
},
"interactive": true,
"state": "default"
},
"turno_cocina_pegatina": {
"active": true,
"custom_data": {
@@ -400,6 +426,93 @@ objects = {
},
"interactive": true,
"state": "default"
},
"turno_cocina_peso": {
"active": false,
"custom_data": {
"target_tooltips": {
"action3": {
"turno_cocina_bol": "tooltip_cocina_peso_action3_bol"
}
},
"tooltips": {
"action1": "tooltip_common_whats_this",
"action2": "tooltip_common_pick",
"action3": "tooltip_common_look",
"action4": "tooltip_common_use"
}
},
"interactive": true,
"state": "default"
}
},
"cocina_detras": {
"turno_cocina_carton": {
"active": false,
"custom_data": {
"target_tooltips": {
"action3": {
"turno_cocina_mechero": "tooltip_turno_cocina_carton_action3_turno_cocina_mechero"
}
},
"tooltips": {
"action1": "tooltip_common_look",
"action2": "tooltip_common_pick",
"action3": "tooltip_common_look",
"action4": "tooltip_common_use"
}
},
"interactive": true,
"state": "default"
},
"turno_cocina_madera": {
"active": false,
"custom_data": {
"tooltips": {
"action1": "tooltip_cocina_delante_madera_action1",
"action2": "tooltip_cocina_delante_madera_action2",
"action3": "tooltip_common_look",
"action4": "tooltip_common_use"
}
},
"interactive": true,
"state": "default"
}
},
"despensa": {
"turno_cocina_bol_lentejas": {
"active": true,
"custom_data": {
"tooltips": {
"action3": "tooltip_common_look",
"action4": "tooltip_common_use"
}
},
"interactive": true,
"state": "default"
},
"turno_cocina_peso_bol": {
"active": true,
"custom_data": {
"tooltips": {
"action1": "tooltip_common_whats_this",
"action2": "tooltip_common_pick",
"action3": "tooltip_common_look",
"action4": "tooltip_common_use"
}
},
"interactive": true,
"state": "default"
},
"turno_cocina_peso_usado": {
"active": true,
"custom_data": {
"tooltips": {
"action3": "tooltip_common_look"
}
},
"interactive": true,
"state": "default"
}
}
}
@@ -415,17 +528,17 @@ settings = {
"custom_settings": {
"clear_text_by_click_only": false,
"slow_text_mode": false,
"video_subtitles": false
"video_subtitles": true
},
"escoria_version": "1.0.0",
"fullscreen": false,
"master_volume": 0.35,
"music_volume": 1.0,
"master_volume": 1.0,
"music_volume": 0.35,
"sfx_volume": 1.0,
"speech_enabled": true,
"speech_volume": 1.0,
"text_lang": "es",
"voice_lang": "fr_FR"
"text_lang": "en",
"voice_lang": "es_ES"
}
custom_data = {
"ui_type": "rtmi-ui"