;****************** SPECIAL FLAGS AND RAM USAGE ****************** ;COMMON DATA RAM IS USED AS FOLLOWS IN THIS GAME (LEE MAJORS GAME) ; ;0,1 = PLACE TO SAVE REGISTER DURING AN INT. BE SURE TO LOCK OTHERS OUT ; WITH AN INSTRUCTIONS COMMAND. ;2 = LEVEL WE ARE ON IN THE PYRAMID ;3 = DELAY TIME ON ROCKETS ;4 = COUNT OF TORCHES ;5 = COUNT OF BOOMERRANGS ;6 = COUNT OF SHIELDS ;7 = COUNT SUCTION CUPS ;8 = COUNT KEYS ;9 = COUNT BRASS KNUCKLES ;10= STATUS SELECTOR ;11= MAP ICON ;12= COUNT DOWN OF TORCH ENTITY ;13-14 = UNUSED ;15=MUSIC MAKER ;16 = AMOUNT OF DYNAMITE THE HERO HAS. ;17 = USED TO MAKE A CHEAT MODE PASSWORD. ;18 = USED TO DECIDE WHICH DEMO SCREEN TO SHOW ;19 = TRUE IF THIS WORLD HAS CLIFFS THAT FALL TO AN ENTITIES DEATH. ; PRECIPICE JUMPERS CHECK THIS AND WON'T MAKE DARING JUMPS. ;20 = SET AT WORLD START TO -1 SIGNAL THAT WE SHOULDN'T INTERRUPT THE ; THEME SONG YET. FIRST TIME THE MUSIC GETS TO PLAY THROUGH ; WE WILL RESET IT SO ENEMY THEMES CAN INTERRUPT. AN INTERMEDIATE ; STATE OF 1 IS USED TO SIGNAL WE DID INDEED GET TO START IT ONCE. ;21 = HERO'S HEALTH FROM PREVIOUS WORLD. USED TO CONTINUE WITH SAME HEALTH ; IN THE NEXT WORLD. ;22 = HEALTH OF SPECIAL ENTITY IN A GIVEN WORLD SUCH AS A SORCERER ;23 = WORLD TO CONTINUE IN. -1 IF NEW GAME. ;24 = PASSED TO THE STATUS MAP TO SIGNAL THE WORLD TO SHOW WITH X. ;25 = DELAY BEFORE JUMPING ACROSS A PRECIPICE ;26 = DELAY BEFORE JUMPING DOWN FROM A PERCH ;27 = FREEZE TIME WHEN AN ENTITY IS THROWN ;28 = FREEZE TIME WHEN AN ENTITY IS HURT. ;29 = DELAY BEFORE ATTACK IF ENTITY MAD OR DYING ;30 = DELAY BEFORE ATTACK IF ENTITY IS NOT MAD OR DYING ;31 = SUPER SOLID CHAR VALUE (VALUE TO USE AT START OF JUMP TO TURN SOLID OFF ; ;REMEMBER THAT THE DELAY TIMES ABOVE ARE ADDED TO THE CODE PROCESSING OVERHEAD ;FOR THE MODE IN QUESTION. IN SOME CASES ITS DESIRABLE TO SET THESE TO 0 ;WHICH IS THE MINIMUM. ; ;*************************HERO CODE ******************* ; FOR THE HERO THE BEHAVIOR BITS ARE USED AS FOLLOWS: ; OPTION1 MEANS YOU ARE ON A LADDER ; FAST MEANS YOU ARE USING THE SUCTION CUPS ; WEAK IS USED FOR SUCTION CUP MODE ; STATE RAM IS USED TO SAVE AND RESTORE THE HERO'S REGISTER HEROINFO: .DRW HERO3 ;WAKEUP .DRW HWAKEUP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW HHURTX ;HERO HURT BY ATTACK .DRW HHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW HERO1A ;FALLING .DRW HFALL .DB H'00,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW HCOMMAND .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW -1 ;JUMPING .DRW HJUMP .DB H'00,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING. NO ANIMATION, IT SELECTS WHICH. .DRW HATTACK .DB H'40,-1 .DB H'56,H'11 .DB H'11,H'01 .DRW -1 ;DUCKING. WE DON'T HAVE ONE, BUT USE IT FOR .DRW HSELECT ;SELECT. .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW HERO2 ;STANDING .DRW HSTAND .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW HRUN ;WALKING .DRW HWALK .DB H'23,-1 .DB 0,0 .DB 0,0 PPUNCH: .DRW HKICK ;POWER PUNCH .DRW HMIDDLE .DB H'40,1 .DB H'56,H'24 ;DOES 7 DAMAGE AND THROWS ENEMY BACK+PNTS .DB H'11,H'01 WPUNCH: .DRW HKICK ;WEAK PUNCH .DRW HMIDDLE .DB H'40,1 .DB H'56,H'11 .DB H'11,H'01 HTHROW: .DRW HTHROWS ;DUCKING. WE DON'T HAVE ONE, BUT USE IT FOR .DRW -1 ;SELECT. .DB H'40,-1 .DB 0,0 .DB 0,0 HDIE: .DRW HDUCKSX ;LOST 1 HERO .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 ONLADDER: .DRW HCLIMB .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 SUCTHORZ: .DRW HCLIMB .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 HBALL: .DRW HDUCKSX ;HERO HURT REAL BAD .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 SHIELD: .DRW HSHIELD ;HERO'S SHIELD .DRW SHCOUNT .DB 0,0 .DB H'40,H'15 .DB H'42,H'00 SHCOUNT: .DB TARGET .DRW ALL^HERO0 .DB SOLIDSTATE,OFF .DB LINK,0,0,ID .DRW HEROID .DB SETCOUNTER,255 SHC10: .DB REARM .DB ABOVECOUNT .DRW SHC10 .DB 1 .DB DIE,0 HWAKEUP: ;HERO WAKEUP MOVEMENT LIST .DB INSTRUCTIONS,H'8F .DB ACTIVE .DRW SAFEDIE .DB ID .DRW HEROID ;DON'T MAKE A PHANTOM HERO (FOR WARP ZONE) MK4: .DB SOUNDBUSY .DRW HWA10 .DB ON,ON,DONTCARE,ON MK5: .DB RANDOM ;RANDOMLY PICK WHICH THEME TO PLAY .DRW MK20 .DB 127 .DB SOUND .DRW TEMPTHEME,TEMPMELODY,0,0 ;THEN MAIN THEME .DB SKIP .DRW HWA10 MK20: .DB SOUND .DRW DTHEME0,DTHEME1,0,0 HWA10: .DB JOYSTICK,0 .DB ZEROJOYX,ZEROJOYY .DB IDENTIFY .DRW HERO0 .DB LOAD,21 .DB SETHEALTH,REGISTER ;GET THE HEALTH FOR THE HERO .DB SETSELECT,EDUCK ;SET SELECT TO DUCK MODE .DB IFBEHAVIOR .DRW SUC5 .DB FAST ;SUCTION CUPS ARE ON. GO USE THEM NEWTIME: .DB CREATE,WORLDGUYID,255,192,0 ;LAUNCH THE WORLD CONFIGURER .DB ACTIVATE,EWALK ;WHILE WALKING, PRESSING THE ATTACK BUTTON (B) WILL SPEED UP THE ;RUN IF NO ENEMY IN RANGE. THEN IF B IS RELEASED, WE WILL SLOW BACK ;DOWN. BUT IF WHILE B IS DOWN AN ENEMY COMES INTO SIGHT, WE KNEE ATTACK ;IT. HWALK: ;HERO WALKING MOVEMENT LIST .DB INSTRUCTIONS,10 .DB TARGET .DRW BULLET1|BULLET0|DEADLY|KILLER|HARMLESS|BENIGN|HELPER|ENEMY .DB FACE,JOYDIR|DOWN .DB RESETBEHAVIOR,OPTION1|FAST .DB ENTITYBITS,H'9A ;FIX HIS CONTROL BITS .DB GRAVITY,-1 .DB FRICTION,DEF_XFRICT,DEF_YFRICT ;RESTORE FRICTION .DB MOMLIMIT,60,DEF_YLIM ;ASSUME FAST SPEED RESTORED .DB BUTTON .DRW HW5 .DB B_BUTTON ;IF B PRESSED, DON'T RESET SPEED .DB MOMLIMIT,36,-1 ;PUT BACK NORMAL RUNNING SPEED IF NO B HW5: .DB INSTRUCTIONS,6 .DB WHOSLINKED .DB EQUAL ;LOCK UP IF WEIRD ENTITY STUCK TO YOU .DRW STUCKHERO .DRW 51 .DB WHOSLINKED .DB EQUAL ;CHECK IF SHIELD ON .DRW SHIELDON .DRW 59 .DB ENABLE,ALL^DUCKING ;ENABLE ALL BUT DUCKING .DB SKIP .DRW HW6 SHIELDON: .DB DISABLE,HURTING ;DISABLE HURTING IF SHIELD LINKED TO YOU HW6: .DB ADDJOYX .DB INSTRUCTIONS,4 .DB SPEED .DRW HW10 .DB 7,-1 ;IF SPEED BELOW MOVING, DON'T RESET COUNTER .DB SETCOUNTER,6 ;RESET COUNTER TO CHECK WHEN STANDING STILL .DB BUTTON .DRW HW30 .DB B_BUTTON ;IF B PRESSED, DON'T RESET SPEED .DB MOMLIMIT,36,-1 ;PUT BACK NORMAL RUNNING SPEED IF NO B HW10: .DB COUNT .DRW HW20 .DB 1 ;GO TO STAND MODE IF STILL FOR 1/2 SECONDS .DB ADDJOYX .DB YVISUAL .DRW HW5 .DB 200 ;IF OUR FEET GO BELOW 200, WE ARE DEAD .DB SKIP .DRW HH20 ;SHARED ENTRY POINT TO GO INTO STAND MODE HW20: .DB ACTIVATE,ESTAND HW30: .DB MOMLIMIT,60,-1 ;IF B DOWN, INCREASE SPEED .DB SKIP ;(IDEAL IS 64 TO 48) .DRW HW5 ;THE GHOST HAS GRABBED THE HERO. WAIT TILL IT LETS GO. STUCKHERO: .DB DISABLE,ALL .DB ENABLE,HURTING .DB ZEROJOYX,ZEROJOYY ;DON'T LET KEYBOARD STUFF BUILD UP .DB WHOSLINKED .DB NOTEQUAL ;LOCK UP IF WEIRD ENTITY STUCK TO YOU .DRW UNSTUCK .DRW 51 .DB YVISUAL .DRW STUCKHERO .DB 200 .DB SKIP .DRW HH20 UNSTUCK: .DB ACTIVATE,EWALK HHURT: ;HERO HURT MOVEMENT LIST .DB INSTRUCTIONS,7 .DB ATTACKER .DRW GRABBED .DB 47 .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER ;RESTORE SOLID VALUE .DB SOLIDSTATE,SAFE ;CATCH GETTING HURT IN A JUMP .DB GRAVITY,-1 .DB FETCHREG,DAMAGE ;SEE HOW MUCH DAMAGE .DB ATTACK .DRW DYNBLAST .DB 4 ;DYNAMITE ATTACK? .DB DAMAGE ;APPLY HEALTH DAMAGE .DB INSTRUCTIONS,3 .DB LOWNOISE .DRW BUMPSND .DB ATTACK ;SEE IF THROWBACK ATTACK (0) .DRW HH10 .DB 1 ;IF SO, ALWAYS GO THROW HIM BACK. .DB INSTRUCTIONS,6 .DB FETCHREG,HEALTH ;GET OUR HEALTH LEVEL .DB ANDREG,3,0 ;GET LOW 2 BITS .DB EQUAL .DRW HH10 .DRW 0 ;IF LOW 2 BITS ZERO, THROW HIM BACK .DB THROWBACK,24,0 ;OTHERWISE, WE ALWAYS SKID A BIT .DB DELAY,6 .DB CREATE,STATGUYID,255,192,0 ;LAUNCH THE STATUS BAR UPDATER .DB ACTIVATE,EWALK GRABBED:.DB LINK,0,0,ID ;LINK TO GRABBY THING .DRW 47 GRAB10: .DB ACTIVE ;CHECK IF STILL GRABBED .DRW GRAB10 .DB ID .DRW 47 .DB SETMOM,0,0 .DB UNLINK .DB SEQUENCE .DRW GRABEXPLODE .DB DELAY,7 .DB SEQUENCE .DRW DUMB .DB DELAY,30 .DB GOTO,-1,194 ;FORCE USING WIPEOUT .DB SKIP ;DIE IF NOT GRABBED ANYMORE .DRW HH22 ;HERO GOT HURT BY DYNAMITE. IT JUST THROWS HIM UP, ITS A STUNT HE CAN USE. DYNBLAST: .DB INSTRUCTIONS,H'87 .DB DISABLE,ALL .DB SEQUENCE .DRW HBALL .DB ADDMOM,0,-96 .DB GRAVITY,0 .DB SOLIDSTATE,OFF .DB DELAY,8 .DB GRAVITY,-1 .DB ACTIVATE,EFALL ;LOW BITS OF HERO HEALTH ARE 0. SEE IF THE HERO IS DEAD. HH10: .DB INSTRUCTIONS,H'85 .DB THROWBACK,96,-96 .DB MOMLIMIT,36,-1 ;PUT BACK NORMAL X SPEED .DB XVISUAL ;CATCH AGAINST RIGHT OF SCREEN .DRW HH11 .DB 248 .DB SETMOM,-36,-96 ;IF THAT CASE, THROW OTHER WAY TO .DB SETMOM,-36,-96 ;PREVENT GETTING STUCK HH11: .DB XVISUAL .DRW HH16 .DB 16 HH13: .DB ASSESS .DRW HH20 ;IF DEAD, DO THE DEATH BLINK .DB 0 .DB CREATE,STATGUYID,255,192,0 ;LAUNCH THE STATUS BAR UPDATER .DB DELAY,6 .DB ACTIVATE,EWALK HH16: .DB SETMOM,36,-96 ;CATCH STUCK AGAINST LEFT EDGE .DB SETMOM,36,-96 .DB SKIP .DRW HH13 ;HERO IS DEAD. ALL HERO ROUTINES MUST GO HERE WHEN DEAD. IF HE DIED ;ON SOLID GROUND AND DIDN'T FALL TO HIS DEATH, HE'S JUST RELAUNCHED WITH ;FRESH HEALTH. IF HE DIED FROM A FALL, HE MUST GO BACK TO THE WORLD START. HH20: .DB IDENTIFY .DRW 0 ;MAKE THE ENEMIES LEAVE HIM ALONE .DB DISABLE,-1 ;DISABLE ALL INTERRUPTS. SHARED ENTRY POINT. .DB SETMOM,0,0 ;FREEZE HIM .DB SEQUENCE .DRW HDIE ;IF DEAD, SHOW THE BLINKING DEAD HERO HH21: .DB YVISUAL ;IF FALLEN, THEN DISAPPEAR .DRW HH22 .DB 192 .DB SEQUENCE .DRW DUMB HH22: .DB FACE,CURRENT .DB SETREG,20,0 .DB STORE,21 ;RESTORE THE HERO'S HEALTH IF MORE HEROS .DB SOUND ;HERO DEATH MUSIC .DRW DEATHRIFF,0,0,0 .DB DELAY,75 HH23: .DB ADDHEROS,OURJOY,-1 ;DECREMENT HERO COUNT .DB GETHEROS,OURJOY ;GET THE COUNT .DB EQUAL .DRW HH50 .DRW 0 ;IF NONE LEFT, GAME OVER .DB YVISUAL .DRW HH30 .DB 192 ;IF NOT DEAD FROM A FALL, JUST RELAUNCH. .DB FETCHREG,WORLD .DB SKIP .DRW XWIPEOUT ;REQUEST THIS WORLD AGAIN HH30: .DB ACTIVATE,EWAKE ;AND PUT HIM BACK ;NO MORE HEROS, GAME OVER. HH50: .DB SETREG,-1,0 .DB STORE,24 .DB WORLD,-1 ;IF NONE LEFT, GAME OVER REQUEST .DB ENABLE,HURTING HFALL: ;HERO FALLING MOVEMENT LIST .DB INSTRUCTIONS,11 .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER ;RESTORE SOLID VALUE .DB SOLIDSTATE,SAFE ;NEED CONDITIONAL SOLID CAUSE JUMP GOES ;HERE WHEN DONE AND WE HAVE TO TURN IT ON ;AFTER WE RE-INIT. .DB ENABLE,ALL^DUCKING .DB RESETBEHAVIOR,OPTION1|FAST ;RESET CLIMB, CUPS .DB ENTITYBITS,H'9A ;FIX HIS CONTROL BITS FROM CUPS .DB GRAVITY,-1 .DB FRICTION,DEF_XFRICT,DEF_YFRICT ;RESTORE FROM SUCTION CUPS .DB MOMLIMIT,60,DEF_YLIM ;ASSUME FAST SPEED RESTORED .DB BUTTON .DRW HF5 .DB B_BUTTON ;IF B PRESSED, DON'T RESET SPEED .DB MOMLIMIT,36,-1 ;PUT BACK NORMAL RUNNING SPEED IF NO B HF5: .DB ADDJOYX .DB STANDING .DRW HF10 .DB YVISUAL .DRW HF5 .DB 200 ;IF OUR FEET GO BELOW 200, WE ARE DEAD .DB SKIP .DRW HH20 ;FALL UNTIL HIT SOLID OR UNTIL WE DIE HF10: .DB ACTIVATE,EWALK ;THEN WALK HSELECT: ;SELECT KEY .DB INSTRUCTIONS,5 .DB STORE,STATE ;SAVE OUR REGISTER FOR RESUME HSE5: .DB INSTRUCTIONS,8 .DB ZEROJOYX,ZEROJOYY .DB BUTTON .DRW HSE10 .DB RIGHT ;IF RIGHT, ITS SELECT ITEM (GO RIGHT) .DB BUTTON .DRW HSE20 .DB LEFT ;IF LEFT, ITS SELECT ITEM (GO LEFT) .DB BUTTON .DRW HSE40 .DB UP|DOWN ;IF UP OR DOWN, ITS USE ITEM. ;SELECT WAS PRESSED, BUT NO ARROW KEYS. MAKE IT SAFE TO STAY HERE BY ;INSURING SOLID AND GRAVITY AND HURTING ARE ENABLED. THEN WAIT TILL ;SELECT IS RELEASE OR UNTIL THE PLAYER PRESSES AN ARROW KEY. IF WE ;ARE ON A LADDER, WE DON'T RESTORE GRAVITY. .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER ;RESTORE SOLID VALUE .DB SOLIDSTATE,SAFE .DB IFBEHAVIOR .DRW HSE9 .DB OPTION1 .DB GRAVITY,-1 ;RESTORE GRAVITY UNLESS ON LADDER HSE9: .DB ENABLE,ALL^DUCKING .DB BUTTON .DRW HSE5 .DB SELECT ;SELECT IS NO LONGER PRESSED. HSE9A: .DB ENABLE,ALL^DUCKING ;SOME ENTRY POINTS DISABLE INTS AGAIN .DB TESTFLAG .DB ACTIVATE,EWALK ;RIGHT ARROW WITH SELECT HSE10: .DB INSTRUCTIONS,5 .DB LOAD,10 .DB ADD,1,0 .DB LIMIT,7,0 .DB STORE,10 .DB SKIP .DRW HSE30 ;LEFT ARROW WITH SELECT HSE20: .DB INSTRUCTIONS,5 .DB LOAD,10 .DB EQUAL .DRW HSE30 .DRW 0 .DB ADD .DRW -1 .DB STORE,10 HSE30: .DB DELAY,5 .DB SKIP .DRW HSE5 ;UP OR DOWN WITH SELECT HSE40: .DB DISABLE,ALL ;DON'T LET SOMETHING IMPORTANT GET INTERRUPTED .DB LOAD,10 ;GET WHAT WE HAVE SELECTED .DB LIMIT .DRW 7 .DB TABLE .DRW ITSDYN ;DYNAMITE .DRW ITSSHIELD .DRW ITSMAP .DRW ITSBOOMER .DRW ITSSUCT .DRW ITSKNUCKS .DRW ITSTORCH .DRW ITSKEY ITSDYN: .DB INSTRUCTIONS,H'85 .DB LOAD,16 ;GET HOW MANY MAGICS .DB NOTEQUAL .DRW HSL10 .DRW 0 ;IF NONE, IGNORE REQUEST .DB LOAD,STATE .DB RESUME HSL10: .DB ADD,-1,-1 ;LOWER COUNT, WE ARE GOING TO THROW ONE .DB STORE,16 .DB INSTRUCTIONS,6 .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER .DB SOLIDSTATE,SAFE .DB GRAVITY,-1 .DB SEQUENCE .DRW HTHROW .DB BUTTON .DRW HSL30 .DB DOWN .DB SPAWN,MAGICGUYID,16,0,1 .DB SKIP .DRW HSL40 HSL30: .DB SPAWN,MAGICGUYID,16,0,2 HSL40: .DB DELAY,10 .DB SKIP .DRW HSE5 ITSSHIELD: .DB INSTRUCTIONS,6 .DB LOAD,6 .DB EQUAL .DRW HSE9A .DRW 0 .DB ADD .DRW -1 .DB STORE,6 .DB CREATE,10,96,128,0 .DB SKIP .DRW BOO30 ITSMAP: .DB LOAD,11 .DB EQUAL .DRW HSE9A .DRW 0 .DB FETCHREG,WORLD .DB STORE,24 .DB STATREQUEST,89 .DB SETSTATPAL,0,H'00,H'00,H'00,H'00,H'00,H'00,H'00,H'00 .DB SETSTATPAL,1,H'00,H'00,H'00,H'00,H'00,H'00,H'00,H'00 .DB FILLVID,1,0,H'41,STATVID,64 .DB FILLVID,3,0,H'41,STATVID,64 .DB HURT,0,ID .DRW FIREDUMMY .DB SKIP .DRW BOO30 STATGUY:.DRW MAPX ;STATUS BAR MONITOR .DRW STATCODE .DB 0,-1 .DB 0,0 .DB 0,0 STATCODE: .DB INSTRUCTIONS,H'8A .DB GRAVITY,0 .DB JOYSTICK,0 .DB LOAD,24 .DB REGINDEX .DRW MAPPERX .DB GOTO,REGISTER,-1 .DB LOAD,24 .DB REGINDEX .DRW MAPPERY .DB GOTO,-1,REGISTER ;POSITION THE Y STAT10: .DB BUTTON .DRW STAT20 .DB B_BUTTON|A_BUTTON .DB SKIP .DRW STAT10 STAT20: .DB ZEROJOYX,ZEROJOYY .DB ENDREQUEST MAPPERX: .DB 255,144,192,192,240,208,240,56,24,208 ;0-9 .DB 160,160,160,24,24,144,88,176,56,144 ;10-19 .DB 40,176,40,176,240,192,240,72,72,224 ;20-29 .DB 176,192,176,40,40,160,88,192,24,144 ;30-39 .DB 24,168,160,224,224,88,40,240,192,192 ;40-49 .DB 56,56,240,72,208,88,208,24,16,160 ;50-59 .DB 208,208,104,88,255,192,72,72,240,56 ;60-69 .DB 224,24,224,40,168,176,184,192,200,208 ;70-79 .DB 216,224,144,240,192,88,72,8 ;80-89 MAPPERY: .DB 192,24,24,40,72,56,24,176,40,128 ;0-9 .DB 144,160,128,24,128,176,128,72,40,144 ;10-19 .DB 144,88,72,40,88,56,40,176,40,128 ;20-29 .DB 144,160,128,24,128,176,144,72,56,160 ;30-39 .DB 144,88,40,88,40,176,40,128,144,128 ;40-49 .DB 24,128,160,144,72,56,144,160,128,56 ;50-59 .DB 88,40,176,40,192,112,24,128,144,144 ;60-69 .DB 72,72,144,160,8,8,8,8,8,8 ;70-79 .DB 8,8,40,8,88,160,8,40 ;80-89 ITSBOOMER: BOO10: .DB INSTRUCTIONS,H'88 .DB LOAD,5 .DB EQUAL .DRW HSE9A ;UPDATES STATUS BAR .DRW 0 .DB INSTRUCTIONS,6 .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER .DB SOLIDSTATE,SAFE .DB GRAVITY,-1 .DB SEQUENCE .DRW HTHROW .DB NOTBUTTON .DRW BOO30 .DB DOWN|UP .DB INSTRUCTIONS,4 .DB SPAWN,BOOMCHUCK,20,0,0 .DB LOAD,5 .DB ADD .DRW -1 .DB STORE,5 BOO30: .DB CREATE,STATGUYID,255,192,0 .DB SKIP .DRW HSE9A ITSSUCT: .DB LOAD,7 .DB EQUAL .DRW HSE9A .DRW 0 .DB IFBEHAVIOR .DRW SUC30 .DB FAST .DB SETBEHAVIOR,FAST .DB ADD,1,0 ;TURN SUCTION ON .DB CREATE,STATGUYID,255,192,0 SUC5: .DB INSTRUCTIONS,5 .DB GRAVITY,0 .DB ENABLE,ALL^DUCKING .DB SEQUENCE .DRW ONLADDER .DB SETBEHAVIOR,WEAK ;WHEN SET, WE ARE NOT ANIMATING .DB MOMLIMIT,8,24 .DB ENTITYBITS,H'BB ;CONSTANT FRICTION, HEAD TOPS OUT .DB FRICTION,16,16 ;GIVE SOME FRICTION SUC6: .DB ADDJOYX,ADDJOYY .DB SPEED .DRW SUC20 .DB 7,-1 ;IF NOT MOVING ON X AXIS, ONLADDER IS IMAGE .DB IFNBEHAVIOR .DRW SUC6 .DB WEAK ;SO IF WE ARE MOVING, IS SUCTHORZ ACTIVE? .DB SEQUENCE .DRW SUCTHORZ .DB RESETBEHAVIOR,WEAK ;IF NOT, GET IT AND RESET WEAK .DB SKIP .DRW SUC6 ;WE ARE NOT MOVING ON THE X AXIS SO THE PICTURE ONLADDER MUST BE ;ACTIVE AND BEHAVIOR WEAK SET. SUC20: .DB IFBEHAVIOR .DRW SUC6 .DB WEAK ;SO IF WE ARE MOVING, IS SUCTHORZ ACTIVE? .DB SEQUENCE .DRW ONLADDER .DB SETBEHAVIOR,WEAK ;IF NOT, GET IT AND RESET WEAK .DB SKIP .DRW SUC6 SUC30: .DB LOAD,7 ;TURN SUCTION OFF .DB CREATE,STATGUYID,255,192,0 .DB ACTIVATE,EFALL ITSKNUCKS: .DB SKIP ;KNUCKS ARE ALWAYS ON .DRW HSE9A ITSTORCH: .DB LOAD,4 .DB EQUAL .DRW HSE9A .DRW 0 .DB CREATE,FIREDUMMY,255,192,60 .DB ADD .DRW -1 .DB STORE,4 .DB SKIP .DRW BOO30 ITSKEY: .DB INSTRUCTIONS,5 .DB DISABLE,ALL .DB LOAD,8 .DB EQUAL .DRW HSE9A .DRW 0 .DB ACTIVE .DRW KY10 .DB ID .DRW 39 .DB SKIP .DRW HSE9A KY10: .DB INSTRUCTIONS,4 .DB ADD .DRW -1 .DB HURT,H'18,ID .DRW 39 .DB STORE,8 .DB SKIP .DRW BOO30 SHOWJUMP: .DRW HERO3 ;JUMPING .DRW -1 .DB H'00,-1 .DB 0,0 .DB 0,0 HJUMP: ;HERO JUMPING MOVEMENT LIST .DB INSTRUCTIONS,6 .DB IFBEHAVIOR .DRW HC45 .DB FAST .DB STANDING .DRW HJ0 .DB FLOOR .DRW HJ5 .DB 5 ;IF NOT STANDING, JUST A PREMATURE PRESS? ;FORGIVE THE PLAYER IF SO. .DB RESUME ;DON'T JUMP IF NOT STANDING ;SPECIAL MODE THAT ALLOWS THE PLAYER TO HIT THE JUMP BUTTON BEFORE THE HERO ;LANDS. IF HE KEEPS IT DOWN, WE WILL HONOR IT WHEN WE LAND. BUT IF ;ITS RELEASED WE WON'T DO IT. HJ5: .DB ADDJOYX .DB STANDING ;GIVE THE HERO A SMALL TIME TO EITHER .DRW HJ0 ;FIND SOLID OR IF TIMEOUT, GO TO STAND MODE .DB NOTBUTTON .DRW HF5 .DB A_BUTTON ;IF NOT STILL DOWN, END .DB ADDJOYX .DB STANDING .DRW HJ0 .DB NOTBUTTON .DRW HF5 .DB A_BUTTON ;IF NOT STILL DOWN, END .DB ADDJOYX .DB STANDING .DRW HJ0 .DB NOTBUTTON .DRW HF5 .DB A_BUTTON ;IF NOT STILL DOWN, END .DB ADDJOYX .DB STANDING .DRW HJ0 .DB NOTBUTTON .DRW HF5 .DB A_BUTTON ;IF NOT STILL DOWN, END .DB ADDJOYX .DB STANDING .DRW HJ0 .DB SKIP .DRW HF5 HJ0: .DB INSTRUCTIONS,7 .DB ENABLE,ALL^DUCKING^JUMPING ;ENABLE SOME INTERRUPTS AGAIN .DB BUTTON .DRW HDOWN ;IF DOWN + JUMP THEN JUMP DOWN. .DB DOWN .DB SEQUENCE .DRW SHOWJUMP .DB SETCOUNTER,5 ;SET MAX TIMES THROUGH LOOP .DB LOAD,31 .DB SOLIDSTATE,REGISTER .DB SETMOM,-1,-72 ;UPWARDS WITH MAX SPEED AT START HJ10: .DB BUTTON .DRW HJ15 .DB A_BUTTON ;IF A BUTTON STILL DOWN, CONTINUE .DB ADDMOM,0,48 ;CANCEL SOME UPWARDS TRAVEL WHEN ENDING .DB ACTIVATE,EFALL ;GO TO FALL MODE WHEN DONE JUMPING HJ15: .DB ADDJOYX ;USE JOYSTICK X MOMENTUM IF CONTINUING .DB COUNT .DRW HJ20 ;WHEN COUNTER RUNS OUT, LEAVE JUMP MODE .DB 1 .DB ADDMOM,0,-28 ;OTHERWISE, JUST CANCEL GRAVITY .DB SKIP .DRW HJ10 ;WE DID A FULL HEIGHT JUMP. HJ20: .DB SETMOM,-1,-72 HJ30: .DB ACTIVATE,EFALL ;THE HERO WANTED TO JUMP BUT HE PUSHED DOWN. IF WE ARE ABOVE THE VERY ;BOTTOM WE WILL ALLOW HIM TO JUMP DOWN. HDOWN: .DB YVISUAL .DRW HDN10 .DB 154 HDN5: .DB RESUME ;DON'T ALLOW JUMP DOWN IF TOO LOW HDN10: .DB BUTTON .DRW HDN5 .DB LEFT|RIGHT ;DON'T GET A JUMP DOWN CAUSE THEY PRESS HARD .DB SEQUENCE .DRW SHOWJUMP .DB INSTRUCTIONS,3 .DB LOAD,31 .DB SOLIDSTATE,REGISTER .DB SETMOM,-1,-32 ;UPWARDS 4 PIXELS .DB ADDJOYX .DB ADDJOYX .DB ADDJOYX .DB ADDJOYX .DB ADDJOYX .DB ADDJOYX .DB ADDJOYX ;GIVE ENOUGH TIME TO JUST MAKE IT DOWN .DB ACTIVATE,EFALL HATTACK: ;HERO ATTACKING MOVEMENT LIST .DB INSTRUCTIONS,10 .DB IFBEHAVIOR .DRW HC45 .DB FAST .DB ENABLE,HURTING|JUMPING ;DON'T LET HIM BE INVULNERABLE ; .DB GETCOLUMN ; .DB SHOWREG,3,6,STATVID ; .DB FETCHREG,YVISUAL ; .DB CDIVIDE,8 ; .DB SHOWREG,3,12,STATVID ; .DB FETCHREG,WORLD ; .DB SHOWREG,3,18,STATVID .DB LOAD,9 .DB NOTEQUAL ;MUST BE STANDING FOR ATTACK .DRW AA10 .DRW 1 .DB SEQUENCE .DRW PPUNCH ;DO POWERPUNCH AA10: .DB SEQUENCE .DRW WPUNCH ;DO WEAK PUNCH HMIDDLE: .DB INSTRUCTIONS,3 .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER ;RESTORE SOLID VALUE .DB SOLIDSTATE,SAFE ;HERO'S KICK .DB ENABLE,ALL^ATTACKING^DUCKING ;ENABLE ALL BUT ATTACKING. .DB FINISH .DB ACTIVATE,EWALK HSTAND: ;HERO STANDING MOVEMENT LIST .DB ENABLE,ALL^DUCKING HST10: .DB ADDJOYX ;APPLY JOYSTICK MOMENTUM WHILE STANDING .DB SPEED .DRW HST20 ;IF SPEED LESS THAN 8, KEEP STANDING .DB 7,-1 .DB ACTIVATE,EWALK ;GO INTO WALK MODE IF MOMENTUM >7 (MOVING) HST20: .DB ADDJOYX .DB YVISUAL .DRW HST10 .DB 200 ;IF OUR FEET GO BELOW 200, WE ARE DEAD .DB SKIP .DRW HH20 ;HERE'S THE HERO'S WORLD COMMAND LOGIC. HCOMMAND: ;WORLD COMMAND. .DB INSTRUCTIONS,10 .DB STORE,0,SWAP,STORE,1 ;SAVE WORD REGISTER .DB WORLDCMD .DRW HC60 .DB CLIMB .DB STANDING .DRW HC39 .DB RESUME HC39: .DB WORLDCMD .DRW HC50 .DB DOOR HC40: .DB BLOAD,1,SWAP,BLOAD,0 HC45: .DB RESUME ;SHARED WITH MECHMOVE ROBOT HC50: .DB INSTRUCTIONS,10 .DB ACTIVE .DRW HW20 ;CANT GO IN IF ROCK GATE BARRIER THERE .DB ID .DRW 17 .DB ACTIVE .DRW HW20 ;CAN'T GO IN IF METAL GATE (LOCKED) .DB ID .DRW 39 .DB FETCHREG,PARAM2 .DB LIMIT .DRW 200 .DB WORLDGOTO .DRW DOORBASE .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER .DB SOLIDSTATE,SAFE .DB SKIP .DRW NEWTIME HC60: .DB ENABLE,HURTING|SELECTING .DB IFBEHAVIOR .DRW HC70 .DB OPTION1 ;IF ALREADY ON LADDER ITS A SEPARATE THING .DB INSTRUCTIONS,7 .DB BUTTON .DRW HC65 .DB UP ;ALWAYS GO ON LADDER IF UP PRESSED .DB STANDING .DRW HC40 ;IF STANDING, ONLY UP WORKS .DB NOTBUTTON .DRW HC40 .DB DOWN ;WE WANT TO GO ONTO THE LADDER. EITHER UP WAS PRESSED OR WE WEREN'T STANDING ;AND DOWN WAS PRESSED. HC65: .DB INSTRUCTIONS,8 .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER ;RESTORE SOLID VALUE .DB SOLIDSTATE,SAFE .DB SETBEHAVIOR,OPTION1 ;SIGNAL THAT WE ARE ON A LADDER .DB SEQUENCE .DRW ONLADDER .DB GRAVITY,0 ;NO GRAVITY, WE ARE ON A LADDER .DB SETMOM,0,0 .DB ENABLE,TESTING .DB TESTFLAG ;SEE IF STILL ON LADDER .DB ACTIVATE,EFALL ;IF NOT, FALL DOWN ;WE ARE ALREADY ON A LADDER HC70: .DB INSTRUCTIONS,H'8F .DB YVISUAL .DRW HC95 .DB 12 .DB YVISUAL .DRW HC72 .DB 196 .DB SKIP .DRW HC96 HC72: .DB BUTTON .DRW HC76 .DB LEFT|RIGHT .DB SETMOM,0,-1 ;IF NOT PRESSING LEFT OR RIGHT, 0 X .DB SKIP .DRW HC73 HC76: .DB ADDJOYX ;KEEP RESPONSIVE TO JOYSTICK X DIR HC73: .DB BUTTON .DRW HC75 .DB UP .DB NOTBUTTON .DRW HC80 .DB DOWN .DB SETMOM,-1,16 ;DOWN IS PRESSED. MOVE DOWN ON LADDER .DB SKIP .DRW HC90 HC75: .DB SETMOM,-1,-16 ;UP IS PRESSED, MOVE UP ON LADDER .DB SKIP .DRW HC90 HC80: .DB SETMOM,-1,0 ;IF NOT UP OR DOWN, ZERO IT HC90: .DB ENABLE,TESTING .DB TESTFLAG ;LOOP AGAIN IF STILL ON LADDER .DB ACTIVATE,EFALL ;OTHERWISE, FALL OFF HC95: .DB FETCHREG,PARAM2 HC94: .DB WORLDGOTO .DRW CLIMBASE .DB SETMOM,56,0 .DB SETMOM,0,0 .DB CREATE,WORLDGUYID,255,192,0 ;LAUNCH THE WORLD CONFIGURER .DB SKIP .DRW HC90 HC96: .DB FETCHREG,PARAM2 .DB IFPARAM .DRW HC97 .DB 1 .DB NOTEQUAL .DRW HC94 .DRW 4 HC97: .DB ADD .DRW 1 .DB SKIP .DRW HC94 DOORBASE: .DB 82,0,0 ;DOOR0 LEVEL 0 .DRW DONTCARE,2 .DB 1,16,0 ;DOOR1 .DRW 129,143 .DB 2,4,0 ;DOOR2 .DRW DONTCARE,2 .DB 1,2,0 ;DOOR3 .DRW 143,173 .DB 74,11,0 ;DOOR4 WINDOW0 .DRW DONTCARE,3 .DB 2,3,0 ;DOOR5 WINDOW0 .DRW DONTCARE,33 .DB 75,11,0 ;DOOR6 WINDOW1 .DRW DONTCARE,3 .DB 2,3,0 ;DOOR7 WINDOW1 .DRW DONTCARE,41 .DB 76,11,0 ;DOOR8 WINDOW2 .DRW DONTCARE,3 .DB 2,3,0 ;DOOR9 WINDOW2 .DRW DONTCARE,64 .DB 77,11,0 ;DOOR10 WINDOW3 .DRW DONTCARE,3 .DB 2,3,0 ;DOOR11 WINDOW3 .DRW DONTCARE,72 .DB 78,11,0 ;DOOR12 WINDOW4 .DRW DONTCARE,3 .DB 2,3,0 ;DOOR13 WINDOW4 .DRW DONTCARE,105 .DB 79,11,0 ;DOOR14 WINDOW5 .DRW DONTCARE,3 .DB 2,3,0 ;DOOR15 WINDOW5 .DRW DONTCARE,120 .DB 80,11,0 ;DOOR16 WINDOW6 .DRW DONTCARE,3 .DB 2,3,0 ;DOOR17 WINDOW6 .DRW 119,129 .DB 81,11,0 ;DOOR18 WINDOW7 .DRW DONTCARE,2 .DB 2,3,0 ;DOOR19 WINDOW7 .DRW 119,150 .DB 83,0,0 ;DOOR20 .DRW DONTCARE,2 .DB 81,1,0 ;DOOR21 .DRW 45,75 .DB 6,3,0 ;DOOR22 .DRW DONTCARE,7 .DB 2,16,0 ;DOOR23 .DRW 119,140 .DB 26,3,0 ;DOOR24 .DRW DONTCARE,7 .DB 6,3,0 ;DOOR25 .DRW 204,231 .DB 44,3,0 ;DOOR26 .DRW DONTCARE,7 .DB 26,3,0 ;DOOR27 .DRW 183,211 .DB 61,3,0 ;DOOR28 .DRW DONTCARE,7 .DB 44,3,0 ;DOOR29 .DRW 248,275 .DB 3,9,0 ;DOOR30 .DRW DONTCARE,3 .DB 61,3,0 ;DOOR31 .DRW DONTCARE,146 .DB 23,11,0 ;DOOR32 .DRW DONTCARE,2 .DB 3,11,0 ;DOOR33 .DRW 207,238 .DB 42,9,0 ;DOOR34 .DRW DONTCARE,3 .DB 23,11,0 ;DOOR35 .DRW 107,138 .DB 59,11,0 ;DOOR36 .DRW DONTCARE,2 .DB 42,11,0 ;DOOR37 .DRW 215,246 .DB 17,5,0 ;DOOR38 .DRW DONTCARE,3 .DB 59,11,0 ;DOOR39 .DRW DONTCARE,149 .DB 37,5,0 ;DOOR40 .DRW DONTCARE,3 .DB 17,5,0 ;DOOR41 .DRW 111,139 .DB 54,5,0 ;DOOR42 .DRW DONTCARE,3 .DB 37,5,0 ;DOOR43 .DRW 111,139 .DB 70,5,0 ;DOOR44 .DRW DONTCARE,3 .DB 54,5,0 ;DOOR45 .DRW 183,211 .DB 4,17,0 ;DOOR46 .DRW DONTCARE,2 .DB 70,5,0 ;DOOR47 .DRW DONTCARE,156 .DB 43,17,0 ;DOOR48 .DRW DONTCARE,2 .DB 70,5,0 ;DOOR49 .DRW 232,258 .DB 60,8,0 ;DOOR50 .DRW DONTCARE,5 .DB 43,9,0 ;DOOR51 .DRW 87,117 .DB 84,0,0 ;DOOR52 .DRW DONTCARE,2 .DB 60,17,0 ;DOOR53 .DRW 115,146 .DB 21,18,0 ;DOOR54 .DRW DONTCARE,2 .DB 84,0,0 ;DOOR55 .DRW 3,34 .DB 14,11,0 ;DOOR56 .DRW DONTCARE,2 .DB 58,0,0 ;DOOR57 .DRW 0,30 .DB 24,9,0 ;DOOR58 .DRW DONTCARE,5 .DB 43,17,0 ;DOOR59 .DRW DONTCARE,58 .DB 34,11,0 ;DOOR60 .DRW DONTCARE,2 .DB 14,7,0 ;DOOR61 .DRW 78,109 .DB 51,11,0 ;DOOR62 .DRW DONTCARE,2 .DB 34,9,0 ;DOOR63 .DRW 79,109 .DB 67,11,0 ;DOOR64 .DRW DONTCARE,2 .DB 51,9,0 ;DOOR65 .DRW 95,125 .DB 16,5,0 ;DOOR66 .DRW DONTCARE,5 .DB 67,9,0 ;DOOR67 .DRW 103,133 .DB 36,5,0 ;DOOR68 .DRW DONTCARE,5 .DB 16,15,0 ;DOOR69 .DRW 95,124 .DB 85,0,0 ;DOOR70 .DRW DONTCARE,2 .DB 36,5,0 ;DOOR71 .DRW DONTCARE,73 .DB 45,2,0 ;DOOR72 .DRW 167,197 .DB 85,0,0 ;DOOR73 .DRW 3,34 .DB 53,15,0 ;DOOR74 .DRW DONTCARE,4 .DB 36,15,0 ;DOOR75 .DRW 107,136 .DB 69,15,0 ;DOOR76 .DRW DONTCARE,4 .DB 53,5,0 ;DOOR77 .DRW 196,226 .DB 7,2,0 ;DOOR78 .DRW DONTCARE,5 .DB 69,15,0 ;DOOR79 .DRW 156,184 .DB 27,17,0 ;DOOR80 .DRW DONTCARE,3 .DB 7,17,0 ;DOOR81 .DRW 87,115 .DB 45,2,0 ;DOOR82 .DRW DONTCARE,5 .DB 27,17,0 ;DOOR83 .DRW 91,119 .DB 62,2,0 ;DOOR84 .DRW DONTCARE,5 .DB 45,2,0 ;DOOR85 .DRW DONTCARE,93 .DB 20,17,0 ;DOOR86 .DRW DONTCARE,2 .DB 40,17,0 ;DOOR87 .DRW DONTCARE,58 .DB 73,17,0 ;DOOR88 .DRW DONTCARE,2 .DB 20,17,0 ;DOOR89 .DRW 87,118 .DB 57,17,0 ;DOOR90 .DRW DONTCARE,2 .DB 73,17,0 ;DOOR91 .DRW 139,170 .DB 40,17,0 ;DOOR92 .DRW 99,130 .DB 57,17,0 ;DOOR93 .DRW 131,162 .DB 25,3,0 ;DOOR94 .DRW DONTCARE,2 .DB 59,9,0 ;DOOR95 .DRW 256,270 .DB 5,3,0 ;DOOR96 .DRW DONTCARE,2 .DB 25,3,0 ;DOOR97 .DRW DONTCARE,50 .DB 61,3,0 ;DOOR98 .DRW 222,250 .DB 5,3,0 ;DOOR99 .DRW 43,74 .DB 25,3,0 ;DOOR100 .DRW 63,94 .DB 17,5,0 ;DOOR101 .DRW DONTCARE,51 .DB 64,0,0 ;DOOR102 SECRET DOOR .DRW DONTCARE,2 .DB 40,17,0 ;DOOR103 .DRW DONTCARE,2 .DB 14,11,0 ;DOOR104 .DRW DONTCARE,58 .DB 22,7,0 ;DOOR105 DOOR TO BOSS ROOM .DRW DONTCARE,2 .DB 71,8,0 ;DOOR106 DOOR BACK OUT .DRW 165,193 .DB 17,0,0 ;DOOR107 .DRW 79,94 .DB 0,0,0 ;DOOR108 DOOR TO END SCREEN .DRW DONTCARE,0 .DB 10,11,0 ;DOOR109 .DRW DONTCARE,2 .DB 32,16,0 ;DOOR110 .DRW DONTCARE,2 .DB 12,16,0 ;DOOR111 .DRW 115,146 .DB 30,11,0 ;DOOR112 .DRW DONTCARE,2 .DB 49,16,0 ;DOOR113 .DRW DONTCARE,2 .DB 32,16,0 ;DOOR114 .DRW 156,186 .DB 48,11,0 ;DOOR115 .DRW DONTCARE,2 .DB 9,15,0 ;DOOR116 .DRW DONTCARE,2 .DB 49,16,0 ;DOOR117 .DRW DONTCARE,194 .DB 29,15,0 ;DOOR118 .DRW DONTCARE,2 .DB 9,15,0 ;DOOR119 .DRW 115,146 .DB 47,15,0 ;DOOR120 .DRW DONTCARE,2 .DB 29,15,0 ;DOOR121 .DRW 119,150 .DB 29,15,0 ;DOOR122 .DRW DONTCARE,90 .DB 68,0,0 ;DOOR123 .DRW DONTCARE,2 .DB 72,3,0 ;DOOR124 .DRW DONTCARE,139 .DB 52,0,0 ;DOOR125 .DRW DONTCARE,2 .DB 68,0,0 ;DOOR126 .DRW 107,138 .DB 56,1,0 ;DOOR127 .DRW DONTCARE,3 .DB 72,3,0 ;DOOR128 .DRW 207,235 .DB 48,11,0 ;DOOR129 .DRW DONTCARE,66 .DB 56,3,0 ;DOOR130 .DRW 163,191 .DB 49,16,0 ;DOOR131 .DRW DONTCARE,130 .DB 31,11,0 ;DOOR132 .DRW 159,183 .DB 48,11,0 ;DOOR133 .DRW 103,134 .DB 65,7,0 ;DOOR134 .DRW DONTCARE,114 .DB 30,11,0 ;DOOR135 .DRW DONTCARE,58 .DB 31,11,0 ;DOOR136 .DRW DONTCARE,3 .DB 32,16,0 ;DOOR137 .DRW DONTCARE,98 .DB 11,11,0 ;DOOR138 .DRW 147,171 .DB 30,11,0 ;DOOR139 .DRW 91,122 .DB 10,11,0 ;DOOR140 .DRW DONTCARE,58 .DB 11,11,0 ;DOOR141 .DRW DONTCARE,3 .DB 12,16,0 ;DOOR142 .DRW DONTCARE,74 .DB 19,3,0 ;DOOR143 .DRW DONTCARE,3 .DB 10,11,0 ;DOOR144 .DRW 91,122 .DB 39,3,0 ;DOOR145 .DRW DONTCARE,3 .DB 19,3,0 ;DOOR146 .DRW 195,223 .DB 15,17,0 ;DOOR147 .DRW DONTCARE,2 .DB 39,3,0 ;DOOR148 .DRW 179,207 .DB 35,0,0 ;DOOR149 .DRW DONTCARE,2 .DB 15,0,0 ;DOOR150 .DRW 79,110 .DB 66,17,0 ;DOOR151 .DRW 68,99 .DB 72,3,0 ;DOOR152 .DRW DONTCARE,3 .DB 0,0,0 ;DOOR153 NOT USED .DRW DONTCARE,0 .DB 0,0,0 ;DOOR154 NOT USED .DRW DONTCARE,0 .DB 33,1,0 ;DOOR155 .DRW DONTCARE,2 .DB 13,1,0 ;DOOR156 .DRW 51,82 .DB 50,1,0 ;DOOR157 .DRW DONTCARE,2 .DB 33,17,0 ;DOOR158 .DRW 51,82 .DB 18,8,0 ;DOOR159 .DRW DONTCARE,58 .DB 66,17,0 ;DOOR160 .DRW DONTCARE,2 .DB 50,17,0 ;DOOR161 .DRW 73,98 .DB 86,0,0 ;DOOR162 .DRW DONTCARE,2 .DB 50,1,0 ;DOOR163 .DRW DONTCARE,58 .DB 28,1,0 ;DOOR164 .DRW DONTCARE,2 .DB 18,8,0 ;DOOR165 .DRW 75,106 .DB 63,1,0 ;DOOR166 .DRW DONTCARE,2 .DB 28,12,0 ;DOOR167 .DRW 55,86 .DB 55,8,0 ;DOOR168 .DRW DONTCARE,2 .DB 63,12,0 ;DOOR169 .DRW 187,218 .DB 0,0,0 ;DOOR170 NOT USED .DRW DONTCARE,0 .DB 55,8,0 ;DOOR171 .DRW 71,103 .DB 46,1,0 ;DOOR172 .DRW DONTCARE,2 .DB 18,8,0 ;DOOR173 .DRW DONTCARE,2 .DB 8,12,0 ;DOOR174 .DRW DONTCARE,2 .DB 46,12,0 ;DOOR175 .DRW 215,246 .DB 87,0,0 ;DOOR176 .DRW DONTCARE,2 .DB 8,1,0 ;DOOR177 .DRW 63,94 .DB 38,8,0 ;DOOR178 .DRW DONTCARE,2 .DB 8,12,0 ;DOOR179 .DRW DONTCARE,61 .DB 71,8,0 ;DOOR180 .DRW DONTCARE,2 .DB 38,8,0 ;DOOR181 .DRW 103,134 .DB 65,16,0 ;DOOR182 .DRW DONTCARE,2 .DB 49,16,0 ;DOOR183 .DRW 236,266 .DB 86,1,0 ;DOOR184 .DRW 45,75 .DB 86,1,0 ;DOOR185 .DRW 45,75 CLIMBASE: .DB 62,0,0 ;CLIMB0 DOWN .DRW 135,164 .DB 41,20,0 ;CLIMB1 UP .DRW DONTCARE,16 .DB 13,0,0 ;CLIMB2 GOING DOWN .DRW DONTCARE,1 .DB 41,0,0 ;CLIMB3 DOWN .DRW DONTCARE,16 .DB 58,20,0 ;CLIMB4 UP .DRW DONTCARE,16 .DB 21,0,0 ;CLIMB5 GOING DOWN .DRW DONTCARE,16 .DB 12,20,0 ;CLIMB6 UP .DRW DONTCARE,0 .DB 21,20,0 ;CLIMB7 UP .DRW DONTCARE,16 ;******************* ENTITY CODE ************************ SKLETON: .DRW SKELWLK2 ;WAKEUP .DRW SKLWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SKELHURT ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SKEL1 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW SKELWLK3 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SKELWLK2 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SLKWALKS ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW SKELATAK ;NEAR ATTACK .DRW ENNEAR .DB H'40,2 .DB H'25,H'11 .DB H'11,H'01 .DRW SKELATAK ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,2 .DB H'25,H'02 .DB H'11,H'01 .DRW SKELATAK ;FAR ATTACK .DRW ENFAR .DB H'40,2 .DB H'25,H'01 .DB H'11,H'01 .DRW SKELATAK ;CHARGE .DRW ENCHARGE .DB H'40,0 .DB H'25,H'11 .DB H'11,H'11 .DRW SKEL2 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 SKLWAKE: .DB SETBEHAVIOR,DYING|HIJUMPER .DB SETREG,2,0 .DB SKIP .DRW BRW10 TEDCODE: .DRW TED2 ;WAKEUP .DRW TEDWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW TEDHURT ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW TED1 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW TED2 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW TED2 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW TEDS ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW TEDS ;NEAR ATTACK .DRW TEDSHOOT .DB H'40,-1 .DB H'25,H'11 .DB H'11,H'01 .DRW TEDS ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,-1 .DB H'25,H'02 .DB H'11,H'01 .DRW TEDS ;FAR ATTACK .DRW ENFAR .DB H'40,-1 .DB H'25,H'01 .DB H'11,H'01 .DRW TEDS ;CHARGE .DRW ENCHARGE .DB H'40,0 .DB H'36,H'11 .DB H'11,H'11 .DRW TED1 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW TED2 ;DODGEING .DRW -1 .DB H'25,-1 .DB 0,0 .DB 0,0 .DRW TEDS ;SHOOTING .DRW TEDSHOOT .DB H'40,-1 .DB 0,0 .DB 0,0 TEDSHOOT: .DB SETMOM,2,0 .DB SPAWN,48,17,9,0 ;SHOOT STUFF .DB DELAY,10 .DB ACTIVATE,EWALK DRUGBOSS: .DRW BIGWZFLY ;WAKEUP .DRW SORWAKE2 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BIGWIZ3 ;HURT BY ATTACK .DRW SORHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BIGWIZ3 ;FALLING .DRW SORFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW BIGWZFLY ;JUMPING .DRW SORJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BIGWIZ3 ;ATTACKING .DRW SORSHOOT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW SORHIDE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BIGWIZ3 ;STANDING. USED ONLY ON WHEN DELAYING .DRW SORSTAND .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BIGWZFLY ;WALKING .DRW SORWLK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW BIGWZFLY ;NEAR ATTACK .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 .DRW BIGWZFLY ;MIDDLE ATTACK .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 NINJA: .DRW NINJA7 ;WAKEUP .DRW NJWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW NINJA3 ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW NINJA3 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW NINJA3 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW NINJA7 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW NINWLK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW NINATAK ;NEAR ATTACK .DRW ENNEAR .DB H'40,2 .DB H'25,H'11 .DB H'11,H'01 .DRW NINATAK ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,2 .DB H'25,H'02 .DB H'11,H'01 .DRW NINATAK ;FAR ATTACK .DRW ENMIDDLE .DB H'40,2 .DB H'25,H'01 .DB H'11,H'01 .DRW NINJA2 ;CHARGE .DRW ENCHARGE .DB H'40,0 .DB H'25,H'11 .DB H'11,H'11 .DRW NINJA1 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW NINWLK ;DODGING .DRW NINDODGE .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW NINATAK ;SHOOTING .DRW NINTHROW .DB H'40,-1 .DB 0,0 .DB 0,0 ARROWMAN: .DRW ARROW1 ;WAKEUP .DRW ARRWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW ARROW4 ;HURT BY ATTACK .DRW ARRHURT .DB H'40,-1 .DB 0,0 .DB 0,0 SHOOTARR: .DRW ARROWGO .DRW ARRFLING ;MAN SHOOTING ARROW .DB H'40,-1 .DB 0,0 .DB 0,0 ARRSHT: .DRW ARROW .DRW ARRMOVE ;ARROW BEING SHOT .DB 0,0 .DB H'20,H'11 .DB H'11,H'0F ARRWAKE: .DB GRAVITY,0 .DB TARGET .DRW HERO0 .DB XTRACK,TOWARDS .DB ENABLE,HURTING ARR5: .DB INSTRUCTIONS,5 .DB SETMOM,2,0 ;KEEP FACING HERO .DB RANGE .DRW ARR7 .DB 32,32 .DB RANGE .DRW ARR5 .DB 48,-1 .DB RANGE ;GO SHOOT IF HERO IS IN RANGE .DRW ARR10 .DB 212,-1 .DB SKIP .DRW ARR5 ARR7: .DB DIE,0 ;GO AWAY IF HERO GETS TOO CLOSE ARR10: .DB FETCHREG,YDIR .DB NOTEQUAL .DRW ARR5 .DRW 0 .DB SEQUENCE .DRW SHOOTARR ARRFLING: .DB DELAY,10 .DB SPAWN,35,20,12,0 .DB FETCHREG,RANDOM .DB LIMIT .DRW 20 .DB DELAY,REGISTER .DB ACTIVATE .DB EWAKE ARRHURT: .DB DAMAGE .DB ASSESS .DRW ARR20 .DB 0 .DB DELAY,10 .DB ACTIVATE,EWAKE ARR20: .DB DIE,1 ARRMOVE: .DB INSTRUCTIONS,H'88 .DB GRAVITY,0 .DB TARGET .DRW HERO0 .DB SOLIDSTATE,OFF .DB MOMLIMIT,80,80 .DB MOVEIN,48,80 .DB RANGE .DRW ARMV5 .DB 96,-1 .DB MOVEIN,48,-1 ARMV5: .DB UNLINK ARMV10: .DB REARM .DB IFXEDGE .DRW ARMV20 .DB 16 .DB ATTACKED .DRW ARMV20 .DB YVISUAL .DRW ARMV10 .DB 192 ARMV20: .DB DIE,0 ROCKFALL: .DRW BRIKFALL .DRW FALLROCK .DB 0,0 .DB 0,H'05 .DB 0,0 SMALLROCK: .DRW BRIKSMALL .DRW FALLSMALL .DB 0,0 .DB 0,H'01 .DB 0,0 GOOPY: .DRW GOOPS ;WAKE UP .DRW GOOPUP .DB 0,0 .DB H'60,H'12 .DB H'62,H'00 .DRW -1 ;HURT .DRW GOO7 .DB 0,0 .DB H'60,H'12 .DB H'62,H'00 GOOPUP: .DB GRAVITY,8 .DB MOMLIMIT,-1,120 .DB BOUNCE,200 .DB IDENTIFY .DRW ENEMY .DB ENABLE,HURTING GOO5: .DB INSTRUCTIONS,6 .DB REARM .DB SETMOM,0,-120 .DB DELAY,20 GOO6: .DB REARM .DB STANDING .DRW GOO5 .DB SKIP .DRW GOO6 GOO7: .DB RANDOM .DRW GOO8 .DB 160 .DB LAUNCH,54,0,24,0 ;LAUNCH FORK SOMETIMES .DB SKIP .DRW GOO30 GOO8: .DB RANDOM .DRW GOO10 .DB 160 .DB LAUNCH,12,0,24,0 ;LAUNCH DYNAMITES .DB SKIP .DRW GOO30 GOO10: .DB RANDOM .DRW GOO20 .DB 90 .DB LAUNCH,21,0,0,0 ;LAUNCH EAGLE SOMETIMES .DB LAUNCH,21,0,32,0 .DB SKIP .DRW GOO30 GOO20: .DB LAUNCH,11,0,24,0 ;LAUNCH BOOMERRANGS GOO30: .DB LOWNOISE .DRW POOF .DB DIE,1 FORKSHOOT: .DRW FORK .DRW FORKWAKE .DB 0,0 .DB H'30,H'22 .DB H'11,H'0F FOREXPL: .DRW FORBLOW .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 FORKWAKE: .DB SEQUENCE .DRW DUMB .DB GRAVITY,0 .DB TARGET .DRW HERO0 .DB XTRACK,TOWARDS .DB IFPARAM ;SEE IF ROCKET INSTEAD OF FORK .DRW FOR20 .DB 1 .DB ANIMATION,EWAKE,2 .DB MOMLIMIT,96,-1 .DB SETMOM,96,0 FOR10: .DB REARM .DB NOISE .DRW ROCKETNOISE .DB ATTACKED .DRW FOR30 .DB IFXEDGE .DRW FORDIE .DB 16 .DB SKIP .DRW FOR10 FOR20: .DB INSTRUCTIONS,4 .DB FETCHREG,RANDOM ;ROCKET CODE .DB LIMIT .DRW 152 .DB GOTO,-1,REGISTER .DB ANIMATION,EWAKE,2 .DB MOMLIMIT,96,-1 .DB SETMOM,96,0 .DB DELAY,2 .DB SKIP .DRW FOR10 FOR30: .DB NOISE .DRW BOMBSOUND .DB SEQUENCE .DRW FOREXPL .DB DELAY,5 FORDIE: .DB DIE,1 DUMBLAUNCH: .DRW DUMMY .DRW DUMBCODE .DB 0,-1 .DB 0,0 .DB 0,0 DUMBCODE: .DB GRAVITY,0 .DB HALFFREQ,ON .DB LOAD,3 .DB SETREG,40,0 ;SET FIRST DELAY TIME DUM5: .DB RANDOM .DRW DUM10 .DB 128 .DB CREATE,54,0,0,1 ;LAUNCH FORK ON LEFT SIDE .DB SKIP .DRW DUM20 DUM10: .DB CREATE,54,250,0,1 ;LAUNCH ON RIGHT SIDE DUM20: .DB EQUAL .DRW DUM25 .DRW 6 .DB ADD .DRW -2 DUM25: .DB DELAY,REGISTER .DB STORE,3 .DB SKIP .DRW DUM5 DUM30: .DB SKIP .DRW DUM30 RIFLEMAN: .DRW RFLMAN1 ;WAKEUP .DRW WHITEWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW RFLMAN4 ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW RFLMAN1 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW RFLMAN4 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW RFLMAN1 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW RFLWALK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW RFLSWING ;NEAR ATTACK .DRW ENNEAR .DB H'40,1 .DB H'66,H'11 .DB H'11,H'01 .DRW RFLSWING ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,1 .DB H'26,H'02 .DB H'11,H'01 .DRW RFLSWING ;FAR ATTACK .DRW ENMIDDLE .DB H'40,1 .DB H'26,H'01 .DB H'11,H'01 .DRW RFLWALK ;CHARGE .DRW ENCHARGE .DB H'40,0 .DB H'36,H'11 .DB H'11,H'11 .DRW RFLMAN1 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW RFLMAN4 ;DODGEING .DRW -1 .DB H'25,-1 .DB 0,0 .DB 0,0 .DRW RFLSHOOT ;SHOOTING .DRW LITTHROW .DB H'40,-1 .DB 0,0 .DB 0,0 MANARROW: .DRW ARRWIN1 ;WAKEUP .DRW WHITEWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW ARRWIN5 ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW ARRWIN4 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW ARRWIN4 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW ARRWIN1 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW ARRWALK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW ARRWALK ;NEAR ATTACK .DRW ENWALK .DB H'40,0 .DB H'66,H'11 .DB H'11,H'01 .DRW ARRATAK ;MIDDLE ATTACK .DRW ARRTHROW .DB H'23,0 .DB H'26,H'02 .DB H'11,H'01 .DRW ARRATAK ;FAR ATTACK .DRW ARRTHROW .DB H'23,0 .DB H'26,H'01 .DB H'11,H'01 .DRW ARRWALK ;CHARGE .DRW ENCHARGE .DB H'40,-1 .DB H'36,H'11 .DB H'11,H'11 .DRW ARRWIN5 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW ARRWIN2 ;DODGEING .DRW -1 .DB H'25,-1 .DB 0,0 .DB 0,0 .DRW ARRATAK ;SHOOTING .DRW ARRTHROW .DB H'40,0 .DB 0,0 .DB 0,0 BIGARROW: .DRW ARROWA .DRW SHURIWAKE ;ARROW BEING SHOT .DB 0,0 .DB H'20,H'11 .DB H'11,H'0F MONGO: .DRW MONG2 ;WAKEUP .DRW MOWAKE2 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW MONG4 ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW MONG1 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW MONG1 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW MONG6 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW MONG2 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW MONGWLK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW MONGHIT ;NEAR ATTACK .DRW MONGATTACK .DB H'40,2 .DB H'88,H'14 .DB H'11,H'01 .DRW MONGHIT ;MIDDLE ATTACK .DRW MONGATTACK .DB H'40,2 .DB H'88,H'14 .DB H'11,H'01 .DRW MONGHIT ;FAR ATTACK .DRW MONGATTACK .DB H'40,2 .DB H'88,H'14 .DB H'11,H'01 .DRW MONGWLK ;CHARGE .DRW ENCHARGE .DB H'40,0 .DB H'88,H'14 .DB H'11,H'01 .DRW MONG2 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 JUMPY: .DRW JUMPKN3 ;WAKEUP .DRW VALKWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW JUMPKN6 ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW JUMPKN4 ;FALLING .DRW ENFALL .DB H'40,-2 ;SET TO -2 TO ARM HIM WHILE JUMPING. .DB H'45,H'01 .DB H'11,H'0F .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW KNIFATAK ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW JUMPKN3 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW KNIFWLK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW KNIFATAK ;NEAR ATTACK .DRW ENNEAR .DB H'40,1 .DB H'05,H'11 .DB H'11,H'01 .DRW KNIFATAK ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,1 .DB H'05,H'02 .DB H'11,H'01 .DRW KNIFATAK ;FAR ATTACK .DRW ENFAR .DB H'40,1 .DB H'45,H'01 .DB H'11,H'01 .DRW KNIFATAK ;CHARGE .DRW ENCHARGE .DB H'40,0 .DB H'45,H'11 .DB H'11,H'11 .DRW JUMPKN4 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 SAMURAI: .DRW SWRDMAN1 ;WAKEUP .DRW SAMWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SWRDHURT ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SWRDMAN4 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW SWRDMAN1 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SWRDMAN1 ;STANDING. USED ONLY WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW SWRDWALK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW SWRDATAK ;NEAR ATTACK .DRW ENNEAR .DB H'40,1 .DB H'56,H'11 .DB H'11,H'01 .DRW SWRDATAK ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,1 .DB H'56,H'02 .DB H'11,H'01 .DRW SWRDATAK ;FAR ATTACK .DRW ENFAR .DB H'40,1 .DB H'56,H'01 .DB H'11,H'01 .DRW SWRDATAK ;CHARGE .DRW ENCHARGE .DB H'40,1 .DB H'56,H'11 .DB H'11,H'11 .DRW SWRDMAN1 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 EAGLEBIRD: .DRW EAGFLAP ;WAKEUP .DRW FAIRYWAKE .DB 0,0 .DB H'30,H'12 .DB H'11,H'0F .DRW EAGATTAK ;HURT BY ATTACK .DRW ENDEAD .DB 0,-1 .DB 0,0 .DB 0,0 BIRDFAKE: .DRW BRD1 ;WAKEUP .DRW BDWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BRD5 ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BRD1 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW BRD1 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BRD1 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW BRDWALK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW BRDATAK ;NEAR ATTACK .DRW ENNEAR .DB H'40,1 .DB H'24,H'11 .DB H'11,H'01 .DRW BRDATAK ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,1 .DB H'24,H'02 .DB H'11,H'01 .DRW BRDATAK ;FAR ATTACK .DRW ENFAR .DB H'40,1 .DB H'25,H'11 .DB H'11,H'01 .DRW BRDWALK ;CHARGE .DRW ENCHARGE .DB H'40,1 .DB H'24,H'11 .DB H'11,H'01 .DRW BRD4 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 GREENTHUG: .DRW GRNCAPE1 ;WAKEUP .DRW TGWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW GRNHURT ;HURT BY ATTACK .DRW ENHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW GRNCAPE4 ;FALLING .DRW ENFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW GRNCAPE1 ;JUMPING .DRW ENJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;ATTACKING .DRW ENATTACK .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW GRNCAPE1 ;STANDING. USED ONLY ON WHEN DELAYING .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW GRNWLK ;WALKING .DRW ENWALK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW GRNKICK ;NEAR ATTACK .DRW ENNEAR .DB H'40,1 .DB H'34,H'11 .DB H'11,H'01 .DRW GRNKICK ;MIDDLE ATTACK .DRW ENMIDDLE .DB H'40,1 .DB H'34,H'02 .DB H'11,H'01 .DRW GRNKICK ;FAR ATTACK .DRW ENMIDDLE .DB H'40,2 .DB H'36,H'01 .DB H'11,H'01 .DRW GRNKICK ;CHARGE .DRW ENCHARGE .DB H'40,1 .DB H'28,H'11 .DB H'11,H'11 .DRW GRNCAPE1 ;POSEING. USED PRIOR TO AN ATTACK. .DRW ENPOSE .DB H'40,-1 .DB 0,0 .DB 0,0 WIZZARD: .DRW WIZFLY ;WAKEUP .DRW SORWAKE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;HURT BY ATTACK .DRW SORHURT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;FALLING .DRW SORFALL .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;WORLD COMMAND .DRW -1 .DB H'13,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;JUMPING .DRW SORJUMP .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;ATTACKING (SHOOTING) .DRW SORSHOOT .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW -1 ;DUCKING. USED TO HIDE IN INVISIBLE MODE. .DRW SORHIDE .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;STANDING. .DRW SORSTAND .DB H'40,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;WALKING .DRW SORWLK .DB H'23,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;FLOATING SORCERER (ENEAR) .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 .DRW WIZFLY ;DEAD (EMIDDLE) .DRW -1 .DB H'40,-1 .DB 0,0 .DB 0,0 SPIN: .DRW DAGSPIN .DRW SHURIWAKE .DB 0,0 .DB H'30,H'12 .DB H'11,H'0F BOMBER: .DRW BOMB1 ;NINJA'S BOMB .DRW BOMBWAKE .DB 0,-1,0,0,0,0 FIRE: .DRW SHOOT1 .DRW SHURIWAKE .DB 0,0 .DB H'30,H'12 .DB H'11,H'0F GATEKEY: .DRW KEYGATE ;WAKE UP .DRW BARGATE .DB 0,-1 .DB 0,0 .DB 0,0 .DRW -1 ;HURT .DRW BRG10 .DB 0,-1 .DB 0,0 .DB 0,0 BARGATE: ;TO SEE IF KEY IS BEING USED .DB GRAVITY,0 .DB IDENTIFY .DRW SUPPLY .DB ENABLE,HURTING BRG5: .DB SKIP .DRW BRG5 BRG10: .DB ATTACK .DRW BRG20 .DB 17 .DB ACTIVATE,EWAKE BRG20: .DB NOISE .DRW DOOROPEN .DB DIE,1 MANPRIZE: .DRW FREEMAN ;WAKEUP .DRW GIVEMAN .DB 0,-1 .DB 0,0 .DB 0,0 BOOMMOVE: .DRW BOOMTHRO .DRW BOOMWAKE .DB 0,-2 .DB H'20,H'17 .DB H'11,H'0F BOOMWAKE: .DB INSTRUCTIONS,8 .DB TARGET .DRW ALL^HERO0 .DB SOLIDSTATE,OFF .DB GRAVITY,0 .DB MOMLIMIT,96,64 .DB MOVEIN,64,-1 .DB SETMOM,NOCHANGE,0 .DB UNLINK .DB FACE,TRAVELING|DOWN .DB NOISE .DRW SHURISND BMO10: .DB IFXEDGE ;WHEN FIRST THROWN, WE JUST HURT ENEMIES .DRW BMO20 ;UNTIL WE REACH A SCREEN SIDE. .DB 32 .DB SKIP .DRW BMO10 BMO20: .DB INSTRUCTIONS,5 .DB FETCHREG,XMOM ;TIME TO REVERSE. GET CURRENT MOMENTUM .DB COMPARE .DRW BMO30 .DRW H'80 ;SEE IF NEGATIVE MOMENTUM RIGHT NOW .DB SETREG .DRW -12 ;IF PLUS NOW, USE MINUS TO REVERSE .DB SKIP .DRW BMO35 BMO30: .DB SETREG ;IF NEGATIVE NOW, USE PLUS TO REVERSE .DRW 12 BMO35: .DB MOVEIN,-32,-8 ;CANCEL SOME MOMENTUM INITIALLY .DB NOISE .DRW SHURISND BMO40: .DB INSTRUCTIONS,3 .DB TARGET ;SET UP TO SEE IF HERO CAUGHT THE BOOMERANG .DRW HERO0 .DB DISTANCE .DRW BMO70 ;GIVE HIM BACK THE BOOMERANG IF HE TOUCHES IT .DB 20,16 .DB TARGET .DRW ALL^HERO0 ;GO BACK TO HURTING ENEMIES .DB INSTRUCTIONS,5 .DB SPEED .DRW BMO60 .DB 64,-1 .DB SETMOM,-1,0 ;WHEN FULL SPEED, GO STRAIGHT ON Y AXIS .DB IFXEDGE ; .DRW SAFEDIE ;UNTIL WE REACH A SCREEN SIDE. .DB 16 .DB SKIP .DRW BMO40 BMO60: .DB INSTRUCTIONS,3 .DB REGMOM,REGISTER,-1 ;REVERSE ON X AXIS TILL GOING 64. .DB SKIP .DRW BMO40 BMO70: .DB INSTRUCTIONS,2 .DB TARGET .DRW ALL^HERO0 .DB SKIP .DRW GOTBOOM MAGICPRIZE: .DRW TNT2 ;WAKEUP .DRW GIVEMAGIC .DB 0,-1 .DB 0,0 .DB 0,0 LOTSMAGIC: .DRW BOX ;WAKEUP .DRW GIVELOTS .DB 0,-1 .DB 0,0 .DB 0,0 ;WHEN YOU LAUNCH A TORCH, IT ADDS PARAM2 TO THE TOTAL TORCH TIME. ;IF ANOTHER TORCH IS ALREADY ACTIVE IT THEN DIES. OTHERWISE IT ;LIGHTS THE ROOM AND COUNTS DOWN THE TIME. WHEN THE TIME IS DONE ;IT DARKENS THE ROOM AND DIES. OF COURSE IF ITS NOT A DARK ROOM IT ;JUST COUNTS THE TIME. ;SOMETIMES YOU MIGHT WANT TO RELIGHT THE ROOM (FOR INSTANCE, AFTER ;A STATUS MENU). USE HURT: ; .DB HURT,0,ID ; .DRW FIREDUMMY TORCHFIRE: .DRW DUMMY ;WAKE UP .DRW TORCHLIT .DB 0,-1 .DB 0,0 .DB 0,0 .DRW -1 ;HURT .DRW TRC30 .DB 0,-1 .DB 0,0 .DB 0,0 TORCHLIT: .DB INSTRUCTIONS,7 .DB GRAVITY,0 .DB FETCHREG,PARAM2 .DB ADDDATA,12 .DB STORE,12 .DB ACTIVE .DRW SAFEDIE .DB ID .DRW FIREDUMMY TRC30: .DB ENABLE,HURTING .DB FETCHREG,WORLD .DB CASE ;LIST OF DARK ROOMS .DRW PAL10,83 .DRW PAL20,4 .DRW PAL20,24 .DRW PAL30,13 .DRW PAL30,33 .DRW PAL30,50 .DRW PAL30,66 .DRW PAL10,64 .DRW PAL10,86 .DRW PAL10,87 .DRW PAL40,8 .DRW PAL40,46 .DRW PAL50,18 .DRW PAL40,28 .DRW PAL40,63 .DRW PAL50,38 .DRW PAL50,71 .DRW PAL50,55 .DRW PAL50,40 .DRW PAL50,57 .DRW PAL50,20 .DRW PAL50,73 .DRW PAL60,19 .DRW PAL60,39 .DRW PAL60,15 .DRW PAL60,35 .DRW 0 .DB BPALETTE .DRW -1 TRC21: .DB WRITEVID .DRW TTIME .DB 3,1,STATVID,5 TRC20: .DB DELAY,20 .DB LOAD,12 .DB EQUAL .DRW TRC10 .DRW 0 .DB ADD .DRW -1 .DB SHOWREG,3,6,STATVID .DB STORE,12 .DB SKIP .DRW TRC20 TRC10: .DB WRITEVID .DRW TIMEKILL .DB 3,1,STATVID,10 .DB BPALETTE .DRW -1 .DB SPALETTE .DRW -1 .DB DIE,0 PAL10: .DB BPALETTE .DRW WINDPAL .DB SPALETTE .DRW WINDSPAL .DB SKIP .DRW TRC21 PAL20: .DB BPALETTE .DRW CPAL1 .DB SPALETTE .DRW CITYSPAL .DB SKIP .DRW TRC21 PAL30: .DB BPALETTE .DRW DUPAL1 .DB SPALETTE .DRW DUNGSPAL .DB SKIP .DRW TRC21 PAL40: .DB BPALETTE .DRW JPAL1 .DB SPALETTE .DRW JUNGSPAL .DB SKIP .DRW TRC21 PAL50: .DB BPALETTE .DRW TPAL1 .DB SPALETTE .DRW TEMPSPAL .DB SKIP .DRW TRC21 PAL60: .DB BPALETTE .DRW JPAL1 .DB SPALETTE .DRW PYRSPAL .DB SKIP .DRW TRC21 TTIME: .DB H'1D,H'18,H'1B,H'0C,H'11 TIMEKILL:.DB H'41,H'41,H'41,H'41,H'41,H'41,H'41,H'41,H'41,H'41 MAGICTHROW: .DRW HTNTS ;WAKEUP FOR THROWN DYNAMITE .DRW MRDYNAMITE .DB 0,-1 .DB 0,0 .DB 0,0 MRDYNAMITE: .DB INSTRUCTIONS,H'8A .DB MOMLIMIT,64,127 .DB BOUNCE,200 .DB GRAVITY,10 .DB SOLIDSTATE,OFF TMG3: .DB MOVEIN,24,-32 .DB IFPARAM .DRW TMG5 .DB 0 .DB MOVEIN,24,-1 .DB IFPARAM .DRW TMG5 .DB 1 .DB SETMOM,0,-1 TMG5: .DB UNLINK TMG6: .DB YVISUAL .DRW TMG10 .DB 10 .DB SPEED .DRW TMG10 .DB -1,16 .DB SKIP .DRW TMG6 TMG10: .DB SOLIDSTATE,SAFE .DB DELAY,20 .DB NOISE .DRW THUNDER ;MAKE THE THUNDER NOISE .DB PALCLR,0,H'30 ;SET BACKGROUND TO WHITE .DB SEQUENCE .DRW BOMBLAST .DB DELAY,2 .DB PALCLR,0,H'0F ;SET BACKGROUND TO BLACK .DB DELAY,2 .DB PALCLR,0,H'30 ;SET BACKGROUND TO WHITE .DB DELAY,2 .DB ACTIVE .DRW TMG12 .DB ID .DRW FIREDUMMY .DB BPALETTE .DRW -1 TMG11: .DB CREATE,STATGUYID,255,192,0 ;LAUNCH THE STATUS BAR UPDATER .DB DIE,0 TMG12: .DB HURT,0,ID .DRW FIREDUMMY .DB SKIP .DRW TMG11 HEALTHPRIZE: .DRW HART ;WAKEUP .DRW GIVEHEALTH .DB 0,-1 .DB 0,0 .DB 0,0 WORLDWAKER: .DRW DUMMY ;WORLD MISC STUFF WAKEUP .DRW WWAKEUP .DB 0,-1 .DB 0,0 .DB 0,0 BOOMERPRIZE: .DRW BOOMER1 ;WAKEUP .DRW GIVEBOOM .DB 0,-1 .DB 0,0 .DB 0,0 TORCHPRIZE: .DRW TORCH ;WAKEUP .DRW GIVETORCH .DB 0,-1 .DB 0,0 .DB 0,0 BRASSPRIZE: .DRW BRASSKNU ;WAKEUP .DRW GIVEBRASS .DB 0,-1 .DB 0,0 .DB 0,0 FOODPRIZE: .DRW FOOD ;WAKEUP .DRW GIVEFOOD .DB 0,-1 .DB 0,0 .DB 0,0 SUCTPRIZE: .DRW SUCTION ;WAKEUP .DRW GIVESUCT .DB 0,-1 .DB 0,0 .DB 0,0 KEYPRIZE: .DRW KEY ;WAKEUP .DRW GIVEKEY .DB 0,-1 .DB 0,0 .DB 0,0 ROCKGATE: .DRW SPGATE ;WAKEUP .DRW BLOWGATE .DB 0,-1 .DB 0,0 .DB 0,0 .DRW -1 ;HURTING .DRW BG10 .DB 0,-1 .DB 0,0 .DB 0,0 BLOWGATE: .DB GRAVITY,0 .DB ENABLE,HURTING .DB HALFFREQ,ON BG5: .DB SKIP .DRW BG5 BG10: .DB ATTACKER .DRW BG11 .DB 8 .DB ACTIVATE,EWAKE BG11: .DB DAMAGE .DB ASSESS .DRW BG12 .DB 0 .DB ACTIVATE,EWAKE BG12: .DB NOISE .DRW DOOROPEN .DB DIE,1 STATSELECT: .DRW SELECT1 ;WAKEUP .DRW GETICON .DB 0,-1 .DB 0,0 .DB 0,0 MAPTHING: .DRW MAPICON .DRW GIVEMAP .DB 0,-1 .DB 0,0 .DB 0,0 DRIPPY: .DRW DRIP1 .DRW DRIPMOVE .DB 0,0 .DB H'20,H'02 .DB H'11,H'0F DRIPDIE: .DRW DRIP2 .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 DRIPMOVE: .DB TARGET .DRW HERO0 .DB REARM DRP4: .DB RANDOM ;EITHER HIT TOP OR BOTTOM LEDGE .DRW DRP5 .DB 127 .DB SOLIDSTATE,OFF ;MAKE IT HIT BOTTOM LEDGE .DB DELAY,15 .DB SOLIDSTATE,ON DRP5: .DB REARM .DB STANDING ;MAKE IT HIT TOP LEDGE .DRW DRP10 .DB SKIP .DRW DRP5 DRP10: .DB NOISE .DRW WATERDROP .DB SEQUENCE .DRW DRIPDIE .DB DELAY,2 .DB DIE,0 ;********************** PRIZES ********************************** BOMBLAST: .DRW BOMBEXPL .DRW -1 .DB 0,0 .DB H'20,H'44 .DB H'66,H'00 GIVEMAGIC: ;GIVE SINGLE TNT .DB TARGET .DRW HERO0 .DB HALFFREQ,ON GMA10: .DB DISTANCE .DRW GMA20 .DB 16,4 .DB SKIP .DRW GMA10 GMA20: .DB HALFFREQ,OFF .DB LOAD,16 .DB ADD .DRW 1 .DB STORE,16 .DB SKIP .DRW GOTDONE GIVELOTS: .DB SETBEHAVIOR,INTELLIGENT ;USE THIS TO SIGNAL LOTS OF DYNAMITE GIVEHEALTH: GIVE2: .DB TARGET .DRW HERO0 .DB HALFFREQ,ON GHE10: .DB DISTANCE .DRW GHE20 .DB 16,4 .DB SKIP .DRW GHE10 GHE20: .DB HALFFREQ,OFF .DB INSTRUCTIONS,8 .DB IFBEHAVIOR .DRW GHE30 .DB INTELLIGENT .DB IFBEHAVIOR .DRW GHE40 .DB FAST .DB IFBEHAVIOR .DRW GHE70 .DB SHY .DB IFBEHAVIOR .DRW GHE71 .DB WEAK .DB IFBEHAVIOR .DRW GOTBOOM .DB DYING .DB IFBEHAVIOR .DRW GHE76 .DB WEAK .DB IFBEHAVIOR .DRW GHE73 .DB MAD .DB IFBEHAVIOR .DRW GHE74 .DB HIJUMPER .DB IFBEHAVIOR .DRW GHE75 .DB OPTION1 GHE25: .DB GETJOYHEALTH,JOY1 .DB ADD,4,0 ;ADD 1 HEART (4 HEALTHS) .DB SETJOYHEALTH,JOY1 .DB SKIP .DRW GOTDONE GHE30: .DB INSTRUCTIONS,4 .DB LOAD,16 .DB ADD,10,0 ;ADD DYNAMITES .DB LIMIT,255,0 .DB STORE,16 GOTDONE:.DB NOISE .DRW GOTPRIZE .DB CREATE,STATGUYID,255,192,0 ;LAUNCH THE STATUS BAR UPDATER .DB DIE,1 GHE40: .DB ADDHEROS,JOY1,1 ;GIVE 1 HERO .DB SKIP .DRW GOTDONE GIVEMAP: .DB SETBEHAVIOR,SHY .DB SKIP .DRW GIVE2 GHE70: .DB INSTRUCTIONS,7 .DB LOAD,11 .DB ADD,1,0 .DB STORE,11 .DB SKIP .DRW GOTDONE GIVEBOOM: .DB SETBEHAVIOR,DYING .DB SKIP .DRW GIVE2 ;SHARED ENTRY POINT TO GIVE 1 BOOMERANG TO HERO AND DIE GOTBOOM: .DB INSTRUCTIONS,7 .DB LOAD,5 .DB ADD,1,0 .DB STORE,5 .DB SKIP .DRW GOTDONE GHE71: .DB INSTRUCTIONS,7 .DB LOAD,4 .DB ADD,1,0 .DB STORE,4 .DB SKIP .DRW GOTDONE GIVEFOOD: .DB SETBEHAVIOR,MAD .DB SKIP .DRW GIVE2 GHE73: .DB INSTRUCTIONS,7 .DB LOAD,6 .DB ADD,1,0 .DB STORE,6 .DB SKIP .DRW GOTDONE GIVEBRASS: .DB SETBEHAVIOR,OPTION1 ;WE HAD TO SHARE OPTION 1. GIVESUCT: .DB SETBEHAVIOR,HIJUMPER .DB SKIP .DRW GIVE2 GHE74: .DB IFBEHAVIOR ;CATCH THE EVIL SHARED OPTION1 .DRW GHE74A .DB OPTION1 .DB INSTRUCTIONS,7 .DB LOAD,7 .DB ADD,1,0 .DB STORE,7 .DB SKIP .DRW GOTDONE GHE74A: .DB INSTRUCTIONS,7 .DB LOAD,9 .DB ADD,1,0 .DB STORE,9 .DB SKIP .DRW GOTDONE GIVEKEY: .DB SETBEHAVIOR,OPTION1 .DB SKIP .DRW GIVE2 GHE75: .DB INSTRUCTIONS,7 .DB LOAD,8 .DB ADD,1,0 .DB STORE,8 .DB SKIP .DRW GOTDONE GIVETORCH: .DB GRAVITY,0 .DB SETBEHAVIOR,WEAK .DB SKIP .DRW GIVE2 GHE76: .DB INSTRUCTIONS,7 .DB LOAD,4 .DB ADD,1,0 .DB STORE,4 .DB SKIP .DRW GOTDONE GIVEMAN: .DB SETBEHAVIOR,FAST ;USE THIS TO SIGNAL GIVING A MAN .DB SKIP .DRW GIVE2 ;LET THIS BOTTLE HAVE GRAVITY GETICON: .DB GRAVITY,0 LSM10: .DB SETREG .DRW H'1800 ;START AT X=0, Y=1 IN BACKGROUND .DB STORE,STATE ;SET TEST POINT LSM20: .DB INSTRUCTIONS,11 .DB LOAD,10 ;POSITION THE SELECT CURSOR .DB LIMIT,7,0 .DB REGINDEX .DRW XLOCS .DB GOTO,REGISTER,1 .DB LOAD,STATE .DB READCHAR ;SEE WHAT'S THERE .DB CASE .DRW LSM100,H'A1 .DRW LSM200,H'26 .DRW LSM300,H'6D .DRW LSM400,H'4F .DRW 0 LSM25: .DB INSTRUCTIONS,5 .DB LOAD,STATE ;GET BACK WHERE WE WERE SCANNING .DB ADD .DRW H'08 ;SKIP 2 COLS TO NEXT CHECK .DB STORE,STATE .DB ANDREG .DRW H'00FF ;SEE IF WRAP ROW TIME .DB NOTEQUAL .DRW LSM20 .DRW 0 .DB INSTRUCTIONS,4 .DB LOAD,STATE .DB ADD .DRW H'0700 ;SKIP 1 ROW WHEN CARRY HAPPENS .DB STORE,STATE .DB COMPARE .DRW LSM10 .DRW H'2800 ;WRAP WHEN CLOSE TO MIDDLE .DB SKIP .DRW LSM20 LSM100: .DB FETCHREG,WORLD ;TO LAUNCH DRIPS .DB CASE .DRW LSM101,17 .DRW LSM101,37 .DRW LSM101,54 .DRW LSM101,70 .DRW 0 .DB SKIP .DRW LSM25 LSM101: .DB LOAD,STATE .DB REGLAUNCH,46,0 .DB SKIP .DRW LSM25 LSM200: .DB FETCHREG,WORLD ;TO LAUNCH BALLS .DB CASE .DRW LSM201,16 .DRW LSM201,36 .DRW LSM201,53 .DRW LSM201,69 .DRW 0 .DB SKIP .DRW LSM25 LSM201: .DB RANDOM ;RANDOMLY LAUNCH BALLS .DRW LSM25 .DB 128 .DB HOWMANY,52 ;IF 2 BALLS ACTIVE,DON'T LAUNCH MORE .DB COMPARE .DRW LSM25 .DRW 2 .DB LOAD,STATE .DB REGLAUNCH,52,0 .DB SKIP .DRW LSM25 LSM300: .DB FETCHREG,WORLD ;TO LAUNCH BOMBS .DB CASE .DRW LSM301,7 .DRW LSM301,27 .DRW LSM301,45 .DRW LSM301,62 .DRW 0 .DB SKIP .DRW LSM25 LSM301: .DB RANDOM .DRW LSM25 .DB 200 .DB LOAD,STATE .DB REGLAUNCH,32,2 .DB SKIP .DRW LSM25 LSM400: .DB FETCHREG,WORLD ;TO LAUNCH BRIZBIG .DB CASE .DRW LSM401,12 .DRW LSM401,32 .DRW LSM401,49 .DRW LSM401,65 .DRW 0 .DB SKIP .DRW LSM25 LSM401: .DB LOAD,STATE .DB ADD .DRW H'1000 .DB REGLAUNCH,50,0 .DB SKIP .DRW LSM25 XLOCS: .DB 49 .DB 97 .DB 117 .DB 133 .DB 149 .DB 165 .DB 181 .DB 197 ;**** KUNG FU (SOLDIER) ENEMY MOVEMENTS **** ; ;OPTION1 BIT IN BEHAVIOR MEANS AN ENEMY CAN JUMP DOWN THROUGH SOLIDS TO ;TRACK YOU. ; ;WEAK IS USED TO MAKE A DIFFERENCE BETWEEN DIFFERENT COLORS OF THE SAME ;ENTITY. ; ;SHY MEANS THAT AN ENEMY NEVER ABORTS AN ATTACK HE STARTS. ; ;FAST MEANS AN ENEMY CAN SHOOT ; ;INTELLIGENT MEANS AN ENEMY CAN DODGE AN ATTACK BY USING HIS ENTRY EDODGE. TEDWAKE: .DB HOWMANY,60 ;IF 3 TEDS ACTIVE, DON'T LAUNCH MORE .DB COMPARE .DRW WHITEWAKE .DRW 3 TED10: .DB LAUNCH,60,0,0,0 ;LAUNCH MORE TEDS .DB SETMOM,64,64 .DB DELAY,7 WHITEWAKE: .DB SETREG,5,0 .DB SETBEHAVIOR,FAST|OPTION1|HIJUMPER .DB SKIP .DRW ENWAKE SAMWAKE: .DB SETREG,10,0 .DB SETBEHAVIOR,OPTION1 .DB RANDOM .DRW SM20 .DB 128 .DB DELAY,20 .DB CREATE,21,0,0,0 ;ANDREW LAUNCHES RANDOM BIRDS SM20: .DB RANDOM .DRW SM30 .DB 128 .DB DELAY,20 .DB CREATE,21,0,0,0 ;ANDREW LAUNCHES RANDOM BIRDS SM30: .DB SKIP .DRW ENWAKE NJWAKE: .DB SETBEHAVIOR,OPTION1|HIJUMPER|FAST|INTELLIGENT .DB SETREG,9,0 .DB RANDOM .DRW NJ10 .DB 128 .DB LAUNCH,51,0,0,0 ;LAUNCH HOLDY SOMETIMES NJ10: .DB SKIP .DRW ENWAKE MOWAKE2: .DB SETBEHAVIOR,SHY .DB SETREG,8,0 .DB SKIP .DRW DUMBWAKE KNWAKE: .DB SETREG,3,0 DUMBWAKE: .DB DELAY,20 ;SHOW HIS WAKEUP FOR 1 SECOND. .DB SETBEHAVIOR,OPTION1|HIJUMPER ;CAN JUMP DOWN AND HIGH .DB TARGET .DRW HERO0|ENEMY ;MONGOLIANS ARE STUPID AND KILL ALL .DB SKIP .DRW ENW10 BRWAKE: .DB SETREG,6,0 NOWAIT: .DB SETBEHAVIOR,OPTION1|HIJUMPER .DB SKIP .DRW ENWAKE TGWAKE: .DB SETREG,1,0 .DB SKIP .DRW BRW10 BDWAKE: .DB SETREG,4,0 .DB SKIP .DRW BRW10 VALKWAKE: .DB SETREG,0,0 .DB SKIP .DRW NOWAIT GNWAKE: .DB SETREG,7,0 BRW10: .DB SETBEHAVIOR,OPTION1 ;CAN JUMP DOWN HIWAIT: .DB SETBEHAVIOR,HIJUMPER ;CAN JUMP HIGH .DB DELAY,20 ;SHOW HIS WAKEUP FOR .6 SECOND. .DB SKIP .DRW ENWAKE ;ENTITY IS TOO FAR AWAY TO CHARGE OR ATTACK. CAN WE SHOOT? TRYSHOOT: .DB IFNBEHAVIOR .DRW PICKMOM ;SKIP IF CAN'T SHOOT .DB FAST ;FAST MEANS WE CAN SHOOT .DB RANGE .DRW PICKMOM .DB 64,-1 ;MUST BE FURTHER AWAY THAN 64 TO SHOOT .DB RANGE .DRW CANSHOOT .DB -1,48 ;MUST BE WITHIN 48 ON Y LEVEL .DB SKIP .DRW PICKMOM CANSHOOT: .DB RANDOM .DRW PICKMOM .DB 64 .DB FETCHREG,ENTITY .DB EQUAL .DRW CSH10 .DRW 4 .DB ACTIVATE,ESHOOT CSH10: .DB RANDOM .DRW PICKMOM ;MAKE WHITEHAT SHOOT LESS OFTEN .DB 128 .DB ACTIVATE,ESHOOT ;THIS ATTACK SEQUENCE RANGES THE ENTITY AND PICKS ONE OF THE THREE ATTACKS ;IF HE'S IN RANGE. IT ALSO SUPPORTS SPEEDING UP FOR A CHARGE. ENATTACK: ;ENEMY ATTACKING MOVEMENT LIST .DB RANGE .DRW EON .DB 14,15 ;NEAR IF WITHIN 14 .DB RANDOM .DRW EOF ;DO 50/50 ON FAR AND MIDDLE .DB 128 .DB ACTIVATE,EMIDDLE ;OTHERWISE, MIDDLE ATTACK. EON: .DB ACTIVATE,ENEAR EOF: .DB ACTIVATE,EFAR ENNEAR: .DB ENABLE,ALL^ATTACKING ;ENABLE ALL BUT ATTACKING. .DB SETMOM,1,0 ;ZERO OUR MOMENTUM IF CLOSE UP ATTACK ENN10: .DB LOWNOISE .DRW LOUDSWISH .DB FINISH .DB ATTACKED .DRW ENN15 ;IF WE ATTACKED SUCCESSFULLY, RESET MAD .DB ACTIVATE,EWALK ;GO BACK TO THE POSE FOR AN ATTACK. ENN15: .DB RESETBEHAVIOR,MAD .DB ACTIVATE,EWALK ENMIDDLE: .DB SETMOM,32,0 .DB ENABLE,ALL^ATTACKING .DB SETMOM,8,0 .DB SKIP .DRW ENN10 ENFAR: .DB REARM .DB SETMOM,40,0 ;GO IN FAST FOR THIS ONE. .DB ENABLE,ALL^ATTACKING ;ENABLE ALL BUT ATTACKING. .DB REARM .DB SETMOM,8,0 .DB SKIP .DRW ENN10 ENCHARGE: ;ENEMIES CHARGE. CALLED FROM WALKING .DB SETMOM,48,0 .DB SETMOM,56,0 .DB SETMOM,56,0 .DB SETMOM,1,0 .DB SKIP .DRW ENN10 ;ALL ENTITIES MUST DIE HERE IF THEY ARE TO ADD TO THE SCORE. ENDEAD: .DB DISABLE,ALL .DB LOWNOISE .DRW BUMPSND .DB SOLIDSTATE,OFF .DB SETMOM,-48,-120 ;THROW HIM OFF SCREEN .DB GRAVITY,-1 .DB SETCOUNTER,40 ;A BUG GOT ONE STUCK. MAKE A TIMEOUT TO DIE. END10: .DB COUNT .DRW REALDIE .DB 1 .DB YVISUAL ;WAIT TILL WE GO OFF SCREEN .DRW END10 .DB 200 REALDIE:.DB INSTRUCTIONS,4 .DB DELAY,7 .DB CREATE,6,124,16,0 .DB LOWNOISE .DRW DIEPRIZE .DB DIE,1 ;IF HEALTH GOES TO ZERO, DIE ;THIS ENEMY POSING MODE CAN BE CALLED WHENEVER YOU WANT. IT MAKES HIM ;FACE THE HERO AND WAIT A TIME BASED ON BEHAVIOR. THEN HE WILL ;ATTACK IF THE HERO IS STILL IN RANGE. OTHERWISE HE GOES TO WALK MODE. ENPOSE: .DB INSTRUCTIONS,H'86 .DB SETMOM,1,0 ;FACE HERO .DB LOAD,30 ;USE THIS DELAY IF MELLOW ENTITY .DB IFNBEHAVIOR .DRW ENP10 .DB MAD|DYING .DB LOAD,29 ;IF MAD OR DYING, USE THIS DELAY ENP10: .DB SETALT,REGISTER ;DELAY SPECIFIED TIME FOR THIS WORLD ENP15: .DB ALTCOUNT .DRW ENP20 .DB 1 ;WHEN COUNTER RUNS OUT, ATTACK .DB RANGE .DRW ENP15 ;KEEP COUNTING IF STILL IN RANGE .DB 32,15 .DB IFBEHAVIOR ;IF SHY .DRW ENP20 ;HE ALWAYS FINISHES EVEN IF YOU LEAVE .DB SHY .DB ACTIVATE,EWALK ENP20: .DB ACTIVATE,EATTACK ;THIS FALL MODE TURNS SOLIDSTATE BACK ON, WAITS FOR CONTACT WITH SOLID ;OR DEATH LEVEL, THEN ACTIVATES WALK MODE. ENFALL: .DB INSTRUCTIONS,3 .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER ;RESTORE SOLID VALUE .DB SOLIDSTATE,SAFE ENF5: .DB STANDING .DRW ENF10 .DB YVISUAL .DRW ENF5 .DB 200 ;CATCH IF ABOVE BOTTOM, NOT DEAD YET. .DB DIE,1 ;DIE IF WE FELL OFF SCREEN ;DONE FALLING. SEE IF WE ENDED UP RIGHT NEXT TO OUR TARGET. ENF10: .DB RANGE .DRW GOPOSE .DB 30,16 .DB ACTIVATE,EWALK GOPOSE: .DB ACTIVATE,EPOSE ;ALL KUNG FU TYPE ENEMYS SHOULD GO HERE TO FINISH THEIR WAKEUP. THEY ;MUST SET REGISTER TO THE SONG THEY WANT. ENWAKE: .DB INSTRUCTIONS,5 .DB TARGET .DRW HERO0 ENW10: .DB IDENTIFY ;IDENTIFY AS ONE WHO ONLY GETS HEROS .DRW ENEMY .DB XTRACK,TOWARDS ;COME HERE FOR MONGO WAKE .DB FRICTION,8,0 ;SLOW FRICTION DOWN .DB MOMLIMIT,60,-1 ;GIVE ENTITIES BETTER SPEED RANGE .DB INSTRUCTIONS,4 .DB STORE,STATE ;SAVE SONG TO PLAY .DB SOUNDBUSY .DRW ENW20 .DB DONTCARE,DONTCARE,DONTCARE,ON ;MAKE SURE WE PLAYED THE LAST ;ONE FOR THE MINIMUM TIME. ENW20: .DB FINISH ;FINISH WAKE UP .DB SETMOM,1,0 ;START BY FACING HERO .DB ACTIVATE,EWALK ;START LOOKING FOR A HERO TO KILL ;THIS TABLE HAS THE MUSIC TO USE FOR A GIVEN KUNGFU ENEMY. LOAD REGISTER ;WITH THE NUMBER TO GET BEFORE GOING TO ENWAKE. ENHURT: .DB INSTRUCTIONS,7 ;SPEED UP PROCESSING A BIT .DB DAMAGE ;APPLY HURT DAMAGE TO HEALTH .DB FETCHREG,DEF_SOLID .DB SOLIDSTATE,REGISTER ;RESTORE SOLID VALUE .DB SOLIDSTATE,SAFE .DB FACE,CURRENT ;KEEP HIM FACING CURRENT DIRECTION .DB ASSESS ;SEE IF HEALTH IS ZERO .DRW ENDEAD .DB 0 .DB IFBEHAVIOR .DRW HD20 .DB INTELLIGENT ;IF INTELLIGENT ENTITY, HE CAN JUMP BACK ;CATCH SPECIAL CASES OF PINNED AGAINST SIDE .DB INSTRUCTIONS,5 .DB ATTACK .DRW EN18 ;IF DYNAMITE, NEED TO CATCH SOON TO ENABLE HURT .DB 4 .DB XVISUAL ;SEE IF PINNED TO LEFT OF SCREEN .DRW EN19 ;IF SO, THROW HIM RIGHT .DB 16 ;HE'S PINNED AGAINST THE LEFT. THROW HIM RIGHT. .DB XVISUAL ;SEE IF PINNED TO LEFT OF SCREEN .DRW EN9 .DB 240 .DB INSTRUCTIONS,4 .DB XTRACK,NONE .DB SETMOM,-56,-88 .DB XTRACK,TOWARDS .DB SKIP .DRW EN30 ;HE'S PINNED AGAINST THE RIGHT. THROW HIM LEFT. EN19: .DB XTRACK,NONE .DB SETMOM,56,-88 .DB XTRACK,TOWARDS .DB SKIP .DRW EN30 EN9: .DB FETCHREG,ATTACK .DB LIMIT,4,0 .DB TABLE .DRW EN10 ;0 .DRW EN14 .DRW EN14 ;2 .DRW EN16 .DRW EN18 ;4 ;ATTACK #0. THROW HIM BACK ONLY VERY LITTLE. EN10: .DB INSTRUCTIONS,4 .DB THROWBACK,24,-1 ;THROW ALL HURT ENEMIES BACK A LITTLE BIT .DB RANDOM .DRW EN14 .DB 64 ;1/4 TIME THROW HIM ANYWAY. .DB LOAD,28 .DB DELAY,REGISTER ;WAIT HURT TIME FOR WHEN NOT THROWN .DB SKIP .DRW EN30 ;ATTACK #1. THROW HIM BACK A LOT EN14: .DB INSTRUCTIONS,H'85 .DB THROWBACK,72,-72 ;IF NOT, THROW HIM BACK .DB RANDOM .DRW EN17 .DB 128 .DB ADDMOM,0,-24 ;RANDOMIZE THE MOMENTUM A BIT .DB SKIP .DRW EN17 ;ATTACK #3. THROW HIM A MEDIUM AMOUNT. EN16: .DB INSTRUCTIONS,H'82 .DB THROWBACK,24,-48 ;THROW BACK A LITTLE FOR SIDE KICK EN17: .DB INSTRUCTIONS,3 .DB LOWNOISE .DRW BUMPSND .DB LOAD,27 .DB DELAY,REGISTER .DB SETMOM,0,0 ;MAKE HIM BRAKE SUDDENLY .DB SKIP .DRW EN30 ;ATTACK #4. ITS A DYNAMITE ATTACK. EN18: .DB ENABLE,HURTING ;IF DYNAMITE THROWBACK, ENABLE HURTING .DB FETCHREG,RANDOM .DB REGMOM,REGISTER,-1 .DB SETMOM,-1,-96 ;RANDOM LEFT OR RIGHT FOR DYNAMITE .DB DELAY,20 ;WE ARE DONE THROWING HIM AND DELAYING HIM. EN30: .DB SETBEHAVIOR,MAD ;SET HIM AS MAD CAUSE HE GOT HURT .DB ASSESS .DRW ENAGGRESSIVE .DB 4 HURTDONE: ;HURT ENDS HERE. PUT YOUR SPECIAL CODE HERE. .DB INSTRUCTIONS,5 .DB FETCHREG,ENTITY .DB EQUAL .DRW HD10 ;IF MONGOLIANS, DO ATTACK ASAP AFTER HURT .DRW 23 .DB ACTIVATE,EWALK HD10: .DB SHAKE,0 .DB SETMOM,1,-1 ;MAKE MONGOLIAN FACE HERO .DB FACE,TRAVELING|DOWN ;FACE DIRECTION OF TRAVEL .DB ACTIVATE,EFAR HD20: .DB ENABLE,HURTING ;WE MUST ALLOW HURTING DURING DODGE. .DB ACTIVATE,EDODGE ENAGGRESSIVE: ;SKIP TO HERE TO BECOME MORE AGRESSIVE .DB SETBEHAVIOR,DYING .DB SKIP .DRW HURTDONE ;NO NEED TO JUMP UP OR ACROSS LEDGE AND NOT IN RANGE FOR ATTACK. SET WALKING ;MOMENTUM BASED ON OUR STATE. PICKMOM: .DB IFBEHAVIOR .DRW FASTGUY .DB MAD|DYING SLOWGUY: .DB SETMOM,24,0 ;SET MOMENTUM TO FIXED VALUE BY STATE .DB SKIP .DRW CHECKAGAIN FASTGUY: .DB SETMOM,32,0 .DB SKIP .DRW CHECKAGAIN SLOWDOWN: .DB SETMOM,8,0 ;SLOW DOWN IF WITHIN 12 OF PRECIPICE .DB SKIP .DRW CHECKAGAIN ;THE ENTITY IS ON THE BRINK OF A PRECIPICE. SEE IF WE SHOULD JUMP ACROSS. ;FIRST MAKE SURE WE DIDN'T JUST OVERSHOOT FINDING THE HERO. JUMPACROSS: .DB INSTRUCTIONS,2 .DB SETMOM,1,0 ;CANCEL MOMENTUM .DB ACTIVATE,ESTAND ;USE THE STANDING ANIMATION FOR THE DELAY ; .DB INSTRUCTIONS,3 ; .DB LOAD,19 ;SEE IF THIS WORLD HAD DROPS TO ONES DEATH ; .DB EQUAL ; .DRW JAC10 ;IF NOT, MAKE DARING JUMPS ; .DRW 0 .DB PRECIPICE ;MAKE SURE THERE'S SOMEWHERE TO LAND .DRW JH7 ;IF ITS TOO FAR TO SAFE GROUND, DON'T JUMP .DB 48 JAC10: .DB LOAD,25 .DB DELAY,REGISTER ;WAIT A SECOND BEFORE JUMPING ACROSS .DB PRECIPICE .DRW JH6 .DB 8 .DB PRECIPICE .DRW JH6 .DB 0 .DB SKIP .DRW JH7 ;IF NO PRECIPICE AFTER DELAY, HE MOVED ON US. JH6: .DB SETREG,2,0 .DB STORE,STATE .DB INSTRUCTIONS,H'82 .DB SETMOM,32,0 .DB ACTIVATE,EJUMP ;SET STATE OF JUMP ACROSS JH7: .DB ANIMATION,EWALK,2 ;GET RID OF THE STANDING ANIMATION .DB SKIP .DRW CHECKAGAIN ;THE HERO IS ABOVE US BY MORE THAN 7. WE WANT TO SEE IF THERE IS A LEDGE ;WE CAN JUMP UP ONTO. LEDGEHUNT: .DB INSTRUCTIONS,4 .DB IFNBEHAVIOR .DRW DOLEDGE ;SKIP IF CAN'T SHOOT .DB FAST ;FAST MEANS WE CAN SHOOT .DB RANGE .DRW DOLEDGE .DB 64,-1 ;MUST BE FURTHER AWAY THAN 64 TO SHOOT .DB RANDOM ;BUT WE WANT TO JUMP UP MOST TIMES .DRW DOLEDGE .DB 128 .DB RANGE .DRW CANSHOOT .DB -1,48 ;MUST BE WITHIN 48 ON Y LEVEL DOLEDGE: .DB LEDGE .DRW LH20 .DB 4 ;TRY FOR A LEDGE 5 ABOVE US .DB FETCHREG,ENTITY ;GET THE ENTITY NUMBER .DB EQUAL .DRW LH40 .DRW 7 ;BIRDMAN CAN REALLY JUMP! LH12: .DB STAIR .DRW GO_UP .DB 5 .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB PRECIPICE .DRW JUMPACROSS ;IF PRECIPICE IN PATH, JUMP ACROSS .DB 8 .DB SETMOM,24,-1 ;WE'RE IN A LEDGE LOOP. KEEP MOVING LH15: .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB FETCHREG,ENTITY .DB EQUAL .DRW PISSEDOFF .DRW 23 ;IF BLUE MONGOLIAN, HE WON'T LET YOU BE ABOVE. LH17: .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB PRECIPICE .DRW JUMPACROSS ;IF PRECIPICE IN PATH, JUMP ACROSS .DB 8 .DB DISTANCE .DRW SLOWCHECK ;DON'T ALLOW IT TO OSCILLATE IF HERO WITHIN 16 .DB 16,-1 .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB SKIP .DRW CHECKAGAIN ;OTHERWISE STAY IN WALKING LOOP BUT SLOW LH20: .DB SETMOM,1,0 .DB SETREG,0,0 .DB STORE,STATE .DB ACTIVATE,EJUMP ;JUMP STRAIGHT UP IF LEDGE. LH40: .DB INSTRUCTIONS,5 .DB YVISUAL ;MAKE SURE NOT TOO HIGH .DRW LH12 .DB 16*8 .DB RANGE .DRW LH12 .DB -1,12*8 ;DON'T JUMP UP IF HERO NOT THAT HIGH .DB LEDGE .DRW LH45 .DB 16 ;TRY FOR A LEDGE 16 ABOVE US .DB SKIP .DRW LH12 LH45: .DB SETMOM,1,0 .DB SETREG,4,0 .DB STORE,STATE .DB ACTIVATE,EJUMP ;JUMP STRAIGHT UP IF LEDGE. PISSEDOFF: .DB RANDOM .DRW LH17 ;DON'T GET UNFAIRLY MAD! .DB 128 .DB ACTIVATE,EFAR GO_UP: .DB SETREG,3,0 .DB STORE,STATE .DB SETMOM,1,0 .DB ACTIVATE,EJUMP ;SET STATE OF JUMP UP A STAIR ;HERE'S THE NINJA'S BACKWARDS FLIP AFTER HE GETS HURT. NINDODGE: .DB ADDMOM,-64,-72 .DB DELAY,8 .DB XVISUAL .DRW ND10 .DB 16 ;IF WE HIT LEFT, REVERSE .DB XVISUAL .DRW ND5 .DB 250 .DB SKIP .DRW ND10 ND5: .DB ADDMOM,-64,-72 .DB DELAY,8 SHOOTAGAIN: .DB ACTIVATE,ESHOOT ND10: .DB SETREG,2,0 .DB STORE,STATE .DB SETMOM,48,0 .DB ACTIVATE,EJUMP ;SET STATE OF JUMP ACROSS ;HERE'S THE NINJA'S THROW SHURIKEN CODE. NINTHROW: .DB FACE,TRAVELING|DOWN ;FACE DIRECTION OF TRAVEL .DB TARGET .DRW HERO0 .DB XTRACK,TOWARDS .DB SETMOM,1,0 NT10: .DB FRAME .DRW THROWIT .DB 2 .DB SKIP .DRW NT10 THROWIT: .DB RANDOM .DRW THIT10 .DB 128 .DB SPAWN,BOMBGUYID,25,2,0 ;THROW A BOMB SOMETIMES .DB SKIP .DRW THIT20 THIT10: .DB SPAWN,SHURIGUYID,25,2,0 ;THROW A SHURIKEN .DB NOISE .DRW SHURISND THIT20: .DB FINISH .DB INSTRUCTIONS,6 .DB HOWMANY,11 ;SEE HOW MANY SHURIKENS IF MASTER .DB COMPARE .DRW THIT30 .DRW 3 ;IF HAS 3, OK TO STOP SHOOTING .DB RANDOM .DRW SHOOTAGAIN .DB 64 ;1/4 TIME THROW SOMETHING ELSE TOO. THIT30: .DB ACTIVATE,EWALK LITTHROW: .DB SETMOM,1,0 .DB DELAY,2 .DB SPAWN,BOLTGUYID,12,7,0 ;SHOOT A LIGHTENING BULLET .DB NOISE .DRW THUNDER .DB DELAY,4 .DB ACTIVATE,EWALK ARRTHROW: .DB SETMOM,1,0 .DB SPAWN,37,12,5,0 ;SHOOT AN ARROW .DB NOISE .DRW QUIKSWISH .DB DELAY,4 .DB ACTIVATE,EWALK ;************ SORCERER ENEMY MOVEMENTS *********************** ;THE SORCERER APPEARS AND CASTS SPELLS. HE WILL AWAY FROM ;THE HERO IF THE HERO GETS TOO CLOSE AND WILL DISSAPPEAR AT WILL. ;HE CAN ALSO LEAP UP TO AVOID THE HERO. ;HE NEED ONLY BE LAUNCHED ONE TIME, HE MOVES AROUND ON HIS OWN ;AND SOMETIMES HIDES IN AN INVUNERABLE STATE. ;THE CODE HERE SUPPORTS 2 WIZZARDS, A LESSER AND ;A GREATER. THE MORE POWERFUL WIZZARD IS FLAGGED BY SETTING THE ;FAST BEHAVIOR BIT. ALSO, HE TURNS RED IF OPTION1 IS SET AND HEALTH ;GOES BELOW 10. GRENADE: .DRW GRENTWRL .DRW BOMBWAKE .DB 0,-1 .DB 0,0 .DB 0,0 MACHINEGUN: .DRW WIZBUL1 .DRW MACHINEWAKE .DB 0,0 .DB H'20,H'11 .DB H'11,H'0F WIZEXPL: .DRW WIZBLOW .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 SORWAKE2: .DB INSTRUCTIONS,8 .DB SETBEHAVIOR,FAST ;FLAG THE BIG GUY .DB SETREG,BIGSPGUYID,0 ;WIZZARD SCROLL TOO. .DB SKIP .DRW SOR5 SORWAKE: .DB INSTRUCTIONS,4 .DB SETREG,LITLSPGUYID,0 SOR5: .DB STORE,STATE ;SET SPELL TO CAST .DB TARGET .DRW HERO0 .DB SETMOM,1,0 ;FACE HERO SOR20: .DB ENABLE,HURTING .DB DELAY,20 .DB MOMLIMIT,48,96 .DB FINISH .DB ACTIVATE,ESTAND ;THE SORCERER CAN'T BE HURT UNLESS HE IS VISIBLE BUT THAT'S TAKEN ;CARE OF IN THE HIDING CODE. SORHURT: .DB GRAVITY,0 .DB DAMAGE .DB ASSESS .DRW SORDIE .DB 0 .DB FRICTION,16,0 .DB NOISE .DRW HURTNOISE .DB THROWBACK,60,-24 .DB ACTIVATE,EJUMP ;TRY TO GET AWAY IF HURT ;THE SORCERER IS DEAD. RUN HIS DEATH ANIMATION. SORDIE: .DB ANIMATION,EMIDDLE,2 ;GET THE DEATH ANIMATION .DB SETMOM,0,0 SORD10: .DB FINISH .DB IFBEHAVIOR .DRW SORD30 .DB FAST .DB GRAVITY,8 .DB SOLIDSTATE,OFF .DB NOISE .DRW SLOWDROP .DB DELAY,20 .DB LAUNCH,9,4,0,0 ;GIVE DYNAMITE WHEN DEAD .DB LOWNOISE .DRW DIEPRIZE .DB DIE,1 SORD20: .DB ACTIVATE,EWAKE SORD30: .DB FETCHREG,WORLD .DB EQUAL ;IF BOOT SCREEN THEN DON'T LET HIM DIE!! .DRW SORD20 .DRW 0 .DB SEQUENCE ;DOCTOR DEFORM DEATH .DRW WIZEXPL .DB SOUND .DRW 0,VICTORY,0,0 SORD35: .DB BPALETTE .DRW CPAL1 .DB BPALETTE .DRW DUPAL1 .DB BPALETTE .DRW JPAL1 .DB SOUNDBUSY .DRW SORD35 .DB 0,0,0,0 .DB BPALETTE .DRW -1 .DB DELAY,30 ;ENDING MESSAGE FOR Y'ALL .DB LOAD,23 .DB SETREG .DRW 88 .DB SKIP .DRW XWIPEOUT ;WE ARE FALLING. JUST GO TO VANISH MODE. SORFALL: .DB ACTIVATE,EDUCK ;WE ARE SUPPOSED TO JUMP UP. SORJUMP: .DB SOLIDSTATE,OFF .DB GRAVITY,4 .DB INSTRUCTIONS,H'83 .DB XTRACK,AWAY .DB SETMOM,8,-48 .DB XTRACK,NONE .DB DELAY,10 .DB ACTIVATE,EDUCK ;THIS CODE LETS THE SORCERER SHOOT HIS MAGIC. THE TWO WIZZARDS ;USE DIFFERENT SPELLS (ENTITY NUMBERS). SORSHOOT: .DB INSTRUCTIONS,H'83 .DB XTRACK,TOWARDS .DB SETMOM,1,0 .DB XTRACK,NONE ST20: .DB LOAD,STATE .DB SPAWN,REGISTER,25,8,-4 ;SHOOT THE SPELL .DB DELAY,1 .DB SPAWN,REGISTER,25,8,-4 ;SHOOT THE SPELL .DB DELAY,1 .DB SPAWN,REGISTER,25,8,-4 ;SHOOT THE SPELL .DB FINISH .DB DELAY,8 .DB FETCHREG,ENTITY .DB EQUAL ;IF DOCTOR DEMISE, DON'T LAUNCH ROBOT .DRW ST25 .DRW 19 .DB RANDOM ;RANDOMLY LAUNCH ROBOT .DRW ST25 .DB 128 .DB RANDOM ;LAUNCH ON RIGHT OR LEFT .DRW ST15 .DB 127 .DB CREATE,57,8,2,0 ;LAUNCH ON LEFT .DB SKIP .DRW ST25 ST15: .DB CREATE,57,232,2,0 ;LAUNCH ON RIGHT ST25: .DB ACTIVATE,ESTAND ;THE SORCERER'S STANDING LOGIC MAKES THE DECISIONS. IT TRIES TO ;VANISH IF THE HERO IS THREATENING IT BUT AS LONG AS THERE IS AN ACTIVE ;SPELL IT CAN'T. SORSTAND: .DB SETCOUNTER,20 ;LOCK OUT DEMATERIALIZATION FOR 1 SECOND SS5: .DB FRICTION,16,0 .DB ENABLE,HURTING ;ENABLE HURT MODE. .DB GRAVITY,8 ;TURN ON SOME GRAVITY .DB STANDING .DRW SS10 .DB ACTIVATE,EFALL ;IF NOT STANDING, FALL. SS10: .DB INSTRUCTIONS,H'83 .DB XTRACK,TOWARDS .DB SETMOM,1,0 .DB XTRACK,NONE .DB DISTANCE .DRW SS50 .DB 32,32 ;IF HERO TOO CLOSE ON BOTH AXIS, VANISH ;WE EITHER DON'T NEED TO OR CAN'T VANISH. SEE IF WE SHOULD JUMP UP SS20: .DB DISTANCE .DRW SS49 .DB 64,32 ;SEE IF WE SHOULD WALK AWAY. SS40: .DB DISTANCE .DRW SS48 .DB 96,48 ;SHOOT MACHINE GUN FIRE .DB RANDOM .DRW SS5 .DB 128 .DB ACTIVE .DRW SS42 .DB ID .DRW HEROID ;DON'T FIRE UNLESS THE HERO IS ACTIVE. .DB SKIP .DRW SS5 SS42: .DB ACTIVATE,EATTACK ;CAST A SPELL SS48: .DB ACTIVATE,EWALK SS49: .DB ACTIVATE,EJUMP ;WE WANT TO VANISH. WE CAN'T IF SPELL ACTIVE OR IF COUNTER STILL TRUE. SS50: .DB LOAD,STATE .DB ACTIVE .DRW SS20 ;CAN'T VANISH IF SPELL ACTIVE .DB ID .DRW REGISTER .DB ABOVECOUNT .DRW SS5 .DB 1 SS51: .DB ACTIVATE,EDUCK ;GO INTO VANISH MODE IF SAFE TO DO SO. ;WE ARE SUPPOSED TO WALK AWAY FOR A BIT. SORWLK: .DB FRICTION,0,0 .DB INSTRUCTIONS,H'83 .DB XTRACK,AWAY .DB SETMOM,32,0 .DB XTRACK,NONE .DB PRECIPICE .DRW SWK10 .DB 16 ;JUMP IF NEAR EDGE .DB DELAY,4 .DB PRECIPICE .DRW SWK10 .DB 16 ;JUMP IF NEAR EDGE .DB DELAY,4 .DB PRECIPICE .DRW SWK10 .DB 16 ;JUMP IF NEAR EDGE .DB DELAY,4 .DB ACTIVATE,ESTAND SWK10: .DB ACTIVATE,EJUMP ;THIS IS THE SORCERER'S HIDING CODE. WHEN HE HAS COMPLETELY VANISHED ;WE DISABLE HURTING AND CAN MOVE AROUND BUT NOT ATTACK. WE CAN'T MOVE ;AROUND INTELLIGENTLY THOUGH, WE JUST PICK A SPOT AND MATERIALIZE. THIS ;GIVES THE HERO A CHANCE TO FOLLOW US AND ATTACK WHEN WE APPEAR. SORHIDE: .DB GRAVITY,0 .DB ENABLE,HURTING .DB FINISH .DB ACTIVATE,ENEAR ;GET THE FINAL FLOATING ANIMATION .DB SETCOUNTER,40 ;FLOAT FOR 2 SECONDS AT LEAST SH10: .DB COUNT .DRW SH50 .DB 1 ;IF COUNTER OUT, OK TO TRY MATERIALIZING. SH11: .DB SOLIDSTATE,OFF .DB SETMOM,24,0 ;ASSUME GOING RIGHT .DB IFXEDGE .DRW SH15 ;IF TOO FAR LEFT OR RIGHT, REPEL FROM EDGE. .DB 64 SH12: .DB RANDOM .DRW SH20 ;GET 50/50 ODDS OF DOING THAT .DB 128 .DB SETMOM,-24,0 .DB SKIP .DRW SH20 SH15: .DB XVISUAL .DRW SH20 .DB 64 ;ITS TRUE IF WE ARE ON LEFT EDGE .DB SETMOM,-24,0 SH20: .DB SETMOM,-1,24 ;ASSUME WE WILL GO DOWN .DB YVISUAL .DRW SH40 .DB 40 ;IF HIGH, ALWAYS DROP .DB RANDOM .DRW SH40 .DB 128 SH35: .DB SETMOM,-1,-32 ;GO UP HALF TIMES SH40: .DB INSTRUCTIONS,H'83 .DB YTRACK,TOWARDS .DB ADDMOM,0,16 .DB YTRACK,NONE .DB FETCHREG,RANDOM .DB LIMIT,8,0 .DB DELAY,REGISTER ;FLOAT FOR A WHILE .DB YVISUAL .DRW SH20 .DB 40 ;IF TOO HIGH, DROP DOWN .DB IFNBEHAVIOR .DRW SH47 .DB FAST ;LESSER SORCERER CAN'T THROW SKULLS .DB RANDOM .DRW SH47 .DB 64 ;THROW SKULLS ONLY ONCE AND A WHILE .DB IFNBEHAVIOR .DRW SH45 .DB OPTION1 .DB RANDOM .DRW SH47 .DB 128 ;UNTIL HALF DEAD, NOT SO MANY SKULLS SH45: .DB LAUNCH,SKULLGUYID,12,12,0 SH47: .DB RANDOM .DRW SH10 .DB 128 .DB INSTRUCTIONS,H'83 .DB XTRACK,TOWARDS .DB SETMOM,1,0 .DB XTRACK,NONE .DB LOAD,STATE .DB SPAWN,REGISTER,25,8,-4 ;SHOOT THE SPELL .DB DELAY,1 .DB SPAWN,REGISTER,25,8,-4 ;SHOOT THE SPELL .DB DELAY,1 .DB SPAWN,REGISTER,25,8,-4 ;SHOOT THE SPELL .DB FETCHREG,WORLD .DB EQUAL ;IF BOOT SCREEN DON'T LAUNCH ROBOT .DRW SH10 .DRW 0 .DB RANDOM ;RANDOMLY LAUNCH ROBOT .DRW SH10 .DB 128 .DB RANDOM ;LAUNCH ON RIGHT OR LEFT .DRW SH48 .DB 127 .DB CREATE,57,8,2,0 ;LAUNCH ON LEFT .DB SKIP .DRW SH10 SH48: .DB CREATE,57,232,2,0 ;LAUNCH ON RIGHT .DB SKIP .DRW SH10 SH50: .DB IFXEDGE .DRW SH11 .DB 32 ;DON'T MATERIALIZE TOO CLOSE TO EDGE .DB SOLIDSTATE,ON ;WE CAN MATERIALIZE. SEE IF SAFE .DB TESTSOLID ;SEE IF SOLIDS THERE .DRW SH11 ;IF SO, RESUME MOVING .DB 0,0 .DB FLOOR .DRW SH60 .DB 5 ;IF WE FOUND A FLOOR BELOW, REMATERIALIZE .DB SKIP .DRW SH11 SH60: .DB SETMOM,0,0 .DB SOLIDSTATE,SAFE .DB GRAVITY,8 ;PREPARE TO LAND SH65: .DB STANDING .DRW SH70 .DB YVISUAL .DRW SH65 ;IF HAVEN'T FALLEN, CONTINUE. .DB 176 .DB GRAVITY,0 .DB SKIP .DRW SH20 SH70: .DB ANIMATION,EWAKE,2 .DB SKIP .DRW SORSTAND ;THIS ENTITY IS LAUNCHED BY THE HERO TO WAKE UP A WORLD. PERMANENT ;ENEMY MEMORY IS RESET SOMEWHERE ELSE TO ALLOW COMING BACK HERE WITHOUT ;RELAUNCHING ENEMIES SINCE WE COME HERE ALWAYS AFTER FALLING OFF A CLIFF. ;BUT CHEATER MODE MUST BE CAUGHT SINCE IT GOES HERE WITHOUT OUR KNOWLEDGE. WWAKEUP: ;WORLD WAKEUP LIST .DB INSTRUCTIONS,H'DF .DB GRAVITY,0 .DB FETCHREG,WORLD .DB STORE,23 ;SET CONTINUE MODE WORLD. ; .DB IFNCHEAT ; .DRW WWK10 ; .DB REBORN,ALL ;ENABLE ALL ENTITIES IF CHEATER MODE WWK10: .DB SHAKE,0 .DB SETREG,OFF,0 .DB STORE,31 ;NO SUPER SOLIDS .DB SETPAUSE,ON ;ALLOW PAUSING .DB SETSTATPAL,0,H'00,H'00,H'00,H'00,H'00,H'00,H'00,H'00 .DB SETSTATPAL,1,H'00,H'00,H'00,H'00,H'00,H'00,H'00,H'00 .DB FILLVID,1,0,H'41,STATVID,64 .DB FILLVID,3,0,H'41,STATVID,64 .DB LOAD,12 ;TEST FOR ACTIVE TORCH .DB EQUAL .DRW WWK11 .DRW 0 .DB CREATE,FIREDUMMY,255,192,0 WWK11: .DB CREATE,18,255,192,0 ;LAUNCH THE STATUS BAR SELECTOR .DB CREATE,STATGUYID,255,192,0 ;LAUNCH THE STATUS BAR UPDATER .DB INSTRUCTIONS,13 .DB SETREG,0,0 .DB STORE,30 .DB SETREG,0,0 .DB STORE,29 ;SET THE 2 DELAYS FOR ATTACK .DB SETREG,0,0 .DB STORE,28 .DB SETREG,12,0 .DB STORE,27 .DB SETREG,0,0 .DB STORE,26 .DB SETREG,0,0 .DB STORE,25 .DB DIE,0 ;GO AWAY, WE ARE DONE HEALTHENTITY: .DRW DUMMY ;STATUS BAR UPDATER ENTITY. .DRW UPDATESTAT .DB 0,-1 .DB 0,0 .DB 0,0 ;THIS ENTITY UPDATES THE STATUS BAR AND THEN DIES UPDATESTAT: .DB INSTRUCTIONS,15 ;CAN JUMP HERE TO UPDATE AND DIE. .DB GRAVITY,0 .DB GETJOYHEALTH,JOY1 .DB CDIVIDE,4 ;MAKE 0-5 HEARTS FROM 0-20 HEALTH .DB LIMIT,5,0 .DB TABLEVID .DRW HEALTHLOC .DB 4,1,STATVID,5 .DB SKIP .DRW SHOWMEN HEALTHLOC: .DRW HEALTHS+5 .DRW HEALTHS+4 .DRW HEALTHS+3 .DRW HEALTHS+2 .DRW HEALTHS+1 .DRW HEALTHS+0 HEALTHS: .DB H'9F,H'9F,H'9F,H'9F,H'9F,H'41,H'41,H'41,H'41,H'41 SHOWMEN: .DB GETHEROS,JOY1 .DB EQUAL .DRW HDX10 .DRW 0 .DB ADD ;SHOW HERO'S IN RESERVE, NOT TOTAL .DRW -1 HDX10: .DB LIMIT,9,0 .DB SHOWREG,4,26,STATVID .DB WRITEVID .DRW HERODISP .DB 3,27,STATVID,3 .DB WRITEVID .DRW HEROBDISP .DB 4,27,STATVID,3 .DB SKIP .DRW SHOWDYNAMITE HERODISP: .DB H'5C,H'5D,H'41 HEROBDISP: ;BOTTOM ROW DISPLAY .DB H'7C,H'7D,H'B8 SHOWDYNAMITE: .DB INSTRUCTIONS,11 .DB LOAD,16 .DB LIMIT,99,0 .DB SHOWREG,4,6,STATVID .DB WRITEVID .DRW MAGICDISP .DB 3,6,STATVID,3 .DB WRITEVID .DRW LMAGICDISP .DB 4,6,STATVID,3 .DB SKIP .DRW SHOWMAP MAGICDISP: .DB H'41,H'41,H'41 LMAGICDISP: .DB H'BC,H'BD,H'B8 SHOWMAP: .DB LOAD,11 ;GET NUMBER OF MAPS .DB LIMIT .DRW 1 .DB TABLEVID .DRW TMAP .DB 3,15,STATVID,1 .DB TABLEVID .DRW BMAP .DB 4,15,STATVID,1 .DB SKIP .DRW SHOWTORCH TMAP: .DRW TOPMAP+0 .DRW TOPMAP+1 BMAP: .DRW BOTMAP+0 .DRW BOTMAP+1 TOPMAP: .DB H'41,H'5A BOTMAP: .DB H'41,H'7A SHOWTORCH: .DB INSTRUCTIONS,10 .DB LOAD,4 ;GET NUMBER OF TORCHES .DB LIMIT .DRW 1 .DB TABLEVID .DRW TTORCH .DB 3,23,STATVID,1 .DB TABLEVID .DRW BTORCH .DB 4,23,STATVID,1 .DB SKIP .DRW SHOWFOOD TTORCH: .DRW TOPTORCH+0 .DRW TOPTORCH+1 BTORCH: .DRW BOTTORCH+0 .DRW BOTTORCH+1 TOPTORCH: .DB H'41,H'9E BOTTORCH: .DB H'41,H'BE SHOWFOOD: .DB LOAD,6 ;GET NUMBER OF TURKEY LEGS .DB LIMIT .DRW 1 .DB TABLEVID .DRW TFOOD .DB 3,12,STATVID,2 .DB TABLEVID .DRW BFOOD .DB 4,12,STATVID,2 .DB SKIP .DRW SHOWBOOM TFOOD: .DRW TOPFOOD+0 .DRW TOPFOOD+2 BFOOD: .DRW BOTFOOD+0 .DRW BOTFOOD+2 TOPFOOD: .DB H'41,H'41,H'9A,H'9B BOTFOOD: .DB H'41,H'41,H'BA,H'BB SHOWBOOM: .DB INSTRUCTIONS,10 .DB LOAD,5 ;GET NUMBER OF BOOMERRANG .DB LIMIT .DRW 1 .DB TABLEVID .DRW TBOOM .DB 3,17,STATVID,1 .DB TABLEVID .DRW BBOOM .DB 4,17,STATVID,1 .DB SKIP .DRW SHOWBRASS TBOOM: .DRW TOPBOOM+0 .DRW TOPBOOM+1 BBOOM: .DRW BOTBOOM+0 .DRW BOTBOOM+1 TOPBOOM: .DB H'41,H'5E BOTBOOM: .DB H'41,H'7E SHOWBRASS: .DB LOAD,9 ;GET NUMBER OF BRASS KNUCKLES .DB LIMIT .DRW 1 .DB TABLEVID .DRW TBRASS .DB 3,21,STATVID,1 .DB TABLEVID .DRW BBRASS .DB 4,21,STATVID,1 .DB SKIP .DRW SHOWSUCT TBRASS: .DRW TOPBRASS+0 .DRW TOPBRASS+1 BBRASS: .DRW BOTBRASS+0 .DRW BOTBRASS+1 TOPBRASS: .DB H'41,H'5B BOTBRASS: .DB H'41,H'7B SHOWSUCT: .DB INSTRUCTIONS,12 .DB LOAD,7 ;GET NUMBER OF CUPS .DB LIMIT .DRW 2 .DB TABLEVID .DRW TSUCT .DB 3,19,STATVID,1 .DB TABLEVID .DRW BSUCT .DB 4,19,STATVID,1 .DB SKIP .DRW SHOWKEY TSUCT: .DRW TOPSUCT+0 .DRW TOPSUCT+1 .DRW TOPSUCT+2 BSUCT: .DRW BOTSUCT+0 .DRW BOTSUCT+1 .DRW BOTSUCT+2 TOPSUCT: .DB H'41,H'59,H'58 BOTSUCT: .DB H'41,H'79,H'78 SHOWKEY: .DB LOAD,8 ;GET NUMBER OF BRASS KNUCKLES .DB LIMIT .DRW 1 .DB TABLEVID .DRW TKEY .DB 3,25,STATVID,1 .DB TABLEVID .DRW BKEY .DB 4,25,STATVID,1 .DRW DIE,1 TKEY: .DRW TOPKEY+0 .DRW TOPKEY+1 BKEY: .DRW BOTKEY+0 .DRW BOTKEY+1 TOPKEY: .DB H'41,H'99 BOTKEY: .DB H'41,H'B9 ;******* BOOT SCREEN ENTITIES ************ COPRINFO: .DRW DUMMY ;WAKEUP FOR BOOT KEY MONITOR .DRW STARTKEY .DB H'40,-1 .DB 0,0 .DB 0,0 STARTRUN: .DRW HRUN .DRW -1 .DB H'23,-1 .DB 0,0 .DB 0,0 BOOTMOVE: .DRW DUMMY .DRW BOOTCODE .DB H'23,-1 .DB 0,0 .DB 0,0 BOOTCODE: .DB FRICTION,0,0 .DB IDENTIFY .DRW HERO0 .DB GRAVITY,-1 .DB SEQUENCE .DRW STARTRUN .DB SETMOM,-40,0 .DB DELAY,4 BTM10: .DB STANDING .DRW BTM10 .DB GRAVITY,0 .DB SEQUENCE .DRW SUCTHORZ .DB SETMOM,0,-24 BTM20: .DB YVISUAL .DRW BTM30 .DB 8 .DB SKIP .DRW BTM20 BTM30: .DB GRAVITY,-1 .DB SEQUENCE .DRW STARTRUN .DB SETMOM,40,0 .DB DELAY,4 BTM40: .DB STANDING .DRW BTM40 .DB GRAVITY,0 .DB SEQUENCE .DRW SUCTHORZ .DB SETMOM,0,24 BTM50: .DB STANDING .DRW BOOTCODE .DB SKIP .DRW BTM50 STARTKEY: ;BOOT ENTITY CODE .DB INSTRUCTIONS,H'8F .DB GRAVITY,0 .DB CREATE,59,226,160,0 ;LAUNCH HERO SPRITE .DB CREATE,19,32,16,0 ;LAUNCH BOSSMAN .DB ROTATION,ON .DB RESET .DRW SK0 .DB CHEAT,OFF .DB SETREG .DRW -1 .DB STORE,23 ;SET FLAG OF NO CONTINUE WORLD. SK0: .DB SETPAUSE,OFF ;DISALLOW PAUSING .DB SHAKE,0 ;RESET ANY LEFT OVER SHAKE .DB JOYSTICK,0 ;TAKE OVER JOYSTICK #0 .DB SETHEROS,OURJOY,5 ;SET STARTING HEROS COUNT .DB ENASCROLL,LEFT|RIGHT ;ENABLE SCROLLING SK9: .DB SETREG,0,0 .DB STORE,17 ;ZERO CHEAT MODE FLAG SK10: .DB BUTTON .DRW SK20 .DB START ;SEE IF START PRESSED .DB SKIP .DRW SK10 ;DEMO IF MUSIC DONE GOTCHEAT: .DB BUTTON .DRW SK9 .DB A_BUTTON .DB BUTTON .DRW CHEAT1 .DB SELECT .DB LOAD,17 ;SEE IF SECOND HALF OF CHEAT COMBO .DB EQUAL .DRW CHEAT2 .DRW 1 .DB SKIP .DRW SK9 CHEAT1: .DB SETREG,1,0 ;IF SELECT+START, SET STATE=1 .DB STORE,17 .DB SKIP .DRW SK10 CHEAT2: .DB BUTTON ;IF B+START AND STATE=1 THEN CHEAT ENABLED .DRW CHEATOK .DB B_BUTTON .DB SKIP .DRW SK9 CHEATOK: ; .DB CHEAT,ON ;TAKE THIS OUT OF FINAL VERSION!!!!!!!!! .DB SKIP .DRW SK9 ;START WAS PRESSED. CHEAT MODE IS SELECT+START FOLLOWED BY B+START. THEN ;START AND CHEAT IS ENABLED. ; ;CONTINUE MODE IS A+START. SK20: .DB BUTTON .DRW SK10 .DB UP|DOWN|LEFT|RIGHT ;DISALLOW OTHER BUTTONS .DB BUTTON .DRW GOTCHEAT .DB SELECT|B_BUTTON ;CATCH CHEAT MODE COMBOS .DB SOUND .DRW 0,0,0,0 ;STOP THE MUSIC .DB SETREG,20,0 .DB STORE,21 ;SET HEALTH OF THE FIRST HERO ENTITY ;SEE IF ITS CONTINUE. .DB NOTBUTTON .DRW SK22 .DB A_BUTTON ;ITS NOT CONTINUE UNLESS A .DB LOAD,23 ;IF CONTINUE, SEE IF WE CAN .DB NOTEQUAL .DRW SK23 .DRW H'FF ;IT'LL BE -1 IF NOT. IF GOOD, GO USE IT ;NOT CONTINUE. WE MUST RESET POSSESSIONS AND ENABLE ENTITIES. SK22: .DB SETREG,0,0 .DB STORE,16 ;ZERO MAGICS .DB STORE,4 ;ZERO TORCHES .DB STORE,5 ;ZERO BOOMERRANGS .DB STORE,6 ;ZERO FOOD .DB STORE,7 ;ZERO SUCTION CUPS .DB STORE,8 ;ZERO KEYS .DB STORE,9 ;ZERO BRASS KNUCKLES .DB STORE,10 ;ZERO SELECTOR .DB STORE,11 ;ZERO MAP ICON .DB STORE,12 ;ZERO TORCH LIGHT DUMMY .DB REBORN,ALL ;ENABLE ALL ENTITIES .DB SETREG .DRW 1 SK23: .DB SKIP .DRW XWIPEOUT ;GO HERE TO REQUEST THE WORLD IN REGISTER AFTER A WIPE. IT ASSUMES 24 HIGH. ;ALL SPRITES ARE REMOVED BY THIS LOGIC BEFORE THE WIPE. AFTER THE ;WIPE, THE MUSIC IS STOPPED. XWIPEOUT: .DB HIDEALL ;REMOVE ALL SPRITES .DB GOTO,254,192 ;HIDE THIS SPRITE .DB WIPEOUT,REGISTER .DB DELAY,20 ;********************* ENEMIES ************************* ; ;ATTACK CONVENTIONS USED IN THIS GAME: ;ORDINARY ATTACK = 0 (DAMAGE ENTITY) ;CHARGING OR BUTTING ATTACK = 1 (THROW ENTITY BACK) ;SPECIAL ATTACK = 2 (THROWS ENTITY BACK AND EARNS EXTRA POINTS). HERO'S ; SIDE KICK AND ROLL ONLY. ;SIDE KICK THROW BACK =3 THROWS ENEMY A BIT BUT NOT AS MUCH AS 1. ;DYNAMITE ATTACK = 4 (THROWS RANDOMLY, ENABLES HURTING QUICKLY). ;**** SPECIAL EFFECT MOVEMENTS ***** SAFEDIE: ;GO HERE TO DIE WITHOUT MEMORY .DB DIE,0 ;GO AWAY IF SO ;THIS TABLE CONTAINS THE POINTS TO AWARD FOR KILLING A GIVEN ENEMY. PNTTAB: .DB 5 .DB 5 .EQU LASTPNTS,1 ;THIS GENERAL ENEMY WALK SLOWLY APROACHES THE HERO AND THEN ATTACKS. IT USES ;THE ENEMIES BEHAVIOR BITS TO DECIDE WHAT THE PARAMETERS ARE. ENWALK: ;ENEMY WALKING MOVEMENT LIST .DB FACE,TRAVELING|DOWN ;FACE DIRECTION OF TRAVEL .DB ENABLE,ALL ;ENABLE OTHER INTERRUPTS .DB STANDING .DRW CHECKAGAIN .DB FETCHREG,ENTITY .DB EQUAL .DRW VERIFYVALK ;DON'T CARE ABOUT SOLID IF VALKRY. .DRW 24 VERIFYVALK: .DB YVISUAL .DRW CHECKAGAIN .DB 200 .DB SKIP .DRW ENDEAD ;VALKRY CAN'T FALL OFF BOTTOM! SLOWCHECK: ;JUMP BACK HERE TO SLOW DOWN OSCILLATIONS .DB SETMOM,1,-1 .DB ACTIVATE,ESTAND ;IF WE ARE GOING TO DELAY, STAND. .DB DELAY,20 .DB ACTIVATE,EWALK ;IF THE HERO IS ABOVE US WE NEED TO LOOK FOR A LEDGE OR A STAIR. CHECKAGAIN: .DB RESETFRICTION,1,0 .DB RANDOM .DRW RANSTUFF ;RANDOMLY, WE DO SOME ODD STUFF .DB 96 NOT_THIS_TIME: .DB INSTRUCTIONS,H'84 .DB RESETFRICTION,1,0 .DB RANGE ;IF HE'S ABOVE US, SEE IF LEDGE CHECK. .DRW EW6 .DB -1,7 ;SKIP LEDGE CHECK IF HE'S WITHIN 7 OF US ON Y .DB FETCHREG,YDIR ;GET DIRECTION TO TARGET .DB EQUAL .DRW EW5 .DRW 0 ;IF HE'S BELOW US, CHECK FOR PRECIPICE ;YEP, HE'S ABOVE US. .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB STANDING .DRW LEDGEHUNT ;BUT DON'T CHECK FOR LEDGE IF WE ARE FALLING .DB ACTIVATE,EFALL ;HERO'S BELOW. IF THE HERO IS BELOW US BY A LOT, CAN WE JUMP DOWN (OPTION1)? EW5: .DB IFNBEHAVIOR .DRW EW6 ;SKIP IF CAN'T JUMP DOWN .DB OPTION1 .DB LOAD,26 .DB DELAY,REGISTER ;WAIT BEFORE JUMPING .DB RANGE ;IF HE'S ABOVE US, SEE IF LEDGE CHECK. .DRW EW6 .DB -1,7 ;SKIP LEDGE CHECK IF HE'S WITHIN 7 OF US ON Y .DB FETCHREG,YDIR ;MAKE SURE HE'S STILL BELOW US .DB EQUAL .DRW EW6 .DRW 1 .DB IFNBEHAVIOR .DRW DODOWN ;SKIP IF CAN'T SHOOT .DB FAST ;FAST MEANS WE CAN SHOOT .DB RANGE .DRW DODOWN .DB 64,-1 ;MUST BE FURTHER AWAY THAN 64 TO SHOOT .DB RANDOM ;BUT WE WANT TO JUMP UP MOST TIMES .DRW DODOWN .DB 128 .DB RANGE .DRW CANSHOOT .DB -1,48 ;MUST BE WITHIN 48 ON Y LEVEL DODOWN: .DB SETREG,1,0 .DB STORE,STATE .DB ACTIVATE,EJUMP ;SET STATE OF JUMP DOWN ;CHECK FOR A PRECIPICE. EW6: .DB RESETFRICTION,1,0 .DB PRECIPICE .DRW JUMPACROSS ;TRY TO JUMP WHEN ITS RIGHT NEAR US .DB 0 .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB PRECIPICE .DRW SLOWDOWN ;BUT WE NEED TO SLOW DOWN IF ONE NEAR BY .DB 8 ;CHECK FOR A PRECIPICE 8 AHEAD .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB PRECIPICE .DRW SLOWDOWN .DB 16 ;CHECK FOR A PRECIPICE 16 AHEAD ;THE HERO IS NOT ABOVE US ;DECIDE WHAT TO DO BASED ON HOW FAR AWAY THE HERO IS: ;WE DO 1 OF 3 THINGS: ;1. KEEP WALKING TOWARDS HIM. ;2. POSE WAITING FOR AN ATTACK. ;3. CHARGE HIM. ;4. SHOOT ;5. WAIT BECAUSE WE ARE VERY CLOSE ON THE AXIS BUT FAR AWAY ON THE Y. RANGEHIM: .DB RESETFRICTION,1,0 .DB RANGE .DRW NEARHIM ;GO TO POSSIBLE POSE IF WITHIN 30 .DB 30,-1 .DB FETCHREG,ENTITY .DB EQUAL ;IF MONGO CHECK FOR BOOMERRANG .DRW MONGDUCK .DRW 23 .DB SKIP .DRW EN50 MONGDUCK: .DB ACTIVE .DRW MDUCK10 .DB ID .DRW 34 .DB ENABLE,HURTING .DB ANIMATION,EWALK,2 EN50: .DB IFNBEHAVIOR ;IF NOT MAD OR DYING .DRW TRYSHOOT ;WE CAN'T CHARGE .DB MAD|DYING CHARGE: .DB RANGE ;CHECK IF IN RANGE FOR CHARGE. .DRW PICKMOM ;IF LOWER THAN CHARGE, GO PICK OUR SPEED .DB 48,16 .DB RANGE .DRW EOC .DB 64,16 ;CHARGE BUTT IF BETWEEN 48 AND 64 PIXELS .DB SKIP .DRW TRYSHOOT ;IF FURTHER THAN CHARGE, TRY SHOOTING EOC: .DB SETMOM,64,0 ;START CHARGING AT HIM .DB RANGE .DRW CH10 .DB 66,16 ;IF WE GET FARGTHER THAN 66 AWAY, GIVE UP .DB SKIP .DRW TRYSHOOT CH10: .DB RANGE .DRW CH20 ;DO THE ATTACK IF WITHIN 40 .DB 40,-1 .DB SKIP .DRW EOC CH20: .DB DISABLE,ATTACKING .DB ACTIVATE,ECHARGE MDUCK10: .DB DISABLE,HURTING ;BOOMERRANG IS THERE,DUCK .DB ANIMATION,EDUCK,1 .DB SKIP .DRW MONGDUCK ;IN RANGE FOR ATTACK ON X AXIS. NEARHIM: .DB RANGE .DRW GETHIM ;DON'T START ATTACK UNLESS WITHIN 16 ON Y .DB -1,16 .DB SKIP .DRW SLOWCHECK ;JUST TRY AGAIN BUT SLOW DOWN THE HUNT. GETHIM: .DB ACTIVATE,EPOSE ;DO SOME RANDOM STUFF TO GIVE THE ENTITIES PERSONALITY. RANSTUFF: .DB INSTRUCTIONS,9 .DB FETCHREG,ENTITY .DB EQUAL .DRW RNS30 ;IF VALKRY, JUMP .DRW KNIFEJUMP .DB EQUAL .DRW RNS25 .DRW NINJAFAKE ;MASTER NINJA ;RANDOM ACTIONS FROM HERE DOWN ARE HALF AS FREQUENT. .DB RANDOM .DRW NOT_THIS_TIME ;FOR REMAINDER, CUT ODDS IN FORTH .DB 64 .DB EQUAL .DRW RNS10 ;IF MONGOLIANS, DO ATTACKS JUST TO GET ROCKS .DRW MONGOLIAN .DB SKIP .DRW CHECKAGAIN RNS10: .DB ACTIVATE,EFAR RNS20: .DB RANDOM .DRW CHECKAGAIN .DB 128 ;DON'T MAKE THE NINJA FLIP TOO MUCH RNS25: .DB ACTIVATE,EDODGE RNS30: .DB SETREG,2,0 ;MAKE THE VALKRY JUMP LIKE CRAZY .DB STORE,STATE .DB SETBEHAVIOR,MAD .DB SETMOM,24,0 .DB ACTIVATE,EJUMP ;SET STATE OF JUMP ACROSS FALLROCK: ;BIG ROCKS THAT FALL WHEN MONGOLIAN ATTACKS. .DB BOUNCE,100 .DB TARGET .DRW HERO0 .DB SETMOM,0,96 ;START WITH MAX DROP .DB ENABLE,HURTING FR5: .DB STANDING ;THEY JUST EXPLODE WHEN THEY HIT SOLID. .DRW FR10 .DB INSTRUCTIONS,3 ;CATCH SOLID ASAP .DB REARM .DB SKIP .DRW FR5 FR10: .DB NOISE .DRW ROCKCRUSH .DB LAUNCH,SMROCKGUYID,8,-16,0 ;LAUNCH A SMALL ROCK .DB LAUNCH,SMROCKGUYID,0,-8,0 ;LAUNCH ANOTHER .DB DIE,0 FALLSMALL: ;THIS ROCK BOUNCES AND THEN FALLS OFF SCREEN .DB FRICTION,0,0 .DB BOUNCE,200 .DB TARGET .DRW HERO0 .DB MOMLIMIT,96,96 .DB FETCHREG,RANDOM .DB ANDREG,B'11110111,0 .DB XOR,8 ;MAKE SURE AT LEAST A BIT OF X MOM .DB REGMOM,REGISTER,-1 .DB SETMOM,-1,-96 FSM10: .DB STANDING .DRW FSM20 .DB REARM .DB SKIP .DRW FSM10 FSM20: .DB DIE,0 ;THIS JUMP MODE ALLOWS AN ENTITY TO JUMP. IT DOESN'T ADD ANY X MOMENTUM ;BUT KEEPS WHATEVER YOU HAD AT THE TIME IT WAS ACTIVATED UNTIL IT IS DONE. ;IT ONLY LEAVES WHEN IT HAS FOUND SOLID. IT DOESN'T CARE IF THE ENTITY IS ;ON SOLID TO START WITH. IT DOESN'T MONKEY WITH INTERRUPTS SO IF ITS ;INTERRUPTED THAT INTERRUPT MUST DO A SOLIDSTATE SAFE. WHEN DONE, THIS ;ROUTINE ACTIVATES WALKING MODE. THIS ROUTINE MAKES DECISIONS BASED ;ON BEHAVIOR BITS AND STATE AND YOU MUST SET THESE BEFORE CALLING: ;IF STATE=0 ;IT JUMPS UP EITHER 6+ CHARS (HIJUMPER) OR 3+ CHARS (NOT HIJUMPER). ;IT WILL JUMP UP THROUGH SOLID AND IT FINISHES WITH EFALL (EFALL WAITS ;FOR CONTACT WITH SOLID). ; ;IF STATE=1: ;IT JUMPS UP 8 PIXELS, TURNS OFF SOLID, DROPS 16 PIXELS, TURNS SOLID ;STATE TO SAFE, CALLS EFALL (EFALL WAITS FOR CONTACT WITH SOLID). ;IF CAN'T FALL, WALKS TOWARDS HERO ASSUMING THERE'S A STEP DOWN. ; ;IF STATE=2: ;IT JUMPS UP 4+CHARS (FOR JUMPING ACROSS BRIDGES). ; ;IF STATE=3: ;IT JUMPS UP AS WITH STATE=0 EXCEPT THAT IT APPLIES X MOMENTUM AT THE ;TOP IN THE DIRECTION OF THE HERO. (STAIR) ; ;IF STATE=4 IT JUMPS UP 17+ CHARS USING SAME LOGIC AS STATE=0. SET ;HIJUMPER FOR THIS. IF HIJUMPER OFF, WILL JUMP 14+. ; ENJUMP: .DB INSTRUCTIONS,5 .DB LOAD,STATE .DB EQUAL .DRW JUMPDOWN ;SKIP IF WE NEED TO JUMP DOWN. .DRW 1 .DB EQUAL .DRW MIDJUMP .DRW 2 .DB EQUAL .DRW SUPERJUMP .DRW 4 .DB LOAD,31 .DB INSTRUCTIONS,2 .DB SOLIDSTATE,REGISTER ENJ2: .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB IFNBEHAVIOR .DRW ENJ4 .DB HIJUMPER ENJ3: .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START ENJ4: .DB LOAD,STATE .DB EQUAL .DRW A_STAIR .DRW 3 .DB ACTIVATE,EFALL A_STAIR: .DB ADDMOM,8,0 .DB DELAY,2 .DB ADDMOM,16,0 .DB DELAY,2 .DB ADDMOM,16,0 .DB ACTIVATE,EFALL MIDJUMP: .DB LOAD,31 .DB INSTRUCTIONS,2 .DB SOLIDSTATE,REGISTER .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SKIP .DRW ENJ3 SUPERJUMP: .DB LOAD,31 .DB INSTRUCTIONS,2 .DB SOLIDSTATE,REGISTER .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SETMOM,-1,-78 ;UPWARDS WITH MAX SPEED AT START .DB SKIP .DRW ENJ2 ;WE WANT TO JUMP DOWN THROUGH SOLIDS BUT MAYBE WE ARE ACTUALLY ON A SUPER ;SOLID STAIR AND CAN'T JUMP DOWN. WE GOT HERE BECAUSE THE HERO WAS ;BELOW US BUT WE NEED TO CHECK WHAT HAPPENED AFTER WE TRIED TO JUMP DOWN. ;IF WE DIDN'T GET ANYWHERE, WE ARE ON SUPER SOLIDS AND NEED TO WALK DOWN ;STEPS. JUMPDOWN: .DB LOAD,31 .DB INSTRUCTIONS,1 .DB SOLIDSTATE,REGISTER .DB STANDING ;IF STILL STANDING AFTER GOING UNSOLID, STAIR .DRW JDN10 .DB SETMOM,-1,-32 ;UPWARDS WITH MAX SPEED AT START .DB DELAY,4 ;LET HIM FALL THROUGH .DB ACTIVATE,EFALL ;IF NOT, IT WAS A LEDGE AND WE DID IT ;THE HERO IS BELOW US BUT WE AREN'T ON A JUMP DOWN THROUGH TYPE OF LEDGE. ;WE MUST BE ON A STAIR. TRY TO WALK TOWARDS THE HERO ASSUMING WE WILL ;GO DOWN. JDN10: .DB ANIMATION,EWALK,1 ;USE THE WALKING ANIMATION .DB SETMOM,24,-1 JDN11: .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB INSTRUCTIONS,4 .DB FETCHREG,YDIR ;MAKE SURE HE'S STILL BELOW US .DB EQUAL .DRW JDN50 ;IF NOT BELOW, GO BACK TO WALK. .DRW 1 .DB RANGE .DRW JDN50 .DB -1,7 ;IF HE'S BELOW US BY LESS THAN 7, DON'T TRY .DB DISTANCE .DRW SLOWCHECK ;SLOW HIM IF WE ARE ON THE EDGE AND HES BELOW .DB 2,-1 ;IF WE GET REAL CLOSE ON X, WE COULD OSCILLATE .DB SPEED .DRW JDN50 ;END IF RUN INTO OBSTICLE .DB 7,-1 .DB RESETFRICTION,1,0 ;CANCEL FRICTION .DB STANDING .DRW JDN11 .DB ACTIVATE,EFALL ;WHEN WE FINALLY DROP, USE FALL. JDN50: .DB ACTIVATE,EWALK ENDUCK: .DB SKIP .DRW ENDUCK ;***** PROJECTILE MOVEMENTS ****** BOMBWAKE: .DB INSTRUCTIONS,H'8A .DB BOUNCE,128 .DB MOMLIMIT,64,64 .DB TARGET .DRW HERO0 .DB FETCHREG,PARAM2 ;CHECK FOR DIRECTION OF QUIKKO BOMBS .DB EQUAL .DRW BOM4 .DRW 1 .DB FETCHREG,PARAM2 ;CHECK FOR REGLAUNCH BOMBS .DB EQUAL .DRW BOM20 .DRW 2 .DB SETMOM,32,-64 .DB FETCHREG,FACE .DB ANDREG,H'80,0 .DB EQUAL .DRW BOM5 .DRW 0 BOM4: .DB SETMOM,-40,-64 ;THROW LEFT IF FACING LEFT BOM5: .DB SOLIDSTATE,OFF .DB UNLINK .DB RANDOM .DRW BOM6 .DB 128 .DB MOVEIN,16,-8 BOM6: .DB RANDOM .DRW BOM8 .DB 128 .DB MOVEIN,8,-8 BOM8: .DB SOLIDSTATE,SAFE .DB DELAY,30 .DB NOISE .DRW BOMBSOUND ;MAKE THE BOMB SOUND .DB SEQUENCE .DRW BLAST .DB PALCLR,0,H'37 ;SET BACKGROUND TO YELLOW BOM7: .DB DELAY,2 .DB PALCLR,0,H'35 ;SET BACKGROUND TO PINK .DB DELAY,2 .DB ACTIVE .DRW BOM10 .DB ID .DRW FIREDUMMY .DB BPALETTE .DRW -1 BOM9: .DB DIE,0 BOM10: .DB HURT,0,ID .DRW FIREDUMMY .DB SKIP .DRW BOM9 BOM20: .DB SOLIDSTATE,OFF ;IF REGLAUNCHED THEN FALL TO GROUND .DB DELAY,15 .DB SKIP .DRW BOM8 BLAST: .DRW BOMBEXPL ;TO SHOW AN EXPLOSION .DRW -1 .DB 0,0 .DB H'20,H'12 .DB H'88,H'0F SHURIWAKE: .DB INSTRUCTIONS,H'8A .DB TARGET .DRW HERO0 .DB BOUNCE,255 .DB MOMLIMIT,64,64 .DB MOVEIN,56,-1 .DB GRAVITY,0 .DB SETMOM,-1,0 .DB FETCHREG,ENTITY .DB EQUAL ;CHECK IF SHOTGUN .DRW BW6 .DRW BOLTGUYID .DB EQUAL ;CHECK IF ARROW .DRW BW6 .DRW 37 .DB YTRACK,TOWARDS .DB RANGE .DRW BW6 .DB -1,16 .DB ADDMOM,0,16 .DB RANGE .DRW BW6 .DB -1,64 .DB ADDMOM,0,16 BW6: .DB UNLINK .DB FRICTION,0,0 BW10: .DB REARM .DB XVISUAL .DRW SAFEDIE .DB 12 ;DIE IF HIT LEFT .DB ATTACKED .DRW SAFEDIE ;OR IF WE HIT SOMEONE .DB XVISUAL .DRW BW10 .DB 244 ;OR IF HIT RIGHT .DB SKIP .DRW SAFEDIE MACHINEWAKE: ;MACHINE GUN BULLET .DB INSTRUCTIONS,H'86 .DB SOLIDSTATE,OFF .DB TARGET .DRW HERO0 .DB NOISE .DRW MACHGUN .DB MOMLIMIT,120,-1 .DB MOVEIN,120,-1 .DB GRAVITY,0 .DB SKIP .DRW BW6 MONGATTACK: ;THE MONGOLIAN'S ATTACK MUST SHAKE THE ;SCREEN AND LAUNCH ROCKS .DB RESETBEHAVIOR,MAD MNG12: .DB FRAME .DRW MNG15 .DB 1 ;WAIT FOR CLUB TO HIT .DB SKIP .DRW MNG12 MNG15: .DB ENABLE,ALL^ATTACKING ;ENABLE ALL BUT ATTACKING. .DB NOISE .DRW THUD .DB SHAKE,-1 .DB DELAY,1 .DB RANDOM .DRW MNG16 .DB 192 .DB CREATE,ROCKGUYID,128,0,0 ;LAUNCH A ROCK IN THE SCREEN MIDDLE MNG16: .DB SHAKE,1 .DB DELAY,1 .DB RANDOM .DRW MNG17 .DB 192 .DB CREATE,ROCKGUYID,32,0,0 ;LAUNCH A ROCK IN THE SCREEN MIDDLE MNG17: .DB SHAKE,-1 .DB DELAY,1 .DB RANDOM .DRW MNG20 .DB 192 .DB CREATE,ROCKGUYID,192,0,0 ;LAUNCH A ROCK IN THE SCREEN MIDDLE MNG20: .DB SHAKE,1 .DB DELAY,1 .DB RANDOM .DRW MNG22 .DB 192 .DB CREATE,ROCKGUYID,0,0,0 ;LAUNCH A ROCK IN THE SCREEN MIDDLE MNG22: .DB RANDOM .DRW MNG40 .DB 192 .DB CREATE,ROCKGUYID,96,0,0 ;LAUNCH A ROCK IN THE SCREEN MIDDLE MNG40: .DB SHAKE,0 .DB FINISH .DB IFNBEHAVIOR .DRW MNG50 .DB WEAK .DB DELAY,10 ;FOR ORDINARY MONGOLIAN DELAY MNG45: .DB ACTIVE ;IF BOOMERRANG IS THERE,THEN DUCK .DRW MDUCK20 .DB ID .DRW 34 .DB ENABLE,HURTING MNG50: .DB ACTIVATE,EWALK MDUCK20: .DB DISABLE,HURTING ;BOOMERRANG IS THERE,DUCK .DB ANIMATION,EDUCK,1 .DB SKIP .DRW MNG45 ;THE EVIL FAIRY FLIES TOWARDS THE HERO AND THEN POKES HIM. FAIRYWAKE: .DB GRAVITY,0 .DB SOLIDSTATE,OFF .DB IDENTIFY .DRW ENEMY .DB TARGET .DRW HERO0 .DB XTRACK,TOWARDS .DB YTRACK,TOWARDS .DB MOMLIMIT,24,24 .DB ENABLE,HURTING FW10: .DB ADDMOM,8,8 .DB REARM FW15: .DB ATTACKED .DRW FW20 .DB SKIP .DRW FW10 FW20: .DB DELAY,12 ;IF WE POKED HIM, WAIT A BIT .DB SKIP .DRW FW10 DUMB: .DRW DUMMY .DRW -1 .DB 0,0 .DB 0,0 .DB 0,0 BRIZZY: .DRW BRIZBLOW .DRW BRIZWAKE .DB H'23,0 .DB 0,H'03 .DB 0,0 .DRW DAGSPIN ;SPECIAL DAGGER ENTITY .DRW -1 .DB 0,0 .DB H'30,H'12 .DB H'11,H'0F BRIZBIG: .DRW BRIZTHNG .DRW BRIZSHOT .DB H'23,-2 .DB 0,H'05 .DB 0,0 BRIZSHOT: BRI5: .DB SOLIDSTATE,OFF ;BIG BRIZ AT FIRST .DB TARGET .DRW HERO0 .DB SETMOM,-1,80 BRI6: .DB REARM .DB RANDOM .DRW BRI7 .DB 20 .DB YVISUAL .DRW BRI6 .DB 140 BRI7: .DB NOISE .DRW BOMBSOUND .DB LAUNCH,49,8,-16,0 .DB LAUNCH,49,0,-8,0 .DB LAUNCH,49,4,-12,0 .DB SEQUENCE .DRW DUMB BRI8: .DB DIE,0 BRIZWAKE: .DB SOLIDSTATE,OFF .DB TARGET .DRW HERO0 .DB MOMLIMIT,96,96 .DB IFPARAM .DRW BR5 .DB 0 .DB ANIMATION,EHURT,2 BR5: .DB FETCHREG,RANDOM .DB ANDREG,B'11110111,0 .DB XOR,8 ;MAKE SURE AT LEAST A BIT OF X MOM .DB REGMOM,REGISTER,-1 .DB SETMOM,-1,-104 BRI10: .DB REARM .DB IFXEDGE .DRW BRI20 .DB 10 .DB YVISUAL .DRW BRI10 .DB 196 BRI20: .DB DIE,0 HOLDY: .DRW HOLDON .DRW HOLDCODE .DB H'23,-1 .DB 0,0 .DB 0,0 HOLDCODE: .DB GRAVITY,0 .DB TARGET .DRW HERO0 .DB XTRACK,TOWARDS,YTRACK,TOWARDS .DB MOMLIMIT,24,24 .DB SOLIDSTATE,OFF HLD10: .DB ACTIVE ;SEE IF NINJA THERE,IF NOT DIE .DRW HLD15 .DB ID .DRW 28 .DB DIE,1 HLD15: .DB ADDMOM,4,4 .DB DISTANCE .DRW HLD20 .DB 8,8 .DB SKIP .DRW HLD10 HLD20: .DB LINK,0,0 .DB ID .DRW HEROID .DB SETCOUNTER,100 HLD25: .DB COUNT .DRW HLD30 .DB 1 .DB SKIP .DRW HLD25 HLD30: .DB SETMOM,24,-24 .DB UNLINK .DB DELAY,40 .DB SKIP .DRW HLD10 BALLDOOD: .DRW BALL1 .DRW BALLCODE .DB 0,0 .DB H'40,H'01 .DB H'11,H'0F .DRW -1 .DRW BALLHURT .DB 0,-1 .DB 0,0 .DB 0,0 BALLCODE: .DB FRICTION,0,0 .DB BOUNCE,255 .DB MOMLIMIT,120,96 .DB IDENTIFY .DRW ENEMY .DB ENABLE,HURTING .DB TARGET .DRW HERO0 .DB SETMOM,56,-1 BLC5: .DB SETMOM,-1,-96 BLC10: .DB REARM .DB ATTACKED .DRW BLC30 BLC14: .DB INSTRUCTIONS,3 .DB IFXEDGE .DRW BLC15 .DB 10 .DB STANDING .DRW BLC5 .DB SKIP .DRW BLC10 BLC15: .DB YVISUAL .DRW BLC17 .DB 150 BLC16: .DB IFXEDGE .DRW SAFEDIE .DB 10 .DB SKIP .DRW BLC16 BLC17: .DB INSTRUCTIONS,H'82 .DB SETMOM,0,-1 .DB MOVEIN,-56,-1 .DB DELAY,4 .DB SKIP .DRW BLC10 BALLHURT: .DB MOVEIN,-112,-1 .DB DAMAGE .DB ASSESS .DRW BLC20 .DB 0 .DB RESUME BLC20: .DB SEQUENCE .DRW BOMBLAST .DB DELAY,2 .DB LAUNCH,5,4,0,0 ;LAUNCH SINGLE STICK OF DYNAMITE .DB LOWNOISE .DRW DIEPRIZE .DB DIE,0 BLC30: .DB SEQUENCE .DRW BOMBLAST .DB DELAY,3 .DB DIE,0 QUIK: .DRW FLIT .DRW QUIKKO .DB 0,0 .DB H'40,H'02 .DB H'11,H'0F QUIKKO: .DB GRAVITY,0 .DB TARGET .DRW HERO0 .DB XTRACK,TOWARDS .DB MOMLIMIT,40,0 QWK10: .DB INSTRUCTIONS,5 .DB ADDMOM,4,0 .DB RANDOM ;SOMETIMES SHOOT .DRW QWK20 .DB 18 .DB SKIP .DRW QWK10 QWK20: .DB LAUNCH,53,8,8,0 .DB SKIP .DRW QWK10 QUIKSHOT: .DRW QUIKBALL .DRW QUIKCODE .DB 0,0 .DB H'20,H'02 .DB H'11,H'0F QUIKCODE: .DB GRAVITY,-1 .DB TARGET .DRW HERO0 .DB RANDOM .DRW QKC10 .DB 40 QKC5: .DB YVISUAL .DRW QKC6 .DB 200 .DB SKIP .DRW QKC20 QKC6: .DB STANDING .DRW QKC20 .DB SKIP .DRW QKC5 QKC10: .DB RANDOM .DRW QKC15 .DB 127 .DB SPAWN,BOMBGUYID,0,0,0 ;SOMETIMES SHOOT RIGHT .DB RESUME QKC15: .DB SPAWN,BOMBGUYID,0,0,1 ;SOMETIMES SHOOT LEFT .DB RESUME QKC20: .DB DIE,0 GRABBY: .DRW GRAB1 .DRW GRABCODE .DB 0,0 .DB H'20,H'00 .DB H'11,H'0F .DRW GRABLOW .DRW GRBHURT .DB 0,-1 .DB 0,0 .DB 0,0 GRABEXPLODE: .DRW GRABLOW .DRW -1 .DB 0,0 .DB 0,0 .DB 0,0 GRABCODE: .DB GRAVITY,0 .DB BOUNCE,255 .DB TARGET .DRW HERO0 .DB IDENTIFY .DRW ENEMY .DB ENABLE,HURTING .DB XTRACK,TOWARDS,YTRACK,TOWARDS .DB MOMLIMIT,32,32 GRB10: .DB REARM .DB ADDMOM,4,4 .DB ATTACKED .DRW GRB20 .DB SKIP .DRW GRB10 GRB20: .DB HURT,0,ID .DRW HEROID .DB SETMOM,-1,32 ;DELAY AND BLOW UP .DB DELAY,20 .DB NOISE .DRW BOMBSOUND .DB DIE,1 GRBHURT:.DB ATTACKER ;ATTACKED BY BOOMERRANG? .DRW GRB30 .DB 34 .DB DIE,1 GRB30: .DB LAUNCH,14,0,0,0 ;LAUNCH FOOD .DB LOWNOISE .DRW DIEPRIZE .DB DIE,1 STARMOVE: .DRW STAR .DRW STARWAKE .DB H'23,-1 .DB 0,0 .DB 0,0 STARWAKE: .DB GRAVITY,0 .DB SOLIDSTATE,OFF .DB TARGET .DRW HERO0 .DB XTRACK,TOWARDS,YTRACK,TOWARDS .DB SETCOUNTER,30 STAR10: .DB ADDMOM,24,0 .DB IFXEDGE .DRW STAR30 .DB 35 .DB COUNT .DRW STAR20 .DB 1 .DB SKIP .DRW STAR10 STAR20: .DB SETCOUNTER,4 STAR25: .DB LAUNCH,49,8,8,1 ;LAUNCH THE EVIL DAGGERS .DB COUNT .DRW STAR30 .DB 1 .DB SKIP .DRW STAR25 STAR30: .DB ACTIVATE,EWAKE BOSSMECH: .DRW BOSROB .DRW MECHMOVE .DB H'23,-1 .DB 0,0 .DB 0,0 MECHMOVE: .DB ACTIVE ;IF PEAS THERE THEN DON'T LAUNCH ANOTHER ROBOT .DRW SAFEDIE .DB ID .DRW 58 .DB GRAVITY,0 .DB TARGET .DRW HERO0 .DB MOMLIMIT,96,-1 .DB INSTRUCTIONS,H'83 .DB SETMOM,96,0 .DB XVISUAL .DRW MECH5 .DB 128 .DB SETMOM,-96,0 MECH5: .DB IFXEDGE .DRW SAFEDIE .DB 14 .DB RANDOM .DRW MECH5 .DB 128 .DB RANDOM .DRW MECH5 .DB 64 .DB LAUNCH,58,9,9,0 ;DROP KILLER THINGS .DB DELAY,2 .DB SKIP .DRW MECH5 DROPEX: .DRW DROPEXS .DRW -1 .DB 0,-1 .DB 0,0 .DB 0,0 BOSSDROP: .DRW BOSDROP .DRW DROPCODE .DB H'23,0 .DB H'20,H'02 .DB H'11,H'0F DROPCODE: .DB GRAVITY,4 .DB TARGET .DRW HERO0 DROP5: .DB STANDING .DRW DROP10 .DB ATTACKED .DRW DROP10 .DB YVISUAL .DRW DROP6 .DB 192 .DB DIE,0 DROP6: .DB REARM .DB SKIP .DRW DROP5 DROP10: .DB SEQUENCE .DRW DROPEX .DB DELAY,2 .DB DIE,0