petermorphose 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (95) hide show
  1. data/COPYING +3 -0
  2. data/README.md +31 -0
  3. data/bin/petermorphose +3 -0
  4. data/levels/flgr_Der_Alkohol_und_seine_Folgen.pml +447 -0
  5. data/levels/jr_Am_Tempel_des_Harlow-Karlow.pml +413 -0
  6. data/levels/jr_Auf_der_Flucht.pml +456 -0
  7. data/levels/jr_Die_zwei_Baeume.pml +447 -0
  8. data/levels/jr_Feuertauchen.pml +343 -0
  9. data/levels/jr_Gemuetlicher_Aufstieg.pml +329 -0
  10. data/levels/jr_Gruenhuegelshausen.pml +423 -0
  11. data/levels/jr_Gruselgrotte.pml +421 -0
  12. data/levels/jr_Hoch_hinaus.pml +265 -0
  13. data/levels/jr_Vom_Ozean_in_die_Traufe.pml +342 -0
  14. data/levels/jr_Weg_durchs_Feuer.pml +544 -0
  15. data/levels/sl_Heimweg_zu_Henk.pml +307 -0
  16. data/media/arg1.wav +0 -0
  17. data/media/arg2.wav +0 -0
  18. data/media/arrow_hit.wav +0 -0
  19. data/media/blocker_break.wav +0 -0
  20. data/media/bow.wav +0 -0
  21. data/media/break1.wav +0 -0
  22. data/media/break2.wav +0 -0
  23. data/media/buttons.png +0 -0
  24. data/media/collect_ammo.wav +0 -0
  25. data/media/collect_freeze.wav +0 -0
  26. data/media/collect_health.wav +0 -0
  27. data/media/collect_key.wav +0 -0
  28. data/media/collect_points.wav +0 -0
  29. data/media/collect_star.wav +0 -0
  30. data/media/danger.png +0 -0
  31. data/media/death.wav +0 -0
  32. data/media/dialogs.bmp +0 -0
  33. data/media/door1.wav +0 -0
  34. data/media/door2.wav +0 -0
  35. data/media/eat.wav +0 -0
  36. data/media/effects.bmp +0 -0
  37. data/media/enemies.bmp +0 -0
  38. data/media/explosion.wav +0 -0
  39. data/media/game.ogg +0 -0
  40. data/media/gui.bmp +0 -0
  41. data/media/help1.wav +0 -0
  42. data/media/help2.wav +0 -0
  43. data/media/jump.wav +0 -0
  44. data/media/lava.wav +0 -0
  45. data/media/lever.wav +0 -0
  46. data/media/menu.ogg +0 -0
  47. data/media/morph.wav +0 -0
  48. data/media/player.bmp +0 -0
  49. data/media/player_arg.wav +0 -0
  50. data/media/shshsh.wav +0 -0
  51. data/media/skies.png +0 -0
  52. data/media/slime1.wav +0 -0
  53. data/media/slime2.wav +0 -0
  54. data/media/slime3.wav +0 -0
  55. data/media/stairs.wav +0 -0
  56. data/media/stairs_steps.wav +0 -0
  57. data/media/stuff.bmp +0 -0
  58. data/media/sword_whoosh.wav +0 -0
  59. data/media/tiles.bmp +0 -0
  60. data/media/title.png +0 -0
  61. data/media/title_dark.png +0 -0
  62. data/media/turbo.wav +0 -0
  63. data/media/water1.wav +0 -0
  64. data/media/water2.wav +0 -0
  65. data/media/whoosh.wav +0 -0
  66. data/media/whoosh_back.wav +0 -0
  67. data/media/won.bmp +0 -0
  68. data/media/yippie.wav +0 -0
  69. data/src/const.rb +301 -0
  70. data/src/en.yml +62 -0
  71. data/src/gosu-preview.rb +116 -0
  72. data/src/helpers/audio.rb +9 -0
  73. data/src/helpers/graphics.rb +24 -0
  74. data/src/helpers/input.rb +28 -0
  75. data/src/ini_file.rb +25 -0
  76. data/src/level_info.rb +63 -0
  77. data/src/localization.rb +19 -0
  78. data/src/main.rb +86 -0
  79. data/src/map.rb +136 -0
  80. data/src/objects/collectible_object.rb +174 -0
  81. data/src/objects/effect_object.rb +120 -0
  82. data/src/objects/game_object.rb +363 -0
  83. data/src/objects/living_object.rb +657 -0
  84. data/src/objects/object_def.rb +45 -0
  85. data/src/script.rb +207 -0
  86. data/src/states/credits.rb +24 -0
  87. data/src/states/game.rb +463 -0
  88. data/src/states/help.rb +268 -0
  89. data/src/states/level_selection.rb +43 -0
  90. data/src/states/menu.rb +45 -0
  91. data/src/states/options.rb +81 -0
  92. data/src/states/state.rb +11 -0
  93. data/src/states/title.rb +17 -0
  94. data/src/states/victory.rb +20 -0
  95. metadata +188 -0
