Implemented first demo quest line #15

Merged
Jonathan merged 11 commits from feature/implement_quests into develop 2025-08-14 23:28:09 +02:00
Owner

Questline does not include the Beetroot arc

  • Quest for farming to fighting
  • Quest fulfillment check
  • Changed Scene transition to non Threaded
  • Added dialogic addon
    • Activate quest
    • Complete quest
    • If Quest has state
  • Some bug fixes
    • You can leave the fight scene
    • Vesna does not have a proper animation reference
    • Wrong visibility flag for the quest post it
    • Yeli timelines trigger to often
  • Skip disclaimer scene
  • Formatted PlayerMovement file
  • Added Speedhack Setting
    • Set to -1 to disable, any positive number is multiplied by player speed
    • Can be accessed in Project settings
    • But better to be set in override.cfg
      [babushka]
      hacks/speed_hack=10.0
      
Questline does not include the Beetroot arc - Quest for farming to fighting - Quest fulfillment check - Changed Scene transition to non Threaded - Added dialogic addon - Activate quest - Complete quest - If Quest has state - Some bug fixes - You can leave the fight scene - Vesna does not have a proper animation reference - Wrong visibility flag for the quest post it - Yeli timelines trigger to often - Skip disclaimer scene - Formatted PlayerMovement file - Added Speedhack Setting - Set to -1 to disable, any positive number is multiplied by player speed - Can be accessed in Project settings - But better to be set in `override.cfg` ``` [babushka] hacks/speed_hack=10.0 ```
Jonathan added 7 commits 2025-08-13 03:48:49 +02:00
Jonathan added 1 commit 2025-08-13 17:13:41 +02:00
kziolkowski reviewed 2025-08-13 21:57:13 +02:00
@@ -45,2 +48,4 @@
if(_fillstate > 0)
{
_fillstate--;
OnWater?.Invoke();
Owner

Wofür genau soll diese Action nachher verwendet werden?
Wenn das signalisieren soll, wenn Vesna sich auf einer Watered-Tile befindet (z.B. für Geh-Sounds), dann würde ich dafür vermutlich eher den Fieldservice verwenden.

Wofür genau soll diese Action nachher verwendet werden? Wenn das signalisieren soll, wenn Vesna sich auf einer Watered-Tile befindet (z.B. für Geh-Sounds), dann würde ich dafür vermutlich eher den Fieldservice verwenden.
Author
Owner

Das wird immer aufgerufen, wenn etwas gegossen wird. Das ist ne Quick-and-dirty-Lösung, die von QuestBehaviour/DetectFieldWork.cs genutzt wird, um Feldarbeit als abgeschlossen zu erkennen.

Das wird immer aufgerufen, wenn etwas gegossen wird. Das ist ne Quick-and-dirty-Lösung, die von `QuestBehaviour/DetectFieldWork.cs` genutzt wird, um Feldarbeit als abgeschlossen zu erkennen.
Jonathan marked this conversation as resolved
kziolkowski reviewed 2025-08-13 22:00:51 +02:00
@@ -1,9 +1,13 @@
namespace Babushka.scripts.CSharp.Common.Inventory;
using Godot;
Owner

Was ist das für ein Unicode-Character am Anfang?
Wenn ich die Datei in Rider ansehe, ist da nichts.

Was ist das für ein Unicode-Character am Anfang? Wenn ich die Datei in Rider ansehe, ist da nichts.
Author
Owner

Ist scheinbar ein Rider Bug. Das Zeichen wird immer eingefügt, wenn man neue Dateien in Rider erstellt. Es gibt auch noch mehr Dateien mit dem Zeichen am Anfang. Zumindest hat das PowerShell ausgespuckt.

PS babushka> $pattern = [byte[]](0xEF,0xBB,0xBF)
PS babushka> Get-ChildItem -Path "\babushka\scripts\CSharp\Common" -Recurse -File | ForEach-Object {
>>     $bytes = [System.IO.File]::ReadAllBytes($_.FullName)
>>     for ($i = 0; $i -le $bytes.Length - $pattern.Length; $i++) {
>>         if (-not (Compare-Object $bytes[$i..($i+$pattern.Length-1)] $pattern)) {
>>             Write-Output $_.FullName
>>             break
>>         }
>>     }
>> }

babushka\scripts\CSharp\Common\Fight\Fighter.cs
babushka\scripts\CSharp\Common\Fight\FightInstance.cs
babushka\scripts\CSharp\Common\Fight\FightParty.cs
babushka\scripts\CSharp\Common\Fight\FightStarter.cs     
babushka\scripts\CSharp\Common\Fight\FightStateManager.cs
babushka\scripts\CSharp\Common\Inventory\InventoryActionResult.cs
babushka\scripts\CSharp\Common\Inventory\InventorySlot.cs
babushka\scripts\CSharp\Common\Inventory\InventoryTestScript.cs
babushka\scripts\CSharp\Common\Inventory\ItemInstance.cs
babushka\scripts\CSharp\Common\Inventory\ItemOnGroundSpawnWith.cs
babushka\scripts\CSharp\Common\Inventory\ItemResource.cs
babushka\scripts\CSharp\Common\Quest\QuestListItemUi.cs
babushka\scripts\CSharp\Common\Quest\QuestResource.cs
babushka\scripts\CSharp\Common\Quest\QuestStatus.cs
babushka\scripts\CSharp\Common\Util\LinqExtras.cs
babushka\scripts\CSharp\Common\Util\NodeExtension.cs

Ich nehme mal aus der Datei das Zeichen raus, aber die anderen Dateien würde ich jetzt nicht anfassen. Das wären nur viele Changes im git repo. Und schaden tun die Zeichen da scheinbar auch nicht.

Ist scheinbar ein [Rider Bug](https://youtrack.jetbrains.com/issue/RIDER-69866). Das Zeichen wird immer eingefügt, wenn man neue Dateien in Rider erstellt. Es gibt auch noch mehr Dateien mit dem Zeichen am Anfang. Zumindest hat das PowerShell ausgespuckt. ``` PS babushka> $pattern = [byte[]](0xEF,0xBB,0xBF) PS babushka> Get-ChildItem -Path "\babushka\scripts\CSharp\Common" -Recurse -File | ForEach-Object { >> $bytes = [System.IO.File]::ReadAllBytes($_.FullName) >> for ($i = 0; $i -le $bytes.Length - $pattern.Length; $i++) { >> if (-not (Compare-Object $bytes[$i..($i+$pattern.Length-1)] $pattern)) { >> Write-Output $_.FullName >> break >> } >> } >> } babushka\scripts\CSharp\Common\Fight\Fighter.cs babushka\scripts\CSharp\Common\Fight\FightInstance.cs babushka\scripts\CSharp\Common\Fight\FightParty.cs babushka\scripts\CSharp\Common\Fight\FightStarter.cs babushka\scripts\CSharp\Common\Fight\FightStateManager.cs babushka\scripts\CSharp\Common\Inventory\InventoryActionResult.cs babushka\scripts\CSharp\Common\Inventory\InventorySlot.cs babushka\scripts\CSharp\Common\Inventory\InventoryTestScript.cs babushka\scripts\CSharp\Common\Inventory\ItemInstance.cs babushka\scripts\CSharp\Common\Inventory\ItemOnGroundSpawnWith.cs babushka\scripts\CSharp\Common\Inventory\ItemResource.cs babushka\scripts\CSharp\Common\Quest\QuestListItemUi.cs babushka\scripts\CSharp\Common\Quest\QuestResource.cs babushka\scripts\CSharp\Common\Quest\QuestStatus.cs babushka\scripts\CSharp\Common\Util\LinqExtras.cs babushka\scripts\CSharp\Common\Util\NodeExtension.cs ``` Ich nehme mal aus der Datei das Zeichen raus, aber die anderen Dateien würde ich jetzt nicht anfassen. Das wären nur viele Changes im git repo. Und schaden tun die Zeichen da scheinbar auch nicht.
Jonathan marked this conversation as resolved
kziolkowski reviewed 2025-08-13 22:02:48 +02:00
@@ -7,3 +7,3 @@
[Export] private AnimatedSprite2D? _sprite;
[Export] private string[] _timelinesToPlay;
[Export] private bool _retriggerSameTimeline = false;
Owner

Für den Anfang okay, aber auf lange Sicht brauchen wir nen automatisierten Mechanismus, der das mit einem Quest- oder Inventarzustand verknüpft und nur dann zur nächsten Timeline übergeht.

Für den Anfang okay, aber auf lange Sicht brauchen wir nen automatisierten Mechanismus, der das mit einem Quest- oder Inventarzustand verknüpft und nur dann zur nächsten Timeline übergeht.
Jonathan marked this conversation as resolved
kziolkowski reviewed 2025-08-13 22:06:12 +02:00
@@ -13,0 +9,4 @@
Hidden = 0,
Active = 1,
Done = 2,
Canceled = 3,
Owner

Typo: Cancelled

Typo: Cancelled
Author
Owner

Geht beides. Das eine ist mehr britisch, das andere mehr amerikanisch.

https://www.merriam-webster.com/grammar/canceled-or-cancelled

Geht beides. Das eine ist mehr britisch, das andere mehr amerikanisch. https://www.merriam-webster.com/grammar/canceled-or-cancelled
Jonathan marked this conversation as resolved
kziolkowski reviewed 2025-08-13 22:06:49 +02:00
@@ -6,10 +6,10 @@ public partial class QuestStatus : GodotObject
{
public enum Status
Owner

Was ist mit 'Available' passiert?

Was ist mit 'Available' passiert?
Jonathan marked this conversation as resolved
kziolkowski reviewed 2025-08-13 22:08:50 +02:00
@@ -0,0 +16,4 @@
[Export] private bool _whenFulfilledSetActiveQuestToDone = true;
[Export] private bool _whenFulfilledSetNextQuestToActive = true;
[Export] private bool _whenFulfilledSetNextQuestToFollow = true;
Owner

Hatten wir uns nicht auf ein anderes Wording geeinigt oder hat es einen Grund, warum es jetzt wieder 'Active' und 'Follow' heißt?

Hatten wir uns nicht auf ein anderes Wording geeinigt oder hat es einen Grund, warum es jetzt wieder 'Active' und 'Follow' heißt?
Jonathan marked this conversation as resolved
kziolkowski reviewed 2025-08-13 22:17:41 +02:00
@@ -0,0 +1,7 @@
extends Node
class_name DialogicStartSpecific
Owner

Ich finde das naming hier nicht ganz passend:

  • DialogicStartSpecific ist ironischerweise etwas unspezifisch, weil ich daraus nicht unbedingt ableiten kann, inwiefern es sich vom DialogicStarter unterscheidet. Letzterer spielt ja auch eine spezifische timeline ab, nur eben als Parameter.
  • Ich glaube, ich würde den code einfach mit in den vorhandenen DialogicStarter hinzufügen.
  • Ich habe jetzt mehrere Minuten lang geglaubt, dass diese Klasse zu Beginn einer Szene automatisch die Timeline starten würde, weil du die Funktion Start genannt hast. Bitte keine Standardfunktionsnamen aus Unity verwenden, weil das super verwirrend ist.
Ich finde das naming hier nicht ganz passend: - `DialogicStartSpecific` ist ironischerweise etwas unspezifisch, weil ich daraus nicht unbedingt ableiten kann, inwiefern es sich vom `DialogicStarter` unterscheidet. Letzterer spielt ja auch eine spezifische timeline ab, nur eben als Parameter. - Ich glaube, ich würde den code einfach mit in den vorhandenen DialogicStarter hinzufügen. - Ich habe jetzt mehrere Minuten lang geglaubt, dass diese Klasse zu Beginn einer Szene automatisch die Timeline starten würde, weil du die Funktion `Start` genannt hast. Bitte keine Standardfunktionsnamen aus Unity verwenden, weil das super verwirrend ist.
Author
Owner

Genau das ist der Unterschied: DialogicStarter startet irgendeinen Dialog, den man als Parameter mitgeben kann. Und DialogicStartSpecific startet einen spezifischen Dialog, der schon vorher festgelegt werden muss.

Ich habe dir zuliebe die Funktion aber umbenannt.

Genau das ist der Unterschied: `DialogicStarter` startet irgendeinen Dialog, den man als Parameter mitgeben kann. Und `DialogicStartSpecific` startet einen spezifischen Dialog, der schon vorher festgelegt werden muss. Ich habe dir zuliebe die Funktion aber umbenannt.
Jonathan marked this conversation as resolved
kziolkowski approved these changes 2025-08-13 22:19:04 +02:00
kziolkowski left a comment
Owner

Nice! Bitte einmal auf die Kommentare eingehen und ggf. Anpassungen vornehmen. Danke!

Nice! Bitte einmal auf die Kommentare eingehen und ggf. Anpassungen vornehmen. Danke!
Jonathan added 1 commit 2025-08-14 21:54:26 +02:00
Jonathan added 1 commit 2025-08-14 23:17:04 +02:00
Jonathan added 1 commit 2025-08-14 23:27:22 +02:00
Jonathan merged commit 9bebe1a44d into develop 2025-08-14 23:28:09 +02:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Jonathan/Babushka#15