Compare commits
15 Commits
release/1.
...
2252a80bb9
| Author | SHA1 | Date | |
|---|---|---|---|
| 2252a80bb9 | |||
| 29c9cd4828 | |||
| 6d426fe4fb | |||
| e5259f500f | |||
| d99320fcc8 | |||
| 44d838fedf | |||
| 8e0f13a10c | |||
| 8aacb4b615 | |||
| 990acac845 | |||
| af6ae3e137 | |||
| 72f2d1b091 | |||
| 7f380e7ccd | |||
| cfe374f350 | |||
| 93f2651889 | |||
| acc55fb462 |
@@ -36,3 +36,4 @@ jobs:
|
||||
build/**/*.appimage
|
||||
build/**/*.tar.gz
|
||||
build/**/*.zip
|
||||
build/**/*.exe
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
## Development
|
||||
- Oier
|
||||
- Eneko
|
||||
|
||||
## Collaborations
|
||||
- Pico
|
||||
- Miette
|
||||
- Niko
|
||||
- Urtzi
|
||||
1977
CHANGELOG.md
1977
CHANGELOG.md
File diff suppressed because it is too large
Load Diff
@@ -1,83 +0,0 @@
|
||||
Subject: [PATCH] feat(deploy): Itch.io publishing. #203
|
||||
---
|
||||
Index: .gitea/workflows/push-release.yml
|
||||
IDEA additional info:
|
||||
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
|
||||
<+>UTF-8
|
||||
===================================================================
|
||||
diff --git a/.gitea/workflows/push-release.yml b/.gitea/workflows/push-release.yml
|
||||
--- a/.gitea/workflows/push-release.yml (revision 1c1f32e2aa839ccf963326d88f5f21bb3085ba1d)
|
||||
+++ b/.gitea/workflows/push-release.yml (revision 8d2907c071001995b91dc6234ec511729fd49137)
|
||||
@@ -34,16 +34,6 @@
|
||||
files: |
|
||||
build/**/*.appimage
|
||||
build/**/*.tar.gz
|
||||
- - name: Publish AMD to itch.io
|
||||
- uses: yeslayla/butler-publish-itchio-action@master
|
||||
- env:
|
||||
- BUTLER_CREDENTIALS: ${{ secrets.BUTLER_API_KEY }}
|
||||
- CHANNEL: linux
|
||||
- PACKAGE: build/debug/amd64/*.appimage
|
||||
- - name: Publish ARM to itch.io
|
||||
- uses: yeslayla/butler-publish-itchio-action@master
|
||||
- env:
|
||||
- BUTLER_CREDENTIALS: ${{ secrets.BUTLER_API_KEY }}
|
||||
- CHANNEL: linux
|
||||
- PACKAGE: build/debug/arm64/*.appimage
|
||||
- VERSION_FILE: build/version.txt
|
||||
\ No newline at end of file
|
||||
+ - name: Publishing
|
||||
+ run: |
|
||||
+ ./publish.sh
|
||||
\ No newline at end of file
|
||||
Index: bash_colors.sh
|
||||
===================================================================
|
||||
diff --git a/bash_colors.sh b/bash_colors.sh
|
||||
new file mode 100644
|
||||
--- /dev/null (revision 8d2907c071001995b91dc6234ec511729fd49137)
|
||||
+++ b/bash_colors.sh (revision 8d2907c071001995b91dc6234ec511729fd49137)
|
||||
@@ -0,0 +1,6 @@
|
||||
+NOCOLOR='\033[0m' # No Color
|
||||
+BLUE='\e[34m' # BrightBlue
|
||||
+BOLD_BLUE='\033[1;94m' # BrightBlue
|
||||
+GREEN='\e[49;32m' # Green
|
||||
+ORANGE='\033[1;33m'
|
||||
+RED='\033[1;31m'
|
||||
\ No newline at end of file
|
||||
Index: publish.sh
|
||||
===================================================================
|
||||
diff --git a/publish.sh b/publish.sh
|
||||
new file mode 100644
|
||||
--- /dev/null (revision 8d2907c071001995b91dc6234ec511729fd49137)
|
||||
+++ b/publish.sh (revision 8d2907c071001995b91dc6234ec511729fd49137)
|
||||
@@ -0,0 +1,29 @@
|
||||
+#!/bin/bash
|
||||
+source bash_colors.sh
|
||||
+
|
||||
+ITCHIO_ENABLED=true
|
||||
+
|
||||
+VERSION=`cat build/version.txt`
|
||||
+echo -e "Publishing ${GREEN}v${VERSION}${NOCOLOR}"
|
||||
+
|
||||
+# Publish to Itch.io
|
||||
+if [ "$ITCHIO_ENABLED" = true ] ; then
|
||||
+ echo -e "${BLUE}Publishing to Itch.io${NOCOLOR}"
|
||||
+ if ! command -v butler >/dev/null 2>&1
|
||||
+ then
|
||||
+ echo -e "${RED}butler could not be found. Aborting!${NOCOLOR}"
|
||||
+ exit 1
|
||||
+ fi
|
||||
+
|
||||
+
|
||||
+
|
||||
+ echo -e "${ORANGE}Publishing AMD64${NOCOLOR}"
|
||||
+ butler push build/debug/amd64/LasGymkhanikasDeUli--debug.x86_64.appimage uliwood/las-gymkhanikas-de-uli-turno-cocina:linux-amd64 --userversion $VERSION
|
||||
+
|
||||
+ echo -e "${ORANGE}Publishing ARM64${NOCOLOR}"
|
||||
+ butler push build/debug/arm64/LasGymkhanikasDeUli--debug.arm_64.appimage uliwood/las-gymkhanikas-de-uli-turno-cocina:linux-arm64 --userversion $VERSION
|
||||
+
|
||||
+
|
||||
+ else
|
||||
+ echo -e "${ORANGE}Itch.io not enabled.{NOCOLOR}"
|
||||
+fi
|
||||
\ No newline at end of file
|
||||
@@ -42,7 +42,7 @@ layout_mode = 2
|
||||
custom_minimum_size = Vector2(0, 50)
|
||||
layout_mode = 2
|
||||
theme_override_font_sizes/normal_font_size = 16
|
||||
text = "Consigue todos los logros para obtener una puntuación perfecta."
|
||||
text = "ACHIEVEMENTS_MENU_NOTE"
|
||||
vertical_alignment = 1
|
||||
|
||||
[node name="Back" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
|
||||
|
||||
@@ -73,22 +73,12 @@ func get_scores(collection: String) -> Array[RTMIScoreRow]:
|
||||
|
||||
func submit_score(collection: String, name: String, time: int) -> bool:
|
||||
var hash = ("%s_%s_%s_%s" % [collection, name, time, score_submit_key]).sha256_text()
|
||||
var request_data: String = (
|
||||
JSON
|
||||
. new()
|
||||
. stringify(
|
||||
{
|
||||
"collectionId": collection,
|
||||
"score":
|
||||
{
|
||||
"name": name,
|
||||
"time": time,
|
||||
},
|
||||
"hash": hash
|
||||
}
|
||||
)
|
||||
)
|
||||
var response_data = await _score_http_request(http_requests[SUBMIT], score_submit_url, HTTPClient.METHOD_POST, request_data)
|
||||
var url = "%s/%s/%s/%s/%s" % [score_submit_url, collection, name.uri_encode(), time, hash]
|
||||
var response_data = await _score_http_request(http_requests[SUBMIT], url)
|
||||
|
||||
if response_data == null:
|
||||
push_error("Error submitting score: response data is null")
|
||||
return false
|
||||
|
||||
if not response_data.success:
|
||||
push_error("Error submitting score: error=%s" % response_data.errorMsg)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -9,7 +9,7 @@ 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/777.patch"
|
||||
)
|
||||
|
||||
PROJECT_PATH=$PWD
|
||||
@@ -44,7 +44,7 @@ echo -e "${BLUE}Applying remote patches...${NOCOLOR}"
|
||||
echo -e ==========================
|
||||
for REMOTE_PATCH in "${REMOTE_PATCHES[@]}"; do
|
||||
echo -e "Patch: ${ORANGE}$REMOTE_PATCH${NOCOLOR}"
|
||||
curl $REMOTE_PATCH | git apply -v --index
|
||||
curl $REMOTE_PATCH | git apply -v --reject --index
|
||||
done
|
||||
|
||||
echo -e
|
||||
@@ -52,9 +52,14 @@ echo -e "${BLUE}Applying local patches...${NOCOLOR}"
|
||||
echo -e ==========================
|
||||
for FILE in $PROJECT_PATH/patches/*; do
|
||||
echo -e "Patch: ${ORANGE}$FILE${NOCOLOR}"
|
||||
git apply -v --index $FILE
|
||||
git apply -v --reject --index $FILE
|
||||
done
|
||||
|
||||
|
||||
echo -e
|
||||
echo -e "${BLUE}Rejected files...${NOCOLOR}"
|
||||
echo -e ==========================
|
||||
find -name "*.rej"
|
||||
|
||||
popd > /dev/null
|
||||
echo -e "${BLUE}Done!🎉${NOCOLOR}"
|
||||
@@ -169,7 +169,7 @@ variant/thread_support=true
|
||||
vram_texture_compression/for_desktop=true
|
||||
vram_texture_compression/for_mobile=false
|
||||
html/export_icon=true
|
||||
html/custom_html_shell=""
|
||||
html/custom_html_shell="res://platform/web/full-size.html"
|
||||
html/head_include=""
|
||||
html/canvas_resize_policy=2
|
||||
html/focus_canvas_on_start=true
|
||||
|
||||
@@ -12,7 +12,7 @@ Leo
|
||||
Piko
|
||||
|
||||
|
||||
Encuentros de música Uli 2023
|
||||
Uli Music Fest 2023
|
||||
|
||||
|
||||
Bazyl
|
||||
@@ -21,8 +21,8 @@ Chloe
|
||||
Mateo
|
||||
|
||||
|
||||
A Uli por existir
|
||||
Al grupo de rol por aguantar la espera
|
||||
A Ron Gilbert por crear Monkey Island
|
||||
A la comunidad detrás de Godot y Escoria
|
||||
por hacer posible este juego
|
||||
To Uli for existing
|
||||
To the role-playing group for enduring the wait
|
||||
To Ron Gilbert for creating Monkey Island
|
||||
To the community behind Godot and Escoria
|
||||
for making this game possible
|
||||
@@ -21,8 +21,8 @@ Chloe
|
||||
Mateo
|
||||
|
||||
|
||||
A Uli por existir
|
||||
Al grupo de rol por aguantar la espera
|
||||
A Ron Gilbert por crear Monkey Island
|
||||
A la comunidad detrás de Godot y Escoria
|
||||
por hacer posible este juego
|
||||
Uli d'exister
|
||||
Au groupe de jeu de rôle pour sa patience
|
||||
À Ron Gilbert, créateur de Monkey Island
|
||||
À la communauté de Godot et Escoria
|
||||
pour avoir rendu ce jeu possible
|
||||
@@ -1,24 +1,24 @@
|
||||
CREADO POR
|
||||
CREATED BY
|
||||
|
||||
|
||||
|
||||
COLABORACIONES
|
||||
COLLABORATIONS
|
||||
|
||||
|
||||
|
||||
|
||||
CÁMARA
|
||||
CAMERA
|
||||
|
||||
|
||||
|
||||
|
||||
MÚSICA
|
||||
MUSIC
|
||||
|
||||
|
||||
GENTE HAMBRIENTA
|
||||
HUNGRY PEOPLE
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
AGRADECIMIENTOS
|
||||
THANKS
|
||||
@@ -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,10 +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","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."
|
||||
"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."
|
||||
|
@@ -74,14 +74,14 @@
|
||||
"tips_eneko_porfa_7_res","I'm losing patience.","Je perds patience.","Me estoy empezando a cansar.","Aspertzen hasia naiz."
|
||||
"tips_eneko_porfa_8","Please with cream?","Steuplè à la crème ?","¿Porfa please recubierto de nata?","Bitxilorezko super mese hiper mesedez?"
|
||||
"tips_eneko_porfa_8_res","Alright, big baby.","C'est bon, gros bébé cadum.","Vale, llorica.","Ados, negarti alena!"
|
||||
"tips_eneko_porfa_8_res2","If you want I'll help you, but if you like challenges and adventures you shouldn't use these aids.","","Si quieres te ayudo, pero si te gustan los retos y las aventuras no deberías usar estas ayudas.","Nahi izatekotan lagunduko zaitut, baina erronkak eta abenturak gustoko badituzu, ez zenituzke laguntza hauek erabili behar."
|
||||
"tips_eneko_porfa_8_res2","If you want I'll help you, but if you like challenges and adventures you shouldn't use these aids.","Je peux vous aider si vous le souhaitez, mais si vous aimez les défis et les aventures, vous ne devriez pas utiliser ces aides.","Si quieres te ayudo, pero si te gustan los retos y las aventuras no deberías usar estas ayudas.","Nahi izatekotan lagunduko zaitut, baina erronkak eta abenturak gustoko badituzu, ez zenituzke laguntza hauek erabili behar."
|
||||
"tips_eneko_porfa_break","I can see you don't want to help me. If I don't make it, it'll be your fault.","Je vois bien que tu veux pas m'aider. Si je n'y arrive pas, ce sera ta faute.","Ya veo que no me quieres ayudar. Si no lo consigo será por tu culpa.","Agerikoa da ez didazula lagundu nahi. Ez badut lortzen zure errua izango da."
|
||||
"tips_eneko_porfa_break_res","Oh yeah, what a shame.","Ah ouais hein, quel dommage.","Ya ves tú que pena.","A ze pena, niri bost axola."
|
||||
"tips_eneko_spoiler_confirmation","Are you sure you want me to give you the solution? This action is [b]IRREVERSIBLE[/b].","","¿Tienes claro que quieres que te dé la solución? Esta acción es [b]IRREVERSIBLE[/b].","Seguru zaude soluzioa ematea nahi duzula? Ekintza hau eta gero [b]EZIN DA ATZERA EGIN[/b]."
|
||||
"tips_eneko_spoiler_confirmation_yes_spoiler","SPOILER ALERT - Yes, I can't think of anything else and I'm bored.","","SPOILER ALERT - Sí, no se me ocurre nada más y me aburro.","SPOILER ALERT - Bai, ez zait beste ezer bururatzen eta aspertzen hasi naiz."
|
||||
"tips_eneko_spoiler_confirmation_yes_super_spoiler","SUPER SPOILER ALERT - Yes, I can't think of anything else and I'm bored.","","SUPER SPOILER ALERT - Sí, no se me ocurre nada más y me aburro.","SUPER SPOILER ALERT - Bai, ez zait beste ezer bururatzen eta aspertzen hasi naiz."
|
||||
"tips_eneko_spoiler_confirmation_yes","Yes, I can't think of anything else and I'm bored.","","Sí, no se me ocurre nada más y me aburro.","Bai, ez zait beste ezer bururatzen eta aspertzen hasi naiz."
|
||||
"tips_eneko_spoiler_confirmation_no","No, I want to try a little more.","","No, quiero intentarlo un poco más.","Ez, pixka bat gehiago saiatu nahi dut."
|
||||
"tips_eneko_spoiler_confirmation","Are you sure you want me to give you the solution? This action is [b]IRREVERSIBLE[/b].","Êtes-vous sûr de vouloir que je vous donne la solution ? Cette action est [b]IRRÉVERSIBLE[/b].","¿Tienes claro que quieres que te dé la solución? Esta acción es [b]IRREVERSIBLE[/b].","Seguru zaude soluzioa ematea nahi duzula? Ekintza hau eta gero [b]EZIN DA ATZERA EGIN[/b]."
|
||||
"tips_eneko_spoiler_confirmation_yes_spoiler","SPOILER ALERT - Yes, I can't think of anything else and I'm bored.","ATTENTION SPOILER - Oui, je ne vois rien d'autre et je m'ennuie.","SPOILER ALERT - Sí, no se me ocurre nada más y me aburro.","SPOILER ALERT - Bai, ez zait beste ezer bururatzen eta aspertzen hasi naiz."
|
||||
"tips_eneko_spoiler_confirmation_yes_super_spoiler","SUPER SPOILER ALERT - Yes, I can't think of anything else and I'm bored.","ATTENTION SPOILER ! - Oui, je ne vois rien d'autre et je m'ennuie.","SUPER SPOILER ALERT - Sí, no se me ocurre nada más y me aburro.","SUPER SPOILER ALERT - Bai, ez zait beste ezer bururatzen eta aspertzen hasi naiz."
|
||||
"tips_eneko_spoiler_confirmation_yes","Yes, I can't think of anything else and I'm bored.","Oui, je ne vois rien d'autre et je m'ennuie.","Sí, no se me ocurre nada más y me aburro.","Bai, ez zait beste ezer bururatzen eta aspertzen hasi naiz."
|
||||
"tips_eneko_spoiler_confirmation_no","No, I want to try a little more.","Non, je veux essayer encore un peu.","No, quiero intentarlo un poco más.","Ez, pixka bat gehiago saiatu nahi dut."
|
||||
"tips_eneko_patata_grande_0","What do I do with the big potato?","Je fais quoi de la grande patate ?","¿Qué hago con la patata grande?","Zer egin dezaket patata handiarekin?"
|
||||
"tips_eneko_patata_grande_0_res","It's a potato twice as big as a medium potato.","C'est une patate deux fois plus grande qu'une moyenne patate.","Es una patata el doble de grande que una patata mediana.","Patatetako bat ertainen bikoitza da."
|
||||
"tips_eneko_patata_grande_1","I need more help with the big potato.","J'ai besoin de plus d'aide avec la grande patate.","Necesito más ayuda con la patata grande.","Laguntza gehiago behar dut patata handiarekin."
|
||||
@@ -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."
|
||||
@@ -241,11 +241,11 @@
|
||||
"cocina_libro_de_cocina_action2_say_2","I've kept the book in the inventory. You'll find it at the bottom left of the screen.","J'ai gardé le livre dans l'inventaire. Tu le trouveras en bas à gauche de l'écran.","He guardado el libro en el inventario. Lo verás más abajo a la izquierda de la pantalla.","Liburua inbentarioan gorde dut. Pantailaren azpiko ezker aldean aurkituko duzu."
|
||||
"cocina_libro_de_cocina_action2_say_3","Some inventory items can be combined with each other to be used. Remember that, you'll need it later.","Certains objets de l'inventaire peuvent se combiner entre eux pour être utilisés. Souviens-t-en, tu en auras besoin plus tard.","Algunos objetos del inventario pueden combinarse entre ellos usándolos. Acuérdate más tarde, te hará falta.","Inbentarioko gauza batzuk haien artean konbinatu daitezke. Ez ahaztu, gero beharko duzu eta."
|
||||
"cocina_libro_de_cocina_action2_say_4","For now, reading the recipe book will be enough.","Pour le moment, lire le livre de recette ce sera suffisant.","Por ahora, con leer el libro de recetas bastará.","Oraingoz errezeta liburua irakurtzearekin aski."
|
||||
"cocina_libro_de_cocina_intro_action3_1","\"Shrimp carpaccio garnished with black lumpfish roe\"","« Carpaccio de crevettes garni d'œufs de lompe noire »","'Carpaccio de gambas aderezadas con huevas de lumpo negras'","'Izkira Carpaccioa shiitake perretxiko eta makadamia saltsan'"
|
||||
"cocina_libro_de_cocina_intro_action3_1","'Shrimp carpaccio garnished with black lumpfish roe'","« Carpaccio de crevettes garni d'œufs de lompe noire »","'Carpaccio de gambas aderezadas con huevas de lumpo negras'","'Izkira Carpaccioa shiitake perretxiko eta makadamia saltsan'"
|
||||
"cocina_libro_de_cocina_intro_action3_2","No, too simple and vulgar.","Non, trop simple et vulgaire.","Hmm no, es demasiado sencillo y vulgar.","Errazegia, gaur plater berezi bat nahi dut, ez eguneroko zerbait."
|
||||
"cocina_libro_de_cocina_intro_action3_3","\"Fried egg\"","« Œuf sur le plat »","'Huevo frito'","'Arrautza frijitua'"
|
||||
"cocina_libro_de_cocina_intro_action3_3","'Fried egg'","« Œuf sur le plat »","'Huevo frito'","'Arrautza frijitua'"
|
||||
"cocina_libro_de_cocina_intro_action3_4","Hmph, too complicated.","Humpf, trop compliqué.","Uff, demasiado complicado.","Ufff, zailegia."
|
||||
"cocina_libro_de_cocina_intro_action3_5","\"Lentils, potatoes\"","« Lentilles, patates »","'Lentejas con patatas'","'Dilistak patatekin'"
|
||||
"cocina_libro_de_cocina_intro_action3_5","'Lentils, potatoes'","« Lentilles, patates »","'Lentejas con patatas'","'Dilistak patatekin'"
|
||||
"cocina_libro_de_cocina_intro_action3_6","Lentils! I'm going to make lentils!!","Des lentilles ! Je vais faire des lentilles !!","Lentejas! Uuh, voy a hacer lentejas!!","Dilistak! Dilistak prestatuko ditut!!"
|
||||
"cocina_libro_de_cocina_intro_action3_7","Healthy and nutritious, they contain more iron than spinach.","Saines et nutritives, elles contiennent plus de fer que les épinards.","Sanas y nutritivas, tienen más hierro que las espinacas.","Osasuntsu eta elikagarriak, hiltzeek baina burni gehiagorekin gainera."
|
||||
"cocina_libro_de_cocina_intro_action3_8","And what's more, they're delicious!","Et qui plus est, elles sont délicieuses !","Y además están riquísimas!","Oso goxoak daude gainera!"
|
||||
@@ -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"
|
||||
@@ -338,7 +338,7 @@
|
||||
"olla_llena_action3_patata_enough_say","Here come the potatoes!","En avant les patates !","Patatas pa'entro","Patatak barrura!"
|
||||
"olla_llena_action3_romero_say","With rosemary, these lentils will be succulent!","Avec le romarin, ces lentilles vont être succulentes !","Con romero estas lentejas van a estar de rechupete!","Erromeroarekin dilista hauek mundialak egongo dira!"
|
||||
"olla_llena_action3_ajo_say","With garlic it will be to Eneko's taste","Avec l'ail ça sera au goût d'Eneko","Con ajo quedará al gusto de Eneko.","Baratxuriarekin Enekori gustatzen zaizkion bezala egongo dira."
|
||||
"pegatina_action3_say_1","\"Only the people save the people\"","« Seul le peuple sauve le peuple »","'Solo el pueblo salva al pueblo'","'Herriak bakarrik salba dezake Herria'"
|
||||
"pegatina_action3_say_1","'Only the people save the people'","« Seul le peuple sauve le peuple »","'Solo el pueblo salva al pueblo'","'Herriak bakarrik salba dezake Herria'"
|
||||
"pegatina_action3_say_2","These stickers are so beautiful. It was worth taking the risk.","Ces stickers sont tellement beaux. Ça valait la peine de prendre le risque.","Que pegatina más guapa, ha valido la pena correr el riesgo.","Ze pegatina polita, hartzeko arriskatzeak merezi izan du."
|
||||
"patata_action3_one_say","I need three more potatoes.","Il me faut trois autres patates.","Tengo que conseguir tres patatas más.","Beste hiru patata lortu behar ditut."
|
||||
"patata_action3_two_say","I already have {_COUNT_turno_cocina_patata} potatoes!","J'ai déjà {_COUNT_turno_cocina_patata} patates !","Ya tengo {_COUNT_turno_cocina_patata} patatas!","{_COUNT_turno_cocina_patata} lortu ditut jada!"
|
||||
@@ -358,9 +358,9 @@
|
||||
"tooltip_turno_cocina_romero_action3_turno_cocina_libro_de_cocina","Search for ingredients","Chercher des ingrédients","Buscar ingredientes","Osagaiak bilatu"
|
||||
"cocina_detras_romero_action3_libro_de_cocina_say","This plant looks like rosemary. According to the recipe book, it's the secret to getting delicious lentils!","Cette plante ressemble à du romarin. Selon le lire de recette, c'est le secret pour obtenir de délicieuses lentilles !","Esta planta parece romero. ¡Según el libro de recetas es el secreto para conseguir unas lentejas riquísimas!","Landare honek erromeroa dirudi, liburu honen arabera, dilistarik onenak prestatzeko osagai sekretua da!"
|
||||
"cocina_detras_romero_action3_libro_de_cocina_say2","I'm going to take a bit to put in the food.","Je vais en prendre un peu pour en mettre dans la nourriture.","Voy a coger un poco para echarle a la comida.","Bazkariari botatzeko pixka bat jasoko dut."
|
||||
"tooltip_despensa_bidon_cntr_action1_after_look","Look at the lentil container","","Mirar bidón con lentejas","Dilisten bidoia miatu"
|
||||
"tooltip_despensa_bidon_cntr_action1_after_look","Look at the lentil container","Regardez le récipient à lentilles","Mirar bidón con lentejas","Dilisten bidoia miatu"
|
||||
"despensa_bidon_cntr_action1_say","There are a lot of lentils.","Il y a beaucoup de lentilles.","Hay muchas lentejas.","Dilista pila bat dago."
|
||||
"tooltip_despensa_bidon_cntr_action2_after_look","Take lentils","","Coger lentejas","Dilistak hartu"
|
||||
"tooltip_despensa_bidon_cntr_action2_after_look","Take lentils","Prenez des lentilles","Coger lentejas","Dilistak hartu"
|
||||
"despensa_bidon_cntr_action2_say","I need to take them with something.","Il faut que je les prenne avec quelque chose.","Necesito cogerlas con algo.","Zerbaitekin hartu behar ditut."
|
||||
"despensa_bidon_cntr_action3_bol_say","I don't want to make lentils for a whole regiment. I should take the right amount.","Je ne veux pas faire des lentilles pour tout un régiment. Il faudrait que j'en prenne la juste quantité.","No quiero hacer lentejas para un ejercito, debería coger la cantidad justa.","Ez ditut armada batentzako bezainbeste prestatu nahi, zenbat hartzen ditudan neurtu beharko nuke."
|
||||
"despensa_bidon_cntr_action3_peso_say","The scale is missing a container to put the lentils in.","Il manque un récipient à la balance pour mettre les lentilles.","Al peso le falta un recipiente donde poner las lentejas.","Pisuari ontzi bat falta zaio dilistak jartzeko."
|
||||
@@ -450,34 +450,34 @@
|
||||
"cocina_delante_pegatinas_eneko_smoking_1","Hey! Don't even think about touching them.","Eh ! Penses même pas à les toucher.","Eh! Ni se te ocurra tocarlas.","Argi ibili, ezta pentsatu ere!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_2","Hey! Watch out, I know how many there are.","Eh ! Attention, je sais combien y en a.","Eh! Cuidado que las tengo contadas.","Banan banan zenbatu ditut, ez zaitez hurbildu!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_3","Hey! Don't insist!","Eh ! Insistes pas !","Eh! No insistas!","Ezetz esan dizut!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_2","Stop trying! That's 2 attempts.","Arrête d'essayer ! Ça fait 2 que tu essaies.","Deja de intentarlo! Llevas ya 2 intentos!","Ez zaitez tematu, 2 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_5","Stop trying! That's 5 attempts.","Arrête d'essayer ! Ça fait 5 que tu essaies.","Deja de intentarlo! Llevas ya 5 intentos!","Ez zaitez tematu, 5 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_10","Stop trying! That's 10 attempts.","Arrête d'essayer ! Ça fait 10 que tu essaies.","Deja de intentarlo! Llevas ya 10 intentos!","Ez zaitez tematu, 10 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_20","Stop trying! That's 20 attempts.","Arrête d'essayer ! Ça fait 20 que tu essaies.","Deja de intentarlo! Llevas ya 20 intentos!","Ez zaitez tematu, 20 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_100","Stop trying! That's 100 attempts.","Arrête d'essayer ! Ça fait 100 que tu essaies.","Deja de intentarlo! Llevas ya 100 intentos!","Ez zaitez tematu, 100 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_2","Stop trying! That's 2 attempts.","Arrête d'essayer ! Ça fait 2 fois que tu essaies.","Deja de intentarlo! Llevas ya 2 intentos!","Ez zaitez tematu, 2 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_5","Stop trying! That's 5 attempts.","Arrête d'essayer ! Ça fait 5 fois que tu essaies.","Deja de intentarlo! Llevas ya 5 intentos!","Ez zaitez tematu, 5 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_10","Stop trying! That's 10 attempts.","Arrête d'essayer ! Ça fait 10 fois que tu essaies.","Deja de intentarlo! Llevas ya 10 intentos!","Ez zaitez tematu, 10 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_20","Stop trying! That's 20 attempts.","Arrête d'essayer ! Ça fait 20 fois que tu essaies.","Deja de intentarlo! Llevas ya 20 intentos!","Ez zaitez tematu, 20 aldiz saiatu zara!"
|
||||
"cocina_delante_pegatinas_eneko_smoking_count_100","Stop trying! That's 100 attempts.","Arrête d'essayer ! Ça fait 100 fois que tu essaies.","Deja de intentarlo! Llevas ya 100 intentos!","Ez zaitez tematu, 100 aldiz saiatu zara!"
|
||||
"cocina_ordenador_action1_say","It's Uli's computer. They use it to go on the internet, talk via Element or play music.","C'est l'ordinateur d'Uli. On l'utilise pour aller sur internet, se parler par Element ou mettre de la musique.","Es el ordenador de Uli. Lo usan para navegar, comunicarse con Element y poner música.","Uliko ordenagailua da. Nabigatzeko, Element bidez mezuak bidaltzeko eta musika entzuteko erabiltzen dute."
|
||||
"cocina_ordenador_action2_say","Let's see what songs it has...","","A ver que canciones tiene...","Ea ze abesti dauzkan..."
|
||||
"cocina_ordenador_action2_say","Let's see what songs it has...","Voyons voir quelles chansons il contient...","A ver que canciones tiene...","Ea ze abesti dauzkan..."
|
||||
"turno_cocina_bandera_palestina_action1","Which side are you on?","Tu es de quel coté ?","¿De qué lado estas?","Zu noren alde zaude?"
|
||||
"turno_cocina_bandera_palestina_action2","A bit of history","Un peu d'Histoire","Un poco de historia",""
|
||||
"turno_cocina_bandera_palestina_action1_say","When a people suffers a genocide, neutrality does not exist. You must choose which side you are on.","Lorsqu'un peuple souffre d'un génocide, la neutralité n'existe pas. Tu dois choisir de quel coté tu es.","Mientras un pueblo está sufriendo un genocidio, no existe la neutralidad, tienes que decidir de que lado estas. ",""
|
||||
"turno_cocina_bandera_palestina_action2_say_1","The occupation of Palestine did not begin on October 7, 2023, but with the proclamation of the State of Israel in 1948.","","La ocupación de Palestina no empezó el 7 de octubre de 2023 si no con la proclamación del Estado de Israel en 1948.",""
|
||||
"turno_cocina_bandera_palestina_action2_say_2","Since the attacks of October 7, 2023, Israel has carried out a military offensive that, according to Amnesty International and other organizations, meets the elements of the crime of genocide against the Palestinian population of Gaza.","","Desde los ataques del 7 de octubre de 2023, Israel ha llevado a cabo una ofensiva militar que según Amnistía Internacional y otras organizaciones, reúne los elementos del crimen de genocidio contra la población palestina de Gaza.",""
|
||||
"turno_cocina_bandera_palestina_action2_say_3","The deliberate actions – mass killings, forced displacements, blockade of access to food, water and medicine – and the dehumanizing rhetoric of the Israeli authorities demonstrate an intention to destroy totally or partially the Palestinian people.","","Las acciones deliberadas –asesinatos masivos, desplazamientos forzados, bloqueo del acceso a alimentos, agua y medicinas– y la retórica deshumanizadora de las autoridades israelíes demuestran una intención de destruir total o parcialmente al pueblo palestino.",""
|
||||
"turno_cocina_bandera_palestina_action2_say_4","Israel's impunity in the face of international resolutions perpetuates the occupation, apartheid and genocide against the Palestinian population.","","La impunidad de Israel frente a las resoluciones internacionales perpetúa la ocupación, el apartheid y el genocidio contra la población palestina.",""
|
||||
"achievement_ordenado_title","Things in their place","","Las cosas a su sitio",""
|
||||
"achievement_coleccionista_title","Sticker collector","","Coleccionista de pegatinas",""
|
||||
"achievement_amenazas_title","Violent threats","","Amenazas violentas",""
|
||||
"achievement_gourmet_title","Great gourmet","","Gran gourmet",""
|
||||
"achievement_chistes_title","Bad jokes","","Chistes malos",""
|
||||
"achievement_musica_title","Music lover","","Amante de la música",""
|
||||
"achievement_palestina_title","Free Palestine!","","Palestina libre!",""
|
||||
"achievement_hambrientas_title","Hungry people","","Gente hambrienta","Gosetiak"
|
||||
"turno_cocina_creditos_score_1","Congratulations! Save your score so everyone can see it.","","Enhorabuena! Guarda tu puntuación, para que todo el mundo la vea.",""
|
||||
"turno_cocina_creditos_score_2","If you get all the achievements you'll enter the perfect scores list.","","Si consigues todos los logros entrarás en la lista de puntuaciones perfectas.",""
|
||||
"turno_cocina_creditos_score_3","For now we're putting you on the mediocre list.","","Por ahora te apuntamos en la lista de mediocres.",""
|
||||
"turno_cocina_creditos_perfect_score_oier_1","Perfect!","","Perfect!",""
|
||||
"turno_cocina_creditos_perfect_score_oier_2","Perfect!","","Perfect!",""
|
||||
"turno_cocina_creditos_perfect_score_oier_3","Perfect!","","Perfect!",""
|
||||
"turno_cocina_creditos_perfect_score_eneko_1","Perfect!","","Perfect!",""
|
||||
"turno_cocina_creditos_perfect_score_eneko_2","Perfect!","","Perfect!",""
|
||||
"turno_cocina_creditos_perfect_score_eneko_3","Perfect!","","Perfect!",""
|
||||
"turno_cocina_bandera_palestina_action2","A bit of history","Un peu d'Histoire","Un poco de historia","Historia pixka bat"
|
||||
"turno_cocina_bandera_palestina_action1_say","When a people suffers a genocide, neutrality does not exist. You must choose which side you are on.","Lorsqu'un peuple souffre d'un génocide, la neutralité n'existe pas. Tu dois choisir de quel coté tu es.","Mientras un pueblo está sufriendo un genocidio, no existe la neutralidad, tienes que decidir de que lado estas.","Herri batek genozidio bat jasaten duen bitartean, ez dago neutralitaterik, zein aldetan zauden erabaki behar duzu."
|
||||
"turno_cocina_bandera_palestina_action2_say_1","The occupation of Palestine did not begin on October 7, 2023, but with the proclamation of the State of Israel in 1948.","L'occupation de la Palestine n'a pas commencé le 7 octobre 2023, mais avec la proclamation de l’État d’Israël en 1948.","La ocupación de Palestina no empezó el 7 de octubre de 2023 si no con la proclamación del Estado de Israel en 1948.","Palestinaren okupazioa ez zen 2023ko urriaren 7an hasi, baizik eta 1948an Israelgo Estatua aldarrikatu zenean."
|
||||
"turno_cocina_bandera_palestina_action2_say_2","Since the attacks of October 7, 2023, Israel has carried out a military offensive that, according to Amnesty International and other organizations, meets the elements of the crime of genocide against the Palestinian population of Gaza.","Depuis les attaques du 7 octobre 2023, Israël a mené une offensive militaire qui, selon Amnesty International et d'autres organisations, remplit les critères du crime de génocide contre la population palestinienne de Gaza.","Desde los ataques del 7 de octubre de 2023, Israel ha llevado a cabo una ofensiva militar que según Amnistía Internacional y otras organizaciones, reúne los elementos del crimen de genocidio contra la población palestina de Gaza.","2023ko urriaren 7tik aurrera Israelek egindako eraso militarrek, Amnistia Internazionalaren eta beste erakunde askoren arabera, Gazako palestinar biztanleriaren aurkako genozidio krimenaren irizpideak betetzen dituzte."
|
||||
"turno_cocina_bandera_palestina_action2_say_3","The deliberate actions; mass killings, forced displacements, blockade of access to food, water and medicine and the dehumanizing rhetoric of the Israeli authorities demonstrate an intention to destroy totally or partially the Palestinian people.","Les actions délibérées – massacres, déplacements forcés, blocage de l’accès à la nourriture, à l’eau et aux médicaments – et la rhétorique déshumanisante des autorités israéliennes démontrent une intention de détruire totalement ou partiellement le peuple palestinien.","Las acciones deliberadas –asesinatos masivos, desplazamientos forzados, bloqueo del acceso a alimentos, agua y medicinas– y la retórica deshumanizadora de las autoridades israelíes demuestran una intención de destruir total o parcialmente al pueblo palestino.","Israelgo agintarien nahitako ekintzek –hilketa masiboak, lekualdatze behartuak, janari, ur eta sendagaietarako sarbidea blokeatzea– eta gizagabetzearen erretorikek palestinar herria erabat edo partzialki suntsitzeko asmoa erakusten dute."
|
||||
"turno_cocina_bandera_palestina_action2_say_4","Israel's impunity in the face of international resolutions perpetuates the occupation, apartheid and genocide against the Palestinian population.","L’impunité d’Israël face aux résolutions internationales perpétue l’occupation, l’apartheid et le génocide contre la population palestinienne.","La impunidad de Israel frente a las resoluciones internacionales perpetúa la ocupación, el apartheid y el genocidio contra la población palestina.","Nazioarteko ebazpenen aurrean Israelen zigorgabetasunak okupazioa, apartheida eta genozidioa iraunarazten dute Palestinako biztanleriaren aurka."
|
||||
"achievement_ordenado_title","Things in their place","Chaque chose à sa place.","Las cosas a su sitio","Gauzak bere lekura"
|
||||
"achievement_coleccionista_title","Sticker collector","Collectionneur de stickers","Coleccionista de pegatinas","Pegatinazalea"
|
||||
"achievement_amenazas_title","Violent threats","Menaces violentes","Amenazas violentas","Mehatxu bortitzak"
|
||||
"achievement_gourmet_title","Great gourmet","Grand gourmet","Gran gourmet","Gourmet bikaina"
|
||||
"achievement_chistes_title","Bad jokes","Mauvaises blagues","Chistes malos","Txiste txarrak"
|
||||
"achievement_musica_title","Music lover","Mélomane","Amante de la música","Musikazale amorratua"
|
||||
"achievement_palestina_title","Free Palestine!","Palestine libre","Palestina libre!","Palestina askatu!"
|
||||
"achievement_hambrientas_title","Hungry people","Les affamés","Gente hambrienta","Gosetiak"
|
||||
"turno_cocina_creditos_score_1","Congratulations! Save your score so everyone can see it.","Félicitations ! Enregistre ton score pour que tout le monde puisse le voir.","Enhorabuena! Guarda tu puntuación, para que todo el mundo la vea.","Zorionak! Gorde zure puntuazioa denek ikus dezaten."
|
||||
"turno_cocina_creditos_score_2","If you get all the achievements you'll enter the perfect scores list.","Si tu atteins tous les objectifs, tu figurerera dans la liste des scores parfaits.","Si consigues todos los logros entrarás en la lista de puntuaciones perfectas.","Lorpen guztiak lortzen badituzu, puntuazio perfektuen zerrendan sartuko zara."
|
||||
"turno_cocina_creditos_score_3","For now we're putting you on the mediocre list.","Pour le moment, tu es placé sur la liste des médiocres.","Por ahora te apuntamos en la lista de mediocres.","Oraingoz, erdipurdikoen zerdan sartuko zaitugu."
|
||||
"turno_cocina_creditos_perfect_score_oier_1","Perfect!","Parfait!","Perfect!","Perfekt!"
|
||||
"turno_cocina_creditos_perfect_score_oier_2","Perfect!","Parfait!","Perfect!","Perfekt!"
|
||||
"turno_cocina_creditos_perfect_score_oier_3","Perfect!","Parfait!","Perfect!","Perfekt!"
|
||||
"turno_cocina_creditos_perfect_score_eneko_1","Perfect!","Parfait!","Perfect!","Perfekt!"
|
||||
"turno_cocina_creditos_perfect_score_eneko_2","Perfect!","Parfait!","Perfect!","Perfekt!"
|
||||
"turno_cocina_creditos_perfect_score_eneko_3","Perfect!","Parfait!","Perfect!","Perfekt!"
|
||||
|
Can't render this file because it contains an unexpected character in line 244 and column 44.
|
17
gymkhana/videos/turno_cocina/cuerno_antes_de_tiempo.en.srt
Normal file
17
gymkhana/videos/turno_cocina/cuerno_antes_de_tiempo.en.srt
Normal file
@@ -0,0 +1,17 @@
|
||||
1
|
||||
00:00:00,712 --> 00:00:06,763
|
||||
MULTITUD: We want to eat, we want to eat, we want to eat!
|
||||
|
||||
2
|
||||
00:00:07,031 --> 00:00:11,073
|
||||
<font color=#957d45>The food isn't ready.</font>
|
||||
|
||||
3
|
||||
00:00:11,152 --> 00:00:15,853
|
||||
<font color=#957d45>Come back later, come back later. The food isn't ready yet.</font>
|
||||
MULTITUD: Oh no, oh no, the food.
|
||||
|
||||
4
|
||||
00:00:15,889 --> 00:00:20,201
|
||||
<font color=#957d45>But you're heartless. How could you do this to the little ones?</font>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://ddsqfg7ekv8cx
|
||||
8
gymkhana/videos/turno_cocina/eneko_entra_cocina.en.srt
Normal file
8
gymkhana/videos/turno_cocina/eneko_entra_cocina.en.srt
Normal file
@@ -0,0 +1,8 @@
|
||||
1
|
||||
00:00:02,397 --> 00:00:04,288
|
||||
<font color=#52a94d>Hey, I've already made the lentils.</font>
|
||||
|
||||
2
|
||||
00:00:04,721 --> 00:00:08,754
|
||||
<font color=#957d45>It's about time. Come on, let's see if they're edible, I'm going to try them.</font>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://bxvgexeyj6lhr
|
||||
8
gymkhana/videos/turno_cocina/eneko_sale_le_gusta.en.srt
Normal file
8
gymkhana/videos/turno_cocina/eneko_sale_le_gusta.en.srt
Normal file
@@ -0,0 +1,8 @@
|
||||
1
|
||||
00:00:03,804 --> 00:00:07,517
|
||||
<font color=#957d45>Let's just say they're acceptable. I think we'll be able to eat.</font>
|
||||
|
||||
2
|
||||
00:00:07,766 --> 00:00:10,324
|
||||
<font color=#957d45>Tell people to come.</font>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://bi22xj8ifv8jo
|
||||
@@ -0,0 +1,20 @@
|
||||
1
|
||||
00:00:01,201 --> 00:00:02,866
|
||||
<font color=#957d45>They're delicious!</font>
|
||||
|
||||
2
|
||||
00:00:03,458 --> 00:00:05,395
|
||||
<font color=#957d45>Wow! How did you do that?</font>
|
||||
|
||||
3
|
||||
00:00:05,473 --> 00:00:07,925
|
||||
<font color=#957d45>Thank you so much, they're just like my grandmother's.</font>
|
||||
|
||||
4
|
||||
00:00:09,471 --> 00:00:10,514
|
||||
<font color=#52a94d>Me alegro.</font>
|
||||
|
||||
5
|
||||
00:00:10,614 --> 00:00:11,508
|
||||
<font color=#957d45>Glad to hear it.</font>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://0w4abq8gqim3
|
||||
12
gymkhana/videos/turno_cocina/eneko_sale_no_le_gusta.en.srt
Normal file
12
gymkhana/videos/turno_cocina/eneko_sale_no_le_gusta.en.srt
Normal file
@@ -0,0 +1,12 @@
|
||||
1
|
||||
00:00:02,268 --> 00:00:03,762
|
||||
<font color=#957d45>But what is that concoction?</font>
|
||||
|
||||
2
|
||||
00:00:04,075 --> 00:00:05,736
|
||||
<font color=#957d45>You can do something about that now.</font>
|
||||
|
||||
3
|
||||
00:00:05,772 --> 00:00:08,095
|
||||
<font color=#957d45>Fix it, we're not going to eat it like this.</font>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://bbcaeg6acu050
|
||||
@@ -1,16 +1,16 @@
|
||||
1
|
||||
00:00:36,712 --> 00:00:37,512
|
||||
<font color=#52a94d>¡Buenos días! EN</font>
|
||||
<font color=#52a94d>Good morning!</font>
|
||||
|
||||
2
|
||||
00:00:38,035 --> 00:00:39,443
|
||||
<font color=#52a94d>Qué bien se duerme en este pueblo. EN</font>
|
||||
<font color=#52a94d>You sleep so well in this town.</font>
|
||||
|
||||
3
|
||||
00:00:39,716 --> 00:00:42,383
|
||||
<font color=#957d45>Mira tú, el señorito se ha dignado a aparecer. EN</font>
|
||||
<font color=#957d45>Look at that, the young master has deigned to appear.</font>
|
||||
|
||||
4
|
||||
00:00:43,127 --> 00:00:46,657
|
||||
<font color=#957d45>¿Vas a hacer algo de provecho o te vas a pasar toda la mañana fumando porros? EN</font>
|
||||
<font color=#957d45>Are you going to do something productive or are you going to spend all morning smoking joints?</font>
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
1
|
||||
00:00:00,712 --> 00:00:01,962
|
||||
<font color=#52a94d>Your money or your life!</font>
|
||||
|
||||
2
|
||||
00:00:02,780 --> 00:00:04,850
|
||||
<font color=#957d45>What are you doing? Knives are not toys.</font>
|
||||
|
||||
3
|
||||
00:00:04,860 --> 00:00:06,504
|
||||
<font color=#957d45>Give me this, because I don't trust you one bit.</font>
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
uid://d02auemdvu28e
|
||||
4
gymkhana/videos/turno_cocina/oier_moja_el_pan.en.srt
Normal file
4
gymkhana/videos/turno_cocina/oier_moja_el_pan.en.srt
Normal file
@@ -0,0 +1,4 @@
|
||||
1
|
||||
00:00:04,381 --> 00:00:05,312
|
||||
<font color=#52a94d>What a mess!</font>
|
||||
|
||||
1
gymkhana/videos/turno_cocina/oier_moja_el_pan.en.srt.uid
Normal file
1
gymkhana/videos/turno_cocina/oier_moja_el_pan.en.srt.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://b1al1gk73dsck
|
||||
@@ -1,22 +0,0 @@
|
||||
diff --git a/addons/escoria-core/game/esc_autoload.gd b/addons/escoria-core/game/esc_autoload.gd
|
||||
index 4044fecc..be413109 100644
|
||||
--- a/addons/escoria-core/game/esc_autoload.gd
|
||||
+++ b/addons/escoria-core/game/esc_autoload.gd
|
||||
@@ -8,6 +8,9 @@ signal paused
|
||||
## Signal sent when Escoria is resumed from pause
|
||||
signal resumed
|
||||
|
||||
+## Signal sent when escoria starts a new game
|
||||
+signal new_game_started
|
||||
+
|
||||
## Current game state.[br]
|
||||
## * DEFAULT: Common game function[br]
|
||||
## * DIALOG: Game is playing a dialog[br]
|
||||
@@ -182,6 +185,7 @@ func set_game_paused(p_paused: bool):
|
||||
## Called from main menu's "new game" button.
|
||||
func new_game():
|
||||
get_escoria().new_game()
|
||||
+ new_game_started.emit()
|
||||
|
||||
## Called from main menu's "quit" button.
|
||||
func quit():
|
||||
@@ -1,26 +1,28 @@
|
||||
diff --git a/addons/escoria-core/game/core-scripts/esc/types/esc_dialog_option.gd b/addons/escoria-core/game/core-scripts/esc/types/esc_dialog_option.gd
|
||||
index bb4dd65b..92fb0e01 100644
|
||||
index e3701e59..9b9f390d 100644
|
||||
--- a/addons/escoria-core/game/core-scripts/esc/types/esc_dialog_option.gd
|
||||
+++ b/addons/escoria-core/game/core-scripts/esc/types/esc_dialog_option.gd
|
||||
@@ -5,9 +5,15 @@ extends ESCStatement
|
||||
@@ -4,11 +4,15 @@
|
||||
extends ESCStatement
|
||||
class_name ESCDialogOption
|
||||
|
||||
|
||||
-
|
||||
+var _option: String
|
||||
## Option text displayed in the HUD.
|
||||
var option: String:
|
||||
- get = get_translated_option
|
||||
-
|
||||
+ get:
|
||||
+ return get_translated_option()
|
||||
+ set(value):
|
||||
+ _option = value
|
||||
+ option = value
|
||||
+
|
||||
|
||||
+
|
||||
## Maps back to the parsed source option.
|
||||
var source_option
|
||||
@@ -22,8 +28,8 @@ var _is_valid: bool:
|
||||
## default text is returned.
|
||||
|
||||
@@ -29,8 +33,8 @@ var _is_valid: bool:
|
||||
## Returns the translated version of the option, if one exists; otherwise, the default text is returned. (`String`)
|
||||
func get_translated_option() -> String:
|
||||
# Check if text has a key
|
||||
- if ":" in option:
|
||||
@@ -30,14 +32,13 @@ index bb4dd65b..92fb0e01 100644
|
||||
var key = splitted_text[0]
|
||||
var translated_text = tr(key)
|
||||
|
||||
@@ -33,7 +39,15 @@ func get_translated_option() -> String:
|
||||
@@ -40,7 +44,14 @@ func get_translated_option() -> String:
|
||||
if splitted_text.size() > 1:
|
||||
return splitted_text[1]
|
||||
|
||||
- return option
|
||||
+ return _option
|
||||
+
|
||||
+
|
||||
+func get_translation_id() -> String:
|
||||
+ if ":" in _option:
|
||||
+ var splitted_text = _option.split(":")
|
||||
@@ -46,4 +47,4 @@ index bb4dd65b..92fb0e01 100644
|
||||
+ return _option
|
||||
|
||||
|
||||
## Checks if conditions match for this dialog option.[br]
|
||||
## Whether this dialog option is valid. Note: this value isn't currently used as part of any meaningful validation checks.[br]
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
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 8e62f95e..bdb82e28 100644
|
||||
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,11 +3,11 @@ extends RefCounted
|
||||
@@ -3,7 +3,7 @@ extends RefCounted
|
||||
class_name ESCInterpreterFactory
|
||||
|
||||
|
||||
@@ -10,13 +10,17 @@ index 8e62f95e..bdb82e28 100644
|
||||
+var _interpreter: ESCInterpreter = null
|
||||
|
||||
|
||||
## Produces an interpreter as a singleton.
|
||||
## 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
|
||||
@@ -17,7 +17,7 @@ static func create_interpreter() -> ESCInterpreter:
|
||||
@@ -25,7 +25,7 @@ static func create_interpreter() -> ESCInterpreter:
|
||||
return _interpreter
|
||||
|
||||
|
||||
@@ -26,10 +30,10 @@ index 8e62f95e..bdb82e28 100644
|
||||
_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 f541a172..27fe7a77 100644
|
||||
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
|
||||
@@ -650,7 +650,7 @@ func _telekinetic_applies_to(event: ESCGrammarStmts.Event) -> bool:
|
||||
@@ -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:
|
||||
@@ -39,10 +43,10 @@ index f541a172..27fe7a77 100644
|
||||
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 e18bd512..aaaef9e6 100644
|
||||
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
|
||||
@@ -101,7 +101,7 @@ func _compiler_shim(source: String, filename: String = "", associated_global_id:
|
||||
@@ -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():
|
||||
@@ -52,10 +56,10 @@ index e18bd512..aaaef9e6 100644
|
||||
|
||||
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 2928a238..d6309c48 100644
|
||||
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
|
||||
@@ -174,7 +174,7 @@ func _process(delta: float) -> void:
|
||||
@@ -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)
|
||||
@@ -65,11 +69,11 @@ index 2928a238..d6309c48 100644
|
||||
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 0e05d94b..7b5a0fff 100644
|
||||
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
|
||||
@@ -69,7 +69,7 @@ func is_valid() -> bool:
|
||||
## *Returns* The return code of the statement.
|
||||
@@ -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()
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
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 4bb19343..fa8b939b 100644
|
||||
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
|
||||
@@ -11,7 +11,9 @@ class_name ESCInventoryManager
|
||||
@@ -16,7 +16,9 @@ class_name ESCInventoryManager
|
||||
## [br]
|
||||
## **Returns** Whether the player has the inventory.
|
||||
## 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):
|
||||
@@ -12,4 +12,4 @@ index 4bb19343..fa8b939b 100644
|
||||
+ return escoria.globals_manager.get_global("i/%s" % item)
|
||||
|
||||
|
||||
## Get all inventory items.[br]
|
||||
## Retrieves all inventory items.[br]
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
diff --git a/addons/escoria-core/game/core-scripts/esc_item.gd b/addons/escoria-core/game/core-scripts/esc_item.gd
|
||||
index 383c7d64..60a313ab 100644
|
||||
index cbce2e51..3164579a 100644
|
||||
--- a/addons/escoria-core/game/core-scripts/esc_item.gd
|
||||
+++ b/addons/escoria-core/game/core-scripts/esc_item.gd
|
||||
@@ -578,12 +578,12 @@ func get_animation_player() -> Node:
|
||||
@@ -672,12 +672,12 @@ func get_animation_player() -> Node:
|
||||
child is AnimationPlayer:
|
||||
player_node_path = child.get_path()
|
||||
if player_node_path.is_empty():
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
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 26463b49..29dac83e 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
|
||||
@@ -236,3 +236,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
|
||||
@@ -1,21 +1,21 @@
|
||||
diff --git a/addons/escoria-core/game/esc_inputs_manager.gd b/addons/escoria-core/game/esc_inputs_manager.gd
|
||||
index c24588eb..b4b8a85d 100644
|
||||
index 762da5ea..e2686e24 100644
|
||||
--- a/addons/escoria-core/game/esc_inputs_manager.gd
|
||||
+++ b/addons/escoria-core/game/esc_inputs_manager.gd
|
||||
@@ -3,6 +3,9 @@
|
||||
@@ -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]
|
||||
## INPUT_NONE: No input is allowed at all.[br]
|
||||
@@ -22,7 +25,12 @@ const ESC_SHOW_DEBUG_PROMPT = "esc_show_debug_prompt"
|
||||
const ESC_UI_PRIMARY_ACTION = "esc_ui_primary_action"
|
||||
|
||||
## The current input 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:
|
||||
@@ -24,590 +24,5 @@ index c24588eb..b4b8a85d 100644
|
||||
+ input_mode = new_mode
|
||||
+ input_mode_changed.emit(new_mode)
|
||||
|
||||
## A LIFO stack of hovered items.
|
||||
## A LIFO stack of hovered items
|
||||
var hover_stack: HoverStack
|
||||
@@ -46,12 +54,14 @@ var custom_input_handler = null
|
||||
## The currently hovered element. Usually the one on top of the hover stack.
|
||||
var _hovered_element = null
|
||||
|
||||
+
|
||||
## Constructor.
|
||||
func _init():
|
||||
escoria.event_manager.connect("event_finished", Callable(self, "_on_event_finished"))
|
||||
hover_stack = HoverStack.new()
|
||||
hover_stack.connect("hover_stack_changed", Callable(self, "_on_hover_stack_changed"))
|
||||
|
||||
+
|
||||
## Called when an event is finished, so that the current hotspot is reset.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -62,10 +72,12 @@ func _on_event_finished(return_code: int, event_name: String):
|
||||
if _hovered_element == null:
|
||||
hotspot_focused = ""
|
||||
|
||||
+
|
||||
## Register core signals (from escoria.gd).
|
||||
func register_core():
|
||||
escoria.game_scene.request_pause_menu.connect(_on_pause_menu_requested)
|
||||
|
||||
+
|
||||
## Connect the item signals to the local methods.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -78,6 +90,7 @@ func register_inventory_item(item: Node):
|
||||
item.inventory_item_focused.connect(_on_mouse_entered_inventory_item)
|
||||
item.inventory_item_unfocused.connect(_on_mouse_exited_inventory_item)
|
||||
|
||||
+
|
||||
## Connect background signals to local methods.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -103,7 +116,7 @@ func register_background(background: ESCBackground):
|
||||
## - is_default_state: Whether the current state is escoria.GAME_STATE.DEFAULT[br]
|
||||
## - returns whether the function processed the event[br]
|
||||
##[br]
|
||||
-## `callback` is responsible for calling `get_tree().set_input_as_handled()`,
|
||||
+## `callback` is responsible for calling `get_tree().set_input_as_handled()`,
|
||||
## if appropriate.[br]
|
||||
##[br]
|
||||
## #### Parameters[br]
|
||||
@@ -111,6 +124,7 @@ func register_background(background: ESCBackground):
|
||||
func register_custom_input_handler(callback) -> void:
|
||||
custom_input_handler = callback
|
||||
|
||||
+
|
||||
## If a callback was specified via register_custom_input_handler(),[br]
|
||||
## forwards the event to the callback and returns its result; otherwise,[br]
|
||||
## returns false.[br]
|
||||
@@ -127,6 +141,7 @@ func try_custom_input_handler(event: InputEvent, is_default_state: bool) -> bool
|
||||
else:
|
||||
return false
|
||||
|
||||
+
|
||||
## Callback called by hover stack content change.
|
||||
func _on_hover_stack_changed():
|
||||
if hover_stack.is_empty():
|
||||
@@ -134,6 +149,7 @@ func _on_hover_stack_changed():
|
||||
else:
|
||||
set_hovered_node(hover_stack.get_top_item())
|
||||
|
||||
+
|
||||
## Sets the hovered node and calls its mouse_entered() method if it was the top[br]
|
||||
## most item in hover_stack.[br]
|
||||
## [br]
|
||||
@@ -143,17 +159,20 @@ func _on_hover_stack_changed():
|
||||
## [br]
|
||||
## *Returns* True if item is the new top hovered object.[br]
|
||||
func set_hovered_node(item: ESCItem) -> bool:
|
||||
- if _hovered_element != item \
|
||||
- and escoria.action_manager.is_object_actionable(item.global_id) \
|
||||
- or (item is ESCPlayer and not (item as ESCPlayer).selectable):
|
||||
+ if (
|
||||
+ _hovered_element != item and escoria.action_manager.is_object_actionable(item.global_id)
|
||||
+ or (item is ESCPlayer and not (item as ESCPlayer).selectable)
|
||||
+ ):
|
||||
_hovered_element = item
|
||||
_hovered_element.mouse_entered()
|
||||
return true
|
||||
# If tested item was already hovered
|
||||
# or is not actionable (not selectable for ESCPlayer) then do nothing
|
||||
- if _hovered_element == item \
|
||||
- or not escoria.action_manager.is_object_actionable(item.global_id) \
|
||||
- or (item is ESCPlayer and not (item as ESCPlayer).selectable):
|
||||
+ if (
|
||||
+ _hovered_element == item
|
||||
+ or not escoria.action_manager.is_object_actionable(item.global_id)
|
||||
+ or (item is ESCPlayer and not (item as ESCPlayer).selectable)
|
||||
+ ):
|
||||
return true
|
||||
if not is_instance_valid(_hovered_element) or hover_stack.get_top_item() != item:
|
||||
_hovered_element = item
|
||||
@@ -163,6 +182,7 @@ func set_hovered_node(item: ESCItem) -> bool:
|
||||
else:
|
||||
return false
|
||||
|
||||
+
|
||||
## Unsets the hovered node.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -176,10 +196,12 @@ func unset_hovered_node(item: ESCItem):
|
||||
_hovered_element = null
|
||||
hotspot_focused = ""
|
||||
|
||||
+
|
||||
## Background was hovered.
|
||||
func _on_hover_bg() -> void:
|
||||
escoria.main.current_scene.game.hovered_bg()
|
||||
|
||||
+
|
||||
## The background was clicked with the LMB.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -188,12 +210,10 @@ func _on_hover_bg() -> void:
|
||||
func _on_left_click_on_bg(position: Vector2) -> void:
|
||||
if input_mode == INPUT_ALL:
|
||||
hotspot_focused = ""
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Left click on background at %s." % str(position)
|
||||
- )
|
||||
+ escoria.logger.info(self, "Left click on background at %s." % str(position))
|
||||
escoria.main.current_scene.game.left_click_on_bg(position)
|
||||
|
||||
+
|
||||
## The background was double-clicked with the LMB.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -202,12 +222,10 @@ func _on_left_click_on_bg(position: Vector2) -> void:
|
||||
func _on_double_left_click_on_bg(position: Vector2) -> void:
|
||||
if input_mode == INPUT_ALL:
|
||||
hotspot_focused = ""
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Double left click on background at %s." % str(position)
|
||||
- )
|
||||
+ escoria.logger.info(self, "Double left click on background at %s." % str(position))
|
||||
escoria.main.current_scene.game.left_double_click_on_bg(position)
|
||||
|
||||
+
|
||||
## The background was clicked with the RMB.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -215,12 +233,10 @@ func _on_double_left_click_on_bg(position: Vector2) -> void:
|
||||
## - position: Position of the click.
|
||||
func _on_right_click_on_bg(position: Vector2) -> void:
|
||||
if input_mode == INPUT_ALL and hotspot_focused.is_empty():
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Right click on background at %s." % str(position)
|
||||
- )
|
||||
+ escoria.logger.info(self, "Right click on background at %s." % str(position))
|
||||
escoria.main.current_scene.game.right_click_on_bg(position)
|
||||
|
||||
+
|
||||
## An inventory item was clicked with the LMB.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -228,17 +244,11 @@ func _on_right_click_on_bg(position: Vector2) -> void:
|
||||
## - inventory_item_global_id: The global id of the clicked inventory item.[br]
|
||||
## - event: The input event received.
|
||||
func _on_mouse_left_click_inventory_item(
|
||||
- inventory_item_global_id: String,
|
||||
- event: InputEvent
|
||||
+ inventory_item_global_id: String, event: InputEvent
|
||||
) -> void:
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Inventory item %s left clicked." % inventory_item_global_id
|
||||
- )
|
||||
- escoria.main.current_scene.game.left_click_on_inventory_item(
|
||||
- inventory_item_global_id,
|
||||
- event
|
||||
- )
|
||||
+ escoria.logger.info(self, "Inventory item %s left clicked." % inventory_item_global_id)
|
||||
+ escoria.main.current_scene.game.left_click_on_inventory_item(inventory_item_global_id, event)
|
||||
+
|
||||
|
||||
## An inventory item was clicked with the RMB.[br]
|
||||
## [br]
|
||||
@@ -247,19 +257,15 @@ func _on_mouse_left_click_inventory_item(
|
||||
## - inventory_item_global_id: The global id of the clicked inventory item.[br]
|
||||
## - event: The input event received.
|
||||
func _on_mouse_right_click_inventory_item(
|
||||
- inventory_item_global_id: String,
|
||||
- event: InputEvent
|
||||
+ inventory_item_global_id: String, event: InputEvent
|
||||
) -> void:
|
||||
if input_mode == INPUT_ALL:
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Inventory item %s right clicked." % inventory_item_global_id
|
||||
- )
|
||||
+ escoria.logger.info(self, "Inventory item %s right clicked." % inventory_item_global_id)
|
||||
escoria.main.current_scene.game.right_click_on_inventory_item(
|
||||
- inventory_item_global_id,
|
||||
- event
|
||||
+ inventory_item_global_id, event
|
||||
)
|
||||
|
||||
+
|
||||
## An inventory item was double-clicked with the LMB.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -267,41 +273,33 @@ func _on_mouse_right_click_inventory_item(
|
||||
## - inventory_item_global_id: The global id of the clicked inventory item.[br]
|
||||
## - event: The input event received.
|
||||
func _on_mouse_double_left_click_inventory_item(
|
||||
- inventory_item_global_id: String,
|
||||
- event: InputEvent
|
||||
+ inventory_item_global_id: String, event: InputEvent
|
||||
) -> void:
|
||||
if input_mode == INPUT_ALL:
|
||||
escoria.logger.info(
|
||||
- self,
|
||||
- "Inventory item %s double left clicked." % inventory_item_global_id
|
||||
+ self, "Inventory item %s double left clicked." % inventory_item_global_id
|
||||
)
|
||||
escoria.main.current_scene.game.left_double_click_on_inventory_item(
|
||||
- inventory_item_global_id,
|
||||
- event
|
||||
+ inventory_item_global_id, event
|
||||
)
|
||||
|
||||
+
|
||||
## The mouse entered an inventory item.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
## [br]
|
||||
## - inventory_item_global_id: The global id of the inventory item that is hovered.
|
||||
func _on_mouse_entered_inventory_item(inventory_item_global_id: String) -> void:
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Inventory item %s focused." % inventory_item_global_id
|
||||
- )
|
||||
- escoria.main.current_scene.game.inventory_item_focused(
|
||||
- inventory_item_global_id
|
||||
- )
|
||||
+ escoria.logger.info(self, "Inventory item %s focused." % inventory_item_global_id)
|
||||
+ escoria.main.current_scene.game.inventory_item_focused(inventory_item_global_id)
|
||||
+
|
||||
|
||||
## The mouse exited an inventory item.
|
||||
func _on_mouse_exited_inventory_item() -> void:
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Inventory item unfocused."
|
||||
- )
|
||||
+ escoria.logger.info(self, "Inventory item unfocused.")
|
||||
escoria.main.current_scene.game.inventory_item_unfocused()
|
||||
|
||||
+
|
||||
## The mouse entered an Escoria item.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -310,8 +308,7 @@ func _on_mouse_exited_inventory_item() -> void:
|
||||
func _on_mouse_entered_item(item: ESCItem) -> void:
|
||||
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
||||
escoria.logger.trace(
|
||||
- self,
|
||||
- "Ignoring mouse entering player %s: Player not selectable." % [item.global_id]
|
||||
+ self, "Ignoring mouse entering player %s: Player not selectable." % [item.global_id]
|
||||
)
|
||||
if hover_stack.is_empty():
|
||||
hotspot_focused = ""
|
||||
@@ -322,20 +319,15 @@ func _on_mouse_entered_item(item: ESCItem) -> void:
|
||||
return
|
||||
|
||||
if not escoria.action_manager.is_object_actionable(item.global_id):
|
||||
- escoria.logger.debug(
|
||||
- self,
|
||||
- "Ignoring mouse entering item %s." % [item.global_id]
|
||||
- )
|
||||
+ escoria.logger.debug(self, "Ignoring mouse entering item %s." % [item.global_id])
|
||||
return
|
||||
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Item focused: %s" % item.global_id
|
||||
- )
|
||||
+ escoria.logger.info(self, "Item focused: %s" % item.global_id)
|
||||
|
||||
hotspot_focused = item.global_id
|
||||
escoria.main.current_scene.game.element_focused(item.global_id)
|
||||
|
||||
+
|
||||
## The mouse exited an Escoria item.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -350,14 +342,16 @@ func _on_mouse_exited_item(item: ESCItem) -> void:
|
||||
|
||||
if object and not object.interactive:
|
||||
return
|
||||
- if object and is_instance_valid(object.node) and object.node is ESCPlayer and not (object.node as ESCPlayer).selectable:
|
||||
+ if (
|
||||
+ object
|
||||
+ and is_instance_valid(object.node)
|
||||
+ and object.node is ESCPlayer
|
||||
+ and not (object.node as ESCPlayer).selectable
|
||||
+ ):
|
||||
hotspot_focused = ""
|
||||
return
|
||||
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Item unfocused: %s" % hotspot_focused
|
||||
- )
|
||||
+ escoria.logger.info(self, "Item unfocused: %s" % hotspot_focused)
|
||||
|
||||
if hover_stack.is_empty():
|
||||
hotspot_focused = ""
|
||||
@@ -366,6 +360,7 @@ func _on_mouse_exited_item(item: ESCItem) -> void:
|
||||
hotspot_focused = hover_stack.get_top_item().global_id
|
||||
escoria.main.current_scene.game.element_focused(hotspot_focused)
|
||||
|
||||
+
|
||||
## Function called when the item is set interactive, to re-trigger an input on[br]
|
||||
## underlying item.[br]
|
||||
## [br]
|
||||
@@ -382,9 +377,12 @@ func on_item_non_interactive(item: ESCItem) -> void:
|
||||
return
|
||||
else:
|
||||
var new_item = hover_stack.get_top_item()
|
||||
- escoria.action_manager.set_action_input_state(ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM)
|
||||
+ escoria.action_manager.set_action_input_state(
|
||||
+ ESCActionManager.ACTION_INPUT_STATE.AWAITING_VERB_OR_ITEM
|
||||
+ )
|
||||
new_item.mouse_entered()
|
||||
|
||||
+
|
||||
## An Escoria item was clicked with the LMB.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -396,34 +394,32 @@ func _on_mouse_left_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
||||
# Manage clicking through ESCPlayer (if ESCPlayer.selectable is false)
|
||||
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
||||
escoria.logger.trace(
|
||||
- self,
|
||||
- "Ignoring left click on player %s: Player not selectable."
|
||||
- % [item.global_id]
|
||||
+ self, "Ignoring left click on player %s: Player not selectable." % [item.global_id]
|
||||
)
|
||||
|
||||
# Get next object in hover stack and forward event to it
|
||||
if not hover_stack.is_empty():
|
||||
var next_item = hover_stack.pop_top_item()
|
||||
_on_mouse_left_clicked_item(next_item, event)
|
||||
- else: # if no next object, consider this click as background click
|
||||
+ else: # if no next object, consider this click as background click
|
||||
hotspot_focused = ""
|
||||
_on_left_click_on_bg(event.position)
|
||||
return
|
||||
|
||||
# Clicked object can't be actioned and there is no other object behind
|
||||
# We consider this click as a background click
|
||||
- if not escoria.action_manager.is_object_actionable(item.global_id) \
|
||||
- and hover_stack.is_empty():
|
||||
+ if (
|
||||
+ not escoria.action_manager.is_object_actionable(item.global_id)
|
||||
+ and hover_stack.is_empty()
|
||||
+ ):
|
||||
hotspot_focused = ""
|
||||
_on_left_click_on_bg(event.position)
|
||||
return
|
||||
|
||||
# Finally, execute the action on the ESCItem
|
||||
hotspot_focused = item.global_id
|
||||
- escoria.main.current_scene.game.left_click_on_item(
|
||||
- item.global_id,
|
||||
- event
|
||||
- )
|
||||
+ escoria.main.current_scene.game.left_click_on_item(item.global_id, event)
|
||||
+
|
||||
|
||||
## An Escoria item was double-clicked with the LMB.[br]
|
||||
## [br]
|
||||
@@ -431,42 +427,38 @@ func _on_mouse_left_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
||||
## [br]
|
||||
## - item: The Escoria item clicked.[br]
|
||||
## - event: The input event from the click.
|
||||
-func _on_mouse_left_double_clicked_item(
|
||||
- item: ESCItem,
|
||||
- event: InputEvent
|
||||
-) -> void:
|
||||
+func _on_mouse_left_double_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
||||
if input_mode == INPUT_ALL:
|
||||
# Manage clicking through ESCPlayer (if ESCPlayer.selectable is false)
|
||||
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
||||
escoria.logger.trace(
|
||||
self,
|
||||
- "Ignoring double left click on player %s: Player not selectable."
|
||||
- % [item.global_id]
|
||||
+ "Ignoring double left click on player %s: Player not selectable." % [item.global_id]
|
||||
)
|
||||
|
||||
# Get next object in hover stack and forward event to it
|
||||
if not hover_stack.is_empty():
|
||||
var next_item = hover_stack.pop_top_item()
|
||||
_on_mouse_left_double_clicked_item(next_item, event)
|
||||
- else: # if no next object, consider this click as background click
|
||||
+ else: # if no next object, consider this click as background click
|
||||
hotspot_focused = ""
|
||||
_on_double_left_click_on_bg(event.position)
|
||||
return
|
||||
|
||||
# Clicked object can't be actioned and there is no other object behind
|
||||
# We consider this click as a background click
|
||||
- if not escoria.action_manager.is_object_actionable(item.global_id) \
|
||||
- and hover_stack.is_empty():
|
||||
+ if (
|
||||
+ not escoria.action_manager.is_object_actionable(item.global_id)
|
||||
+ and hover_stack.is_empty()
|
||||
+ ):
|
||||
hotspot_focused = ""
|
||||
_on_double_left_click_on_bg(event.position)
|
||||
return
|
||||
|
||||
# Finally, execute the action on the ESCItem
|
||||
hotspot_focused = item.global_id
|
||||
- escoria.main.current_scene.game.left_double_click_on_item(
|
||||
- item.global_id,
|
||||
- event
|
||||
- )
|
||||
+ escoria.main.current_scene.game.left_double_click_on_item(item.global_id, event)
|
||||
+
|
||||
|
||||
## An Escoria item was clicked with the RMB.[br]
|
||||
## [br]
|
||||
@@ -478,8 +470,7 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
||||
if input_mode == INPUT_ALL:
|
||||
if item as ESCPlayer and not (item as ESCPlayer).selectable:
|
||||
escoria.logger.debug(
|
||||
- self,
|
||||
- "Ignoring right click on player %s: Player not selectable." % [item.global_id]
|
||||
+ self, "Ignoring right click on player %s: Player not selectable." % [item.global_id]
|
||||
)
|
||||
|
||||
if not hover_stack.is_empty():
|
||||
@@ -487,9 +478,11 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
||||
_on_mouse_right_clicked_item(next_item, event)
|
||||
return
|
||||
|
||||
- if not escoria.action_manager.is_object_actionable(item.global_id) \
|
||||
- and hover_stack.is_empty():
|
||||
- # Treat this as a background click now
|
||||
+ if (
|
||||
+ not escoria.action_manager.is_object_actionable(item.global_id)
|
||||
+ and hover_stack.is_empty()
|
||||
+ ):
|
||||
+ # Treat this as a background click now
|
||||
hotspot_focused = ""
|
||||
_on_right_click_on_bg(event.position)
|
||||
return
|
||||
@@ -508,22 +501,27 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
||||
if event.position:
|
||||
(escoria.main.current_scene.game as ESCGame).right_click_on_bg(event.position)
|
||||
else:
|
||||
- escoria.logger.info(
|
||||
- self,
|
||||
- "Clicked item %s with event %s cannot be activated (player not selectable or not interactive).\n"
|
||||
- % [item.global_id, event] +
|
||||
- "No valid item found in the items stack. Action canceled."
|
||||
+ (
|
||||
+ escoria
|
||||
+ . logger
|
||||
+ . info(
|
||||
+ self,
|
||||
+ (
|
||||
+ (
|
||||
+ "Clicked item %s with event %s cannot be activated (player not selectable or not interactive).\n"
|
||||
+ % [item.global_id, event]
|
||||
+ )
|
||||
+ + "No valid item found in the items stack. Action canceled."
|
||||
+ )
|
||||
+ )
|
||||
)
|
||||
else:
|
||||
escoria.logger.info(
|
||||
- self,
|
||||
- "Item %s right clicked with event %s." % [actual_item.global_id, event]
|
||||
+ self, "Item %s right clicked with event %s." % [actual_item.global_id, event]
|
||||
)
|
||||
hotspot_focused = actual_item.global_id
|
||||
- escoria.main.current_scene.game.right_click_on_item(
|
||||
- actual_item.global_id,
|
||||
- event
|
||||
- )
|
||||
+ escoria.main.current_scene.game.right_click_on_item(actual_item.global_id, event)
|
||||
+
|
||||
|
||||
## The mousewheel was turned.[br]
|
||||
## [br]
|
||||
@@ -533,13 +531,14 @@ func _on_mouse_right_clicked_item(item: ESCItem, event: InputEvent) -> void:
|
||||
func _on_mousewheel_action(direction: int):
|
||||
escoria.main.current_scene.game.mousewheel_action(direction)
|
||||
|
||||
+
|
||||
## Event when the pause menu was requested.
|
||||
func _on_pause_menu_requested():
|
||||
escoria.main.current_scene.game.pause_game()
|
||||
|
||||
+
|
||||
## Hover Stack implementation.
|
||||
class HoverStack:
|
||||
-
|
||||
## Emitted when the content of the hover stack has changed.
|
||||
signal hover_stack_changed
|
||||
|
||||
@@ -562,7 +561,6 @@ class HoverStack:
|
||||
_sort()
|
||||
hover_stack_changed.emit()
|
||||
|
||||
-
|
||||
## Add the items contained in given list to the stack if not already in it.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -573,7 +571,6 @@ class HoverStack:
|
||||
if escoria.action_manager.is_object_actionable(item.global_id):
|
||||
add_item(item)
|
||||
|
||||
-
|
||||
## Clean the hover stack.
|
||||
func clean():
|
||||
for e in hover_stack:
|
||||
@@ -581,7 +578,6 @@ class HoverStack:
|
||||
hover_stack.erase(e)
|
||||
hover_stack_changed.emit()
|
||||
|
||||
-
|
||||
## Pops the top element of the hover stack and returns it.[br]
|
||||
## [br]
|
||||
## *Returns* The top element of the hover stack.
|
||||
@@ -591,14 +587,12 @@ class HoverStack:
|
||||
hover_stack_changed.emit()
|
||||
return ret
|
||||
|
||||
-
|
||||
## Returns the top element of the hover stack.[br]
|
||||
## [br]
|
||||
## *Returns* The top element of the hover stack.
|
||||
func get_top_item():
|
||||
return hover_stack.back()
|
||||
|
||||
-
|
||||
## Remove the given item from the stack.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -610,25 +604,21 @@ class HoverStack:
|
||||
_sort()
|
||||
hover_stack_changed.emit()
|
||||
|
||||
-
|
||||
## Clear the stack of hovered items.
|
||||
func clear():
|
||||
hover_stack = []
|
||||
hover_stack_emptied.emit()
|
||||
|
||||
-
|
||||
## Returns true if the hover stack is empty, else false.[br]
|
||||
## [br]
|
||||
## *Returns* True if hover stack is empty, else false.
|
||||
func is_empty() -> bool:
|
||||
return hover_stack.is_empty()
|
||||
|
||||
-
|
||||
## Sort the hover stack by items' z-index.
|
||||
func _sort():
|
||||
hover_stack.sort_custom(Callable(HoverStackSorter, "sort_ascending_z_index"))
|
||||
|
||||
-
|
||||
## Returns true if the hover stack contains the given item.[br]
|
||||
## [br]
|
||||
## #### Parameters[br]
|
||||
@@ -639,7 +629,6 @@ class HoverStack:
|
||||
func has(item) -> bool:
|
||||
return hover_stack.has(item)
|
||||
|
||||
-
|
||||
## Returns the hover stack array.
|
||||
## [br]
|
||||
## *Returns* The hover stack array.
|
||||
|
||||
370
patches/merged_audio_settings_autoload.patch
Normal file
370
patches/merged_audio_settings_autoload.patch
Normal file
@@ -0,0 +1,370 @@
|
||||
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
|
||||
220
platform/web/full-size.html
Normal file
220
platform/web/full-size.html
Normal file
@@ -0,0 +1,220 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0">
|
||||
<title>$GODOT_PROJECT_NAME</title>
|
||||
<style>
|
||||
html, body, #canvas {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
color: white;
|
||||
background-color: black;
|
||||
overflow: hidden;
|
||||
touch-action: none;
|
||||
}
|
||||
|
||||
#canvas {
|
||||
display: block;
|
||||
}
|
||||
|
||||
#canvas:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
#status, #status-splash, #status-progress {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
#status, #status-splash {
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
#status {
|
||||
background-color: $GODOT_SPLASH_COLOR;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
#status-splash {
|
||||
max-height: 100%;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
#status-splash.show-image--false {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#status-splash.fullsize--true {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
|
||||
#status-splash.use-filter--false {
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
#status-progress, #status-notice {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#status-progress {
|
||||
bottom: 10%;
|
||||
width: 50%;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#status-notice {
|
||||
background-color: #5b3943;
|
||||
border-radius: 0.5rem;
|
||||
border: 1px solid #9b3943;
|
||||
color: #e0e0e0;
|
||||
font-family: 'Noto Sans', 'Droid Sans', Arial, sans-serif;
|
||||
line-height: 1.3;
|
||||
margin: 0 2rem;
|
||||
overflow: hidden;
|
||||
padding: 1rem;
|
||||
text-align: center;
|
||||
z-index: 1;
|
||||
}
|
||||
</style>
|
||||
$GODOT_HEAD_INCLUDE
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="canvas">
|
||||
Your browser does not support the canvas tag.
|
||||
</canvas>
|
||||
|
||||
<noscript>
|
||||
Your browser does not support JavaScript.
|
||||
</noscript>
|
||||
|
||||
<div id="status">
|
||||
<img id="status-splash" class="$GODOT_SPLASH_CLASSES" src="$GODOT_SPLASH" alt="">
|
||||
<progress id="status-progress"></progress>
|
||||
<div id="status-notice"></div>
|
||||
</div>
|
||||
|
||||
<script src="$GODOT_URL"></script>
|
||||
<script>
|
||||
const GODOT_CONFIG = $GODOT_CONFIG;
|
||||
const GODOT_THREADS_ENABLED = $GODOT_THREADS_ENABLED;
|
||||
const engine = new Engine(GODOT_CONFIG);
|
||||
|
||||
(function () {
|
||||
const statusOverlay = document.getElementById('status');
|
||||
const statusProgress = document.getElementById('status-progress');
|
||||
const statusNotice = document.getElementById('status-notice');
|
||||
|
||||
let initializing = true;
|
||||
let statusMode = '';
|
||||
|
||||
function setStatusMode(mode) {
|
||||
if (statusMode === mode || !initializing) {
|
||||
return;
|
||||
}
|
||||
if (mode === 'hidden') {
|
||||
statusOverlay.remove();
|
||||
initializing = false;
|
||||
return;
|
||||
}
|
||||
statusOverlay.style.visibility = 'visible';
|
||||
statusProgress.style.display = mode === 'progress' ? 'block' : 'none';
|
||||
statusNotice.style.display = mode === 'notice' ? 'block' : 'none';
|
||||
statusMode = mode;
|
||||
}
|
||||
|
||||
function setStatusNotice(text) {
|
||||
while (statusNotice.lastChild) {
|
||||
statusNotice.removeChild(statusNotice.lastChild);
|
||||
}
|
||||
const lines = text.split('\n');
|
||||
lines.forEach((line) => {
|
||||
statusNotice.appendChild(document.createTextNode(line));
|
||||
statusNotice.appendChild(document.createElement('br'));
|
||||
});
|
||||
}
|
||||
|
||||
function displayFailureNotice(err) {
|
||||
console.error(err);
|
||||
if (err instanceof Error) {
|
||||
setStatusNotice(err.message);
|
||||
} else if (typeof err === 'string') {
|
||||
setStatusNotice(err);
|
||||
} else {
|
||||
setStatusNotice('An unknown error occurred.');
|
||||
}
|
||||
setStatusMode('notice');
|
||||
initializing = false;
|
||||
}
|
||||
|
||||
const missing = Engine.getMissingFeatures({
|
||||
threads: GODOT_THREADS_ENABLED,
|
||||
});
|
||||
|
||||
if (missing.length !== 0) {
|
||||
if (GODOT_CONFIG['serviceWorker'] && GODOT_CONFIG['ensureCrossOriginIsolationHeaders'] && 'serviceWorker' in navigator) {
|
||||
let serviceWorkerRegistrationPromise;
|
||||
try {
|
||||
serviceWorkerRegistrationPromise = navigator.serviceWorker.getRegistration();
|
||||
} catch (err) {
|
||||
serviceWorkerRegistrationPromise = Promise.reject(new Error('Service worker registration failed.'));
|
||||
}
|
||||
// There's a chance that installing the service worker would fix the issue
|
||||
Promise.race([
|
||||
serviceWorkerRegistrationPromise.then((registration) => {
|
||||
if (registration != null) {
|
||||
// MODIFIED FOR RTMI-UI
|
||||
// return Promise.reject(new Error('Service worker already exists.'));
|
||||
window.location.reload();
|
||||
// END MODIFIED FOR RTMI-UI
|
||||
}
|
||||
return registration;
|
||||
}).then(() => engine.installServiceWorker()),
|
||||
// For some reason, `getRegistration()` can stall
|
||||
new Promise((resolve) => {
|
||||
setTimeout(() => resolve(), 2000);
|
||||
}),
|
||||
]).then(() => {
|
||||
// Reload if there was no error.
|
||||
window.location.reload();
|
||||
}).catch((err) => {
|
||||
console.error('Error while registering service worker:', err);
|
||||
});
|
||||
} else {
|
||||
// Display the message as usual
|
||||
const missingMsg = 'Error\nThe following features required to run Godot projects on the Web are missing:\n';
|
||||
displayFailureNotice(missingMsg + missing.join('\n'));
|
||||
}
|
||||
} else {
|
||||
setStatusMode('progress');
|
||||
engine.startGame({
|
||||
'onProgress': function (current, total) {
|
||||
if (current > 0 && total > 0) {
|
||||
statusProgress.value = current;
|
||||
statusProgress.max = total;
|
||||
} else {
|
||||
statusProgress.removeAttribute('value');
|
||||
statusProgress.removeAttribute('max');
|
||||
}
|
||||
},
|
||||
}).then(() => {
|
||||
setStatusMode('hidden');
|
||||
}, displayFailureNotice);
|
||||
}
|
||||
}());
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user