@@ -0,0 +1,268 @@
1
+ # TODO translate to Ruby
2
+ =begin
3
+ State_ReadMe1: begin
4
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
5
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
6
+
7
+ DrawBMPText('Willkommen bei Peter Morphose!', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
8
+
9
+ DrawBMPText('Hier findest du die Erkl‰rung des Spielprinzips, der Steuerung und', 20, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
10
+ DrawBMPText('der Objekte und Kartenteile, die du im Spiel triffst. Die meisten', 20, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
11
+ DrawBMPText('Angaben beziehen sich auf das "Ritter"-Thema. Daher wird empfohlen,', 20, 100, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
12
+ DrawBMPText('zuerst Level mit diesem Thema zu spielen.', 20, 120, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
13
+
14
+ DrawBMPText('Die Steuerung: (Gamepad oder Tastatur)', 20, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
15
+
16
+ DrawBMPText('Pfeiltasten links/rechts: Laufen', 20, 220, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
17
+ DrawBMPText('Pfeiltaste rauf/Button 1: Springen', 20, 240, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
18
+ DrawBMPText('Leertaste/Button 2: Spezialaktion des aktuellen Peters', 20, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
19
+ DrawBMPText('Pfeiltaste runter/Button 3: Treppen und Bodenplatten benutzen', 20, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
20
+ DrawBMPText('Enter/Entfernen/Button 4: Wieder zum normalen Peter werden', 20, 300, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
21
+ DrawBMPText('P: Pause an/aus', 20, 320, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
22
+ DrawBMPText('Escape: Wieder zum Hauptmen¸', 20, 340, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
23
+ DrawBMPText('(Gamepad funktioniert nicht im Men¸.)', 20, 360, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
24
+
25
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 1 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
26
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
27
+ DXDraw.Flip;
28
+ end;
29
+ State_ReadMe2: begin
30
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
31
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
32
+
33
+ DrawBMPText('Weitere Tipps zur Steuerung:', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
34
+
35
+ DrawBMPText('ï Nur der normale Peter kann Hebel umlegen (Spezialaktion). Wenn du', 20, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
36
+ DrawBMPText(' ein Spezialpeter bist und einen Hebel umlegen willst, musst du', 20, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
37
+ DrawBMPText(' dich erst zur¸ckverwandeln (Enter/B4).', 20, 100, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
38
+ DrawBMPText('ï Im Sprung kannst du die Flugrichtung ein wenig mit Links/Rechts', 20, 120, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
39
+ DrawBMPText(' beeinflussen.', 20, 140, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
40
+ DrawBMPText('ï Wenn du getroffen wirst, bist du f¸r etwa eine Sekunde transparent', 20, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
41
+ DrawBMPText(' und unverwundbar. Nutze die Zeit, um aus dem Get¸mmel zu entkommen!.', 20, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
42
+
43
+ DrawBMPText('Ziel des Spiels ist es, durch die jeweils letzte nach oben f¸hrende', 20, 220, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
44
+ DrawBMPText('Treppe des Levels zu gehen. Wenn du genug Sterne hast, hast du das', 20, 240, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
45
+ DrawBMPText('Level geschafft. In vielen Runden muss man unterwegs auch eine oder', 20, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
46
+ DrawBMPText('mehrere Geiseln retten (ber¸hren), um gewinnen zu kˆnnen. Das Ziel', 20, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
47
+ DrawBMPText('einer Runde siehst du vor dem Spielen im Levelauswahlbildschirm.', 20, 300, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
48
+ DrawBMPText('Was dich daran hindert, durch das Level zu kommen, ist vor allem', 20, 320, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
49
+ DrawBMPText('die Lava, die unerbittlich steigt und alles auf ihrem Wege toastet.', 20, 340, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
50
+ DrawBMPText('Aber auch einige Gegner und R‰tsel stehen dir im Weg...', 20, 360, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
51
+
52
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 2 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
53
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
54
+ DXDraw.Flip;
55
+ end;
56
+ State_ReadMe3: begin
57
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
58
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
59
+
60
+ DrawBMPText('Die 5 verschiedenen Peter:', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
61
+
62
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Player], Act_Num, Bounds(20, 50, 48, 48), Boolean(Data.OptATI));
63
+ DrawBMPText('Das ist der normale Peter. Er ist wendig und kann Hebel', 80, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
64
+ DrawBMPText('umlegen (Leertaste/B2).', 80, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
65
+
66
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Player], Act_Num * 2 + Act_Action3, Bounds(20, 100, 48, 48), Boolean(Data.OptATI));
67
+ DrawBMPText('Ritterpeter ist stabiler und tr‰ger als Peter. Er kann daf¸r', 80, 110, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
68
+ DrawBMPText('mit dem Schwert zuschlagen (Leertaste/B2).', 80, 130, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
69
+
70
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Player], Act_Num * 5, Bounds(20, 150, 48, 48), Boolean(Data.OptATI));
71
+ DrawBMPText('Das ist Flitzebogenpeter. Er kann auf der Leertaste schieflen,', 80, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
72
+ DrawBMPText('verbraucht allerdings Munition.', 80, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
73
+
74
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Player], Act_Num * 9, Bounds(20, 200, 48, 48), Boolean(Data.OptATI));
75
+ DrawBMPText('Der Bombenlegerpeter kann Bomben werfen (Leertaste) und damit', 80, 210, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
76
+ DrawBMPText('Gegner bek‰mpfen und Sprengstoffkisten explodieren lassen.', 80, 230, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
77
+
78
+ DXImageListPack.Items[Image_Effects].DrawAdd(DXDraw.Surface, Bounds(20, 250, 48, 48), 8, 192);
79
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Player], Act_Num * 7, Bounds(20, 250, 48, 48), Boolean(Data.OptATI));
80
+ DrawBMPText('Feuerpeter hat keine Spezialaktion. Er ist beinahe', 80, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
81
+ DrawBMPText('unverwundbar und kann Gegner durch Ber¸hrung tˆten.', 80, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
82
+
83
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_MunitionBomber2 - 16, Bounds(10, 300, 48, 48), Boolean(Data.OptATI));
84
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_MunitionGun2 - 16, Bounds(20, 310, 48, 48), Boolean(Data.OptATI));
85
+ DrawBMPText('Pfeile sind Munition f¸r den Flitzebogenpeter, Bomben f¸r', 80, 310, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
86
+ DrawBMPText('Bombenlegerpeter.', 80, 330, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
87
+
88
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 3 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
89
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
90
+ DXDraw.Flip;
91
+ end;
92
+ State_ReadMe4: begin
93
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
94
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
95
+
96
+ DrawBMPText('Die 5 verschiedenen Gegner:', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
97
+
98
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Enemies], 0, Bounds(580, 50, 48, 48), Boolean(Data.OptATI));
99
+ DrawBMPText('Kinderschrecks sind schwache, schnelle Gegner und meistens', 20, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
100
+ DrawBMPText('keine grofle Gefahr.', 20, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
101
+
102
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Enemies], Act_Num * 3 + Act_Action4, Bounds(580, 100, 48, 48), Boolean(Data.OptATI));
103
+ DrawBMPText('Tempelw‰chter sind zwar langsam, halten aber mehr Schl‰ge aus', 20, 110, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
104
+ DrawBMPText('als Kinderschrecks.', 20, 130, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
105
+
106
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Enemies], Act_Num * 8, Bounds(580, 150, 48, 48), Boolean(Data.OptATI));
107
+ DrawBMPText('Diese schnellen Gegner explodieren bei Kontakt mit Peter und', 20, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
108
+ DrawBMPText('ziehen ihm so viel Energie ab. Gef‰hrlich!', 20, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
109
+
110
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Enemies], Act_Num * 4, Bounds(580, 200, 48, 48), Boolean(Data.OptATI));
111
+ DrawBMPText('Bogenbayern lauern meistens an schwer erreichbaren Orten und', 20, 210, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
112
+ DrawBMPText('schieflen auf Peter, sobald sie ihn sehen.', 20, 230, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
113
+
114
+ DXImageListPack.Items[Image_Effects].DrawAdd(DXDraw.Surface, Bounds(580, 255, 48, 48), 7, 192);
115
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Enemies], Act_Num * 7, Bounds(580, 250, 48, 48), Boolean(Data.OptATI));
116
+ DrawBMPText('Diese brennende Unholden lassen sich am besten aus der Distanz', 20, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
117
+ DrawBMPText('besiegen. Kontakt meiden!', 20, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
118
+
119
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 4 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
120
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
121
+ DXDraw.Flip;
122
+ end;
123
+ State_ReadMe5: begin
124
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
125
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
126
+
127
+ DrawBMPText('Die wichtigsten Objekte:', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
128
+
129
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Carolin - 16, Bounds(20, 50, 48, 48), Boolean(Data.OptATI));
130
+ DrawBMPText('Eine arme Gefangene. Muss durch Ber¸hrung gerettet werden.', 80, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
131
+ DrawBMPText('Stirbt sie, ist das Spiel sofort verloren!', 80, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
132
+
133
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Key - 16, Bounds(20, 100, 48, 48), Boolean(Data.OptATI));
134
+ DrawBMPText('Manche T¸ren kann man nur ˆffnen, wenn man noch einen', 80, 110, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
135
+ DrawBMPText('Schl¸ssel ¸brig hat.', 80, 130, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
136
+
137
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Star - 16, Bounds(15, 140, 48, 48), Boolean(Data.OptATI));
138
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Star2 - 16, Bounds(20, 150, 48, 48), Boolean(Data.OptATI));
139
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Star3 - 16, Bounds(25, 160, 48, 48), Boolean(Data.OptATI));
140
+ DrawBMPText('Diese Sterne m¸ssen meistens in einer bestimmten Anzahl', 80, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
141
+ DrawBMPText('eingesammelt werden, damit man die Runde schaffen kann.', 80, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
142
+
143
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Health - 16, Bounds(25, 195, 48, 48), Boolean(Data.OptATI));
144
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_EdibleFish2 - 16, Bounds(20, 210, 48, 48), Boolean(Data.OptATI));
145
+ DrawBMPText('Kleine Beeren f¸llen eine Energie auf, grofle vier. Rote', 80, 210, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
146
+ DrawBMPText('Fische f¸llen immer nur eine Energie auf.', 80, 230, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
147
+
148
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_MorphFighter - 16, Bounds(20, 250, 48, 48), Boolean(Data.OptATI));
149
+ DrawBMPText('Morphobjekte verwandeln Peter in den abgebildeten', 80, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
150
+ DrawBMPText('Spezialpeter (hier: Ritterpeter).', 80, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
151
+
152
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_MoreTime - 16, Bounds(25, 295, 48, 48), Boolean(Data.OptATI));
153
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_MoreTime2 - 16, Bounds(15, 310, 48, 48), Boolean(Data.OptATI));
154
+ DrawBMPText('Grofle und kleine Uhren geben ein paar Sekunden mehr', 80, 310, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
155
+ DrawBMPText('Spezialpeterzeit.', 80, 330, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
156
+
157
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 5 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
158
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
159
+ DXDraw.Flip;
160
+ end;
161
+ State_ReadMe6: begin
162
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
163
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
164
+
165
+ DrawBMPText('Weitere wichtige Objekte:', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
166
+
167
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Lever - 16, Bounds(25, 40, 48, 48), Boolean(Data.OptATI));
168
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_LeverRight - 16, Bounds(25, 90, 48, 48), Boolean(Data.OptATI));
169
+ DrawBMPText('Hebel und Schalter kann nur der normale Peter umlegen', 80, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
170
+ DrawBMPText('(Leertaste). Sie ver‰ndern normalerweise etwas an der', 80, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
171
+ DrawBMPText('Spielwelt (Spezialteil erscheint, Mauer verschwindet,', 80, 100, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
172
+ DrawBMPText('Hilfsobjekte werden erschaffen...', 80, 120, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
173
+
174
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_SlowDown - 16, Bounds(25, 145, 48, 48), Boolean(Data.OptATI));
175
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Crystal - 16, Bounds(15, 165, 48, 48), Boolean(Data.OptATI));
176
+ DrawBMPText('Sanduhren machen die Lava dauerhaft langsamer, Kristalle', 80, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
177
+ DrawBMPText('frieren sie wenige Sekunden lang ein.', 80, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
178
+
179
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Fly - 16, Bounds(20, 200, 48, 48), Boolean(Data.OptATI));
180
+ DrawBMPText('Mit diesen Fl¸geln kann Peter fliegen, bis sie vollst‰ndig', 80, 210, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
181
+ DrawBMPText('verblasst sind.', 80, 230, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
182
+
183
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Jump - 16, Bounds(27, 242, 48, 48), Boolean(Data.OptATI));
184
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Speed - 16, Bounds(13, 258, 48, 48), Boolean(Data.OptATI));
185
+ DrawBMPText('Siebenmeilenstiefel lassen Peter eine Weile schneller', 80, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
186
+ DrawBMPText('laufen, Adlerstiefel hˆher springen.', 80, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
187
+
188
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Points6 - 16, Bounds(28, 318, 48, 48), Boolean(Data.OptATI));
189
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Points - 16, Bounds(5, 290, 48, 48), Boolean(Data.OptATI));
190
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Points5 - 16, Bounds(5, 315, 48, 48), Boolean(Data.OptATI));
191
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Points2 - 16, Bounds(25, 290, 48, 48), Boolean(Data.OptATI));
192
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Points4 - 16, Bounds(15, 300, 48, 48), Boolean(Data.OptATI));
193
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Stuff], ID_Points3 - 16, Bounds(20, 310, 48, 48), Boolean(Data.OptATI));
194
+ DrawBMPText('Diese Objekte machen nichts Anderes als Punkte zu geben.', 80, 310, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
195
+ DrawBMPText('Nur einsammeln, wenn du zu viel Zeit hast!', 80, 330, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
196
+
197
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 6 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
198
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
199
+ DXDraw.Flip;
200
+ end;
201
+ State_ReadMe7: begin
202
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
203
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
204
+
205
+ DrawBMPText('Die wichtigsten Spezialkartenteile:', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
206
+
207
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_RocketUpLeft2, Bounds(20, 55, 48, 48), Boolean(Data.OptATI));
208
+ DrawBMPText('Katapultiert den Spieler bei Aktivierung (Pfeiltaste unten)', 80, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
209
+ DrawBMPText('in Richtung des Pfeiles (hier: oben links).', 80, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
210
+
211
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_MorphBomb, Bounds(20, 105, 48, 48), Boolean(Data.OptATI));
212
+ DrawBMPText('Verwandelt den Spieler bei Aktivierung in den abgebildeten', 80, 110, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
213
+ DrawBMPText('Spezialpeter (hier: Bombenlegerpeter).', 80, 130, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
214
+
215
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_ClosedDoor3, Bounds(20, 155, 48, 48), Boolean(Data.OptATI));
216
+ DrawBMPText('Diese T¸ren lassen sich nur ˆffnen, wenn man einen Schl¸ssel', 80, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
217
+ DrawBMPText('dabei hat.', 80, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
218
+
219
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_Blocker, Bounds(20, 205, 48, 48), Boolean(Data.OptATI));
220
+ DrawBMPText('Lassen sich mit Ritterpeter zerschlagen und mit Bombenleger-', 80, 210, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
221
+ DrawBMPText('peter zerbomben.', 80, 230, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
222
+
223
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_BigBlocker, Bounds(20, 255, 48, 48), Boolean(Data.OptATI));
224
+ DrawBMPText('Kann mit einer Bombe angez¸ndet werden. Explodiert dann und', 80, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
225
+ DrawBMPText('kann dabei auch weitere Kisten anz¸nden... Kettenreaktion!', 80, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
226
+
227
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_Bridge2, Bounds(20, 305, 48, 48), Boolean(Data.OptATI));
228
+ DrawBMPText('Diese alten, verwitterten Steinmauern fangen an, zu zer-', 80, 310, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
229
+ DrawBMPText('brˆseln, sobald ein Lebewesen draufl‰uft.', 80, 330, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
230
+
231
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 7 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
232
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
233
+ DXDraw.Flip;
234
+ end;
235
+ State_ReadMe8: begin
236
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
237
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
238
+
239
+ DrawBMPText('Mehr Spezialkartenteile:', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
240
+
241
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_BigBlocker3, Bounds(20, 55, 48, 48), Boolean(Data.OptATI));
242
+ DrawBMPText('L‰sst sich auch zersprengen, explodiert aber nicht', 80, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
243
+ DrawBMPText('selbst, im Gegensatz zu Sprengstoffkisten.', 80, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
244
+
245
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_Slime2, Bounds(20, 105, 48, 48), Boolean(Data.OptATI));
246
+ DrawBMPText('Auf diesem klebrigen Schleim kann Peter nur sehr', 80, 110, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
247
+ DrawBMPText('langsam laufen und nicht hoch springen.', 80, 130, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
248
+
249
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_StairsUp, Bounds(20, 155, 48, 48), Boolean(Data.OptATI));
250
+ DrawBMPText('Geht man in eine solche T¸r, kommt man aus der n‰chsten', 80, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
251
+ DrawBMPText('T¸r in Richtung des Pfeiles raus. Kann verschlossen sein.', 80, 180, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
252
+
253
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_AirRocketUp2, Bounds(20, 205, 48, 48), Boolean(Data.OptATI));
254
+ DrawBMPText('L‰uft man an diesen Kartenteilen vorbei, schleudern sie', 80, 210, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
255
+ DrawBMPText('den Spieler in die angezeigte Richtung.', 80, 230, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
256
+
257
+ MyStretchDraw(DXDraw.Surface, DXImageListPack.Items[Image_Tiles], Tile_Spikes, Bounds(20, 255, 48, 48), Boolean(Data.OptATI));
258
+ DrawBMPText('Diese Stacheln sind unangenehm f¸r Gegner und Spieler.', 80, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
259
+ DrawBMPText('Manchmal auch an der Decke zu finden.', 80, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
260
+
261
+ DrawBMPText('So, und jetzt noch viel Gl¸ck und Spafl beim Spielen von', 80, 335, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
262
+ DrawBMPText('Peter Morphose!', 230, 360, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
263
+
264
+ DrawBMPText('Mit den Pfeiltasten kannst du in der Hilfe bl‰ttern. (Seite 8 von 8)', 14, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
265
+ DrawBMPText('Auf Escape kommst du zum Hauptmen¸ zur¸ck.', 131, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
266
+ DXDraw.Flip;
267
+ end;
268
+ =end
@@ -0,0 +1,43 @@
1
+ # Encoding: UTF-8
2
+
3
+ class LevelSelection < State
4
+ LEVELS_ON_SCREEN = 4
5
+
6
+ def initialize
7
+ @@title ||= Gosu::Image.new 'media/title_dark.png'
8
+ @@ls_top ||= 0
9
+ @@ls_sel ||= 0
10
+ @@levels ||= Dir.glob('levels/*.pml').map(&LevelInfo.method(:new)).sort
11
+
12
+ song(:menu).play
13
+ end
14
+
15
+ def draw
16
+ @@title.draw 0, 0, 0
17
+ draw_rect 631, 0, 1, 400, 0xff003010
18
+ draw_rect 632, 0, 16, 400, 0xff004020
19
+ LEVELS_ON_SCREEN.times do |y|
20
+ break if y == @@levels.size
21
+ @@levels[y + @@ls_top].draw y * 100, @@ls_top + y == @@ls_sel
22
+ end
23
+ if @@levels.size > LEVELS_ON_SCREEN then
24
+ draw_string '|', 632, 384.0 * @@ls_top / (@@levels.size - LEVELS_ON_SCREEN)
25
+ end
26
+ draw_centered_string t('Wähle mit den Pfeiltasten ein Level aus und starte es mit Enter.'), WIDTH / 2, 434
27
+ #draw_centered_string t('Willst du zurück zum Hauptmenü, drücke Escape.'), WIDTH / 2, 446
28
+ end
29
+
30
+ def button_down(id)
31
+ if menu_cancel? id then
32
+ State.current = nil#Menu.new
33
+ elsif menu_prev? id then
34
+ @@ls_sel -= 1 if @@ls_sel > 0
35
+ @@ls_top -= 1 if @@ls_sel < @@ls_top
36
+ elsif menu_next? id then
37
+ @@ls_sel += 1 if @@ls_sel < @@levels.size - 1
38
+ @@ls_top += 1 if @@ls_sel >= @@ls_top + LEVELS_ON_SCREEN
39
+ elsif menu_confirm? id then
40
+ State.current = Game.new(@@levels[@@ls_sel])
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,45 @@
1
+ # Encoding: UTF-8
2
+
3
+ class Menu < State
4
+ ITEMS = 5
5
+
6
+ def initialize
7
+ @title = Gosu::Image.new 'media/title_dark.png'
8
+ @buttons = Gosu::Image.load_tiles 'media/buttons.png', -2, -ITEMS
9
+ @selection = 0
10
+ end
11
+
12
+ def draw
13
+ @title.draw 0, 0, 0
14
+
15
+ (0...ITEMS).each do |index|
16
+ image_index = index * 2
17
+ image_index += 1 if index == @selection
18
+ @buttons[image_index].draw 120, 20 + 70 * index, 0
19
+ end
20
+
21
+ draw_centered_string 'Wähle mit den Pfeiltasten aus, was du tun willst und drücke Enter.', WIDTH / 2, 435
22
+ end
23
+
24
+ def button_down id
25
+ if menu_prev? id then
26
+ @selection -= 1 if @selection > 0
27
+ elsif menu_next? id then
28
+ @selection += 1 if @selection < ITEMS - 1
29
+ elsif menu_confirm? id
30
+ sound(:whoosh).play
31
+ case @selection
32
+ when 0 then
33
+ State.current = LevelSelection.new
34
+ when 1 then
35
+ State.current = Help.new
36
+ when 2 then
37
+ State.current = Options.new
38
+ when 3 then
39
+ State.current = Credits.new
40
+ when 4 then
41
+ State.current = nil
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,81 @@
1
+ # TODO convert to Ruby or not
2
+ =begin
3
+ State_Options: begin
4
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
5
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
6
+
7
+ DrawBMPText('Optionsmen¸ (Seite 1)', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
8
+
9
+ DrawBMPText('Musik', 20, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
10
+ if PseudoMusic = 0 then DrawBMPText('<aus>', 575, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
11
+ if PseudoMusic = 1 then DrawBMPText('<ein>', 575, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
12
+ DrawBMPText('Schaltet die Musik ein oder aus. (Benˆtigt Peter-Neustart.)', 20, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
13
+ if SelectedOptionItem = 0 then DXDraw.Surface.FillRectAdd(Bounds(0, 60, 640, 16), $004896);
14
+
15
+ DrawBMPText('Blut und Schreie', 20, 120, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
16
+ if Data.OptBlood = 0 then DrawBMPText('<aus>', 575, 120, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0)
17
+ else DrawBMPText('<ein>', 575, 120, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
18
+ DrawBMPText('Schaltet Blut an und aus. Viele finden, dass es nicht zum Spiel', 20, 140, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
19
+ DrawBMPText('passt. Aber manche kˆnnen ja gar nicht ohne leben...', 20, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
20
+ if SelectedOptionItem = 1 then DXDraw.Surface.FillRectAdd(Bounds(0, 120, 640, 16), $004896);
21
+
22
+ DrawBMPText('Positionsanzeige im Spiel', 20, 200, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
23
+ if Data.OptShowStatus = 0 then DrawBMPText('<aus>', 575, 200, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0)
24
+ else DrawBMPText('<ein>', 575, 200, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
25
+ DrawBMPText('Blendet im Spiel links eine Leiste zur besseren Orientierung ein.', 20, 220, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
26
+ if SelectedOptionItem = 2 then DXDraw.Surface.FillRectAdd(Bounds(0, 200, 640, 16), $004896);
27
+
28
+ DrawBMPText('Behebung des Rosa-R‰nder-Problems', 20, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
29
+ if Data.OptATI = 0 then DrawBMPText('<aus>', 575, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0)
30
+ else DrawBMPText('<ein>', 575, 260, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
31
+ DrawBMPText('Einschalten, wenn Grafiken in Hilfe oder Editor rosa R‰nder haben.', 20, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
32
+ if SelectedOptionItem = 3 then DXDraw.Surface.FillRectAdd(Bounds(0, 260, 640, 16), $004896);
33
+
34
+ DrawBMPText('Seite 1 Seite 2', 230, 340, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
35
+ if SelectedOptionItem = 4 then DXDraw.Surface.FillRectAdd(Bounds(220, 340, 83, 16), $004896);
36
+
37
+ DrawBMPText('W‰hle mit den Pfeiltasten "oben" und "unten" aus, was du ‰ndern willst', 3, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
38
+ DrawBMPText('und ‰ndere den Wert mit "links" und "rechts". Zur¸ck mit "Escape".', 12, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
39
+ DXDraw.Flip;
40
+ end;
41
+
42
+ State_Options2: begin
43
+ if not (DXDraw.CanDraw and Application.Active) then Exit;
44
+ DXImageList.Items[Image_TitleDark].Draw(DXDraw.Surface, 0, 0, 0);
45
+
46
+ DrawBMPText('Optionsmen¸ (Seite 2)', 20, 20, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
47
+
48
+ DrawBMPText('Grafikqualit‰t', 20, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
49
+ if Data.OptQuality = 0 then DrawBMPText('<schlecht>', 530, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
50
+ if Data.OptQuality = 1 then DrawBMPText('<standard>', 530, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
51
+ if Data.OptQuality = 2 then DrawBMPText('<sehr gut>', 530, 60, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
52
+ DrawBMPText('ƒndert die Grafikqualit‰t. Bei ''schlecht'' fehlen ein paar Effekte,', 20, 80, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
53
+ DrawBMPText('bei ''sehr gut'' kommen ein paar neue (¸bertriebene) hinzu.', 20, 100, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
54
+ if SelectedOptionItem = 0 then DXDraw.Surface.FillRectAdd(Bounds(0, 60, 640, 16), $004896);
55
+
56
+ DrawBMPText('Effekte', 20, 140, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
57
+ DrawBMPText('<' + IntToStr(Data.OptEffects) + '%>', 620 - (Length(IntToStr(Data.OptEffects)) + 3) * 9, 140, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
58
+ DrawBMPText('Gibt an, wieviel Prozent der Standardeffekte erzeugt werden.', 20, 160, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
59
+ if SelectedOptionItem = 1 then DXDraw.Surface.FillRectAdd(Bounds(0, 140, 640, 16), $004896);
60
+
61
+ DrawBMPText('Sprungsystem', 20, 200, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
62
+ if Data.OptOldJumping = 1 then DrawBMPText('<alt>', 575, 200, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0)
63
+ else DrawBMPText('<neu>', 575, 200, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
64
+ DrawBMPText('Wer Probleme mit der alten Sprungsteuerung hat, kann versuchen, ob', 20, 220, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
65
+ DrawBMPText('er mit der neuen besser spielen kann.', 20, 240, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
66
+ if SelectedOptionItem = 2 then DXDraw.Surface.FillRectAdd(Bounds(0, 200, 640, 16), $004896);
67
+
68
+ DrawBMPText('Texte', 20, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
69
+ if Data.OptShowTexts = 1 then DrawBMPText('<ein>', 575, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0)
70
+ else DrawBMPText('<aus>', 575, 280, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
71
+ DrawBMPText('Schaltet Texte bei eingesammelten Objekten ein oder aus.', 20, 300, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
72
+ if SelectedOptionItem = 3 then DXDraw.Surface.FillRectAdd(Bounds(0, 280, 640, 16), $004896);
73
+
74
+ DrawBMPText('Seite 1 Seite 2', 230, 340, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
75
+ if SelectedOptionItem = 4 then DXDraw.Surface.FillRectAdd(Bounds(337, 340, 83, 16), $004896);
76
+
77
+ DrawBMPText('W‰hle mit den Pfeiltasten "oben" und "unten" aus, was du ‰ndern willst', 3, 424, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
78
+ DrawBMPText('und ‰ndere den Wert mit "links" und "rechts". Zur¸ck mit "Escape".', 12, 446, 0, DXImageList.Items[Image_Font], DXDraw.Surface, 0);
79
+ DXDraw.Flip;
80
+ end;
81
+ =end
@@ -0,0 +1,11 @@
1
+ class State
2
+ class << self
3
+ attr_accessor :current
4
+ end
5
+
6
+ def update; end
7
+ def draw; end
8
+ def button_down id; end
9
+ def button_up id; end
10
+ def needs_cursor?; end
11
+ end