1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
|
class Monster1:
def __init__(self, x, y, dir, player=0):
self.x = x
self.y = y
self.dir = (1, -1)[dir]
self.player = player
def nrange(start,n):
return list(range(start,start+n))
class Nasty(Monster1):
right = nrange(239,4)
left = nrange(243,4)
jailed = nrange(247,3)
dead = nrange(253,4)
right_angry = nrange(800,4)
left_angry = nrange(804,4)
class Monky(Monster1):
right = nrange(265,4)
left = nrange(269,4)
jailed = nrange(273,3)
dead = nrange(279,4)
left_weapon = right_weapon = nrange(451,1) # FIXME
decay_weapon = nrange(452,4) # FIXME
right_angry = nrange(808,4)
left_angry = nrange(812,4)
class Ghosty(Monster1):
right = nrange(291,4)
left = nrange(295,4)
jailed = nrange(299,3)
dead = nrange(305,4)
right_angry = nrange(816,4)
left_angry = nrange(820,4)
class Flappy(Monster1):
right = nrange(317,4)
left = nrange(321,4)
jailed = nrange(325,3)
dead = nrange(331,4)
right_angry = nrange(824,4)
left_angry = nrange(828,4)
class Springy(Monster1):
right = nrange(343,4)
left = nrange(347,4)
jailed = nrange(351,3)
dead = nrange(357,4)
right_jump = nrange(369,2)
left_jump = nrange(371,2)
right_angry = nrange(832,4)
left_angry = nrange(836,4)
right_jump_angry = nrange(840,2)
left_jump_angry = nrange(842,2)
class Orcy(Monster1):
right = nrange(373,4)
left = nrange(377,4)
jailed = nrange(381,3)
dead = nrange(387,4)
left_weapon = nrange(456,4)
right_weapon = nrange(460,4)
decay_weapon = nrange(456,0) # FIXME
right_angry = nrange(844,4)
left_angry = nrange(848,4)
class Gramy(Monster1):
right = nrange(399,4)
left = nrange(403,4)
jailed = nrange(407,3)
dead = nrange(413,4)
left_weapon = right_weapon = nrange(472,4) # FIXME
right_angry = nrange(852,4)
left_angry = nrange(856,4)
class Blitzy(Monster1):
right = left = nrange(425,4)
jailed = nrange(429,3)
dead = nrange(435,4)
right_angry = left_angry = nrange(860,4)
left_weapon = right_weapon = nrange(476,1) # FIXME
class Ghost:
left = nrange(443,4)
right = nrange(447,4)
class PlayerBubbles:
appearing = nrange(952,5)
bubble = nrange(910,3)
explosion = nrange(913,3)
left_weapon = nrange(464,4)
right_weapon = nrange(468,4)
decay_weapon = []
class LetterBubbles:
Extend = nrange(128,3) # FIXME
eXtend = nrange(136,3)
exTend = nrange(144,3)
extEnd = nrange(152,3)
exteNd = nrange(160,3)
extenD = nrange(168,3)
class DyingBubble:
first = nrange(163,3)
medium = nrange(171,3)
last = nrange(155,3)
class Fire:
ground = nrange(490,4)
drop = 489
class Lightning:
fired = 488
class Water:
h_flow = 900
v_flow = 901
start_right = 902
start_left = 904
bottom = 903
top = 905
tl_corner = 906
bl_corner = 907
br_corner = 908
tr_corner = 909
class Flood:
waves = nrange(140,4)
fill = 495
class MiscPoints:
pink_100 = 496
class DigitsMisc:
digits_mask = nrange(519,10)
digits_border = nrange(920,10)
digits_white = nrange(930,10)
class PotionBonuses:
coin = 477
flower = 478
trefle = 479
rainbow = 480
green_note = 481
blue_note = 692
class Bonuses:
monster_bonuses = [
(593,1000), # banana
(594,2000), # peach
(595,3000), # quince
(596,4000), # pastec
(597,5000), # wine
(598,6000), # ananas
(599,8000) # diamond
]
door = 139 # Lots of diamonds
red_potion = 637 #\ .
green_potion = 638 # > Clean the level and fill the top 5 lines with one of the PotionBonuses.
yellow_potion = 639 #/
kirsh = 600
icecream1 = 601 # NOT_USED
erdbeer = 602
fish1 = 603
tomato = 604
donut = 605
apple = 606
corn = 607
icecream2 = 608 # NOT_USED
radish = 609
cyan_ice = 610 #\ .
violet_ice = 611 #|
peach2 = 612 # > Produced from the bubbles after a wand.
pastec2 = 613 #|
cream_pie = 614 #|
sugar_pie = 615 #/
brown_wand = 620 #\ .
yellow_wand = 621 #|
green_wand = 622 # > Bubbles turn into bonus of the previous set after
violet_wand = 623 # > the death of the last enemy plus a mega-bonus.
blue_wand = 624 #|
red_wand = 625 #/
violet_chest = 626 #\ .
blue_chest = 627 # > Bubbles turn into diamonds plus after the death
red_chest = 628 # > of the last enemy plus a mega-diamond
yellow_chest = 629 #/
shoe = 631 # speed player movements
grenade = 632 # put fire everywhere
brown_umbrella = 633 # fire rain
grey_umbrella = 634 # water rain
violet_umbrella = 635 # spinning balls rain
clock = 636 # time travel
coffee = 641 # Speed player's movements and fire rate.
book = 642 # Produces stars the middle-top going in any direction which kill the enemy upon contact.
heart_poison = 643 # Froze the enemy and they are now killed on contact.
gold_crux = 644 # become a bubble
red_crux = 645 # become a monster
blue_crux = 646 # become a monster
extend = 647 # Give 100'000 Points to the player and finish the level.
ring = 640 # lord of the ring
green_pepper = 648 # hot stuff!
orange_thing = 649 # slippy
aubergine = 650 # rear gear
carrot = 651 # angry monsters
rape = 652 # auto-fire
white_carrot = 653 # fly
chickpea = 654 # shield
mushroom = 655 # pinball mode
egg = 656 # players permutation
chestnut = 657 # variation of frames per second
green_thing = 658 # sugar bomb
icecream3 = 659 # \ each icecream becomes two of the
icecream4 = 660 # \ next kind, which scores more points
icecream5 = 661 # / that's a lot of points in total
icecream6 = 662 # /
softice1 = 663 # shoot farther
softice2 = 665 # shoot nearer1
french_fries = 664 # shoot 10 lightning bubbles
custard_pie = 666 # shoot faster
lollipop = 667 # invert left and right
cocktail = 668 # short-lived bubbles
ham = 669 # wall builder
bomb = 670 # explodes the structure of the level
beer = 671 # shoot 10 water bubbles
emerald = 672 # mega points
fish2 = 673 # mega blitz
sapphire = 681 # mega points
ruby = 682 # mega points
tin = 674 # angry (double-speed) player
hamburger = 675 # shoot 10 fire bubbles
insect = 676 # walls fall down
blue_necklace = 677 # player ubiquity
violet_necklace = 679 # monster ubiquity
butterfly = 678 # lunar gravity
conch = 680 # complete water flood
yellow_sugar = 630 # from a bonbon bomb
blue_sugar = 691 # from a bonbon bomb
class Diamonds:
# Produced from the bubbles after last enemy is killed and a chest or wand has been caught.
violet = 616
blue = 617
red = 618
yellow = 619
class Stars:
# Effect of the book. Kill monsters on contact.
blue = nrange(940,2)
yellow = nrange(942,2)
red = nrange(944,2)
green = nrange(946,2)
magenta = nrange(948,2)
cyan = nrange(950,2)
COLORS = ['blue', 'yellow', 'red', 'green', 'magenta', 'cyan']
class SpinningBalls:
free = nrange(482,4)
bubbled = nrange(486,2) # NOT_USED
class BigImages:
cyan_ice = 10 # Megabonus produced after a wand
violet_ice = 11
peach2 = 12
pastec2 = 13
cream_pie = 14
sugar_pie = 15
violet = 16
blue = 17
red = 18
yellow = 19
blitz = 30
hurryup = nrange(31,2)
class birange:
def __init__(self, a,b,n):
self.a = a
self.n = n
def __getitem__(self, pn):
return list(range(self.a + 1000*pn, self.a + 1000*pn + self.n))
class bidict:
def __init__(self, a,b):
self.a = list(a.items())
def __getitem__(self, pn):
pn *= 1000
d = {}
for key, value in self.a:
d[key] = value + pn
return d
class GreenAndBlue:
water_bubbles = birange(182,185,3)
fire_bubbles = birange(176,554,3)
light_bubbles = birange(179,557,3)
normal_bubbles = birange(188,195,3)
new_bubbles = birange(191,203,4)
players = birange(210,226,13)
jumping_players = birange(683,687,4)
new_players = birange(693,696,3)
numbers = birange(499,509,10) # FIXME: already seen below
comming = birange(693,696,3)
points = bidict({
100: 529,
150: 530,
200: 531,
250: 532,
300: 533,
350: 534,
500: 535,
550: 536,
600: 537,
650: 538,
700: 539,
750: 540,
800: 541,
850: 542,
900: 543,
950: 544,
1000: 545,
2000: 546,
3000: 547,
4000: 548,
5000: 549,
6000: 550,
7000: 551,
8000: 552,
9000: 553,
10000: 20,
20000: 21,
30000: 22,
40000: 23,
50000: 24,
60000: 25,
70000: 26,
},{
100: 561,
150: 562,
200: 563,
250: 564,
300: 565,
350: 566,
500: 567,
550: 568,
600: 569,
650: 570,
700: 571,
750: 572,
800: 573,
850: 574,
900: 575,
950: 576,
1000: 577,
2000: 578,
3000: 579,
4000: 580,
5000: 581,
6000: 582,
7000: 583,
8000: 584,
9000: 585,
10000: 90,
20000: 91,
30000: 92,
40000: 93,
50000: 94,
60000: 95,
70000: 96,
})
gameover = birange(497,498,1)
digits = birange(499,509,10)
fish = birange(700,707,7)
class Butterfly(Monster1):
right = [('butterfly', 'fly', n) for n in range(2)]
left = [Bonuses.insect, Bonuses.butterfly]
jailed = [('butterfly', 'jailed', n) for n in range(3)]
dead = [('butterfly', 'dead', n) for n in range(4)]
class Sheep(Monster1):
right = [('sheep', 1, n) for n in range(4)]
left = [('sheep',-1, n) for n in range(4)]
right_angry = right
left_angry = left
|