Skip to content

Commit 6af6352

Browse files
devolt5Copilot
andcommitted
Extend tutorial
Co-authored-by: Copilot <copilot@github.com>
1 parent 2bc45c2 commit 6af6352

4 files changed

Lines changed: 43 additions & 20 deletions

File tree

src/components/GameDialog.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import {
1010
import { Button } from "@/components/ui/button";
1111
import type { DialogData } from "@/data/dialogs";
1212
import { dialogsBySender } from "@/data/dialogs";
13+
import { useGameStore } from "@/store/gameStore";
1314
import guideImage from "@/images/guide.jpg";
1415
import delegate01Image from "@/images/delegate_01.jpg";
1516

@@ -32,6 +33,7 @@ interface GameDialogProps {
3233

3334
export function GameDialog({ open, onClose, data }: GameDialogProps) {
3435
const scrollEndRef = useRef<HTMLDivElement>(null);
36+
const playerName = useGameStore((s) => s.basicData.playerName);
3537

3638
// All dialogs for this sender up to and including the current one (chronological).
3739
const history = (dialogsBySender[data.sender] ?? [data]).filter(
@@ -122,7 +124,9 @@ export function GameDialog({ open, onClose, data }: GameDialogProps) {
122124
}`}
123125
>
124126
<div className="text-stone-700 text-sm leading-relaxed prose prose-sm prose-stone max-w-none prose-p:my-1 prose-strong:font-semibold prose-em:italic">
125-
<ReactMarkdown>{entry.text}</ReactMarkdown>
127+
<ReactMarkdown>
128+
{entry.text.replace("{playerName}", playerName)}
129+
</ReactMarkdown>
126130
</div>
127131
</div>
128132
</div>

src/data/dialogs.ts

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,27 +10,27 @@ export const allDialogs: DialogData[] = [
1010
{
1111
id: 1,
1212
sender: "Stadtberaterin",
13-
title: "Willkommen in TownSim",
14-
text: "Willkommen! Hier beginnt dein Abenteuer als Bürgermeister. Triff kluge Entscheidungen, gewinne das Vertrauen deiner Bürger und forme das Schicksal deiner Stadt.",
13+
title: "Willkommen im Amt!",
14+
text: "Willkommen, {playerName}! Gratulation zur Wahl. Die nächsten vier Jahre werden eine spannende Reise – mit vielen Herausforderungen, aber auch Chancen für deine Stadt.\n\nIch bin deine Stadtberaterin und werde dich mit Ratschlägen unterstützen. Lass uns gleich loslegen!",
1515
},
16+
// ── Tutorial messages (delivered via click-count triggers) ────────────────
1617
{
1718
id: 2,
1819
sender: "Stadtberaterin",
1920
title: "Erste Schritte",
20-
text: "Ein guter Anfang! Deine erste Aufgabe:\n\nVerschaffe dir einen **Überblick über die Stadtbezirke**. Jeder hat eigene Bedürfnisse und Problemlagen.\n\nKlicke auf einen Bezirk, um seine Details einzusehen.",
21+
text: "Deine erste Aufgabe:\n\n**Stadtbezirke**\nVerschaffe dir einen Überblick über die Stadtbezirke. Jeder hat eigene Bedürfnisse und Problemlagen.\nKlicke auf einen Bezirk, um seine Details einzusehen.\n\n**Smartphone**\nProbiere verschiedene Funktionen deines Smartphones aus – dort findest du wichtige Informationen und kannst mit verschiedenen Akteuren in Kontakt treten.\n\n**Unterlagen**\nRechts siehst du deine Unterlagen, vor allem die Anträge, die du dem Parlament vorlegen kannst. Jeder Antrag wird Auswirkungen auf die Stadtentwicklung haben – und auf deine Beliebtheit bei den Fraktionen im Stadtrat.\n\n**Fraktionen**\nUnten kannst du mehr über die Fraktionen erfahren – sie sind wichtige Verbündete, aber auch Widersacher. Ihre Unterstützung brauchst du, um deine Pläne durchzusetzen.",
2122
},
2223
{
2324
id: 3,
2425
sender: "Stadtberaterin",
25-
title: "Haushaltswarnung",
26-
text: "**Achtung, Bürgermeister** – die Stadtkasse sendet erste Warnsignale.\n\nÜberprüfe die Ausgaben im *nördlichen Bezirk*, bevor es zu einem **Defizit** kommt.",
26+
title: "Verschiedene Phasen",
27+
text: "Das Spiel ist in verschiedene Phasen unterteilt:\n\n1. **Berichtsphase**: Hier bekommst du Anträge und Informationen.\n2. **Planungsphase**: In dieser Phase kannst du deine Strategie entwickeln. Du kannst mit verschiedenen Akteuren in Kontakt treten: Abgeordnete, Bürger, Vereine, Wirtschaftsakteure.\n3. **Abstimmungsphase**: Die Fraktionen im Stadtrat entscheiden über deine Anträge. Je nachdem, wie du dich in der Planungsphase positioniert hast, kannst du auf mehr oder weniger Unterstützung zählen.",
2728
},
28-
// ── Tutorial messages (delivered via click-count triggers) ────────────────
2929
{
3030
id: 4,
3131
sender: "Stadtberaterin",
32-
title: "Fraktionen beachten",
33-
text: "Du lernst schnell! Vergiss nicht die **Fraktionen** im Stadtrat.\n\nJede Fraktion hat eigene Interessen – ihre Zustimmung entscheidet über Mehrheiten und beeinflusst deinen politischen Spielraum.",
32+
title: "Was wichtig ist...",
33+
text: "Du lernst schnell! Versuche immer, deine Werte im **oberen Bereich** im Auge zu behalten – vor allem die **Bürgerzufriedenheit**. Wenn sie zu niedrig wird, könnte es schwierig werden, deine Pläne durchzubringen.\n\nAchte auch auf die **Wirtschaftskraft** der Stadt – sie beeinflusst deine finanziellen Möglichkeiten.\n\nUnd vergiss nicht: Die Fraktionen im Stadtrat beobachten dich genau. Ihre Unterstützung ist entscheidend für deinen Erfolg.",
3434
},
3535
{
3636
id: 5,
@@ -42,20 +42,20 @@ export const allDialogs: DialogData[] = [
4242
id: 6,
4343
sender: "Stadtberaterin",
4444
title: "Du bist bereit",
45-
text: "Ich glaube, du hast das Wesentliche verstanden. Von hier an liegst du auf dich allein gestellt – aber ich bin natürlich jederzeit für Rückfragen da.\n\n**Viel Erfolg, Bürgermeister!**",
45+
text: "Ich glaube, du hast das Wesentliche verstanden, {playerName}.\n\nSchaue dich regelmäßig in den Stadtbezirken um. Ab und zu tauchen neue Herausforderungen auf, die du angehen kannst.\n\nViel Erfolg, {playerName}!",
4646
},
4747
// ── Timed messages (delivered by year/quarter triggers) ───────────────────
4848
{
4949
id: 7,
5050
sender: "Stadtredakteur",
5151
title: "Presseanfrage",
52-
text: "Guten Tag, Bürgermeister!\n\nIch bin Redakteur der *Neustädter Stadtzeitung*. Unsere Leser interessieren sich sehr für Ihre Pläne zum **Stadthaushalt**.\n\nWären Sie bereit für ein kurzes Interview? Ich würde mich über eine Rückmeldung freuen.",
52+
text: "Guten Tag, {playerName}!\n\nIch bin Redakteur der *{cityName} Zeitung*. Unsere Leser interessieren sich sehr für Ihre Pläne zum **Stadthaushalt**.\n\nWären Sie bereit für ein kurzes Interview? Ich würde mich über eine Rückmeldung freuen.",
5353
},
5454
{
5555
id: 8,
5656
sender: "Stadtredakteur",
5757
title: "Jahresbericht der Presse",
58-
text: "Bürgermeister, die Halbzeit Ihrer Amtszeit nähert sich.\n\nUnsere Redaktion hat die bisherige Stadtentwicklung analysiert – die **Bürgerzufriedenheit** und die **Wirtschaftskraft** stehen besonders im Fokus unserer Leserschaft.\n\nWir berichten in der nächsten Ausgabe.",
58+
text: "{playerName}, die Halbzeit Ihrer Amtszeit nähert sich.\n\nUnsere Redaktion hat die bisherige Stadtentwicklung analysiert – die **Bürgerzufriedenheit** und die **Wirtschaftskraft** stehen besonders im Fokus unserer Leserschaft.\n\nWir berichten in der nächsten Ausgabe.",
5959
},
6060
];
6161

src/data/messages.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ export interface Message {
77
read: boolean;
88
}
99

10+
// ── First Tutorial message ────────────────
1011
export const messages: Message[] = [
1112
{
1213
id: 1,
1314
sender: "Stadtberaterin",
14-
content: "Willkommen beim TownSim",
15+
content: "Willkommen im Amt!",
1516
timestamp: new Date(),
16-
dialogId: 3,
17+
dialogId: 1,
1718
read: false,
1819
},
1920
];

src/data/tutorialMessages.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,43 @@ export const TUTORIAL_TRIGGERS: TutorialTrigger[] = [
1414
key: "tutorial-click-2",
1515
message: {
1616
sender: "Stadtberaterin",
17-
content: "Denk auch an die Fraktionen im Stadtrat.",
18-
dialogId: 4,
17+
content: "Erste Schritte",
18+
dialogId: 2,
1919
},
2020
},
2121
{
2222
afterClickCount: 4,
2323
key: "tutorial-click-4",
2424
message: {
2525
sender: "Stadtberaterin",
26-
content: "Ein wichtiger Hinweis zu Versprechen und Konsequenzen.",
26+
content: "Verschiedene Phasen",
27+
dialogId: 3,
28+
},
29+
},
30+
{
31+
afterClickCount: 8,
32+
key: "tutorial-click-8",
33+
message: {
34+
sender: "Stadtberaterin",
35+
content: "Was wichtig ist...",
36+
dialogId: 4,
37+
},
38+
},
39+
{
40+
afterClickCount: 10,
41+
key: "tutorial-click-10",
42+
message: {
43+
sender: "Stadtberaterin",
44+
content: "Versprechen & Konsequenzen",
2745
dialogId: 5,
2846
},
2947
},
3048
{
31-
afterClickCount: 6,
32-
key: "tutorial-click-6",
49+
afterClickCount: 12,
50+
key: "tutorial-click-12",
3351
message: {
3452
sender: "Stadtberaterin",
35-
content: "Ich glaube, du bist bereit. Viel Erfolg!",
53+
content: "Du bist bereit",
3654
dialogId: 6,
3755
},
3856
},

0 commit comments

Comments
 (0)