************************************************************************** * * * VIDEO GAME PROJECT: FOOTBALL * * * * PROGRAMMER: EDWARD J. BOON * * ARTIST: JOHN R. NEWCOMER * * * * MODULE: FBFX.ASM --- SPECIAL EFFECTS * * * * COPYRIGHT (C) 1990 WILLIAMS ELECTRONICS GAMES, INC. * * * ************************************************************************** .FILE 'FBFX.ASM' .WIDTH 132 .OPTION B,D,L,T .MNOLIST * * GET THE SYSTEM STUFF * .INCLUDE MPROCEQU.ASM ; MPROC EQUATES .INCLUDE DISPEQU.ASM ; DISPLAY PROCESSOR EQUATES .INCLUDE SYSEQU.ASM .INCLUDE MACROS.HDR ; MACROS .INCLUDE MAINEQU.ASM .INCLUDE IMGTBL.GLO .INCLUDE BGNDTBL.GLO .INCLUDE FIELDEQU.ASM .DATA FXLEGAL1 .INCLUDE FBFX.TBL .DATA FXLEGAL2 .TEXT .GLOBAL FXLEGAL1,FXLEGAL2 .DEF WINTEST,TDFX1,FX_GOVER,TDFX2 .DEF FX_PLAYRES,EOQ_MSG,EXTRAP,KICKPREP .DEF FX_BLEW4TH,FX_POSTINT,FX_WHADDA .DEF FX_INTER,FX_OOB,FX_NOGOOD,FX_SAFETY,FX_TOUCHB,FX_BIGHIT .DEF FX_INCOM,FX_FGY,FX_FUMBLE,TANIA_PROC,TD_TANIA,FX_FGN .DEF SHOW_TURNOVER,FX_SUDDEN,FX_PAIN,FX_EPY .DEF FX_SHADOW_PRINT,PRNT_1DIG .DEF FX_GAME_INTRO,HALFTIME,MIDDLE_OPEN .DEF KOM_PROMPT .REF FIELD,BACKGROUND,BOONSND,PRINT_OBJ_XY_ID,PRINT_OBJ .REF SHADOW_PRINT,DUMB_IMG,CHAN1PRI,NOSOUNDS,ROAR_WITH_CROWD .REF GET_LOGO,SPLIT_A1,FONT15_NUMS,AUTOSCR,PTIMERS .REF BIG_DIGITS,TEAM_LOGOS,GETCBOX,GET_CREDITS .REF BOUNDS_A0,LOGO_INIT,VERSUS_INIT .REF CROWD_FRAMES,STRIP_FRAMES .REF CRED_P .REF DO_CLOCK,BALL_ON_THE,MINIPRNT,SHOW_QUARTER ************************************************************************** * * * KOM_PROMPT * * * * Process to prompt the player to tap his ACTION button for kicking pow * * * ************************************************************************** KOM_PROMPT SLEEP >30 MOVI PBOX0_INIT,A0 MOVI TAPACT0_INIT,A2 MOVI ARR0_INIT,A3 MOVE @OFFENSE,A1,W MOVE @OFFPLAY,A4,W CMPI OF_KICKOFF,A4 JRNE KOMP1 XORI 1,A1 ; KICKOFF ---> PROMPT FOR DEFENSE KOMP1 MOVE A1,A1 JREQ KOMP2 MOVI PBOX1_INIT,A0 MOVI TAPACT1_INIT,A2 MOVI ARR1_INIT,A3 KOMP2 MOVE A0,A14 CALLR KOMP7 MOVE A2,A14 CALLR KOMP7 MOVE A3,A14 CALLR KOMP7 MOVK 1,A11 CREATE PID_PROMPT,RGBSTUFF ; FLASH THE LETTERS KOMP3 SLEEP 6 MOVE @BSTATE,A0,W ; STATE O BALL ? CMPI BS_FGKICK,A0 JREQ KOMP4 ; YES ----> NO NEED FOR PROMPT ANYMOE MOVE @KOM_RAM,A0,W CMPI METER_MIN+40,A0 JRLO KOMP3 ; KEEP SHOWIN KOMP4 MOVI OID_PROMPT,A0 CALLA DALLOBJ MOVI PID_PROMPT,A0 CALLA DALLPRC DIE KOMP7 CALLA INITOBJ MOVE A8,A0 JAUC INSOBJ2 PBOX0_INIT .LONG JUSTABOX,HELPBX_P .WORD 0,DMAWNZ|M_NOSCROLL,OID_PROMPT .WORD >35,>B0,0 TAPACT0_INIT .LONG TAFP,boonpal .WORD 0,DMAWNZ|M_NOSCROLL,OID_PROMPT .WORD >3E,>B7,1 ARR0_INIT .LONG HBOX_ARROW,HELPBX_P .WORD 0,DMAWNZ|M_NOSCROLL,OID_PROMPT .WORD >25,>BA,1 PBOX1_INIT .LONG JUSTABOX,HELPBX_P .WORD 0,DMAWNZ|M_NOSCROLL,OID_PROMPT .WORD >E5,>B0,0 TAPACT1_INIT .LONG TAFP,boonpal .WORD 0,DMAWNZ|M_NOSCROLL,OID_PROMPT .WORD >ED,>B7,1 ARR1_INIT .LONG HBOX_ARROW,HELPBX_P .WORD 0,DMAWNZ|M_NOSCROLL|M_FLIPH,OID_PROMPT .WORD >158,>BA,1 ************************************************************************** * * * HALFTIME * * * * Finally, the long awaited, much anticipated HALFTIME show !! * * * ************************************************************************** HALFTIME MOVI >05,A0 CALLA FX_SHADOW_PRINT ; "HALFTIME" MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS MOVI 4A0H,A9 MOVE A9,@WORLDTLX+16,W ; STARTING X MOVI 2D0H,A10 MOVE A10,@WORLDTLY+16,W ; STARTING Y CREATE PID_FX,BACKGROUND ; START A BACKGROUND UPDATER CREATE PID_FX,HT_CROWD ; BACKGROUND CROWD ADDI >150,A9 ADDI >50,A10 PUSH A9 MOVK 7,A11 HTIME3 CREATE PID_FX,ONE_CHEER SUBI >30,A9 DSJS A11,HTIME3 PULL A9 ADDI >90,A10 ; 2ND ROW MOVK 7,A11 HTIME4 CREATE PID_FX,ONE_CHEER SUBI >30,A9 DSJS A11,HTIME4 CREATE PID_FX,WINMAKER SLEEP >40 MOVK 8,A3 CALLA SEND_CODE_A3 ; GET DOWN SENOR FORDEN !! SLEEP >280 MOVI MA_HT_CHEER3,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI SLEEP >08 MOVI MA_HT_CHEER4,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI SLEEP >08 MOVI MA_HT_LOF2,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI BSOUND >23 SLEEP >90 JRUC FX_EXIT WINMAKER CREATE PID_FX,AWESOME_PROC MOVI HT_WINDOWS,A8 WINM1 MOVE *A8,A11,L MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI MOVE A0,A11 CREATE PID_FX,HTWINDOW_KILLER SLEEP 1 ; TIME FOR LIST TO BE RUN MOVE @OBJLST3,A3,L CLR A0 MOVE A0,@OBJLST3,L MOVI ->28000,A2 MOVE A3,A4 WINM2 MOVE A2,*A4(OXVEL),L MOVE A4,A5 MOVE *A4(OLINK),A4,L ; GIVE ALL OBJECTS THE SAME VELOCITY JRNE WINM2 * * TACK ONTO LIST #2 * MOVE @OBJLST2,A0,L MOVE A0,*A5(OLINK),L ; ADD TO TOP OF LIST #1 MOVE A3,@OBJLST2,L SLEEP >45 ADDI 32,A8 CMPI HT_END,A8 JRNE WINM1 MOVI HTFAN_INIT,A14 MOVI A_FAN1,A9 CALLA INITOBJ MOVK 5,A10 CREATE PID_FX,WINDOW_ANI ; LET SOMEONE ELSE DO THE ANIMATING MOVE A0,A11 MOVI ->28000,A2 MOVE A2,*A8(OXVEL),L MOVE A8,A0 CALLA INSOBJ2 DIE AWESOME_PROC SLEEP >13D BSOUND >42 ; SPEECH: AWESOME !!! DIE HT_CROWD BSOUND >23 ; START WITH ROAR SLEEP >50 JAUC CROWDM HT_WINDOWS .LONG MA_HT_CHEER2 .LONG MA_HTYEA .LONG MA_LOFNUM1 .LONG MA_HT_CHEER1 .LONG MA_HTAWESOME HT_END HTFAN_INIT .LONG FANWIN1A,FAN1PAL .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >1E0,>51,0 HTWINDOW_KILLER SLEEP 10 MOVE *A11(P_PREY),A8,L ; RIGHT SIDE IMAGE MOVE *A8(OXPOS),A2,W CMPI ->60,A2 ; ON SCREEN ? JRGT HTWINDOW_KILLER ; NO ---> WAIT MOVE *A11(P_PREY),A0,L ; RIGHT SIDE MOVE *A0(OSLINK),A1,L ; LEFT SIDE CALLA DELOBJP2 ; DELETE RIGHT SIDE MOVE A1,A0 CALLA DELOBJP2 ; DELETE LEFT SIDE MOVE *A11(P_SWITCH),A0,L HTKILL3 CALLA DELOBJP2 MOVE *A0(OSLINK),A0,L JRNE HTKILL3 ; KILL LINKED PARTS MOVE A11,A0 CALLA KILL ; KILL "MULTIANI" PROC DIE ; CLR A0 ; MOVE A0,@SCRNTL3,L ; MOVE A0,@SCRNLR3,L ; SLEEP >2A ; MOVI MA_HT_CHEER2,A11 ; MOVI INSOBJ3,A10 ; CREATE PID_FX,MULTIANI ; MOVE A0,A9 ; SLEEP 1 ; MOVE *A9(P_PREY),A8,L ; A8 = BACKDROP OBJ ; MOVI >00030003,A11 ; MOVI >00250025,A10 ; A10 = INITIAL CLIPPING ; JSRP GROW_WINDOW ; DIE ONE_CHEER MOVI TANIAFX_INIT,A14 CALLA INITOBJ MOVE @T0SCORE,A0,W MOVE @T1SCORE,A1,W MOVI HFTMER_P,A5 MOVI afrorpal,A6 ; USE THE LEADING TEAMS CHEERLEADERS CMP A1,A0 JRGE ONEC2 MOVI HFTIME_P,A5 MOVI afrobpal,A6 ONEC2 MOVI 410,A0 CALLA RANDPER ; 40% BLACK CHEERLEADERS JRNC ONEC3 MOVE A6,A5 ONEC3 MOVE A5,A0 CALLA GETFPAL ; GET A PALETTE FOR CHEERLEADER MOVE A0,*A8(OPAL),L SLEEP 2 CALLA GROUND_PLAYER ; PLANT YER FEET, TANIA MOVE A9,*A8(OXPOS),W MOVE A10,*A8(OZPOS),W MOVE A8,A0 CALLA INSOBJ SLEEP >3A MOVI A_SIDE,A9 MOVI >00060002,A0 JSRP A0FRAMES ; BEAT #1 SLEEP >04 MOVI >00050002,A0 JSRP A0FRAMES ; BEAT #2 SLEEP >12 MOVI >00050002,A0 JSRP A0FRAMES ; BEAT #3 SLEEP >04 MOVI >00050002,A0 JSRP A0FRAMES ; BEAT #4 SLEEP >12 MOVI A_KICK,A9 MOVK 4,A0 JSRP FRAMEW MOVI A_KICK,A9 MOVK 4,A0 JSRP FRAMEW MOVI A_KICK,A9 MOVK 4,A0 JSRP FRAMEW MOVE A11,A0 SLL 4,A0 ADDI TS_TABLE1,A0 MOVE *A0,A0,W CALLA PRCSLP MOVI A_JUMP,A9 MOVK 6,A0 JSRP FRAMEW ; JUMP ANIMATION MOVI A_JUMP,A9 MOVK 6,A0 JSRP FRAMEW ; JUMP ANIMATION MOVI A_JUMP,A9 MOVK 6,A0 JSRP FRAMEW ; JUMP ANIMATION MOVI A_JUMP,A9 MOVI >00020006,A0 JSRP A0FRAMES MOVI A_SIDE,A9 MOVK 5,A0 JSRP FRAMEW MOVI A_SIDE,A9 MOVK 5,A0 JSRP FRAMEW MOVI A_KICK,A9 MOVK 4,A0 JSRP FRAMEW SLEEP >20 MOVI A_JUMP,A9 MOVK 6,A0 JSRP FRAMEW ; JUMP ANIMATION MOVI >00020006,A0 JSRP A0FRAMES DIE TS_TABLE1 .WORD 6 .WORD 6*2 .WORD 6*3 .WORD 6*4 .WORD 6*5 .WORD 6*6 .WORD 6*7 .WORD 6*8 .WORD 6*9 .WORD 6*9 .WORD 6*9 .WORD 6*9 TANIAFX_INIT .LONG CHEERSIDE1,0 .WORD 0,DMAWNZ,OID_FX .WORD 0,0,0 ************************************************************************** * * * THE PAIN EFFECT * * * * Used when some dork is screaming on the ground in pain ! * * * ************************************************************************** FX_PAIN MOVE @PAINCNT,A0,W JREQ PAIN1 ; ZERO ---> RUN THE EFFECT DEC A0 MOVE A0,@PAINCNT,W ; DON'T DO THIS TOO OFTEN DIE PAIN1 MOVK 2,A0 MOVE A0,@PAINCNT,W SLEEP >38 ; LET THE "IMPACT" SOUND PLAY BSOUND >45 ; PAIN SCREAMING SLEEP >60 MOVI FAN1_INIT,A14 MOVI A_FAN1,A9 CALLA INITOBJ MOVK 5,A10 CREATE PID_FX,WINDOW_ANI ; LET SOMEONE ELSE DO THE ANIMATING MOVI >E0,A2 MOVI >10,A3 MOVE @BALLCAR,A0,L MOVE *A0(OZPOS),A0,W CMPI FIELD_MIDZ,A0 JRLO PAIN2 MOVI >99,A3 PAIN2 MOVE A2,*A8(OXPOS),W MOVE A3,*A8(OYPOS),W ; FIND A GOOD SPOT FOR WINDOW MOVE A8,A0 CALLA INSOBJ2 BSOUND >53 ; CROWD ROAR SLEEP >40 CREATE PID_FX,AWESOME SLEEP >80 JRUC FX_EXIT ************************************************************************** * * * AWESOME * * * * Announcer saying: "Awesome !!" * * * ************************************************************************** AWESOME MOVI MA_AWESOMEH,A11 MOVE @BALLCAR,A0,L MOVE *A0(OZPOS),A0,W CMPI FIELD_MIDZ,A0 JRHI AWE2 MOVI MA_AWESOMEL,A11 ; LOWER PORTION OF SCREEN AWE2 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI MOVE A0,A9 ; A9 = ANI PROC CALLR HIDELIST3 SLEEP 1 ; TIME FOR IT TO INITIALIZE MOVE *A9(P_PREY),A8,L ; A8 = BACKDROP OBJ MOVI >00020002,A11 MOVI >00250025,A10 ; A10 = INITIAL CLIPPING JSRP GROW_WINDOW SLEEP >0B BSOUND >42 ; SPEECH: AWESOME !!! SLEEP >80 MOVI >00020002,A11 JSRP SHRINK_WIN DIE ************************************************************************** * * * SUDDEN DEATH OVERTIME EFFECT * * * * Tells the players what the lowdown is. * * * ************************************************************************** FX_SUDDEN MOVI RGB_BLACK,A0 MOVE A0,@IRQSKYE,W ; BACKGROUND COLOR CALLA GAME_OVER_SCREEN MOVI >0B,A0 CALLA FX_SHADOW_PRINT ; "THE SCORE IS TIED" MOVI SUDDEN_IMAGES,A7 CLR A9 MOVK 6,A3 MOVI SUDLET_INIT,A14 CALLR TDOWN1 ; "SUDDEN" MOVI DEATH_IMAGES,A7 CLR A9 MOVK 5,A3 MOVI DELET_INIT,A14 CALLR TDOWN1 ; "DEATH" MOVI >0A,A0 CALLA FX_SHADOW_PRINT ; "OVERTIME" MOVK 3,A11 CREATE PID_FX,RGBSTUFF ; FLASH: "THE SCORE IS TIED" MOVI >0A,A3 CALLA FVTUNE ; TUNE SLEEP >130 JRUC FX_EXIT SUDLET_INIT .LONG HUGE_T,letblu .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >7C,>62,0 DELET_INIT .LONG HUGE_T,letblu .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >88,>85,0 SUDDEN_IMAGES .LONG HUGE_N .LONG HUGE_E .LONG HUGE_D .LONG HUGE_D .LONG HUGE_U .LONG HUGE_S DEATH_IMAGES .LONG HUGE_H .LONG HUGE_T .LONG HUGE_A .LONG HUGE_E .LONG HUGE_D ************************************************************************** * * * "WHAT A PLAY" EFFECT * * * ************************************************************************** FX_WHADDA MOVI MA_WHADDAH,A11 MOVE @BALLCAR,A0,L MOVE *A0(OZPOS),A0,W CMPI FIELD_MIDZ,A0 ; ABOVE OR BELOW ?? JRGT WHAD2 MOVI MA_WHADDAL,A11 WHAD2 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; COACH "YEA" WINDOW MOVE A0,A9 ; A9 = ANI PROC CALLR HIDELIST3 SLEEP 1 ; TIME FOR IT TO INITIALIZE MOVE *A9(P_PREY),A8,L ; A8 = BACKDROP OBJ MOVI >00020002,A11 MOVI >00250025,A10 ; A10 = INITIAL CLIPPING JSRP GROW_WINDOW SLEEP 8 BSOUND >48 ; SPEECH: "WHAT A PLAY !!!" SLEEP >80 JRUC SHRINK_THEN_DIE ************************************************************************** * * * POST INTERCEPTION EFFECT * * * ************************************************************************** FX_POSTINT MOVI OID_FX,A0 CALLA DALLOBJ ; DONT INTERFERE WITH OLD TEXT ! CREATE PID_FX,SHOW_TURNOVER MOVE @RAND,A0,L JRN POSTINT1 ; 2 DIFFERENT "YEA !!" DEALS MOVI MA_FUCKINA1,A11 MOVE @OFFENSE,A0,W JREQ POSTINT2 MOVI MA_FUCKINA2,A11 JRUC POSTINT2 POSTINT1 MOVI MA_COACH_YEA1,A11 MOVE @OFFENSE,A0,W JREQ POSTINT2 MOVI MA_COACH_YEA2,A11 POSTINT2 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; COACH "YEA" WINDOW POSTINT3 MOVE A0,A9 ; A9 = ANI PROC CALLR HIDELIST3 SLEEP 1 ; TIME FOR IT TO INITIALIZE MOVE *A9(P_PREY),A8,L ; A8 = BACKDROP OBJ MOVI >00020002,A11 MOVI >00250025,A10 ; A10 = INITIAL CLIPPING JSRP GROW_WINDOW BSOUND >23 ; CROWD ROAR !!!! SLEEP >B0 JRUC SHRINK_THEN_DIE ************************************************************************** * * * SHOW_TURNOVER * * * * Effect which shows the TURNOVER of the ball. * * * ************************************************************************** SHOW_TURNOVER MOVE @T0TEAM,A0,W MOVI >36,A5 MOVI >55,A6 MOVI INSOBJ2,A10 ; ROUTINE TO CALL CALLR DO_A_LOGO MOVE @T1TEAM,A0,W MOVI >DA,A5 MOVI >55,A6 MOVI INSOBJ2,A10 ; ROUTINE TO CALL CALLR DO_A_LOGO MOVI >2F,A0 MOVE @INTERF,A1,W ; INTERCEPTION OF SORTS ?? CMPI 1,A1 JRNE SHOT2 ; NOPE.... MOVI >11,A0 ; YES ---> "INTERCEPTION TURNOVER" SHOT2 CALLA FX_SHADOW_PRINT ; "TURNOVER" MOVI >2D,A0 MOVE @OFFENSE,A1,W JREQ SHOT3 MOVI >2E,A0 SHOT3 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS BSOUND >0F SLEEP >70 DIE ************************************************************************** * * * BLEW 4TH DOWN EFFECT * * * ************************************************************************** FX_BLEW4TH SLEEP >30 MOVI MAD_CHOICES0,A1 MOVE @OFFENSE,A2,W JRNE BLEW40 MOVI MAD_CHOICES1,A1 BLEW40 MOVK 5,A0 ; # OF CHOICES WE HAVE CALLA RANDU DEC A0 SLL 5,A0 ADD A1,A0 MOVE *A0,A11,L BLEW41 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; COACH WINDOW MOVE A0,A9 ; A9 = ANI PROC CALLR HIDELIST3 SLEEP 1 ; TIME FOR IT TO INITIALIZE MOVE *A9(P_PREY),A8,L ; A8 = BACKDROP OBJ MOVI >00020002,A11 MOVI >00250025,A10 ; A10 = INITIAL CLIPPING JSRP GROW_WINDOW BSOUND >24 ; BOO !!! ; SLEEP >30 CREATE PID_FX,SHOW_TURNOVER SLEEP >A0 SHRINK_THEN_DIE MOVI >00020002,A11 JSRP SHRINK_WIN JRUC FX_EXIT MAD_CHOICES0 .LONG MA_BAGMAN0 .LONG MA_MAD0 .LONG MA_SHAKE0 .LONG MA_PU0 .LONG MA_MOON0 MAD_CHOICES1 .LONG MA_BAGMAN1 .LONG MA_MAD1 .LONG MA_SHAKE1 .LONG MA_PU1 .LONG MA_MOON1 ************************************************************************** * * * FIELD GOAL = YES EFFECT * * * ************************************************************************** FX_FGY MOVI RGOAL_IN_X,A1 MOVE @OFFENSE,A2,W JRNE FXFGY2 MOVI LGOAL_IN_X,A1 FXFGY2 MOVE @LINEOFSC,A0,W SUB A0,A1 ABS A1 MOVK PIX_PER_YARD,A2 DIVS A2,A1 ; TRANSLATE TO YARDS ADDK 10,A1 ; PLUS ENDZONE SIZE PUSH A1 MOVI FXLET_INIT,A14 PUSH A14 MOVK 1,A0 ; MSG: "YARD FIELDGOAL" CALLA PRINT_OBJ ; TEXT = A4 --> A7 PULL A14 MOVE A4,A5 ; A5 = BEGINNING OF LIST PULL A1 MOVI FXLET_INIT,A14 CALLA SPLIT_A1 ; A1 / A3 SWAP A1,A3 CALLR PRNT_1DIG MOVE *A8(OXPOS),A0,W SUBK 6,A0 MOVE A0,*A8(OXPOS),W ; WORD SPACING MOVE A3,A1 ; TENS JREQ FXFGY3 ; ZERO ---> SKIP MOVI FXLET_INIT,A14 CALLR PRNT_1DIG FXFGY3 MOVI 00020002H,A6 CALLA SHADOW_PRINT MOVE @OBJLST2,A0,L MOVE A0,*A7(OLINK),L ; LAST CHAR ----> OBJLST2 MOVE A5,@OBJLST2,L ; OBJLST2 ---> 1ST CHAR MOVK 4,A11 ; USE THIS RGBSTUFF CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS (A11 IS DEFINED) ************************************************************************** * * * EXTRA POINT = YES EFFECT * * * ************************************************************************** FX_EPY CALLA UNCLIP CLR A3 CALLA SEND_CODE_A3 BSOUND >3C ; ITS GOOD / TUNE / CROWD CREATE PID_FX,ITGOOD CREATE PID_FX,GP_FLASH ; PROC: FLASH THE GOAL POSTS MOVI >14000,A1 MOVE @OFFENSE,A0,W JRNE EPY2 NEG A1 EPY2 MOVE A1,@SCROLLX,L ; REVEAL A BIT MORE OF THE GOAL POSTS MOVI ->10000,A1 MOVE A1,@SCROLLY,L ; A TAD UPWARDS SLEEP >30 CLR A0 MOVE A0,@SCROLLX,L MOVE A0,@SCROLLY,L SLEEP >60 MOVI LGOAL_IN_X+>A0,A1 ; LEFT SIDE MOVE @OFFENSE,A0,W JREQ EPY3 MOVI RGOAL_IN_X-SCRRGT->80,A1 ; RIGHT SIDE EPY3 MOVI >1B0,A3 MOVK 3,A4 JSRP AUTOSCR ; SHOW SOME CROWD SLEEP >100 JRUC FX_EXIT ; SHOULDN'T GET HERE ************************************************************************** * * * FLASH THE GOAL POSTS FOR A SEC... * * * ************************************************************************** GP_FLASH MOVE @T0GP,A8,L ; ASSUME OFFENSE = 0 MOVE @OFFENSE,A0,W JREQ FGY2 MOVE @T1GP,A8,L ; MAIN PROC HAS ALREADY SWITCHED OFFENSE FGY2 MOVE *A8(OSLINK),A8,L MOVE *A8(OSLINK),A9,L MOVE *A9(OSLINK),A10,L MOVI BPAL_WHT,A0 MOVE A0,*A8(OCONST),W MOVE A0,*A9(OCONST),W MOVE A0,*A10(OCONST),W ; CONSTANT COLOR TO FLASH MOVI 20,A11 GPFLASH MOVE *A8(OFLAGS),A4,W PUSHP A4 ORI DMACNZ,A4 MOVI boonpal,A0 ; USE BOONPAL "WHITE" CALLA SWPAL PUSH A8 MOVE A9,A8 CALLA SWPAL MOVE A10,A8 CALLA SWPAL ; CHANGE EVERYONE TO "BOONPAL" PULL A8 MOVE A4,*A8(OFLAGS),W MOVE A4,*A9(OFLAGS),W MOVE A4,*A10(OFLAGS),W SLEEP 3 * * CHANGE EVERYONE BACK TO NORMAL * PULLP A4 MOVE A4,*A8(OFLAGS),W MOVE A4,*A9(OFLAGS),W MOVE A4,*A10(OFLAGS),W MOVI FLDPAL1,A0 CALLA SWPAL PUSH A8 MOVE A9,A8 CALLA SWPAL MOVE A10,A8 CALLA SWPAL ; CHANGE EVERYONE BACK TO "FLDPAL" PULL A8 SLEEP 3 DSJ A11,GPFLASH DIE ************************************************************************** * * * HUGE "ITS GOOD" LETTERS * * * ************************************************************************** ITGOOD CLR A9 MOVE A9,@SCRNTL3,0 MOVE A9,@SCRNLR3,0 ; TOTALLY CLIP LIST #3 MOVK 9,A3 IG1 MOVI IGLET_INIT,A14 CALLA INITOBJ MOVE A3,A1 DEC A1 SLL 5,A1 ADDI IG_IMAGES,A1 MOVE *A1,A1,L CALLA ANI ; SHAPE THE LETTER MOVE A9,A9 JREQ IG2 MOVE *A9(OXPOS),A0,W MOVE *A9(OSIZEX),A1,W ADD A1,A0 DEC A0 MOVE A0,*A8(OXPOS),W IG2 MOVE A8,A9 MOVE A8,A0 CALLA INSOBJ3 DSJ A3,IG1 * * SCORE BOXES * MOVE @OBJLST3,A5,L MOVE A5,A1 FG4 MOVE A1,A6 MOVE *A6(OLINK),A1,L JRNE FG4 ; SET UP LIST #3 = A5 --> A6 MOVI L_SCOREBOX,A14 CALLA INITOBJ MOVI >22,A0 MOVE A0,*A8(OXPOS),W MOVE A8,A0 CALLA INSOBJ3 ; ON LIST #3 MOVE A8,A9 MOVI R_SCOREBOX,A14 CALLA INITOBJ MOVI >134,A0 MOVE A0,*A8(OXPOS),W MOVE A8,A0 CALLA INSOBJ3 ; ON LIST #3 MOVE @T0SCORE,A1,W MOVI >29,A11 ; X COORDINATE FOR DIGIT MOVI >6C,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE CALLR A9A10_OBJLST3 MOVE @T1SCORE,A1,W MOVI >13B,A11 ; FALL THROUGH TO "MAKE_2_DIGITS" MOVI >6C,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE CALLR A9A10_OBJLST3 MOVI letblu,A10 MOVI >04060200,A11 CREATE PID_FX,CYCLERF MOVI letblu,A10 MOVI >0A060200,A11 CREATE PID_FX,CYCLERF * * CLIP UNMASKING EFFECT * MOVI SCRRGT/2,A10 MOVE A10,A11 FG6 SUBK 12,A10 ADDK 12,A11 MOVE A10,@SCRNTL3,W MOVE A11,@SCRNLR3,W SLEEP 1 CMPI SCRRGT-12,A11 JRLT FG6 CALLA UNCLIP CALLA OL3TOOL2 ; TACK LIST 3 ---> LIST 2 * * WINDOW * CALLR HIDELIST3 MOVI MA_COACH_YEA2,A11 MOVE @OFFENSE,A0,W JREQ FG8 MOVI MA_COACH_YEA1,A11 FG8 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; COACH WINDOW MOVE A0,A9 ; A9 = ANI PROC SLEEP 1 ; TIME FOR IT TO INITIALIZE MOVE *A9(P_PREY),A8,L ; A8 = BACKDROP OBJ MOVI >00020002,A11 MOVI >00250025,A10 ; A10 = INITIAL CLIPPING JSRP GROW_WINDOW SLEEP >C0 ; TIME TO SEE FULL ANIMATION MOVI >00020002,A11 JSRP SHRINK_WIN MOVE A9,A0 CALLA KILL ; KILL "MULTIANI" PROC DIE IGLET_INIT .LONG HUGE_I,letblu .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >62,>72,0 IG_IMAGES .LONG HUGE_D .LONG HUGE_O .LONG HUGE_O .LONG HUGE_G .LONG HUGE_SP .LONG HUGE_S .LONG HUGE_APOS .LONG HUGE_T .LONG HUGE_I ************************************************************************** * * * BIG HIT EFFECT * * * * Effect to stroke the dude after he makes a BIG hit !!! * * * ************************************************************************** FX_BIGHIT MOVE @BALLCAR,A0,L MOVE *A0(OZPOS),A0,W ; A0 = BALL CARRIER Z SUBI TOP_SIDELINE,A0 ABS A0 ; A0 = DISTANCE FROM SIDELINE CMPI >70,A0 JRLE PAN_TO_CROWD ; CLOSE TO TOP ---> PAN UP !! SLEEP >30 BSOUND >53 ; FAST ROAR MOVI FAN1_INIT,A14 MOVI A_FAN1,A9 CALLA INITOBJ MOVK 5,A10 CREATE PID_FX,WINDOW_ANI ; LET SOMEONE ELSE DO THE ANIMATING MOVI >EC,A1 MOVI >12,A2 MOVE @BALLCAR,A0,L MOVE *A0(ODMAY),A0,W CMPI >300,A0 JRGT FXBIG2 MOVI >94,A2 FXBIG2 MOVE A1,*A8(OXPOS),W MOVE A2,*A8(OYPOS),W ; POSITION WINDOW MOVE A8,A0 CALLA INSOBJ2 SLEEP >40 ; TIME FOR CROWD SOUND MOVI MA_AWESOME_UL,A11 ; UPPER LEFT CORNER "AWESOME" MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; DO THE WINDOW !! MOVE A0,A11 SLEEP >20 BSOUND >42 ; SPEECH: AWESOME !!! SLEEP >60 MOVE *A11(P_PREY),A8,L MOVI >00020002,A11 JRUC SHRINK_THEN_DIE FAN1_INIT .LONG FANWIN1A,FAN1PAL .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD 0,0,0 * * PAN UP TO SHOW THE CROWD CHEERING * PAN_TO_CROWD CREATE PID_FX,SHOWC_SCROLL SLEEP >30 BSOUND >53 ; FAST CROWD MOVI CHAN1PRI,A11 JSRP WAITPRI ; WAIT FOR CROWD TO FINISH CLR A10 MOVK 9,A3 ; A3 = # OF CHOICES MOVI SSRCOMT,A2 ; TABLE O COMMENTS CALLA COMMENT_CALL ; MAKE THE CALL MOVI CHAN1PRI,A11 JSRP WAITPRI ; WAIT FOR SOUND TO FINISH JRUC FX_EXIT * * SHOW CROWD SCROLLER * SHOWC_SCROLL MOVE @BALLCAR,A8,L ; A8 = BALL CARRIER MOVI ->18000,A0 MOVE A0,@SCROLLY,L CLR A0 MOVE A0,@SCROLLX,L ; PAN UP CRCH2 SLEEP 1 MOVE @WORLDTLY+16,A0,W MOVE A0,A2 ADDI SCRBOT,A2 ; A2 = BOTTOM SCREEN Y MOVE *A8(OZPOS),A1,W ; A2 = DUDE Z SUB A1,A2 ABS A2 ; A2 = DISTANCE FROM BOTTOM OF SCREEN CMPI >18,A2 JRLT CRCH3 ; TOO CLOSE TO EDGE ---> STOP SCROLL CMPI >1D0,A0 JRGT CRCH2 CRCH3 CLR A0 MOVE A0,@SCROLLX,L MOVE A0,@SCROLLY,L DIE ************************************************************************** * * * FUMBLE MESSAGE * * * ************************************************************************** FX_FUMBLE CALLA KILLFX BSOUND >37 ; SPEECH: "FUMBLE !!" MOVI >28,A0 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS SLEEP >D0 JRUC FX_EXIT ************************************************************************** * * * TOUCHBACK MESSAGE * * * ************************************************************************** FX_TOUCHB CALLA KILLFX MOVI >25,A0 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS SLEEP >30 MOVI >00310039,A0 CALLA SNDCROWD ; SPEECH: TOUCHBACK SLEEP >70 JRUC FX_EXIT ************************************************************************** * * * OUT OF BOUNDS EFFECT * * * ************************************************************************** FX_OOB BSOUND >55 CALLA KILLFX CLR A0 MOVE A0,@SCROLLX,L MOVE A0,@SCROLLY,L ; IN CASE AN EFFECT WAS SCROLLING CMPI 4,A10 JREQ OOB_TURNOVER ; 4TH DOWN ---> SHOW "TURNOVER" MOVI >26,A0 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS SLEEP >90 ; BSOUND >39 ; BULL SHIT, BULL SHIT JRUC FX_EXIT OOB_TURNOVER MOVI 9,A0 CALLA FX_SHADOW_PRINT ; OUT OF BOUNDS (HI ON SCREEN) MOVK 3,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS SLEEP >20 CREATE PID_FX,FX_BLEW4TH ; NOW SHOW THE "TURNOVER" DIE ************************************************************************** * * * SAFETY EFFECT * * * ************************************************************************** FX_SAFETY BSOUND >36 ; SOUND FX CALLA KILLFX CLR A9 MOVK 6,A3 MOVI SAFETY_IMAGES,A7 MOVI SAFLET_INIT,A14 CALLR TDOWN1 ; SAFETY LETTERS MOVI L_SCOREBOX,A14 CALLA INITOBJ MOVI >3C,A0 MOVE A0,*A8(OXPOS),W MOVE A8,A0 CALLA INSOBJ3 ; ON LIST #3 MOVE A8,A9 MOVI R_SCOREBOX,A14 CALLA INITOBJ MOVI >11E,A0 MOVE A0,*A8(OXPOS),W MOVE A8,A0 CALLA INSOBJ3 ; ON LIST #3 MOVE @T0SCORE,A1,W MOVI >41,A11 ; X COORDINATE FOR DIGIT MOVI >6C,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE MOVI OID_FX2,A4 MOVE A4,*A9(OID),W MOVE A4,*A10(OID),W ; DONT CONFUSE WITH OID_FX CALLR A9A10_OBJLST3 MOVE @T1SCORE,A1,W MOVI >124,A11 ; FALL THROUGH TO "MAKE_2_DIGITS" MOVI >6C,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE MOVI OID_FX2,A4 MOVE A4,*A9(OID),W MOVE A4,*A10(OID),W ; DONT CONFUSE WITH OID_FX CALLR A9A10_OBJLST3 SLEEP >80 MOVI >0D,A3 CALLA FVTUNE SLEEP >F0 JRUC FX_EXIT SAFETY_IMAGES .LONG HUGE_Y .LONG HUGE_T .LONG HUGE_E .LONG HUGE_F .LONG HUGE_A .LONG HUGE_S SAFLET_INIT .LONG HUGE_T,letblu .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX2 .WORD >7C,>72,0 ************************************************************************** * * * COMMENT PROCS * * * * This is the process which handles POST PLAY comments * * * * Input: A10 = sound call to make (zero = random from table of calls) * * * ************************************************************************** * * PLAYER COMMENT * PPCOM JSRP COMSETUP MOVI PLCOMT,A2 MOVK 9,A3 ; A3 = # OF CHOICES COM1 CALLR COMMENT_CALL MOVI CHAN1PRI,A11 JSRP WAITPRI ; WAIT FOR SOUND TO FINISH DIE ; BEFORE SPLITTIN' COMSETUP MOVI PID_CROWDM,A0 CALLA DALLPRC MOVI CHAN1PRI,A11 JAUC WAITPRI ; WAIT FOR AN OPENNING TO SPEAK * * COMMENT CALL * A10 = SOUND CALL (or zero for Random call) * A9 = # OF CHOICES * A2 = TABLE OF A9 SOUND CALLS * COMMENT_CALL MOVE A10,A0 ; RANDOM CALL ?? JRNE COM2 ; NO, A10 = SOUND CALL TO MAKE MOVE A3,A0 CALLA RANDU ; YES, GET THE RANGE DEC A0 SLL 4,A0 ADD A2,A0 MOVE *A0,A0,W ; A0 = RANDOM SOUND CALL COM2 JAUC BOONSND ; MAKE THE CALL / RETURN * * ANNOUNCER TABLE O COMMENTS * SSRCOMT .WORD >50 ; 1 - HE NAILED HIM .WORD >50 ; 2 - HE NAILED HIM .WORD >43 ; 3 - WHAT A HIT .WORD >3E ; 4 - OUCH, THAT HURT .WORD >40 ; 5 - THAT WAS INTENSE .WORD >41 ; 6 - DEVASTATING .WORD >43 ; 7 - WHAT A HIT .WORD >52 ; 8 - I LOVE IT .WORD >3E ; 9 - OUCH, THAT HURT * * PLAYER TABLE O COMMENTS * PLCOMT .WORD >2F ; 1 - I'M GONNA KICK YER ASS .WORD >31 ; 2 - YOU SON OF A BITCH .WORD >32 ; 3 - YER DEAD BUDDY .WORD >33 ; 4 - YOU SUCK .WORD >46 ; 5 - YOU MOTHER ****** .WORD >47 ; 6 - HOW'D THAT FEEL PUNK ? .WORD >4A ; 7 - YOU MINE SUCKA .WORD >46 ; 8 - YOU MOTHER ****** .WORD >46 ; 9 - YOU MOTHER ****** ************************************************************************** * * * PREPARE FOR KICKOFF MESSAGE * * * ************************************************************************** KICKPREP MOVE @T0TEAM,A0,W MOVI >30,A5 MOVI >50,A6 MOVI INSOBJ3,A10 ; ROUTINE TO CALL CALLR DO_A_LOGO MOVE @T1TEAM,A0,W MOVI >E0,A5 MOVI >50,A6 MOVI INSOBJ3,A10 ; ROUTINE TO CALL CALLR DO_A_LOGO MOVI >1F,A0 MOVE @OFFENSE,A1,W JREQ KIKP2 MOVI >1E,A0 KIKP2 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS MOVE @SUDDEATH,A0,W JREQ KIKP3 ; SUDDEN DEATH ---> TENSE TOON ! MOVI >D2,A3 CALLA SEND_CODE_A3 KIKP3 SLEEP >80 JRUC FX_EXIT DO_A_LOGO MOVI LOGO_INIT,A14 CALLA INITOBJ MOVE A5,*A8(OXPOS),W ; SET X MOVE A6,*A8(OYPOS),W ; SET Y SLL 5,A0 ADDI TEAM_LOGOS,A0 MOVE *A0,A1,L MOVE *A1(32*3),A0,L CALLA GETFPAL MOVE A0,*A8(OPAL),W ; DO THE PALETTE CALLA ANI ; SHAPE TEAM 0 LOGO MOVE A8,A0 JUMP A10 ************************************************************************** * * * GAME OVER EFFECT * * * ************************************************************************** FX_GOVER MOVI RGB_GO_GREY,A0 MOVE A0,@IRQSKYE,W ; BACKGROUND COLOR MOVE @GSTATE,A1,W PUSH A1 MOVI GS_EOQMSG,A0 MOVE A0,@GSTATE,W ; TRICK "GAME_OVER_SCREEN" FOR A SEC CALLR GAME_OVER_SCREEN PULL A1 MOVE A1,@GSTATE,W ; NO MORE NEED FOR THIS TRECHERY !! CREATE PID_FX,GOVER_CRED ; SOMEONE TO SHOW CREDITS MOVI >C,A0 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS * * SHOW WINNER (IF ANY) * MOVE @T0TEAM,A2,W ; A2 = WINNING TEAM ! MOVE @T0SCORE,A0,W MOVE @T1SCORE,A1,W CMP A1,A0 JREQ GOVER5 ; TIE SCORE ---> NO WINNER JRHI GOVER2 MOVE @T1TEAM,A2,W ; WINNING TEAM GOVER2 MOVI T0LOGO_INIT,A14 CALLA INITOBJ MOVE A2,A1 CALLA GET_LOGO MOVE *A1(16*6),A0,L CALLA GETFPAL MOVE A0,*A8(OPAL),W ; TEAMS PALETTE CALLA ANI MOVI >88,A0 MOVE A0,*A8(OXPOS),W MOVI >60,A0 MOVE A0,*A8(OYPOS),W ; POSITION LOGO AT "CENTER SCREEN" MOVE A8,A0 CALLA INSOBJ2 MOVI WINS_IMAGES,A7 CLR A9 MOVK 4,A3 MOVI WINSLET_INIT,A14 CALLR TDOWN1 ; "WINS" * * GET DOWN DAN !! * GOVER5 CLR A3 CALLA SEND_CODE_A3 MOVI >C2,A3 CALLA SEND_CODE_A3 ; GAME OVER INTRO SLEEP >40*14 MOVI >C6,A3 CALLA SEND_CODE_A3 ; GAME OVER TUNE SLEEP >40*30 BSOUND >15 ; START FADING MUSIC AWAY SLEEP >40*15 MOVI OBJLST,A2 CALLA DELOLIST ; EMPTY THE LIST MOVI OBJLST2,A2 CALLA DELOLIST ; EMPTY THE LIST JRUC FX_EXIT WINS_IMAGES .LONG HUGE_S .LONG HUGE_N .LONG HUGE_I .LONG HUGE_W WINSLET_INIT .LONG HUGE_T,letblu .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >90,>82,0 *************************************** GOVER_CRED CALLA CRED_P ; ANY CREDITS ? JRNE GOCRED3 ; YES, DISPLAY 'EM SLOOP 8,GOVER_CRED ; NO, WAIT GOCRED3 MOVI OBJLST3,A2 CALLA DELOLIST ; EMPTY THE LIST GOCRED5 CALLA GET_CREDITS MOVE A0,A10 CALLA GETCBOX ; GET "CREDIT:" OBJECTS MOVE A5,A4 GOCRED7 MOVE *A4(OYPOS),A0,W ADDI >58,A0 MOVE A0,*A4(OYPOS),W ; SPECIAL CASE: LOWER THAN NORMAL MOVE *A4(OLINK),A4,L JRNE GOCRED7 MOVI OBJLST3,A2 CALLA DELOLIST ; EMPTY THE OLD LIST CALLA A5A6OL3 ; PUT ON LIST GOCRED8 SLEEP 3 CALLA GET_CREDITS CMP A0,A10 JRNE GOCRED5 JRUC GOCRED8 T0LOGO_INIT .LONG LA,0 .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >40,1,0 T1LOGO_INIT .LONG LA,0 .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >D3,1,0 GAME_OVER_SCREEN MOVK 3,A0 CALLA GETBLIMP ; GAME OVER SCREEN MOVE @T0SCORE,A1,W MOVK 9,A11 ; X COORDINATE FOR DIGIT MOVK 6,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE CALLR A9A10_OBJLST2 MOVE @T1SCORE,A1,W MOVI >151,A11 MOVK 6,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE CALLR A9A10_OBJLST2 CALLA A5A6OL1 ; ADD TO "OBJLST1" MOVI T0LOGO_INIT,A14 CALLA INITOBJ MOVE @T0TEAM,A1,W CALLA GET_LOGO MOVE *A1(16*6),A0,L CALLA GETFPAL MOVE A0,*A8(OPAL),W ; TEAMS PALETTE CALLA ANI MOVE A8,A0 CALLA INSOBJ MOVI T1LOGO_INIT,A14 CALLA INITOBJ MOVE @T1TEAM,A1,W CALLA GET_LOGO MOVE *A1(16*6),A0,L CALLA GETFPAL MOVE A0,*A8(OPAL),W ; TEAMS PALETTE CALLA ANI MOVE A8,A0 CALLA INSOBJ MOVE @OBJLST2,A5,L MOVE A5,A2 GOV2 MOVE A2,A6 MOVE *A6(OLINK),A2,L JRNE GOV2 ; A5 ---> A6 = LIST #2 MOVI INSOBJ2A8,A11 ; A11 = INSERT ROUTINE CALLA PTIMERS MOVE @OBJLST2,A5,L MOVE A5,A2 GOV3 MOVE A2,A6 MOVE *A6(OLINK),A2,L JRNE GOV3 ; A5 ---> A6 = LIST #2 CALLA DO_CLOCK ; CLOCK !! CALLA SHOW_QUARTER CALLA BALL_ON_THE CALLA MINIPRNT RETS ************************************************************************** * * * END OF QUARTER * * * * End of quarter message / effect. * * * ************************************************************************** EOQ_MSG ; MOVI RGB_GO_GREY,A0 CLR A0 MOVE A0,@IRQSKYE,W ; BACKGROUND COLOR CALLA NOSOUNDS CLR A0 MOVE A0,@BAKLST,L CALLA BAKCLR MOVI MASSIVE_CROWD,A0 MOVE A0,@BAKMODS,L CLR A0 MOVE A0,@WORLDTLX,L MOVE A0,@WORLDTLY,L MOVI >10000,A0 MOVE A0,@SCROLLX,L ; LIL SCROLL ACTION CREATE PID_FX,CBACK MOVI >1C,A0 ; END OF 1ST MOVE @QUARTER,A1,W CMPI 4,A1 JRNE EOQQ2 MOVI >0D,A0 ; END OF 3RD EOQQ2 MOVI FXLET_INIT,A14 CALLA PRINT_OBJ ; TEXT = A4 --> A7 MOVE @OBJLST2,A0,L MOVE A0,*A7(OLINK),L ; LAST CHAR ----> OBJLST2 MOVE A4,@OBJLST2,L ; OBJLST2 ---> 1ST CHAR MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS MOVK 1,A0 CALLA GETBLIMP ; A5 = MENU MODULE OBJECT LIST CALLA A5A6OL1 ; ADD TO "OBJLST1" MOVI BIG_BLACK_INIT,A14 CALLA INITOBJ MOVI >F0,A0 MOVE A0,*A8(OSIZEX),W MOVI >38,A0 MOVE A0,*A8(OSIZEY),W MOVI BPAL_BLK,A0 MOVE A0,*A8(OCONST),W ; BLACK MOVE A8,A0 CALLA INSOBJ * * TEAM LOGOS * MOVE @T0TEAM,A0,W MOVI >48,A5 MOVK 3,A6 MOVI INSOBJ,A10 ; ROUTINE TO CALL CALLR DO_A_LOGO MOVE @T1TEAM,A0,W MOVI >CE,A5 MOVK 3,A6 MOVI INSOBJ,A10 ; ROUTINE TO CALL CALLR DO_A_LOGO MOVI VERSUS_INIT,A14 CALLA INITINS ; VERSUS * * TEAM SCORES * MOVE @T0SCORE,A1,W MOVI >0F,A11 ; X COORDINATE FOR DIGIT MOVK 6,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE CALLR A9A10_OBJLST2 MOVE @T1SCORE,A1,W MOVI >14C,A11 ; FALL THROUGH TO "MAKE_2_DIGITS" MOVK 6,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE CALLR A9A10_OBJLST2 * * SHOW EACH PLAYERS TIMERS * MOVK 5,A0 CALLA GETBLIMP ; BUYIN BOXES CALLA A5A6OL2 ; ADD TO "OBJLST2" MOVE @OBJLST2,A5,L MOVE A5,A2 EOQQ3 MOVE A2,A6 MOVE *A6(OLINK),A2,L JRNE EOQQ3 ; A5 ---> A6 = LIST #2 MOVI INSOBJ2A8,A11 ; A11 = INSERT ROUTINE CALLA PTIMERS MOVI >0C,A3 CALLA SEND_CODE_A3 CREATE PID_FX,EOQ_LOF SLEEP 8 BSOUND >23 ; BIG CROWD ROAR SLEEP >E0-8 MOVI RGB_BLACK,A0 MOVE A0,@IRQSKYE,W ; BACKGROUND COLOR JRUC FX_EXIT EOQ_LOF MOVI LOF_1,A11 MOVI INSOBJ2,A10 MOVK 8,A0 MOVE A0,*A13(P_ANIRATE),W MOVI >C0,A0 MOVE A0,*A13(PLGOX),W MOVI >91,A0 MOVE A0,*A13(PLGOZ),W CLR A0 MOVE A0,*A13(P_FACE),W ; ASSURE NO FLIPPED IMAGE JAUC MANISET LOF_1 .LONG markfan1,markfan2,0,ANI_LOOP .LONG mltarm1,mltarm2,0,ANI_LOOP .LONG mrtarm1,mrtarm2,0,ANI_LOOP .LONG mwere1,0,ANI_END .LONG >FFFFFFFF QNUM_INIT .LONG num0,frame .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD >BC,>60,1 BIG_BLACK_INIT .LONG num0,boonpal .WORD 0,DMACAL|M_NOSCROLL,OID_FX .WORD 78,37,0 * * CROWD BACKGROUND PROCESS * CBACK CALLA BGND_UD1 MOVE @BAKLST,A8,L ; A8 = BACKGROUND LIST JREQ BACK8 ; EMPTY = SPLIT BACK3 MOVE *A8(OZVAL),A1,L CMPI CROWD_Z,A1 ; CROWD BLOCK ? JRGT BACK8 ; NOPE MOVI CROWD_FRAMES,A2 ; ASSUME "BIG" CROWD BLOCK SUBI STRIP_Z,A1 JRNE BACK5 ; BIG BLOCK = YES MOVI STRIP_FRAMES,A2 ; NO, USE "STRIP" FRAMES BACK5 MOVE *A8(OCOLLIDE),A0,W ; HAVE WE ANIMATED THIS ONE ?? INC A0 ; NEXT FRAME CMPI 4,A0 ; END OF LIST ? JRLT BACK4 ; NOPE.... CLR A0 ; YES ---> BACK TO BEGINNING BACK4 MOVE A0,*A8(OCOLLIDE),W SLL 5,A0 ADD A2,A0 MOVE *A0,A1,L ; A1 = NEW IMAGE MOVE A1,*A8(OIMG),L MOVE *A8(OFLAGS),A4,W MOVE *A8(OXVAL),A0,L MOVE *A8(OYVAL),A2,L ; SAVE THIS CALLA ANI0 MOVE A0,*A8(OXVAL),L MOVE A2,*A8(OYVAL),L ; RESTORE THIS MOVE *A8(OLINK),A8,L JRNE BACK3 BACK8 SLEEP 5 ; USED TO BE 10 JRUC CBACK MASSIVE_CROWD .LONG EOQCRBMOD .WORD 0,>30 .LONG >FFFFFFFF ************************************************************************** * * * FX_INTER * * * * Interception effect * * * ************************************************************************** FX_INTER CALLA KILLFX MOVI >23,A0 CALLR FX_SHADOW_PRINT ; MOVI INTLET_INIT,A14 ; CALLR SHADOW_2 ; PRINT: "INTERCEPTION" MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS MOVE A0,A11 BSOUND >35 ; SPEECH: INTERCEPTION SLEEP >C0 MOVE @ACTIVE,A0,L FXINT1 CMP A0,A11 ; MAKE SURE RGBSTUFF IS STILL ALIVE JREQ FXINT2 MOVE *A0(PLINK),A0,L JRNE FXINT1 JRUC FXINT3 FXINT2 CALLA KILL ; KILL RGBSTUFF IF STILL ALIVE FXINT3 DIE ;INTLET_INIT ; .LONG DUMB_IMG,boonpal ; .WORD 0,DMACNZ|M_NOSCROLL,OID_FX2 ; .WORD 0,0,0 ************************************************************************** * * * PLAY RESULT EFFECT * * * ************************************************************************** FX_PLAYRES CLR A6 ; ASSUME "NO EXTRA EFFECT" MOVE @PPEFFECT,A7,L ; POST PLAY EFFECT REQUEST ?? JREQ PLRES2 ; NOPE... INC A6 ; SIGNAL ---> "ANOTHER EFFECT RUNNING" MOVI OID_FX2,A1 CALLA GETPRC ; YES, CREATE A PROCESS PLRES2 MOVE A6,*A13(P_GCOUNT),W CALLA UNCLIP MOVE A10,A10 ; 1ST DOWN ? JREQ NO1ST ; NO... * * FIRST DOWN !! * CLR A0 MOVE A0,*A13(P_GCOUNT),W ; CANCELL OTHER FX CALLA KILLFX PUSH A11 MOVI >1B,A0 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS PULL A11 CMPI PIX_PER_YARD*25,A11 ; MAJOR YARDAGE ??? JRGT FX_WHADDA_1ST ; YES MOVE @OFFENSE,A1,W JREQ PLRES3 MOVI MA_FIRST1_DOWN,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANIF ; DO THE WINDOW !! JRUC PLRES4 PLRES3 MOVI MA_FIRST0_DOWN,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; DO THE WINDOW !! PLRES4 MOVE A0,A11 ; SAVE PROC SLEEP >28 BSOUND >3A ; SPEECH: "FIRST DOWN" SLEEP >90->28 MOVE *A11(P_PREY),A8,L MOVI >00020002,A11 JSRP SHRINK_WIN JRUC FX_EXIT * * NO FIRST DOWN * NO1ST MOVE *A13(P_ANIRATE),A0,W ; A0 = DOWN # (IT WAS) CMPI 4,A0 JREQ FX_DIE ; 4TH DOWN ---> DONT SHOW YARDS LOST MOVE @LASTLOS,A0,W ; LAST PLAY'S LINE OF SCRIMMAGE MOVE @LINEOFSC,A1,W ; CURRENT LINE OF SCRIMMAGE MOVE A1,A3 MOVE *A13(P_TURBO),A4,W ; TEAM ON OFFENSE ? JREQ NO1ST1 ; ZERO SUB A1,A0 ; TEAM1 MOVE A0,A1 ; A1 = DISTANCE JRUC NO1ST3 ; LOOK AT THE DISTANCE NO1ST1 SUB A0,A1 ; A1 = DISTANCE NO1ST3 MOVE A1,A1 JRN YARDS_LOST ; NEGATIVE = YARDS LOST MOVI >2B,A0 MOVK 9,A11 ; USE THIS RGBSTUFF JRUC YARDALL ; YARD GAIN YARDS_LOST MOVI >2A,A0 ; YARD LOSS ABS A1 MOVK 8,A11 ; USE THIS RGBSTUFF YARDALL MOVK PIX_PER_YARD,A2 DIVS A2,A1 ; TRANSLATE TO YARDS JREQ NOYARDS ; NO YARDAGE MESSAGE PUSH A1 MOVI FXLET_INIT,A14 PUSH A14 CALLA PRINT_OBJ ; TEXT = A4 --> A7 PULL A14 MOVE A4,A5 ; A5 = BEGINNING OF LIST PULL A1 MOVI FXLET_INIT,A14 CALLA SPLIT_A1 ; A1 / A3 SWAP A1,A3 CALLR PRNT_1DIG MOVE *A8(OXPOS),A0,W SUBK 6,A0 MOVE A0,*A8(OXPOS),W ; WORD SPACING MOVE A3,A1 ; TENS JREQ YLOST3 ; ZERO ---> SKIP MOVI FXLET_INIT,A14 CALLR PRNT_1DIG YLOST3 MOVI 00020002H,A6 CALLA SHADOW_PRINT MOVE @OBJLST2,A0,L MOVE A0,*A7(OLINK),L ; LAST CHAR ----> OBJLST2 MOVE A5,@OBJLST2,L ; OBJLST2 ---> 1ST CHAR CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS (A11 IS DEFINED) MOVE A0,A10 ; REMEMBER THIS PROC SLEEP >24 MOVE A10,A0 CALLA KILL ; STOP "RGBSTUFF" PROC SLEEP >A0 JRUC PLAYRES_EXIT NOYARDS MOVE @PLAYRES,A0,W CMPI PR_INCOMPLETE,A0 JREQ INCOM_PLAYRES ; INCOMPLETE PASS MOVI >2C,A0 ; YARD LOSS MOVI FXLET_INIT,A14 CALLA PRINT_OBJ ; TEXT = A4 --> A7 MOVE A4,A5 MOVI 00020002H,A6 CALLA SHADOW_PRINT MOVE @OBJLST2,A0,L MOVE A0,*A7(OLINK),L ; LAST CHAR ----> OBJLST2 MOVE A5,@OBJLST2,L ; OBJLST2 ---> 1ST CHAR SLEEP >60 JRUC PLAYRES_EXIT * * INCOMPLETE PASS * INCOM_PLAYRES MOVE @BALLCAR,A0,L ; BALL CARRIER ? JREQ INCOM2 ; NOPE... CALLA BOUNDS_A0 ; CHECK BOUND CONDITIONS CMPI 1,A1 JRNE INCOM2 CREATE PID_FX,FX_CAUGHTOOB ; BALL CAUGHT OUT OF BOUNDS JRUC INCOM3 INCOM2 CREATE PID_FX,FX_INCOM INCOM3 SLEEP >80 * * PLAY RESULT EFFECT EXIT * PLAYRES_EXIT CLR A1 NOT A1 MOVI PID_FX,A0 CALLA EXISTP JRNE PRESEX2 CLR A1 NOT A1 MOVI PID_FX2,A0 CALLA EXISTP JREQ FX_EXIT ; NO OTHER FX ---> EXIT PRESEX2 ; MOVE *A13(P_GCOUNT),A6,W ; ANOTHER DUDE RUNNING ?? ; JREQ FX_EXIT ; NOPE... ; JSRP WAITFX ; YES --> LET HIM GO SLEEP >F0 ; YES ---> LET HIM END THE EFFECT JRUC FX_EXIT ; UNLESS HE'S A PIG PRNT_1DIG PUSH A14 SLL 5,A1 ADDI FONT15_NUMS,A1 MOVE *A1,A1,L ; A1 = IMG PUSH A1 CALLA INITOBJ ; GET AN OBJECT FOR THIS CHARACTER PULL A1 CALLA ANI ; GIVE DIGIT A SHAPE !! MOVE *A7(OCONST),*A8(OCONST),W ; SAME COLOR MOVE *A7(OZPOS),*A8(OZPOS),W MOVE *A7(OYPOS),*A8(OYPOS),W MOVE *A7(OXPOS),A0,W MOVE *A8(OSIZEX),A1,W SUB A1,A0 ; SIZE OF # SUBK 3,A0 ; PLUS LETTER SPACING MOVE A0,*A8(OXPOS),W CLR A0 MOVE A0,*A8(OLINK),L ; A8 = NEW END OF LIST MOVE A8,*A7(OLINK),L MOVE A8,A7 PULL A14 RETS ************************************************************************** * * * WHAT A PLAY / FIRST DOWN EFFECT * * * ************************************************************************** FX_WHADDA_1ST MOVE @OFFENSE,A1,W JREQ WHADDA3 MOVI MA_FIRST1_DOWN,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANIF ; DO THE WINDOW !! JRUC WHADDA4 WHADDA3 MOVI MA_FIRST0_DOWN,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; REF: 1ST DOWN WINDOW WHADDA4 MOVI MA_WHADDAL,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; ANNOUNCER: WHAT A PLAY !! MOVE A0,A9 ; A9 = ANI PROC CALLR HIDELIST3 SLEEP 1 ; TIME FOR IT TO INITIALIZE MOVE *A9(P_PREY),A8,L ; A8 = BACKDROP OBJ MOVI >00020002,A11 MOVI >00250025,A10 ; A10 = INITIAL CLIPPING JSRP GROW_WINDOW BSOUND >48 ; SPEECH: "WHAT A PLAY !!!" SLEEP >80 JRUC SHRINK_THEN_DIE ****************************************************************** FX_SHADOW_PRINT MOVI FXLET_INIT,A14 SHADOW_2 PUSH A14 CALLA PRINT_OBJ ; TEXT = A4 --> A7 PULL A14 MOVE A4,A5 MOVI 00020002H,A6 CALLA SHADOW_PRINT MOVE @OBJLST2,A0,L MOVE A0,*A7(OLINK),L ; LAST CHAR ----> OBJLST2 MOVE A5,@OBJLST2,L ; OBJLST2 ---> 1ST CHAR RETS FXLET_INIT .LONG DUMB_IMG,boonpal .WORD 0,DMACNZ|M_NOSCROLL,OID_FX .WORD 0,0,0 FX_GAME_INTRO MOVK 5,A0 CALLA GETBLIMP ; BUYIN BOXES CALLA A5A6OL1 ; ADD TO "OBJLST1" * * DO EACH PLAYERS "GAME TIMER" * MOVE @OBJLST,A5,L MOVE A5,A2 GINT1 MOVE A2,A6 MOVE *A6(OLINK),A2,L JRNE GINT1 ; A5 ---> A6 = LIST #2 MOVI INSOBJA8,A11 ; A11 = INSERT ROUTINE CALLA PTIMERS CREATE PID_FX,BACKGROUND ; START BACKGROUND UPDATE DUDE CREATE PID_FX,MIDDLE_OPEN CLR A0 MOVE A0,@SCRNTL,L MOVE A0,@SCRNLR,L ; START WITH NOTHING SHOWING MOVI TOP_SIDELINE->D0,A0 MOVE A0,@WORLDTLY+16,W ; CENTER SCREEN MOVI LGOAL_OUT_X->A0,A0 MOVE A0,@WORLDTLX+16,W SLEEP 1 ; GIVE BACKGROUND A CHANCE MOVK 1,A3 CALLA SEND_CODE_A3 ; START THE MAIN TUNE MOVI >30000,A0 MOVE A0,@SCROLLX,L ; PAN ACROSS THE FIELD SLEEP >24 CREATE PID_FX,WINDOW_SHOWOFF MOVI >59,A3 CALLA SEND_CODE_A3 ; "WANNA KICK SOME BUTT ?" SLEEP >40 BSOUND >23 ; ROAR !!! SLEEP >70 BSOUND >1F ; I CANT HEAR U SLEEP >80 MOVK 2,A0 CALLA GETBLIMP ; GET LOGOPAGE MOVI >28000,A4 MOVE A5,A7 GINT2 MOVE *A7(OXPOS),A3,W SUBI >170,A3 MOVE A3,*A7(OXPOS),W ; START OFFSCREEN MOVE A4,*A7(OXVEL),L MOVE *A7(OLINK),A7,L JRNE GINT2 CALLA A5A6OL1 SLEEP >40 MOVI >5A,A3 CALLA SEND_CODE_A3 ; "ITS HIGH IMPACT" SLEEP >53 MOVK 1,A0 MOVE A0,@NO_VEL,W CLR A1 MOVE @OBJLST,A0,L GINT8 MOVE A1,*A0(OXVEL),L MOVE *A0(OLINK),A0,L ; STOP LOGO OBJECTS JRNE GINT8 MOVE A1,@NO_VEL,W ; ALLOW VELOCITIES AGAIN MOVI FADE_NOLOGO,A0 CALLA FADEOUT SLEEP >8 CLR A0 MOVE A0,@SCROLLX,L SLEEP >10 CREATE PID_FX,STARS1 MOVE A0,A11 SLEEP >20 MOVE A11,A0 CALLA KILL ; KILL LINE SPAWNER MOVI PID_FX2,A0 CALLA DALLPRC ; AND ANY REMAINING LINES SLEEP >30 MOVI PID_FX,A0 CALLA DALLPRC MOVI PID_FX2,A0 CALLA DALLPRC ; DELETE FX PROCESSES MOVI BAKLST,A2 CALLA DELOLIST ; NO MORE NEED FOR BACKGROUND MOVI FADE_NOBUY,A0 CALLA FADEOUT SLEEP >10 MOVI OID_FX,A0 CALLA DALLOBJ * * BRING ON THE TEAMS !! * MOVI LOGORAND,A9,L GINT19 MOVE *A9+,A11,W JRN GINT20 ; END OF LIST ----> DONE CREATE PID_FX,LOGO_FLY SLEEP 6 JRUC GINT19 GINT20 MOVK 4,A0 CALLA GETBLIMP ; "SELECT TEAM" MESSAGE CALLA A5A6OL1 MOVI PID_FX,A0 CALLA DALLPRC MOVI PID_FX2,A0 CALLA DALLPRC ; KILL ALL FX PROCS DIE LOGORAND .WORD 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 .WORD >FFFF LOGO_FLY MOVE A11,A0 MOVE A0,A1 SLL 5,A1 ADDI LOGO_COOR,A1 MOVE *A1+,A5,W MOVE *A1+,A6,W MOVI INSOBJ,A10 CALLA DO_A_LOGO DIE LOGO_COOR .WORD LOGO1_X,LOGO1_Y .WORD LOGO1_X,LOGO1_Y+35 .WORD LOGO1_X,LOGO1_Y+35*2 .WORD LOGO1_X,LOGO1_Y+35*3 .WORD LOGO1_X,LOGO1_Y+35*4 .WORD LOGO1_X+>80,LOGO1_Y .WORD LOGO1_X+>80,LOGO1_Y+35 .WORD LOGO1_X+>80,LOGO1_Y+35*2 .WORD LOGO1_X+>80,LOGO1_Y+35*3 .WORD LOGO1_X+>80,LOGO1_Y+35*4 .WORD LOGO1_X+>100,LOGO1_Y .WORD LOGO1_X+>100,LOGO1_Y+35 .WORD LOGO1_X+>100,LOGO1_Y+35*2 .WORD LOGO1_X+>100,LOGO1_Y+35*3 .WORD LOGO1_X+>100,LOGO1_Y+35*4 FADE_NOLOGO .LONG WILLYPAL,logopal,MENUPAL1,boonpal,0 FADE_NOBUY .LONG MENUPAL1,boonpal,0 * * STARS * STARS1 MOVI STAR_COORDS,A4 GINT4 MOVE *A4+,A9,W JREQ GINT5 MOVE *A4+,A10,W SUBI STAR_Z,A10 ; COMPENSATE FOR Z !! MOVE *A4+,A11,L CREATE PID_FX2,LINE_O_STARS JRUC GINT4 GINT5 JAUC WAIT_FOREVER ************************************************************************** * * * WINDOW_SHOWOFF * * * * This is the process which spawns the moving windows during the * * game intro sequence. * * * ************************************************************************** WINDOW_SHOWOFF MOVI INTRO_WINDOWS,A8 WINS1 MOVE *A8,A11,L MOVI INSOBJ2,A10 CREATE PID_FX,MULTIANI MOVE A0,A11 CREATE PID_FX,WINDOW_KILLER SLEEP 1 ; TIME FOR LIST TO BE RUN MOVE @OBJLST2,A3,L CLR A0 MOVE A0,@OBJLST2,L MOVI >28000,A2 MOVE A3,A4 WINS2 ; MOVE *A4(OID),A0,W ; CMPI OID_FX,A0 ; JRNE WINS3 ; DONT TOUCH "NON F/X" OBJECTS MOVE A2,*A4(OXVEL),L WINS3 MOVE A4,A5 MOVE *A4(OLINK),A4,L ; GIVE ALL OBJECTS THE SAME VELOCITY JRNE WINS2 * * TACK ONTO LIST #1 * MOVE @OBJLST,A0,L MOVE A0,*A5(OLINK),L ; ADD TO TOP OF LIST #1 MOVE A3,@OBJLST,L SLEEP >40 ADDI 32,A8 CMPI INTRO_END,A8 JRNE WINS1 DIE INTRO_WINDOWS .LONG MA_INTCHEER .LONG MA_INTREFTD .LONG MA_CANT_HEAR .LONG MA_INTYEA .LONG MA_INTFD INTRO_END WINDOW_KILLER SLEEP 10 MOVE *A11(P_PREY),A8,L ; RIGHT SIDE IMAGE ; MOVE *A0(OSLINK),A8,L ; LEFT SIDE IMAGE MOVE *A8(OXPOS),A2,W CMPI SCRRGT,A2 ; ON SCREEN ? JRLT WINDOW_KILLER ; NO ---> WAIT MOVE *A11(P_PREY),A0,L ; RIGHT SIDE MOVE *A0(OSLINK),A1,L ; LEFT SIDE CALLA DELOBJP ; DELETE RIGHT SIDE MOVE A1,A0 CALLA DELOBJP ; DELETE LEFT SIDE MOVE *A11(P_SWITCH),A0,L WKILL3 CALLA DELOBJP MOVE *A0(OSLINK),A0,L JRNE WKILL3 ; KILL LINKED PARTS MOVE A11,A0 CALLA KILL ; KILL "MULTIANI" PROC DIE ************************************************************************** * * * MIDDLE_OPEN * * * * Television "reveal" effect from the middle of the screen outwards. * * * ************************************************************************** MIDDLE_OPEN ; MOVI WBAR_INIT,A14 ; CALLA INITOBJ ; MOVI BPAL_YEL,A0 ; MOVE A0,*A8(OCONST),W ; MOVE A8,A0 ; CALLA INSOBJ2 MOVI SCRNMID,A0 MOVE A0,@SCRNTL,L MOVE A0,@SCRNLR,L ; START FROM THE MIDDLE MOPEN1 SLEEP 1 CLR A3 MOVE @SCRNTL,A0,L SUBI >00020003,A0 MOVE @SCRNLR,A1,L ADDI >00020003,A1 CMPXY A3,A0 JRYGE MOPEN3 SLL 16,A0 SRL 16,A0 ; KEEP Y POSITIVE MOPEN3 CMPXY A3,A0 JRXGE MOPEN4 SRL 16,A0 SLL 16,A0 ; KEEP X POSITIVE MOPEN4 MOVI SCRNEND,A3 CMPXY A3,A1 JRYLE MOPEN5 MOVY A3,A1 MOPEN5 CMPXY A3,A1 JRXLE MOPEN6 MOVX A3,A1 MOPEN6 MOVE A0,@SCRNTL,L MOVE A1,@SCRNLR,L MOVE A0,A0 JRNE MOPEN1 MOVI SCRNST,A0 MOVE A0,@SCRNTL,L MOVI SCRNEND,A0 MOVE A0,@SCRNLR,L ; UNCLIP DIE ;WBAR_INIT ; .LONG DUMB_IMG,boonpal ; .WORD 0,DMACAL|M_NOSCROLL,OID_FX ; .WORD 0,0,0 STAR_COORDS .WORD >70,78H .LONG STW_PAL .WORD >A0,78H .LONG STR_PAL .WORD >B3,78H .LONG STW_PAL .WORD >BC,78H .LONG STB_PAL ; .WORD >C3,78H .WORD 0 LINE_O_STARS CREATE PID_FX,STAR_PROC ; QUADRANT #1 PUSH A9 MOVI SCRRGT/2,A0 SUB A9,A0 ADDI SCRRGT/2,A0 MOVE A0,A9 CREATE PID_FX,STAR_PROC ; QUADRANT #2 PULL A9 PUSH A10 MOVI SCRBOT/2,A0 SUB A10,A0 ADDI SCRBOT/2,A0 MOVE A0,A10 CREATE PID_FX,STAR_PROC ; QUADRANT #4 PULL A10 MMTM SP,A9,A10 MOVI SCRRGT/2,A0 SUB A9,A0 ADDI SCRRGT/2,A0 MOVE A0,A9 MOVI SCRBOT/2,A0 SUB A10,A0 ADDI SCRBOT/2,A0 MOVE A0,A10 CREATE PID_FX,STAR_PROC ; QUADRANT #3 MMFM SP,A9,A10 SLEEP 10 JRUC LINE_O_STARS STAR_PROC MOVI STAR_INIT,A14 CALLA INITOBJ MOVE A11,A0 CALLA SWPAL MOVE A9,*A8(OXPOS),W MOVE A10,*A8(OYPOS),W MOVI (SCRRGT/2)*10000H,A0 ; SCREEN X MIDPOINT MOVI (SCRBOT/2)*10000H,A2 ; SCREEN Y MIDPOINT MOVE *A8(OXVAL),A1,L MOVE *A8(OYVAL),A3,L SUB A0,A1 SUB A2,A3 ; GET X/Y RATIOS MOVE A1,A0 MOVE A3,A2 ABS A0 ABS A2 ADD A2,A0 ; A0 = ABS(X) + ABS(Z) SRL 16,A0 ; IN LOWER WORD DIVS A0,A1 ; A1 = X / X+Z DIVS A0,A3 ; A3 = Z / X+Z MOVK 5,A0 MPYS A0,A1 MPYS A0,A3 MOVE A1,*A8(OXVEL),L MOVE A3,*A8(OYVEL),L MOVE A8,A0 CALLA INSOBJ MOVI A_STARSP,A9 MOVK 3,A0 JSRP FRAMEW SLEEP 20H MOVE A8,A0 CALLA DELOBJP ; DELETE OBJECT AND PALETTE FX_DIE DIE ;DELAYED_TUNE ; SLEEP 29H ; BSOUND 1 ; DIE STAR_Z .SET 10 STAR_INIT .LONG STR1,STW_PAL .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD 0,0,0 ;STAR_Z ************************************************************************** * * * INCOMPLETE PASS EFFECT * * * ************************************************************************** FX_INCOM CALLA UNCLIP MOVI MA_INCOMPLETE,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI MOVE A0,A11 ; SAVE PROC BSOUND >54 ; INCOMPLETE MOVI >27,A0 CALLA FX_SHADOW_PRINT ; PRINT: "INCOMPLETE PASS" SLEEP >60 MOVE *A11(P_PREY),A8,L MOVI >00020002,A11 JSRP SHRINK_WIN JRUC FX_EXIT ************************************************************************** * * * BALL CAUGHT OUT OF BOUNDS EFFECT * * * ************************************************************************** FX_CAUGHTOOB MOVI >31,A0 CALLA FX_SHADOW_PRINT MOVI >26,A0 CALLA FX_SHADOW_PRINT MOVK 4,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS BSOUND >55 ; SPEECH: OUT OF BOUNDS SLEEP >70 JRUC FX_EXIT ************************************************************************** * * * NO GOOD REFEREE EFFECT * * * ************************************************************************** FX_NOGOOD CALLA UNCLIP MOVI MA_NOGOOD,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI MOVE A0,A11 ; SAVE PROC BSOUND >44 ; NO GOOD !! SLEEP >D0 MOVE *A11(P_PREY),A8,L MOVI >00020002,A11 JSRP SHRINK_WIN JRUC FX_EXIT ************************************************************************** * * * FIELD GOAL NO GOOD EFFECT * * * ************************************************************************** FX_FGN MOVI P1STAT,A1 MOVI P3STAT,A2 MOVE A10,A10 JREQ FGN2 ; TEAM 0 MISSED MOVI P3STAT,A1 MOVI P1STAT,A2 FGN2 MOVE *A1,A0,L JREQ FGN_CHEER ; DRONE TEAM MISSED ---> CHEER MOVE *A2,A0,L JREQ FGN_BOO ; HUMAN MISSED (VS DRONE) ---> BOO FGN_CHEER PUSH A10 MOVI MA_FGN0,A11 MOVE A10,A10 JREQ FGN3 MOVI MA_FGN1,A11 ; TEAM 1 FUCKED UP FGN3 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI PULL A10 ; REF "NO GOOD" ON DORK SIDE BSOUND >44 ; NO GOOD !! SLEEP >30 MOVI MA_NGCHEER1,A11 MOVE A10,A10 JREQ FGN4 MOVI MA_NGCHEER0,A11 FGN4 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; CHEER ON "COOL" SIDE SLEEP >06 BSOUND >23 ; ROAR !! FGNTO CREATE PID_FX,SHOW_TURNOVER SLEEP >B0 MOVI SCRNST+>32,A0 MOVE A0,@SCRNTL3,L MOVE A0,@SCRNTL2,L MOVI SCRNEND->32,A0 MOVE A0,@SCRNLR3,L MOVE A0,@SCRNLR2,L MOVK 1,A10 MOVK 6,A11 JSRP WIPEOUT32_1 MOVI OBJLST2,A2 CALLA DELOLIST MOVI OBJLST3,A2 CALLA DELOLIST CALLA UNCLIP CALLA KILLFX ; STOP PROCS SLEEP >20 ; PAUSE FOR SMOOTHNESS JRUC FX_EXIT FGN_BOO PUSH A10 MOVI MA_FGN1,A11 MOVE A10,A10 JREQ FGN6 MOVI MA_FGN0,A11 ; TEAM 1 FUCKED UP FGN6 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI PULL A10 ; REF "NO GOOD" ON DORK SIDE BSOUND >44 ; NO GOOD !! SLEEP >30 BSOUND >24 ; SPEECH: BOO !! MOVI MA_FGPU0,A11 MOVE A10,A10 JREQ FGN7 MOVI MA_FGPU1,A11 FGN7 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; BOO JRUC FGNTO ************************************************************************** * * * TOUCHDOWN EFFECT #2 * * * ************************************************************************** TDFX2 BSOUND >27 ; SOUND: WHISTLE / TOUCHDOWN !! MOVI MA_REFTD,A11 MOVI INSOBJ2,A10 CREATE PID_FX,MULTIANI CLR A9 MOVK 9,A11 T2DOWN1 MOVI TDLET_INIT,A14 CALLA INITOBJ MOVE A11,A1 DEC A1 SLL 5,A1 ADDI TD_IMAGES,A1 MOVE *A1,A1,L CALLA ANI ; SHAPE THE LETTER MOVE A9,A9 JREQ T2DOWN2 MOVE *A9(OCOLLIDE),A0,W MOVE *A9(OSIZEX),A1,W ADD A1,A0 DEC A0 MOVE A0,*A8(OXPOS),W T2DOWN2 MOVE A8,A9 MOVE *A8(OXPOS),*A8(OCOLLIDE),W CREATE PID_FX,TD_SLIDE ; MAKE SOMEONE TO SLIDE IT IN SLEEP >6 DSJ A11,T2DOWN1 SLEEP >20 CALLR TD_SCORE_BOXES CALLR TD_SCORES MOVI letblu,A10 MOVI >04060200,A11 CREATE PID_FX,CYCLERF MOVI letblu,A10 MOVI >0A060200,A11 CREATE PID_FX,CYCLERF CALLR PLAY_TD_TUNE SLEEP >70 JRUC FX_EXIT TD_SLIDE MOVE *A8(OXPOS),A11,W MOVE A11,A0 ADDI SCRRGT,A0 MOVE A0,*A8(OXPOS),W MOVE A8,A0 CALLA INSOBJ3 MOVI ->A0000,A0 MOVE A0,*A8(OXVEL),L TDSL2 SLEEP 1 MOVE *A8(OXPOS),A0,W CMP A0,A11 JRLO TDSL2 CLR A0 MOVE A0,*A8(OXVEL),L MOVE A11,*A8(OXPOS),W DIE ************************************************************************** * * * TOUCHDOWN EFFECT #1 * * * ************************************************************************** TDFX1 CREATE PID_FX,TD_SCROLLER CALLA UNCLIP BSOUND >27 ; SOUND: WHISTLE / TOUCHDOWN !! MOVI MA_REFTD,A11 MOVI INSOBJ2,A10 CREATE PID_FX,MULTIANI MOVE @RAND,A0,L JRN FX_TD2 ; BE A BIT RANDOM !!! SLEEP >30 CALLR TD_LETTERS * * CLIP UNMASKING EFFECT * MOVI SCRRGT/2,A10 MOVE A10,A11 TDOWN3 SUBK 12,A10 ADDK 12,A11 MOVE A10,@SCRNTL3,W MOVE A11,@SCRNLR3,W SLEEP 1 CMPI SCRRGT-8,A11 JRLT TDOWN3 CALLA UNCLIP SLEEP >20 CALLR PLAY_TD_TUNE MOVI MA_TDCHEER,A11 MOVI INSOBJ3,A10 CREATE PID_FX,MULTIANI ; CHEERLEADER WINDOW SLEEP >F0 MOVI OID_FX,A0 CALLA DALLOBJ ; KILL ONLY WINDOW OBJECTS MOVI PID_FX,A0 CALLA DALLPRC ; AND THE FUCKING PROC YOU DORK !!! SLEEP >C0 JRUC FX_EXIT ************************************************************************** * * * TOUCHDOWN EFFECT #2 (WITH ANNOUNCER) * * * * ************************************************************************** FX_TD2 MOVI MA_TDANN,A11 MOVI INSOBJ2,A10 CREATE PID_FX,MULTIANI CALLR TD_LETTERS MOVI SCRRGT/2,A10 MOVE A10,A11 TDFX22 SUBK 12,A10 ADDK 12,A11 MOVE A10,@SCRNTL3,W MOVE A11,@SCRNLR3,W SLEEP 1 CMPI SCRRGT-8,A11 JRLT TDFX22 CALLA UNCLIP SLEEP >20 CALLR PLAY_TD_TUNE SLEEP >C0 MOVI OID_FX,A0 CALLA DALLOBJ ; KILL ONLY WINDOW OBJECTS SLEEP >E0 JRUC FX_EXIT * * "TOUCHDOWN" SCROLL TO CROWD * TD_SCROLLER SLEEP >40*2 MOVI FIFTY_YARD-(SCRRGT/2),A1 MOVI >1B8,A3 ; WE WANNA END UP HERE MOVK 4,A4 ; AND TRAVEL THIS FAST JSRP AUTOSCR ; LET THE AUTO SCROLLER HANDLE IT DIE * * SCORE BOXES AND "TOUCHDOWN" LETTERS * TD_LETTERS CALLR TD_SCORE_BOXES CALLR TD_SCORES MOVI TD_IMAGES,A7 CLR A9 MOVK 9,A3 MOVI TDLET_INIT,A14 TDOWN1 PUSH A14 CALLA INITOBJ PULL A14 MOVE A3,A1 DEC A1 SLL 5,A1 ADD A7,A1 MOVE *A1,A1,L CALLA ANI ; SHAPE THE LETTER MOVE A9,A9 JREQ TDOWN2 MOVE *A9(OXPOS),A0,W MOVE *A9(OSIZEX),A1,W ADD A1,A0 DEC A0 MOVE A0,*A8(OXPOS),W TDOWN2 MOVE A8,A9 MOVE A8,A0 CALLA INSOBJ3 DSJ A3,TDOWN1 MOVI letblu,A10 MOVI >04060200,A11 CREATE PID_FX,CYCLERF MOVI letblu,A10 MOVI >0A060200,A11 CREATE PID_FX,CYCLERF RETS * * SCORES * TD_SCORES MOVE @T0SCORE,A1,W MOVI >13,A11 ; X COORDINATE FOR DIGIT MOVI >6C,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE MOVI OID_FX2,A4 MOVE A4,*A9(OID),W MOVE A4,*A10(OID),W ; DONT CONFUSE WITH OID_FX CALLR A9A10_OBJLST3 MOVE @T1SCORE,A1,W MOVI >147,A11 ; FALL THROUGH TO "MAKE_2_DIGITS" MOVI >6C,A3 CALLR TWO_BIG_DIG ; TEAM 0 SCORE MOVI OID_FX2,A4 MOVE A4,*A9(OID),W MOVE A4,*A10(OID),W ; DONT CONFUSE WITH OID_FX CALLR A9A10_OBJLST3 RETS TD_SCORE_BOXES MOVI L_SCOREBOX,A14 CALLA INITOBJ MOVE A8,A0 CALLA INSOBJ3 ; ON LIST #3 MOVE A8,A9 MOVI R_SCOREBOX,A14 CALLA INITOBJ MOVE A8,A0 CALLA INSOBJ3 ; ON LIST #3 RETS TD_IMAGES .LONG HUGE_N .LONG HUGE_W .LONG HUGE_O .LONG HUGE_D .LONG HUGE_H .LONG HUGE_C .LONG HUGE_U .LONG HUGE_O .LONG HUGE_T TDLET_INIT .LONG HUGE_T,letblu .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX2 .WORD >4C,>72,0 L_SCOREBOX .LONG MENUSCORE,MENUPAL1 .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX2 .WORD >0C,>68,0 R_SCOREBOX .LONG MENUSCORE,MENUPAL1 .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX2 .WORD >140,>68,0 PLAY_TD_TUNE MOVI >60,A3 CALLA SEND_CODE_A3 MOVI >20,A3 CALLA SEND_CODE_A3 ; FULL VOLUME MOVI 9,A3 JAUC SEND_CODE_A3 * * FORM LINKED LIST: A11 ---> A9 * FORM_WINDOW CALLR SETUP_WINDOW MOVE A11,A9 ; A9 = BACKDROP DUDE PJSH00 PULLP A2 ; TAKE FROM LIST MOVE A2,A2 ; END OF LIST ? JREQ PJSH0 ; YES, EXIT MOVE A2,*A9(OLINK),L ; ADD TO A9 LIST MOVE A2,A9 JRUC PJSH00 * * ADD OBJECTS TO "OBJLST3" * PJSH0 MOVE A11,A8 MOVI >0025002C,A1 ; A1 = INITIAL CLIPPING CALLR WINDOW_CLIP ; CLIP BEFORE PUTTING ON LIST MOVE @OBJLST3,A0,L MOVE A0,*A9(OLINK),L ; END OF LIST ---> OBJLST3 MOVE A11,@OBJLST3,L ; OBJLST3 ---> TOP OF LIST MOVI >0025002C,A10 ; A10 = INITIAL CLIPPING MOVE A14,A14 JREQ PJSH2 ; NO MOVEMENT --> RETP MOVE A14,A0 SRA 16,A0 MOVE A0,*A13(P_GCOUNT),W ; SAVE VELOCITY HERE SLL 16,A14 SRL 16,A14 ; A14 = # OF ITERATIONS * * CLIPPING / MOVEMENT * MOVE A11,A8 ; CLIP ACCORDING TO BACKDROP PJSH6 PUSHP A14 MOVE A11,A3 PJSH7 MOVE *A3(OXPOS),A2,W MOVE *A13(P_GCOUNT),A5,W ; VELOCITY ADD A5,A2 MOVE A2,*A3(OXPOS),W ; DO VELOCITY BY HAND MOVE *A3(OLINK),A3,L JRNE PJSH7 PJSH1 MOVE A10,A1 CALLR WINDOW_CLIP SLEEP 1 PULLP A14 DSJS A14,PJSH6 PJSH2 RETP * * GROW THE WINDOW * INPUT: A8 = BACKDROP OBJECT * A11 = AMOUNT TO CLIP EACH TICK * A10 = INITIAL CLIPPING * GROW_WINDOW MOVE A10,A1 CALLR WINDOW_CLIP SLEEP 1 MOVE A11,A0 ; A0 = AMOUNT TO CLIP EACH TICK SUBXY A0,A10 MOVE A10,A1 MOVE A10,A2 SLL 16,A1 SRA 16,A1 ; A1 = X JRP GROW_WINDOW ; ANY CLIPPING AT ALL = LOOP SRA 16,A2 ; A2 = Y JRP GROW_WINDOW ; ANY CLIPPING AT ALL = LOOP * * SHOW FULL SCREEN * MOVI SCRNST,A0,L ; INIT SCREEN TOP LEFT [Y,X] MOVE A0,@SCRNTL3,L MOVI SCRNEND,A0,L ; INIT SCREEN LOWER RIGHT [Y,X] MOVE A0,@SCRNLR3,L RETP ******************************************************************** FX_EXIT CALLA KILLFX DIE ************************************************************************** * * * SHRINK WINDOW * * * * Does the clipping trick to shrink a window to nothing. * * * * Input: A8 = backdrop object * * A11 = amount to clip away each tick. * * * ************************************************************************** SHRINK_WIN CLR A10 ; INIT = NO CLIP SHWIN2 ADDXY A11,A10 MOVE A10,A1 CALLR WINDOW_CLIP SLEEP 1 MOVE *A8(OSIZEX),A0,W MOVE *A8(OSIZEY),A1,W MOVE A10,A2 MOVE A10,A3 SLL 16,A2 SRL 16,A2 ; A2 = X CLIP CMP A0,A2 ; ANY MORE TO CLIP JRLT SHWIN2 ; YES, DO MORE SRL 16,A3 ; A3 = Y CLIP CMP A1,A3 ; ANY MORE TO CLIP JRLT SHWIN2 ; YES, DO IT RETP ************************************************************************** * * * WINDOW CLIP * * * * INPUT: A1 = AMOUNT TO CLIP TL,LR CORNERS * * A8 = BACKDROP BLOCK TO USE * * * *************************************************************************** WINDOW_CLIP MOVE *A8(OXPOS),A2,W MOVE *A8(OYPOS),A3,W SLL 16,A2 SRL 16,A2 SLL 16,A3 OR A2,A3 ; A3 = BOX [Y,X] ADDXY A1,A3 MOVE A3,@SCRNTL3,L MOVE *A8(OXPOS),A2,W MOVE *A8(OYPOS),A3,W MOVE *A8(OSIZEX),A4,W SLL 1,A4 MOVE *A8(OSIZEY),A5,W ADD A4,A2 ; A2 = BOTTOM RIGHT CORNER X ADD A5,A3 ; A3 = BOTTOM RIGHT CORNER Y SLL 16,A3 OR A2,A3 ; A3 = BOTTOM CORNER BOX [Y,X] SUBXY A1,A3 MOVE A3,@SCRNLR3,L RETS ************************************************************************** * * * SETUP WINDOW * * * * Creates a BACKDROP object and walks through a list of foreground * * objects to animate. * * * * Input: A14 = init table for BACKDROP object * * A3 = table of foreground animations to run. * * A5 = x position (16 bits) * * A6 = y position (16 bits) * * * * Returns: all the objects created on the process stack. * * A11 = backdrop object * * A14 = velocity to give each window object * * * ************************************************************************** SETUP_WINDOW CLR A0 PUSHP A0 ; ZERO SIGNALS ---> END O LIST CALLA INITOBJ CALLR POSITION_ME MOVE *A8(OYPOS),A0,W INC A0 ; COMPENSATE FOR SMALLER "Z" MOVE A0,*A8(OYPOS),W MOVE A8,A11 ; RETURN A11 = BACKDROP OBJECT SETWIN3 MOVE *A3+,A14,L ; A14 ---> INIT TABLE JREQ SETWIN9 ; END OF ANIMATIONS TO MAKE CALLA INITOBJ CALLR POSITION_ME PUSHP A8 ; STACK IT !! MOVE *A3+,A9,L ; A9 = ANIMATION TO USE JREQ SETWIN4 ; NO ANI ---> NO PROC MOVE *A3,A10,W ; PASS A10 = SLEEP TIME CREATE PID_FX,WINDOW_ANI SETWIN4 ADDI 16,A3 ; A3 ---> NEXT ENTRY JRUC SETWIN3 SETWIN9 MOVE *A3,A14,L ; A14 = VELOCITY / ITTERATIONS RETS POSITION_ME MOVE *A8(OXPOS),A0,W ADD A5,A0 MOVE A0,*A8(OXPOS),W MOVE *A8(OYPOS),A0,W ADD A6,A0 MOVE A0,*A8(OYPOS),W ; PUT WINDOW WHERE IT SHOULD BE RETS ************************************************************************** * * * WINDOW ANIMATOR * * * * INPUTS: A8 = OBJECT TO ANIMATE * * A9 = ANIMATION FRAMES * * A10 = SLEEP TIME BETWEEN TICKS * * * ************************************************************************** WINDOW_ANI MOVE *A9,A1,L MOVE *A8(OFLAGS),A4,W MOVE *A9+,A1,L JREQ WANI3 CALLA ANI MOVE A10,A0 CALLA PRCSLP JRUC WINDOW_ANI WANI3 MOVE *A9,A9,L JRUC WINDOW_ANI WINDOW_PLANE .SET 300H WINDOW_COLOR .SET 0101H BOARDER_COLOR .SET 0202H WINTEST RETS PULL_OUT_A8 MOVE *A8(OSIZEX),A10,W SRA 1,A10 ; 1ST X CLIP = ALL PULL2 MOVE A10,A1 CALLR WINDOW_CLIP SLEEP 1 MOVI >00000004,A0 SUBXY A0,A10 MOVE A10,A1 MOVE A10,A2 SLL 16,A1 SRA 16,A1 ; A1 = X JRP PULL2 ; ANY CLIPPING AT ALL = LOOP RETP SQUEEZE_IN_A8 CLR A10 ; 1ST CLIP = NONE SQU2 MOVE A10,A1 CALLR WINDOW_CLIP SLEEP 1 MOVI >00000004,A0 ADDXY A0,A10 MOVE A10,A1 MOVE A10,A2 SLL 16,A1 SRA 16,A1 ; A1 = X MOVE *A8(OSIZEX),A0,W CMP A0,A1 JRLE SQU2 RETP * * BOARDER OFFSET * A1 = [Y,X] OFFSETS * A9 = BOARDER OBJECT * BOARDER_OFFSET MOVE A1,A0 SLL 16,A0 SRL 16,A0 ; A0 = X OFFSET SRL 16,A1 ; A1 = Y OFFSET MOVE *A9(OXPOS),A2,W ADD A0,A2 MOVE A2,*A8(OXPOS),W MOVE *A9(OYPOS),A2,W ADD A1,A2 MOVE A2,*A8(OYPOS),W MOVK 2,A0 MOVE A0,*A8(OZVAL),L ; NUDGE Z IN FRONT OF REST MOVE A8,A0 JAUC INSOBJ3 GROW_WINDOW2 SLEEP 1 MOVE A11,A11 JREQ NOX DEC A11 MOVE *A8(OSIZEX),A0,W ADDK 8,A0 MOVE A0,*A8(OSIZEX),W ; BIGGER X MOVE *A8(OXPOS),A0,W SUBK 4,A0 MOVE A0,*A8(OXPOS),W NOX MOVE A10,A10 JREQ NOY DEC A10 MOVE *A8(OSIZEY),A0,W ADDK 8,A0 MOVE A0,*A8(OSIZEY),W ; BIGGER Y MOVE *A8(OYPOS),A0,W SUBK 4,A0 MOVE A0,*A8(OYPOS),W NOY MOVE A11,A0 ADD A10,A0 JRNE GROW_WINDOW RETP TEAM_INIT .LONG LA,LA_PAL .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD 0,0,0 ************************************************************************** * * * EXTRA POINT EFFECT * * * ************************************************************************** EXTRAP MOVI >1D,A0 CALLA FX_SHADOW_PRINT MOVK 5,A11 CREATE PID_FX,RGBSTUFF ; FLASH THE LETTERS JAUC WAIT_FOREVER * * SWITCH OBJECT LIST #3 TO OBJECT LIST #2 * OBJ3TO2 MOVE @OBJLST3,A0,L O321 MOVE A0,A1 MOVE *A0(OLINK),A0,L ; NEXT ?? JRNE O321 ; NON-ZERO CONTINUE MOVE @OBJLST2,A0,L MOVE A0,*A1(OLINK),L ; ADD TO TOP OF LIST #2 MOVE @OBJLST3,A0,L MOVE A0,@OBJLST2,L ; REPOINT TOP OF LIST #2 CLR A0 MOVE A0,@OBJLST3,L ; EMPTY OLD LIST OUT RETS ************************************************************************** * * * MULTIANI * * * * Process to animate through multiple sequences at once. This is * * a window utility. * * * * Input: A11 ---> master animation table * * A10 = which "INSERT OBJECT" routine to call * * * ************************************************************************** MASTER_END .SET >FFFFFFFF ANI_LOOP .SET 1 ANI_END .SET 2 ANI_JUMP .SET 3 MULTIANIF MOVK 1,A0 JRUC MANI0 MULTIANI CLR A0 MANI0 MOVE A0,*A13(P_FACE),W ; FLIP FLAG MOVE *A11+,A0,W MOVE A0,*A13(P_ANIRATE),W ; SAVE SLEEP TIME MOVE *A11+,A0,W MOVE A0,*A13(PLGOX),W ; X OFFSET MOVE *A11+,A0,W MOVE A0,*A13(PLGOZ),W ; Y OFFSET * * DO THE BACKGROUND "WINDOW" OBJECT * MOVI MANI_IMG,A14 CALLA INITOBJ MOVE A8,*A13(P_PREY),L ; STORE 1ST WINDOW IMAGE HERE MOVE *A13(PLGOX),*A8(OXPOS),W MOVE *A13(PLGOZ),A0 ; INC A0 MOVE A0,*A8(OYPOS),W CLR A0 MOVE A0,*A8(OZPOS),W MOVE *A11+,A1,L ; WINDOW IMAGE CMPI ANI_JUMP,A1 ; JUMP TO NEW ADDRESS ??? JRNE MANI1 ; NO MOVE *A11+,A1,L ; A1 = BACKGROUNDS IMAGE MOVE *A11,A11,L ; YES ---> REDIRECT A11 MANI1 MOVE *A1(32*3),A0,L ; A0 = PALETTE TO USE PUSH A0 CALLA GETFPAL ; GET ONE MOVE A0,*A8(OPAL),W CALLR WANI MOVE A8,A0 CALL A10 ; CALL THE "INSERT OBJECT" ROUTINE * * HACK TOGETHER THE "SPLIT WINDOW" BRAIN DAMMAGE * MOVE A8,A9 ; A9 = RIGHT SIDE WINDOW MOVI MANI_IMG,A14 CALLA INITOBJ PULL A0 ; WINDOW PALETTE CALLA GETFPAL MOVE A0,*A8(OPAL),W MOVE *A9(OIMG),*A8(OIMG),L MOVE A8,*A9(OSLINK),L ; LINK WINDOW HALFS TOGETHER MOVE A9,*A8(OSLINK),L ; LINK WINDOW HALFS TOGETHER CALLA YFLP ; LEFT WINDOW = FLIPPED RIGHT WINDOW MOVE *A9(OYPOS),*A8(OYPOS),W MOVE *A9(OZPOS),*A8(OZPOS),W MOVE *A9(OXPOS),A0,W MOVE *A8(OSIZEX),A1,W SUB A1,A0 MOVE A0,*A8(OXPOS),W ; POSITION LEFT WINDOW NEXT TO RIGHT MOVE A8,*A13(P_PREY),L ; CLIP BASED ON "LEFT" SIDE MOVE A8,A0 CALL A10 ; CALL THE "INSERT OBJECT" ROUTINE * * SETUP ANIMATIONS * MANISET CLR A9 MANI3 MOVE *A11,A8,L ; ANIMATION ?? CMPI MASTER_END,A8 JREQ MANI7 ; DONE... MOVI MANI_IMG,A14 CALLA INITOBJ MOVE *A13(P_FACE),A0,W JREQ MANIX2 ; NO FLIP ORI M_FLIPH,A4 MOVE A4,*A8(OFLAGS),W ; FLIP IMAGE MANIX2 MOVE A9,A9 ; 1ST IMAGE ? JRNE MANI5 ; NO MOVE A8,*A13(P_SWITCH),L ; YES, REMEMBER IT JRUC MANI2 MANI5 MOVE A8,*A9(OSLINK),L ; NO, LINK TO THE LAST ONE MANI2 CLR A0 MOVE A0,*A8(OSLINK),L ; ASSUME END OF LIST MOVE A8,A9 ; SAVE MOVE *A13(PLGOX),*A8(OXPOS),W MOVE *A13(PLGOZ),A0,W DEC A0 MOVE A0,*A8(OYPOS),W ; Y OFFSET - 1 MOVE *A11,A1,L ; GET 1ST IMAGE MOVE *A8(OPAL),A0,W ; PALETTE DEFINED YET ??? JRNE MANI21 ; YES, SKIP MOVE *A1(32*3),A0,L ; A0 = PALETTE TO USE CALLA GETFPAL ; NO ---> GET ONE MOVE A0,*A8(OPAL),W MANI21 CALLA ANI MOVE A11,*A8(OCOLLIDE),L ; SAVE TABLE POINTER HERE MOVE A11,*A8(OXACC),L ; SAVE 1ST FRAME POINTER HERE MOVE A8,A0 CALL A10 MANI4 MOVE *A11+,A0,L JRNE MANI4 ; SEARCH FOR ZERO ADDI 32,A11 ; NEXT COMMAND MOVE *A11,A0,L CMPI MASTER_END,A0 ; END OF ALL ???? JRNE MANI3 ; NOPE... * * DO THE ANIMATIONS * MANI_ANI MOVE *A13(P_SWITCH),A8,L ; GET OBJECT #1 MANI9 MOVE *A8(OCOLLIDE),A2,L JREQ MANI8 ; ZERO ---> LEAVE IMAGE ALONE MOVE *A2+,A1,L ; A1 = NEW IMAGE JREQ MANI6 ; ZERO ---> SPECIAL CODE MOVE *A8(OFLAGS),A4,W CALLA ANI MOVE A2,*A8(OCOLLIDE),L ; SAVE NEXT IMAGE POINTER JRUC MANI8 MANI6 MOVE *A2,A1,L ; A1 = COMMAND CMPI ANI_LOOP,A1 JREQ MANI7 ; ANI LOOP CLR A0 MOVE A0,*A8(OCOLLIDE),L ; NO MORE ANI'S JRUC MANI8 MANI7 MOVE *A8(OXACC),A0,L MOVE A0,*A8(OCOLLIDE),L ; RESET ANI POINTER JRUC MANI9 ; DO NEXT FRAME RIGHT AWAY MANI8 MOVE *A8(OSLINK),A8,L JRNE MANI9 MOVE *A13(P_ANIRATE),A0,W ; RESTORE SLEEP TIME CALLA PRCSLP JRUC MANI_ANI * * ANI WHICH CHECKS BOUNDARIES OF IMAGE POINTER * WANI CMPI FXLEGAL1,A1 JRLO WANI_ERROR CMPI FXLEGAL2,A1 JRHS WANI_ERROR ; MAKE SURE THIS IMAGE IS LEGIT JAUC ANI ; COOL ---> ANI YER ASS OFF WANI_ERROR ERMAC 61 MANI_IMG .LONG MULTI_DUMB,0 .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD 0,0,1 MULTI_DUMB .word 0,0,0,0 ; SIZE, ANI POINTS .long DUMB_IMG ; IMG DATA POINTER .long DUMB_IMG ; PALETTE ************************************************************************** * * * MULTIWINDOW MASTER ANIMATION TABLES * * * ************************************************************************** MA_AWESOME_UL .WORD >0A,>60,>10 .LONG ANI_JUMP,winsize1,AWESOME_FRAMES MA_AWESOMEL .WORD >0A,>60,>99 .LONG ANI_JUMP,winsize1,AWESOME_FRAMES MA_AWESOMEH .WORD >0A,>120,>10 .LONG winsize1 AWESOME_FRAMES .LONG bighead1 .LONG bighead1 .LONG bighead1,bighead2,bighead2,bighead2,bigbod1,bigbod1,bigbod1 .LONG bigbod1,bigbod1 .LONG 0,ANI_END .LONG TDANN_DUMB .LONG TDANN_DUMB .LONG TDANN_DUMB,TDANN_DUMB,TDANN_DUMB,TDANN_DUMB,bighead3 .LONG bighead3,bighead3,bighead3,bighead4 .LONG 0,ANI_END .LONG >FFFFFFFF MA_TDANN .WORD >08,>50,>A0 .LONG winsize1 .LONG bigbod1 .LONG bigbod1 .LONG bigbod1 .LONG bigbod1 .LONG bigbod1,TDANN_DUMB,TDANN_DUMB,bigbod1,0,ANI_END .LONG bighead3 .LONG bighead3 .LONG bighead3 .LONG bighead3 .LONG bighead3,bighead1,bighead1,bighead5,bighead5,bighead6 .LONG bighead6,bighead6,bighead6,bighead6,bighead6,bighead4 .LONG 0,ANI_END .LONG >FFFFFFFF TDANN_DUMB .word 0,0,0,0 ; SIZE, ANI POINTS .long DUMB_IMG ; IMG DATA POINTER .long bghedpal ; PALETTE MA_WHADDAH .WORD >07,>110,>08 .LONG ANI_JUMP,winsize1,WHADDA_FRAMES MA_WHADDAL .WORD >07,>58,>90 .LONG winsize1 WHADDA_FRAMES .LONG whatbod1 .LONG whatbod1 .LONG whatbod1,whatbod2,whatbod3,0,ANI_END .LONG WHA_DUMB .LONG WHA_DUMB .LONG WHA_DUMB,wltarm1,wltarm2,0,ANI_END .LONG WHA_DUMB .LONG WHA_DUMB .LONG WHA_DUMB,wrtarm1,wrtarm2,0,ANI_END .LONG WHA_DUMB .LONG WHA_DUMB .LONG WHA_DUMB,WHA_DUMB,wlthand,0,ANI_END .LONG WHA_DUMB .LONG WHA_DUMB .LONG WHA_DUMB,WHA_DUMB,wrthand2,0,ANI_END .LONG WHA_DUMB .LONG WHA_DUMB .LONG WHA_DUMB,WHA_DUMB,whathed3,whathed2,whathed1 .LONG whathed2,whathed3,0,ANI_END .long >FFFFFFFF WHA_DUMB .word 0,0,0,0 ; SIZE, ANI POINTS .long DUMB_IMG ; IMG DATA POINTER .long whattpal ; PALETTE **************************************** MA_FGPU0 .WORD >0A,>70,>99 .LONG ANI_JUMP,HALFBLUR,PU_FRAMES MA_FGPU1 MA_PU1 .WORD >0A,>120,>99 .LONG ANI_JUMP,HALFBLUR,PU_FRAMES MA_PU0 .WORD >0A,>70,>99 .LONG HALFBLUR PU_FRAMES .LONG stkhand1,stkhand2,stkhand3,0,ANI_LOOP .LONG stnkarm1,stnkarm2,stnkarm3,0,ANI_LOOP .LONG stnkhed1,stnkhed2,stnkhed3,0,ANI_LOOP .LONG stnksut1,stnksut2,stnksut3,0,ANI_LOOP .LONG >FFFFFFFF MA_MAD1 .WORD >8,>110,>99 .LONG ANI_JUMP,HALFBLUR,MAD_FRAMES MA_MAD0 .WORD >8,>70,>99 .LONG HALFBLUR MAD_FRAMES .LONG COCHMAD1,COCHMAD2,COCHMAD3,0,ANI_LOOP .LONG >FFFFFFFF MA_FIRST1_DOWN .WORD 8,>120,>10 .LONG ANI_JUMP,HALFBLUR,FD_FRAMES MA_FIRST0_DOWN .WORD 8,>50,>10 .LONG HALFBLUR FD_FRAMES .LONG REF_1DOWN1A .LONG REF_1DOWN1A .LONG REF_1DOWN1A .LONG REF_1DOWN1A .LONG REF_1DOWN1A .LONG REF_1DOWN1A .LONG REF_1DOWN1A,REF_1DOWN2A,REF_1DOWN3A,0,ANI_END .LONG REF_1DOWN1B .LONG REF_1DOWN1B .LONG REF_1DOWN1B .LONG REF_1DOWN1B .LONG REF_1DOWN1B .LONG REF_1DOWN1B .LONG REF_1DOWN1B,REF_1DOWN2B,REF_1DOWN3B,0,ANI_END .LONG >FFFFFFFF MA_FGN0 .WORD >07,>70,>99 .LONG ANI_JUMP,HALFBLUR,NOGOOD_FRAMES MA_FGN1 .WORD >07,>120,>99 .LONG ANI_JUMP,HALFBLUR,NOGOOD_FRAMES MA_INCOMPLETE .WORD >07,>70,>99 .LONG ANI_JUMP,HALFBLUR,NOGOOD_FRAMES MA_NOGOOD .WORD 8,>80,>10 .LONG HALFBLUR NOGOOD_FRAMES .LONG REF_NGOOD1,REF_NGOOD2A,REF_NGOOD3A,0,ANI_LOOP .LONG NG_DUMB,REF_NGOOD2B,REF_NGOOD3B,0,ANI_LOOP .LONG NG_DUMB,REF_NGOOD2C,REF_NGOOD3C,0,ANI_LOOP .LONG >FFFFFFFF NG_DUMB .word 0,0,0,0 ; SIZE, ANI POINTS .long DUMB_IMG ; IMG DATA POINTER .long REFNG_PA ; PALETTE MA_REFTD .WORD 8,>120,>0D .LONG HALFBLUR TD_FRAMES .LONG REF_TD1A .LONG REF_TD1A .LONG REF_TD1A .LONG REF_TD1A,REF_TD2A,REF_TD3A,0,ANI_END .LONG REF_TD1B .LONG REF_TD1B .LONG REF_TD1B .LONG REF_TD1B,REF_TD2B,REF_TD3B,0,ANI_END .LONG REF_TD1C .LONG REF_TD1C .LONG REF_TD1C .LONG REF_TD1C,REF_TD2C,REF_TD3C,0,ANI_END .LONG >FFFFFFFF MA_NGCHEER0 .WORD >07,>70,>99 .LONG ANI_JUMP,HALFBLUR,CHEER_FRAMES MA_NGCHEER1 .WORD >07,>120,>99 .LONG ANI_JUMP,HALFBLUR,CHEER_FRAMES MA_TDCHEER .WORD 8,>50,>A0 .LONG HALFBLUR CHEER_FRAMES .LONG CHEER1A,CHEER2A,CHEER3A,0,ANI_LOOP .LONG CHEER1B,CHEER2B,CHEER3B,0,ANI_LOOP .LONG CHEER1C,CHEER2C,CHEER3C,0,ANI_LOOP .LONG >FFFFFFFF ***************************************** MA_FUCKINA2 .WORD 8,>120,>9D .LONG ANI_JUMP,HALFBLUR,FUCKINA_FRAMES MA_FUCKINA1 .WORD 8,>60,>9D .LONG HALFBLUR FUCKINA_FRAMES .LONG high51A,high52A,high53,0,ANI_LOOP .LONG high51B,high52B,FUK_DUMB,0,ANI_LOOP .LONG high51C,high52C,FUK_DUMB,0,ANI_LOOP .LONG >FFFFFFFF FUK_DUMB .word 0,0,0,0 ; SIZE, ANI POINTS .long DUMB_IMG ; IMG DATA POINTER .long coachpal ; PALETTE ***************************************** MA_MOON1 .WORD 8,>110,>99 .LONG ANI_JUMP,HALFBLUR,MOON_FRAMES MA_MOON0 .WORD >0A,>70,>99 .LONG HALFBLUR MOON_FRAMES .LONG moon1 .LONG moon1 .LONG moon1 .LONG moon1,moon2,moon3 .LONG moon2,moon3 .LONG moon2,moon3 .LONG moon2,moon3 .LONG 0,ANI_END .LONG >FFFFFFFF MA_COACH_YEA2 .WORD 8,>120,>9D .LONG ANI_JUMP,HALFBLUR,COACHY_FRAMES MA_COACH_YEA1 .WORD 8,>60,>9D .LONG HALFBLUR COACHY_FRAMES .LONG yeasuit1,yeasuit2,yeasuit3,0,ANI_LOOP .LONG yeahead1,yeahead2,yeahead3,0,ANI_LOOP .LONG yelthnd1,yelthnd2,yelthnd3,0,ANI_LOOP .LONG yerthnd1,yerthnd2,yerthnd3,0,ANI_LOOP .LONG >FFFFFFFF MA_SHAKE1 .WORD >06,>110,>99 .LONG ANI_JUMP,HALFBLUR,SHAKE_FRAMES MA_SHAKE0 .WORD >06,>70,>99 .LONG HALFBLUR SHAKE_FRAMES .LONG EJBSHAKE1,EJBSHAKE2,EJBSHAKE3,0,ANI_LOOP .LONG PJSHAKE1,PJSHAKE2,PJSHAKE3,0,ANI_LOOP .LONG >FFFFFFFF MA_BAGMAN1 .WORD >09,>110,>99 .LONG ANI_JUMP,HALFBLUR,BAG_FRAMES MA_BAGMAN0 .WORD >09,>70,>99 .LONG HALFBLUR BAG_FRAMES .LONG COCHBAG1 .LONG COCHBAG1 .LONG COCHBAG1 .LONG COCHBAG1,COCHBAG2A,COCHBAG3A,0,ANI_END .LONG BAG_DUMB .LONG BAG_DUMB .LONG BAG_DUMB .LONG BAG_DUMB,COCHBAG2B,COCHBAG3B,0,ANI_END .LONG >FFFFFFFF BAG_DUMB .word 0,0,0,0 ; SIZE, ANI POINTS .long DUMB_IMG ; IMG DATA POINTER .long CBAG_PAL ; PALETTE ************************************************************************** * * * WIPEOUT3_1 * * * * Wipes from the left/right edges "inwards" using 2 vertical lines. * * * * Input: A10 = sleep time to use * * A11 = # of pixels each tick [0,x] * * * ************************************************************************** WIPEOUT3_1 MOVE @SCRNTL3,A8,L ; INIT SCREEN TOP LEFT [Y,X] MOVE @SCRNLR3,A9,L ; INIT SCREEN LOWER RIGHT [Y,X] WIPEO31 ADD A11,A8 SUB A11,A9 ; CLIPPY MOVE A9,A0 SLL 16,A0 SRL 16,A0 CMP A8,A0 JRLS WIPEO32 ; WEEZ DONE MOVE A8,@SCRNTL3,L MOVE A9,@SCRNLR3,L MOVE A10,A0 CALLA PRCSLP JRUC WIPEO31 WIPEO32 RETP ************************************************************************** * * * WIPEOUT32_1 * * * * Wipes from the left/right edges "inwards" using 2 vertical lines. * * * * Input: A10 = sleep time to use * * A11 = # of pixels each tick [0,x] * * * ************************************************************************** WIPEOUT32_1 MOVE @SCRNTL3,A8,L ; INIT SCREEN TOP LEFT [Y,X] MOVE @SCRNLR3,A9,L ; INIT SCREEN LOWER RIGHT [Y,X] WIPEO321 ADD A11,A8 SUB A11,A9 ; CLIPPY MOVE A9,A0 SLL 16,A0 SRL 16,A0 CMP A8,A0 JRLS WIPEO322 ; WEEZ DONE MOVE A8,@SCRNTL3,L MOVE A8,@SCRNTL2,L MOVE A9,@SCRNLR3,L MOVE A9,@SCRNLR2,L MOVE A10,A0 CALLA PRCSLP JRUC WIPEO321 WIPEO322 RETP ************************************************************************** * * * ANIMATION TABLES * * * ************************************************************************** * * FAN WINDOW #1 * A_FAN1 .long FANWIN1A .long FANWIN1B .long FANWIN1C .long 0 .long A_FAN1 ************************************************************************** * * * TANIA PROC * * * * This process handles making all the cheerleaders on the field * * animate. * * * ************************************************************************** TANIA_PROC MOVK 1,A0 MOVE A0,@TANIAF,W ; SIGNAL ---> TANIA PROCESS IS ALIVE MOVI TANIA_PALETTES,A11 CLR A9 MOVK 5,A10 ; # OF CHEERLEADERS ON FIELD MOVI LGOAL_IN_X+(PIX_PER_YARD*28),A6 TANIAP2 MOVI TANIA_INIT,A14 CALLA INITOBJ MOVE *A11+,A0,L ; GET A PALLETE CALLA GETFPAL MOVE A0,*A8(OPAL),L ; USE IT CALLA GROUND_PLAYER ; SET Y MOVE A6,*A8(OXPOS),W MOVE A9,*A8(OSLINK),L ; LINK 'EM TOGETHER MOVE A8,A0 CALLA INSOBJ MOVE A8,A9 ADDI PIX_PER_YARD*3,A6 ; NEXT X POSITION DSJ A10,TANIAP2 MOVK 5,A10 ; # OF CHEERLEADERS ON FIELD MOVI RGOAL_IN_X-(PIX_PER_YARD*28),A6 TANIAP3 MOVI TANIA_INIT,A14 CALLA INITOBJ MOVE *A11+,A0,L ; GET A PALLETE CALLA GETFPAL MOVE A0,*A8(OPAL),L ; USE IT CALLA GROUND_PLAYER ; SET Y MOVE A6,*A8(OXPOS),W MOVE A9,*A8(OSLINK),L ; LINK 'EM TOGETHER MOVE A8,A0 CALLA INSOBJ MOVE A8,A9 SUBI PIX_PER_YARD*3,A6 ; NEXT X POSITION DSJ A10,TANIAP3 MOVE A8,A11 ; A11 = CHEERLEADER #1 MOVE @TANIAR,A0,L ; SPECIAL ROUTINE ? JREQ TANIAP4 ; NOPE... JUMP A0 ; YES ---> RUN IT * * ANIMATE 'EM * TANIAP4 MOVI A_SIDE,A9 MOVI >00140008,A10 JSRP CHEERANI MOVI A_KICK,A9 MOVI >001A0005,A10 JSRP CHEERANI MOVI A_JUMP,A9 MOVI >000A0006,A10 JSRP CHEERANI JRUC TANIAP4 TANIA_INIT .LONG CHEERSIDE1,0 .WORD 0,DMAWNZ,OID_TANIA .WORD 0,0,TOP_SIDELINE-30 TANIA_PALETTES .LONG HFTMER_P .LONG afrorpal .LONG HFTMER_P .LONG HFTMER_P .LONG afrorpal ; RED TEAM .LONG HFTIME_P .LONG afrobpal .LONG HFTIME_P .LONG afrobpal .LONG afrobpal ; BLUE TEAM ;TANIA2_INIT ; .LONG CHEERSIDE1,HFTMER_P ; .WORD 0,DMAWNZ,OID_TANIA ; .WORD 0,0,TOP_SIDELINE-30 TD_TANIA MOVI A_JUMP,A9 MOVI >02000006,A10 JSRP CHEERANI JRUC TD_TANIA * * ANIMATE A LIST OF CHEERLEADERS * CHEERANI MOVE A10,A0 SRL 16,A0 MOVE A0,*A13(P_GCOUNT),W ; FRAME COUNT CHANI1 MOVE A11,A8 MOVE *A9,A1,L CHANI2 MOVE *A8(OFLAGS),A4,W CALLA ANI MOVE *A8(OSLINK),A8,L ; EACH ONE !! JRNE CHANI2 MOVE A10,A0 SLL 16,A0 SRL 16,A0 CALLA PRCSLP ADDI 32,A9 MOVE *A9,A1,L JRNE CHANI4 MOVE *A9(32),A9,L ; ZERO ---> GET POINTER TO BEGIN CHANI4 MOVE *A13(P_GCOUNT),A0,W DEC A0 MOVE A0,*A13(P_GCOUNT),W JRNE CHANI1 RETP * * MAKE 2 BIG DIGITS * RETURNS: A9 = #1 * A10 = #2 * TWO_BIG_DIG PUSH A1 MOVI DIGIT_INIT,A14 CALLA INITOBJ MOVE A8,A9 ; A9 = DIGIT #1 MOVI DIGIT_INIT,A14 CALLA INITOBJ MOVE A8,A10 ; A10 = DIGIT #2 PULL A1 CMPI 99,A1 JRLE TWO2 MOVI 99,A1 TWO2 MOVE A1,A2 ; SAVE ORIGINAL MOVI 10,A0 DIVS A0,A1 ; A1 = TENS !! MOVE A1,A7 SLL 5,A7 ADDI BIG_DIGITS,A7 ; A7 = TENS ENTRY TABLE MPYS A0,A1 ; A1 = ONLY TENS SUB A1,A2 ; A2 = ONES SLL 5,A2 ADDI BIG_DIGITS,A2 ; A2 = ONES TABLE ENTRY MOVE A3,*A9(OYPOS),W MOVE A11,*A9(OXPOS),W MOVE *A7,A1,L ; A1 = NEW OIMG MOVE A9,A8 ; A8 --> OBJECT BLOCK MOVE *A9(OFLAGS),A4,W ; A4 = FLAGS CALLA ANI MOVE A3,*A10(OYPOS),W ADDI 25,A11 ; DIGIT #2 DISTANCE = WIDTH MOVE A11,*A10(OXPOS),W MOVE *A2,A1,L ; A1 = OIMG MOVE A10,A8 ; A8 --> OBJECT BLOCK MOVE *A10(OFLAGS),A4,W ; A4 = FLAGS CALLA ANI RETS DIGIT_INIT .LONG num0,frame .WORD 0,DMAWNZ|M_NOSCROLL,OID_FX .WORD 0,0,0 A9A10_OBJLST3 MOVE A9,A0 CALLA INSOBJ3 MOVE A10,A0 JAUC INSOBJ3 A9A10_OBJLST2 MOVE A9,A0 CALLA INSOBJ2 MOVE A10,A0 JAUC INSOBJ2 A9A10_OBJLST MOVE A9,A0 CALLA INSOBJ MOVE A10,A0 JAUC INSOBJ HIDELIST3 CLR A0 MOVE A0,@SCRNTL3,L MOVE A0,@SCRNLR3,L ; DONT SHOW ANY OBJLST3 RETS ************************************************************************** * * * GAME INTRO WINDOW ANIMATIONS * * * ************************************************************************** MA_INTCHEER .WORD >07,->40,>89 .LONG ANI_JUMP,HALFBLUR,CHEER_FRAMES MA_INTREFTD .WORD >07,->40,>89 .LONG ANI_JUMP,HALFBLUR,TD_FRAMES MA_INTYEA .WORD >07,->40,>89 .LONG ANI_JUMP,HALFBLUR,COACHY_FRAMES MA_INTFD .WORD >07,->40,>89 .LONG ANI_JUMP,HALFBLUR,FD_FRAMES MA_CANT_HEAR .WORD >0D,->40,>89 .LONG winsize1 .LONG bigbod1 .LONG bigbod1 .LONG bigbod1 .LONG bighead1,bigbod1,bigbod1,bigbod1,bigbod1,bighead2,0,ANI_END .LONG bighead3 .LONG bighead3 .LONG bighead3 .LONG TDANN_DUMB,bighead3,bighead3,bighead6,bighead6,TDANN_DUMB .LONG 0,ANI_END .LONG >FFFFFFFF MA_LOFEOQ .WORD >07,>50,>80 .LONG ANI_JUMP,HALFBLUR,LOF_FRAMES MA_LOFNUM1 .WORD >08,>1E0,>51 .LONG HALFBLUR LOF_FRAMES .LONG markfan1,markfan2,0,ANI_LOOP .LONG mltarm1,mltarm2,0,ANI_LOOP .LONG mrtarm1,mrtarm2,0,ANI_LOOP .LONG mwere1,0,ANI_END .LONG >FFFFFFFF MA_HT_CHEER1 .WORD >08,>1E0,>51 .LONG ANI_JUMP,HALFBLUR,CHEER_FRAMES MA_HTYEA .WORD >07,>1E0,>51 .LONG ANI_JUMP,HALFBLUR,COACHY_FRAMES MA_HTAWESOME .WORD >0A,>1E0,>51 .LONG winsize1 .LONG bighead1 .LONG bighead1 .LONG bighead1 .LONG bighead1 .LONG bighead1,bighead2,bighead2,bighead2,bigbod1,bigbod1,bigbod1 .LONG bigbod1,bigbod1 .LONG 0,ANI_END .LONG TDANN_DUMB .LONG TDANN_DUMB .LONG TDANN_DUMB .LONG TDANN_DUMB .LONG TDANN_DUMB,TDANN_DUMB,TDANN_DUMB,TDANN_DUMB,bighead3 .LONG bighead3,bighead3,bighead3,bighead4 .LONG 0,ANI_END .LONG >FFFFFFFF MA_HT_CHEER2 .WORD >05,>1E0,>51 .LONG HALFBLUR .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A,NCHEER2A,NCHEER3A .LONG NCHEER3A .LONG NCHEER3A .LONG NCHEER3A .LONG NCHEER2A,NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER1A .LONG NCHEER2A,NCHEER3A .LONG NCHEER3A .LONG NCHEER3A .LONG NCHEER2A,NCHEER1A .LONG 0,ANI_END .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B,NCHEER2B,NCHEER3B .LONG NCHEER3B .LONG NCHEER3B .LONG NCHEER3B .LONG NCHEER2B,NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER1B .LONG NCHEER2B,NCHEER3B .LONG NCHEER3B .LONG NCHEER3B .LONG NCHEER2B,NCHEER1B .LONG 0,ANI_END .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C,NCHEER2C,NCHEER3C .LONG NCHEER3C .LONG NCHEER3C .LONG NCHEER3C .LONG NCHEER2C,NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER1C .LONG NCHEER2C,NCHEER3C .LONG NCHEER3C .LONG NCHEER3C .LONG NCHEER2C,NCHEER1C .LONG 0,ANI_END .LONG >FFFFFFFF MA_HT_CHEER3 .WORD >0A,>40,>51 .LONG HALFBLUR .LONG NCHEER1A,NCHEER2A,NCHEER3A,0,ANI_LOOP .LONG NCHEER1B,NCHEER2B,NCHEER3B,0,ANI_LOOP .LONG NCHEER1C,NCHEER2C,NCHEER3C,0,ANI_LOOP .LONG >FFFFFFFF MA_HT_CHEER4 .WORD >0A,>145,>51 .LONG HALFBLUR .LONG CHEER1A,CHEER2A,CHEER3A,0,ANI_LOOP .LONG CHEER1B,CHEER2B,CHEER3B,0,ANI_LOOP .LONG CHEER1C,CHEER2C,CHEER3C,0,ANI_LOOP .LONG >FFFFFFFF MA_HT_LOF2 .WORD >08,>C0,>51 .LONG ANI_JUMP,HALFBLUR,LOF_FRAMES