petermorphose 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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