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