************************************************************** ;turmell ;how come the ? mark is not printed out? (how can i beat him?) ;how come then number 1 is not printed out? (player 1 is a dork) * * Software: Shawn Liptak * Initiated: June 6,1991 * * Modified: ! * * COPYRIGHT (C) 1991 WILLIAMS ELECTRONICS GAMES, INC. * *.Last mod - 9/27/91 13:47 ************************************************************** .FILE 'RACKUP.ASM' .TITLE 'TOTAL CARNAGE GAME PROGRAM' .WIDTH 132 .OPTION B,D,L,T .MNOLIST .include "mproc.equ" .include "disp.equ" .include "\video\sys\sys.inc" .include "game.equ" .include "imgtbl.glo" .include "shawn.hdr" ;My macros .include "rackup.tbl" ;sound headers used .ref GLSEXP,NOWAY,SETDWN,TUNE3 CVSDOFF .word >F0F0,10,>807D,0 ;SPEECH OFF racksup .word >f280,1,>80b3,0 ;Rackup bonus sweep up rackoff .word >fa81,1,>80a7,0 ;Rackup bonus off kilfgnd .word >f000,1,>807f,0 ;Kill foregnd snds rackp1p .word >fa80,1,>80b4,0 ;Rackup P1 gets 500 pts rackp2p .word >fa80,1,>80b5,0 ;^ P2 stats1 .word >f280,1,>8100,0 ;Rackup stat line snd stats2 .word >f280,1,>8101,0 ;^ stats3 .word >f280,1,>8102,0 ;^ stats4 .word >f280,1,>8103,0 ;^ stats5 .word >f280,1,>8104,0 ;^ stats6 .word >f280,1,>8105,0 ;^ stats7 .word >f280,1,>8106,0 ;^ stats8 .word >f280,1,>8107,0 ;^ stats9 .word >f280,1,>8108,0 ;^ stats10 .word >f280,1,>8109,0 ;^ stats11 .word >f280,1,>810a,0 ;^ stats12 .word >f280,1,>810b,0 ;^ txtssnd .word >f3f7,8,>80b1,0 ;Text shrink shout .word >f1a0,60,>80fe,0 ;Rackup victory shout rackgun .word >fca0,4,>8030,0 ;Player shoots gun gigle1 .word >f9a0,60,>80f3,0 ;Rackup winner laughs ahkb1 .word >f9a0,10,>80eb,0 ;Akhboob speech ahkb2 .word >f9a0,10,>80ec,0 ;^ ahkb3 .word >f9a0,10,>80ed,0 ;^ ahkbsta .word >f9a0,10,>80ee,0 ;^ start angry ahkbang .word >f9a0,10,>80ef,0 ;^ angry yousuck .word >f9a0,10,>80c5,0 ;You suck at this game! fisthit .word >fca0,10,>803c,0 ;Ahkboob hits desk ermtune .word >f3f0,10,>8004,0 ;Electrocution tune fshock .word >f540,20,>80bb,0 ;Electric chair shocks fburn .word >f048,30,>80d7,0 ;^ burn fpain1 .word >f965,20,>80f6,0 ;Player in pain fpain2 .word >f160,20,>80f7,0 ;^ fpain3 .word >f160,20,>80fd,0 ;^ fskullb .word >f460,20,>8040,0 ;Skull bounce fryexp .word >fc50,6,>803e,0 ;Fry explosion fryexp2 .word >fd50,8,>80d9,0 ;^ totcarn .word >f980,30,>80cf,0 ;Total carnage! ;symbols externally defined .ref COLTAB,CYCLE_TABLE,STATIC_COVER,PLYRPRCS,INTRO .ref RACKBMOD,RANDOM,GPALOBJ,PALSET,FINDPAL,GETFPAL,PCNT .ref IRQSKYE,ERASE_TXT,HEXTOASC,FRANIM,HSTGLST,HALT,PLYROBJS .ref CRMP,BCDBIN,BINBCD .ref WSPEED,STRT_S,STATUS,STOPPLYR .ref COLCYC,BGND_UD1,BAKMODS,WNDWON,WNDWOFF,NO_START,WRLD .ref STRCNRMO,STRCNRMO_1,STRCNRM,LOWZ .ref RD15FONT,RD7FONT,RD8FONT .ref P1DATA,P2DATA,HSTGS_LOST,KEYS_LOST .ref SLDEBUG,timerp1,timerp2 .ref FADEOUT2,PCOUNT,TAUNTOUT .ref RNDRNG,RNDRNG0 .ref ELECRM1BMOD,CHAIR2BMOD .ref BLUEEXP,FIREEXP,XBOOM2,BOOM3 .ref FRANIMQ .ref TNT_TYPE,SHAKER ;symbols defined in this file ;uninitialized ram definitions .bss cycmem ,5*16*2 ;Allocate 2 x color area in ram .bss statspal ,31*16 ;Statistics palette .bss boanimdeath1 ,16 ;CntDn for bonus anim procs to die .bss boanimdeath2 ,16 ;^ .bss scoredie ,16 ;>0=Score processes die .bss hitpercent1 ,16 ;Player1 % .bss hitpercent2 ,16 ;Player2 % .bss hitsmin1 ,16 ;Player1 hits per minute .bss hitsmin2 ,16 ;Player2 ^ .bss score1old ,32 ;P1 score before bonuses .bss score2old ,32 ;P2 ^ .bss bonusstat ,16 ;Status of bonus .bss frydone ,16 ;!0=Electrocution over .bss fryp1palmem ,65*16 ;P1 mem for pallette pulse .bss fryp2palmem ,65*16 ;P2 ^ .text ******************************** * Do dictator taunt 1 SUBR DO_MAN SLEEPK 10 clr a11 ;1st taunt jruc dictt SUBR INCOM_TRAN clr a0 move a0,@WRLD ;Do world adj movi incom_st,a0 ;*Text jruc prt0_xy TUNE4 .WORD >F3FE,10,>8007,0 ;RACKUP TUNE ******************************** * Rack it up! SUBR DO_RACKUP calla STOPOBJS ;Keep all objs still ; move @SLDEBUG,a0 ; btst 0,a0 ; jrnz skiprc ; CREATE0 rackcaller ;DEBUG ;skiprc movk 1,a0 ;Delay start of a 2nd plyr flag move a0,@NO_START move a0,@INTRO clr a0 move a0,@IRQSKYE movi TUNE4,a0 calla ONESND ; movi rackupbg_t,a0 ;Show home base view screen ; move a0,@BAKMODS,L ; calla BGND_UD1 ; calla STRT_S ;Static color cycle ; movi CRMP,A8 ;Pal name ; movi cycmem,A9 ;Ram area ; movi [58,64],A10 ;Begin/end color # ; movk 4,a11 ;Rate in ticks ; CREATE CYCPID,COLCYC ;Color cycler on ; JSRP WNDWOFF ; SLEEP 80 ; calla ERASE_TXT SLEEP 96 move @PLYROBJS,a9,L jrz rp10 calla STOPPLYR rp10 move @PLYROBJS+32,a9,L jrz rp12 calla STOPPLYR rp12 clr a0 move a0,@HALT ;>Make tiles movk 8*4,a1 ;# Panels movi -4*>25800+>12c00,a2 ;Velocity movk 10,a3 movi 200,a5 rp20 movi panel_t,a14 calla GPALOBJ ;Get palette & obj calla STFOBJ ;Stuff object data move a2,*a0(OXVEL),L ;Set XVEL move a3,*a0(OYPOS) ;New Y addi 46,a3 move a5,*a0(OZPOS) movk 3,a4 and a1,a4 subk 1,a4 jrne rp30 addi >25800,a2 movk 10,a3 movk 1,a4 xor a4,a5 ;Toggle 0 Bit rp30 calla ADJSTWTL ;Adjust into world calla INSOBJ ;Insert obj dsj a1,rp20 SLEEPK 20 calla STOPOBJS ;Stop tiles callr scores_bcdbin move @P1DATA+THITS,a1 ;>Calc P1 % & hitsmin move a1,a3 movi 100,a0 mpyu a0,a1 move @P1DATA+TSHOTS,a2 divu a2,a1 move a1,@hitpercent1 movi 60,a0 mpyu a0,a3 move @timerp1,a2 divu a2,a3 move a3,@hitsmin1 move @P2DATA+THITS,a1 ;>Calc P2 % & hitsmin move a1,a3 movi 100,a0 mpyu a0,a1 move @P2DATA+TSHOTS,a2 divu a2,a1 move a1,@hitpercent2 movi 60,a0 mpyu a0,a3 move @timerp2,a2 divu a2,a3 move a3,@hitsmin2 movi [2,30],a8 ;Color 2, 30 colors movi SCOREPAL,a9 movi COLTAB,a10 ;Color table movk 7,a11 ;Rate of cycle CREATE CYCPID,CYCLE_TABLE movi [1,1],a8 movi SCOREPAL,a9 movi statscolor_t,a10 movk 3,a11 CREATE CYCPID,CYCLE_TABLE movi [32,2],a8 movi SCOREPAL,a9 movi statscolor_t,a10 movk 5,a11 CREATE CYCPID,CYCLE_TABLE CREATE0 score_prt SLEEPK 1 CREATE0 scorebonus_prt JSRP bonus_main JSRP player_showstats movk 1,a0 move a0,@scoredie ;Kill score processes SLEEPK 8 movk 5,a11 JSRP text_shrink JSRP player_bonuswin ;Show bonus winner! movi 60*8,a0 callr sleep_var callr scores_binbcd movi CYCPID,a0 calla KIL1C debug movk 1,a11 CREATE0 STATIC_COVER movi TUNE3,a0 ;Turn on dictator taunt music calla ONESND SLEEPK 25 movi SCOREPAL,a0 ;*Color clr a1 ;Palette 0, Color 0 move *a0+,a2 ;# Colors calla PALSET movi DESRTPL,a0 ;*Color move *a0,a2 ;# Colors calla GETFPAL srl 8,a0 sll 8,a0 move a0,a1 movi DESRTPL+16,a0 ;*Color calla PALSET movi 2*32*32+2*32+2,a0 move a0,@IRQSKYE ;Dark grey background behind dictator callr anim_killall movk 1,a11 ;2nd taunt dictt movi engtran_s,a8 movi 40,a9 CREATE MADPID,prt_inrackwin move a11,a0 JSRP dictator_taunt movk 3,a0 move a0,@TAUNTOUT ;Taunt over DIE rackupbg_t .long RACKBMOD .word -6,>35b ;x,y start pos. .long -1 incom_st XYTXT PRTF15,652,55,1,"INCOMING TRANSMISSION" .word -1 panel_t .long [177,0],[0,0],RACKBLK ;x,y,img name .word 200,DMAWNZ+M_NOCOLL,CLSDEAD ;zpos,oflags,oid .long 0,0 ;xvel,yvel statscolor_t COLORW 16,0,0 COLORW 20,00,08, 24,00,12, 28,00,16, 31,00,20 COLORW 28,00,24, 24,00,28, 20,00,31, 16,00,28 COLORW 08,20,00, 16,24,00, 24,28,00, 31,31,00 COLORW 20,28,00, 12,24,00, 08,20,00, 02,16,00 COLORW 00,08,20, 00,16,24, 00,24,28, 00,31,31 COLORW 00,20,28, 00,10,24, 00,00,20, 00,00,16 COLORW 16,0,0 .word -1 engtran_s .byte "ENGLISH TRANSLATION",0 .even ******************************** * Print XY sting set if player in game * Trashes A2-A6 SUBRP printifp_xy ;A0=*Plyr1 string, A1=*Plyr2 string PUSH a8 move a1,a8 move @STATUS,a1 btst 0,a1 jrz pipx10 callr prt0_xy ;P1 pipx10 move @STATUS,a1 btst 1,a1 jrz pipx20 move a8,a0 callr prt0_xy ;P2 pipx20 PULL a8 rets ******************************** * Print an XY string set * A0=*XY text * A1=Y:X offset * Trashes A1-A6 * Rets: A0=*Next XY or End PRTF15 .equ 1 ;Font15 PRTF8 .equ 2 ;Font8 MultiColor PRTDEC .equ 4 ;Decimal PRTBCD .equ 8 ;BCD (Long) PRTL .equ 16 ;Long data PRTOBJ .equ 32 ;Object format PRTE .equ >8000 ;Stop on this header PRTF15B .equ 0 PRTF8B .equ 1 PRTDECB .equ 2 PRTBCDB .equ 3 PRTLB .equ 4 PRTOBJB .equ 5 SUBRP prt0_xy clr a1 ;No offset SUBRP prt_xy PUSH a6,a7,a8,a9,a10,a11 move a0,a8 ;A8=*Txt data move a1,a3 ;A3=Y:X offset prtxy5 move *a8+,a1 ;Mode word move *a8+,a9,L ;Scrn Y:X addxy a3,a9 ;+Offset btst PRTOBJB,a1 jrnz pxy300 movk [0,1],a10 ;Char Y:X spacing movi RD7FONT,a11 ;*Font btst PRTF15B,a1 jrz prtxy10 movi RD15FONT,a11 ;*Font prtxy10 move *a8+,a6 ;Color move a6,a0 sll 8,a6 or a0,a6 btst PRTDECB,a1 jrz prtxy30 move *a8+,a2,L ;Binary mode PUSH a8 move *a2,a8 ;Get word btst PRTLB,a1 jrz prtxy20 move *a2,a8,L ;Get long prtxy20 calla HEXTOASC jruc prtxy40 prtxy30 btst PRTBCDB,a1 jruc prtxy70 ; jrz prtxy70 ; move *a8+,a0,L ;BCD mode ; move *a0,a0,L ; callr bcdtoasc ; PUSH a8 ; move a0,a8 prtxy40 clr a0 JSRP STRCNRMO PULL a8 jruc pxy80 prtxy70 ;>String mode btst PRTF8B,a1 jrz prtxy74 movi BLLNP5,a0 calla FINDPAL move a0,a6 movi RD8FONT,a11 clr a0 JSRP STRCNRMO_1 ;Full color font jruc prtxy77 prtxy74 clr a0 ;Sleep time JSRP STRCNRMO ;Print string, objects prtxy77 addk 8,a8 ;Round up srl 4,a8 sll 4,a8 pxy80 move *a8,a0 ;-=End jrge prtxy5 move a8,a0 PULL a6,a7,a8,a9,a10,a11 rets pxy300 move a3,a10 ;>Print obj move *a8+,a3 ;Z move *a8+,a2,L ;*Img move *a2,a1 ;Get ISIZEX srl 1,a1 ;/2 move a9,a0 sub a1,a0 ;Center sll 16,a0 ;X clr a1 movy a9,a1 ;Y movi DMAWNZ+M_NOCOLL,a4 movi CLSNEUT|TYPTEXT|SUBTXT,a5 clr a6 clr a7 move a8,a9 calla BEGINOBJ move a9,a8 move a10,a3 jruc pxy80 ******************************** * Print an XY string set number with no objects * Trashes A2-A7 NOTINUSE SUBRP prtnobj_xy ;A0=*XY Text PUSH a8,a9,a10,a11 move a0,a8 pdnox5 movk [0,1],a10 ;Char y,x spacing movi RD7FONT,a11 ;*Font move *a8+,a1 ;Mode word btst PRTF15B,a1 jrz pdnox10 movi RD15FONT,a11 ;*Font pdnox10 move *a8+,a9,L ;Scrn y/x move *a8+,a6 ;Color move a6,a2 sll 8,a6 or a2,a6 btst PRTDECB,a1 jrz pdnoxx move *a8+,a2,L ;Binary mode move *a2,a0 ;Get word btst PRTLB,a1 jrz pdnox20 move *a2,a0,L ;Get long pdnox20 PUSH a8 move a0,a8 calla HEXTOASC clr a0 JSRP STRCNRM PULL a8 move *a8,a0 ;-=End jrge pdnox5 pdnoxx PULL a8,a9,a10,a11 rets .endif ******************************** * Vertically shrink text * Trashes A0-A10 SUBRP text_shrink ;A11=Sleep time movi txtssnd,a0 calla ONESND movk 8,a10 ;Size for x2 shrinkage txs20 move a11,a0 calla PRCSLP clr a8 move @OBJLST,a9,L ;>Find and shrink txs40 move *a9(OID),a0 cmpi CLSNEUT|TYPTEXT|SUBTXT,a0 jrne txs70 move *a9(OSIZEY),a0 subk 1,a0 ;Shrink jrz txs70 ;Min of 1 cmp a10,a0 jrlt txs50 subk 1,a0 ;Shrink again cmpi 15,a0 jrlt txs50 subk 5,a0 ;Shrink x7 txs50 move a0,*a9(OSIZEY) movk 1,a8 txs70 move *a9,a9,L jrnz txs40 subk 1,a10 ;Lower x2 min move a8,a8 jrnz txs20 calla ERASE_TXT RETP ******************************** * Delete text at a ZPOS * Trashes A0-A3 SUBRP text_delz ;A0=ZPOS move a0,a2 move @OBJLST,a0,L tdz40 move *a0(OID),a1 cmpi CLSNEUT|TYPTEXT|SUBTXT,a1 jrne tdz70 move *a0(OZPOS),a1 cmp a2,a1 jrne tdz70 move *a0,a3,L ;Get * next calla DELOBJ move a3,a0 jruc tdz80 tdz70 move *a0,a0,L tdz80 jrnz tdz40 ;Continue? rets ******************************** * Delete text in a Y range * Trashes A0-A3 SUBRP text_delyrng ;A0=Lower Y, A1=Upper Y move @WORLDTLY+16,a2 add a2,a1 ;A1=World adjusted upper Y add a0,a2 ;A2=^ lower Y move @OBJLST,a0,L tdy40 move *a0(OID),a3 cmpi CLSNEUT|TYPTEXT|SUBTXT,a3 jrne tdy70 move *a0(OYPOS),a3 cmp a2,a3 jrlt tdy70 cmp a1,a3 jrgt tdy70 move *a0,a3,L ;Get * next calla DELOBJ move a3,a0 jruc tdy80 tdy70 move *a0,a0,L tdy80 jrnz tdy40 ;Continue? rets ******************************** * Print text in rackup window SUBR prt_inrackwin ;A8=*Text, A9=#Loops ;turmell made global move a9,*a13(PDATA) SLEEPK 30 movk 1,a10 ;Y:X spacing movi RD7FONT,a11 ;font table pirw10 SLEEPK 10 movi -210,a0 ;-2 ;TURMELL move a0,@LOWZ movi [187,198],a9 ;Y:X movi >2525,a6 clr a0 PUSH a8 JSRP STRCNRMO PULL a8 SLEEPK 10 movi 20000-210,a0 callr text_delz move *a13(PDATA),a0 subk 1,a0 move a0,*a13(PDATA) jrgt pirw10 DIE ******************************** * Convert scores to binary SUBRP scores_bcdbin move @P1DATA+PSCORE,a0,L calla BCDBIN move a0,@P1DATA+PSCORE,L move a0,@score1old,L move @P2DATA+PSCORE,a0,L calla BCDBIN move a0,@P2DATA+PSCORE,L move a0,@score2old,L rets ******************************** * Convert scores to BCD SUBRP scores_binbcd move @P1DATA+PSCORE,a0,L calla BINBCD move a0,@P1DATA+PSCORE,L move @P2DATA+PSCORE,a0,L calla BINBCD move a0,@P2DATA+PSCORE,L rets ******************************** * Print players score (Process) LONGPD scorecopy1 ,0 ;Last P1 score LONGPD scorecopy2 ,2 ;^ P2 SUBRP score_prt clr a0 move a0,@scoredie subk 1,a0 move a0,*a13(scorecopy1),L move a0,*a13(scorecopy2),L scp20 move @STATUS,a8 btst 0,a8 jrz scp50 move *a13(scorecopy1),a0,L move @P1DATA+PSCORE,a1,L cmp a0,a1 jreq scp50 move a1,*a13(scorecopy1),L movi 305,a0 callr text_delz movi 305-20000,a0 move a0,@LOWZ movi score1_st,a0 callr prt0_xy ;P1 scp50 SLEEPK 3 btst 1,a8 jrz scp80 move *a13(scorecopy2),a0,L move @P2DATA+PSCORE,a1,L cmp a0,a1 jreq scp80 move a1,*a13(scorecopy2),L movi 306,a0 callr text_delz movi 306-20000,a0 move a0,@LOWZ movi score2_st,a0 callr prt0_xy ;P2 scp80 SLEEPK 3 move @scoredie,a0 jrle scp20 DIE score1_st XYNUM PRTDEC+PRTL+PRTF15,85,16,32,P1DATA+PSCORE .word -1 score2_st XYNUM PRTDEC+PRTL+PRTF15,315,16,33,P2DATA+PSCORE .word -1 ******************************** * Print players bonus score (Process) SUBRP scorebonus_prt movi -1,a0 move a0,*a13(scorecopy1),L move a0,*a13(scorecopy2),L movk [0,1],a10 ;Spacing movi RD7FONT,a11 scbp20 move @STATUS,a2 btst 0,a2 jrz scbp50 move @P1DATA+PSCORE,a8,L ;>Calc bonus score move *a13(scorecopy1),a0,L cmp a0,a8 jreq scbp50 move a8,*a13(scorecopy1),L movi 300,a0 callr text_delz move @score1old,a0,L movi 300-20000,a1 movi >2020,a6 movi [35,85],a9 ;Scrn y/x callr scoreb_prt2 scbp50 SLEEPK 3 move @STATUS,a2 btst 1,a2 jrz scbp80 move @P2DATA+PSCORE,a8,L ;>Calc bonus score move *a13(scorecopy2),a0,L cmp a0,a8 jreq scbp80 move a8,*a13(scorecopy2),L movi 301,a0 callr text_delz move @score2old,a0,L movi 301-20000,a1 movi >2121,a6 movi [35,315],a9 ;Scrn y/x callr scoreb_prt2 scbp80 SLEEPK 3 move @scoredie,a0 jrle scbp20 DIE scoreb_prt2 move a1,@LOWZ sub a0,a8 calla HEXTOASC clr a0 ;No sleep JSRP STRCNRMO ;Print rets ******************************** * Variable sleep SUBRP sleep_var ;A0=Sleep time move @SWITCH+16,a1 ;Chk for impatience not a1 andi >24,a1 jrz sv20 srl 2,a0 ;1/4 sleep time sv20 jauc PRCSLP ******************************** * Give collection bonus .bss bonuscnt ,32 ;P1/P2 item cnt (word*2) SUBRP bonus_main ; movk 3,a0 ; move a0,@STATUS ;DEBUG ; ; movi 200,a0 ;>DEBUG ; calla RNDRNG0 ; move a0,@P1DATA+TFLAGS ; movi 200,a0 ; calla RNDRNG0 ; move a0,@P2DATA+TFLAGS ; ; movi 200,a0 ; calla RNDRNG0 ; move a0,@P1DATA+CASHCNT ; movi 200,a0 ; calla RNDRNG0 ; move a0,@P2DATA+CASHCNT ; ; movi 200,a0 ; calla RNDRNG0 ; move a0,@P1DATA+THSTGS ; movi 200,a0 ; calla RNDRNG0 ; move a0,@P2DATA+THSTGS movi collectb_s,a8 movi 100,a9 CREATE0 prt_inrackwin move a0,-*a12,L movi -1,a0 move a0,@bonusstat movi bonus_st,a0 callr prt0_xy move @STATUS,a2 btst 0,a2 jrz bm20 movi bonusp1_as,a8 CREATE ANIMPID,anim_script ;P1 bm20 btst 1,a2 jrz bm40 movi bonusp2_as,a8 CREATE ANIMPID2,anim_script ;P2 bm40 movi bonus1p1_st,a0 movi bonus1p2_st,a1 movi 210,a2 movi [70,116],a9 ;YX movi 60,a10 movi TFLAGS,a11 JSRP bonus_cntup ;Flags clr a0 move a0,@bonusstat movi bonus2p1_st,a0 movi bonus2p2_st,a1 movi 211,a2 movi [108,116],a9 ;YX movi 40,a10 movi CASHCNT,a11 JSRP bonus_cntup ;Crystals movk 1,a0 move a0,@bonusstat movi bonus3p1_st,a0 movi bonus3p2_st,a1 movi 212,a2 movi [146,116],a9 ;YX movi 100,a10 movi THSTGS,a11 JSRP bonus_cntup ;Hostages movi 60*4,a0 callr sleep_var move *a12+,a0,L clr a1 move a1,*a0(PDATA) ;Stop window text movk 2,a0 move a0,@bonusstat movi 55,a0 movi 200,a1 callr text_delyrng SLEEPK 30 RETP collectb_s .byte "COLLECTION BONUS",0 SUBRP bonus_cntup ;A0=*P1_st, A1=*P2_st, A2=Z ;A9=Base YX, A10=Pts each, A11=Plyr data offset move @STATUS,a3 subk 3,a3 jrnz bcu10 sll 1,a10 ;*2 pts for two players bcu10 PUSH a2 callr printifp_xy movi bonuscnt,a8 CREATE0 bonus_prtitem ;Display move a0,-*a12,L PULL a2 move a2,*a0(bonusz) clr a0 move a0,*a8,L ;Cnt=0 movi racksup,a0 calla ONESND bcu20 SLEEPK 1 move @STATUS,a2 clr a3 btst 0,a2 jrz bcu30 move *a8,a0 movi P1DATA,a1 add a11,a1 move *a1,a1 cmp a1,a0 jrge bcu30 ;Count maxed? addk 1,a0 move a0,*a8 movk 1,a3 move @P1DATA+PSCORE,a0,L add a10,a0 move a0,@P1DATA+PSCORE,L bcu30 btst 1,a2 jrz bcu60 move *a8(16),a0 movi P2DATA,a1 add a11,a1 move *a1,a1 cmp a1,a0 jrge bcu60 ;Count maxed? addk 1,a0 move a0,*a8(16) movk 1,a3 move @P2DATA+PSCORE,a0,L add a10,a0 move a0,@P2DATA+PSCORE,L bcu60 move a3,a3 jrnz bcu20 ;More to do? movi rackoff,a0 ;End calla ONESND SLEEPK 5 move *a8+,a1 ;P1 move *a8,a2 ;P2 move @WORLDTLX+16,a10 cmp a2,a1 jrhi bcu200 ;P1 won? jrlo bcu180 ;P2 won? move @P1DATA+PSCORE,a0,L ;Tie! move @P2DATA+PSCORE,a1,L cmp a1,a0 jrhs bcu200 ;P1 won? bcu180 addi 190,a10 ;Min X of tiles bcu200 movi 190,a11 ;X range of tiles movk 3,a8 bcu220 movi DMACNZ+M_NOCOLL,a3 callr bonus_flashblk SLEEPK 2 movi DMAWNZ+M_NOCOLL,a3 callr bonus_flashblk SLEEPK 8 dsj a8,bcu220 move *a12+,a0,L calla KILL SLEEP 120 RETP ******************************** * Print bonus item count & score (Process) WORDPD bonusz ,0 ;ZPOS for text, set by creator SUBRP bonus_prtitem ;A8=*P1/2 item cnt, A9=Y:X, A10=Pts each movi RD7FONT,a11 bpilp move *a13(bonusz),a0 callr text_delz move @STATUS,a2 move a10,a4 ;A4=Pts movk [0,1],a10 ;Spacing btst 0,a2 jrz bpi50 PUSH a8,a9 move *a8,a8 ;Get P1 cnt move a8,a3 movi >2525,a6 callr strcnrmo_nosleep ;Print cnt callr strcnrmo_nosleep2 ;Print score PULL a8,a9 bpi50 btst 1,a2 jrz bpi80 PUSH a8,a9 addi 160,a9 ;+X move *a8(16),a8 ;Get P2 cnt move a8,a3 movi >2525,a6 callr strcnrmo_nosleep ;Print cnt callr strcnrmo_nosleep2 ;Print score PULL a8,a9 bpi80 move a4,a10 SLEEPK 2 jruc bpilp SUBRP strcnrmo_nosleep2 mpyu a4,a3 move a3,a8 addi 45,a9 ;+X SUBRP strcnrmo_nosleep PUSH a9 calla HEXTOASC move *a13(bonusz),a0 subi 20000,a0 move a0,@LOWZ clr a0 ;No sleep JSRP STRCNRMO PULL a9 rets bonusp2_as ;Scripts ASBXY 160,0 bonusp1_as ASADDW 1,animscnt ASNEW bonusflag_t ASFRA flag_l,>20,100 bas10 ASSLP 2 ASJMPEQ -1,bonusstat,bas10 ASNEW bonusgem_t ASFRA gems_l,>21,100 bas20 ASSLP 2 ASJMPEQ 0,bonusstat,bas20 ASNEW bonushstg_t bas30 ASSLP 2 ASJMPEQ 1,bonusstat,bas30 ASKIL 0,>ff ASDELM 0,>ff ASADDW -1,animscnt ASEND bonus_st XYOBJ PRTOBJ,200,16,500,TSCORE .word -1 bonus1p1_st XYTXT 0,116,70,35,"X =" .word -1 bonus1p2_st XYTXT 0,276,70,35,"X =" .word -1 bonus2p1_st XYTXT 0,116,108,35,"X =" .word -1 bonus2p2_st XYTXT 0,276,108,35,"X =" .word -1 bonus3p1_st XYTXT 0,116,146,35,"X =" .word -1 bonus3p2_st XYTXT 0,276,146,35,"X =" .word -1 bonusflag_t ASITEMN 50,55,FLG1,220,DMAWNZ,>20 .word -1000 bonusgem_t ASITEMN 50,90,GEMS1,220,DMAWNZ,>21 .word -1000 bonushstg_t ASITEMN 50,130,HSTGHD,220,DMAWNZ,>21 .word -1000 flag_l LW FLG1,5 LW FLG2,5 LW FLG3,5 LW FLG4,5 LWL0 FLG5,5 gems_l LW GEMS1,4 LW GEMS2,4 LW GEMS3,4 LW GEMS4,4 LW GEMS3,4 LW GEMS2,4 LWL0 GEMS1,4 SUBRP bonus_flashblk ;A3=OFLAGS, A10=XMin, A11=XWidth move @OBJLST,a1,L bfb20 move *a1(OZPOS),a0 subi 200,a0 subk 1,a0 jrhi bfb30 ;Not 200-201? move *a1(OXPOS),a0 sub a10,a0 cmp a11,a0 jrhi bfb30 move a3,*a1(OFLAGS) movi >909,a0 move a0,*a1(OCONST) bfb30 move *a1,a1,L jrnz bfb20 rets ******************************** * Show player stats and give bonuses SUBRP player_showstats movi gamestat_s,a8 movi 100,a9 CREATE0 prt_inrackwin move a0,-*a12,L clr a7 ;A7=Bonus pts Y:X offset ; move @STATUS,a0 ; cmpi 3,a0 ; jrne pst20 ; movi statsbo_st,a0 ; callr prt0_xy pst20 movi statssnd_t,a8 movi stats_st,a9 movi statsp1_st,a10 movi statsp2_st,a11 pst50 move *a8+,a0,L calla ONESND move @STATUS,a6 move a9,a0 callr prt0_xy move a0,a9 btst 0,a6 ;P1 jrz pst300 move a10,a0 callr prt0_xy move a0,a10 pst300 btst 1,a6 ;P2 jrz pst400 ;pst310 move a11,a0 callr prt0_xy move a0,a11 pst400 move a7,-*a12,L SLEEPK 10 move *a12+,a7,L move *a9,a0 addk 1,a0 jrnz pst50 ;End? ;turmell ******************************************************************** ;now do bonus word rackup move @STATUS,a0 cmpi 3,a0 jrne pst500 clr a7 ;A7=Bonus pts Y:X offset movi statsbo_st,a0 callr prt0_xy bpst20 movi statssnd_t,a8 movk 11,a9 ;i stats_st,a9 movi statsp1_st,a10 movi statsp2_st,a11 bpst50 move *a8+,a0,L calla ONESND bpst310 move *a10(-32),a2,L move *a11(-32),a3,L cmpi P1DATA+TMINEDTH,a2 jrne bpst330 ;Normal compare? SWAP a2,a3 bpst330 move *a2,a2 move *a3,a3 movi P1DATA+PSCORE,a4 movi rackp1p,a0 clr a1 cmp a3,a2 jrz bpst380 ;Same stats? jrhi bpst350 ;P1 higher? movi P2DATA+PSCORE,a4 movi rackp2p,a0 addi 300,a7 ;P2 offset bpst350 move *a4,a2,L ;Give points addi 500,a2 move a2,*a4,L movi statspts_st,a0 move a7,a1 callr prt_xy bpst380 srl 16,a7 ;X=0 addk 10,a7 ;Y=Y+10 sll 16,a7 bpst400 move a7,-*a12,L SLEEPK 5 move *a12+,a7,L dsj a9,bpst50 ************************************************************************** pst500 movi 60*14,a0 callr sleep_var move *a12+,a0,L clr a1 move a1,*a0(PDATA) ;Stop window text RETP gamestat_s .byte "GAME STATISTICS",0 .even statssnd_t .long stats1,stats2,stats3,stats4,stats5,stats6,stats7,stats8 .long stats9,stats10,stats11,stats12 SY .equ 55 statsbo_st XYOBJ PRTOBJ,50,45,280,BWORD XYOBJ PRTOBJ,350,45,280,BWORD .word -1 statspts_st XYOBJ PRTOBJ,50,SY,280,FIVE .word -1 stats_st XYTXT 0,200,SY,2,"SHOTS FIRED" XYTXT PRTE,200,SY+10,3,"ENEMY HITS" XYTXT PRTE,200,SY+20,4,"HIT PERCENTAGE" XYTXT PRTE,200,SY+30,5,"HITS PER MINUTE" XYTXT PRTE,200,SY+40,6,"WEAPONS PICKED UP" XYTXT PRTE,200,SY+50,7,"BOMBS USED" XYTXT PRTE,200,SY+60,8,"MISSILE STRIKES" XYTXT PRTE,200,SY+70,9,"BIG STUFF DESTROYED" XYTXT PRTE,200,SY+80,10,"EXTRA MEN EARNED" XYTXT PRTE,200,SY+90,11,"MINES STEPPED ON" XYTXT PRTE,200,SY+100,12,"KEYS COLLECTED" XYTXT PRTE,200,SY+110,13,"HOSTAGES NOT RESCUED" .word -1 ;End statsp1_st XYNUM PRTDEC,95,SY,2,P1DATA+TSHOTS XYNUM PRTDEC+PRTE,95,SY+10,3,P1DATA+THITS XYNUM PRTDEC+PRTE,95,SY+20,4,hitpercent1 XYNUM PRTDEC+PRTE,95,SY+30,5,hitsmin1 XYNUM PRTDEC+PRTE,95,SY+40,6,P1DATA+TWPNS XYNUM PRTDEC+PRTE,95,SY+50,7,P1DATA+BMBSUSED XYNUM PRTDEC+PRTE,95,SY+60,8,P1DATA+TMISLS XYNUM PRTDEC+PRTE,95,SY+70,9,P1DATA+TBIGSTF XYNUM PRTDEC+PRTE,95,SY+80,10,P1DATA+TEARNED XYNUM PRTDEC+PRTE,95,SY+90,11,P1DATA+TMINEDTH XYNUM PRTDEC+PRTE,95,SY+100,12,P1DATA+TKEYS XYNUM PRTDEC+PRTE,95,SY+110,13,HSTGS_LOST .word -1 statsp2_st XYNUM PRTDEC,305,SY,2,P2DATA+TSHOTS XYNUM PRTDEC+PRTE,305,SY+10,3,P2DATA+THITS XYNUM PRTDEC+PRTE,305,SY+20,4,hitpercent2 XYNUM PRTDEC+PRTE,305,SY+30,5,hitsmin2 XYNUM PRTDEC+PRTE,305,SY+40,6,P2DATA+TWPNS XYNUM PRTDEC+PRTE,305,SY+50,7,P2DATA+BMBSUSED XYNUM PRTDEC+PRTE,305,SY+60,8,P2DATA+TMISLS XYNUM PRTDEC+PRTE,305,SY+70,9,P2DATA+TBIGSTF XYNUM PRTDEC+PRTE,305,SY+80,10,P2DATA+TEARNED XYNUM PRTDEC+PRTE,305,SY+90,11,P2DATA+TMINEDTH XYNUM PRTDEC+PRTE,305,SY+100,12,P2DATA+TKEYS XYNUM PRTDEC+PRTE,305,SY+110,13,HSTGS_LOST .word -1 ******************************** * Player bonus winner animations SUBRP player_bonuswin CLR A9 ;A9=LITTLE MESSAGE ON CONTROL PANEL ;TURMELL movi plbwp1o_as,a8 ;P1 only initial script move @STATUS,a0 btst 1,a0 jrz pbw90 MOVK 1,A9 ;TURMELL movi plbwp2o_as,a8 ;P2 only initial script btst 0,a0 jrz pbw90 movi plbwp1w_as,a8 ;P1 win initial script MOVK 2,A9 ;TURMELL move @P1DATA+PSCORE,a0,L move @P2DATA+PSCORE,a1,L cmp a1,a0 ;P1 score > P2 score? jrhi pbw90 jrlo pbw80 ;P1sc < P2sc move @score1old,a3,L move @score2old,a4,L cmp a4,a3 ;Score same! jrlo pbw90 ;P1 old < P2 old? pbw80 movi plbwp2w_as,a8 ;P2 win initial script MOVK 3,A9 ;TURMELL pbw90 CREATE ANIMPID,PRT_WIN ;PRINT WINNER MESSAGE ;TURMELL CREATE ANIMPID,anim_script movi 1*32*32+15*32+27,a0 ;Bkgnd color move a0,@IRQSKYE move @OBJLST,a1,L ;>Tiles fly away pbw200 move *a1(OZPOS),a0 subi 200,a0 subk 1,a0 jrhi pbw230 movk 8,a2 ;Vel btst 0,a0 jrnz pbw220 neg a2 ;-Vel pbw220 move a2,*a1(OYVEL+16) pbw230 move *a1,a1,L jrnz pbw200 SLEEP 60 move @OBJLST,a0,L ;>Delete tiles pbw300 move *a0(OZPOS),a2 subi 200,a2 subk 1,a2 jrhi pbw330 move *a0,a1,L ;Get * to next obj calla DELOBJ ;Kill move a1,a0 jruc pbw340 pbw330 move *a0,a0,L pbw340 jrnz pbw300 movi 200,a0 callr sleep_var ; movi plbwpal_t,a0 ;*Palette list ; movk 5,a1 ; movi >40,a2 ; move a2,@PCOUNT ; calla FADEOUT2 ; ; SLEEPK 30 RETP PRT_WIN ;TURMELL ;A9=0-3 FOR MESSAGE TO PRINT ;0=PLYR 1 ONLY ;1=PLYR 2 ONLY ;2=PLYR 1 WINS OVER PLYR 2 ;3=PLYR 2 WINS OVER PLYR 1 SLL 5,A9 ADDI WINMSGS,A9 MOVE *A9,A8,L ;MESSAGE PNTR movi 22H,a9 CREATE ANIMPID,prt_inrackwin DIE WINMSGS .LONG WIN0,WIN1,WIN2,WIN3 ;COME UP WITH MORE CLEVER TEXT HERE! WIN0 .BYTE "PLAYER ONE IS GREAT!",0 WIN1 .BYTE "PLAYER TWO IS GREAT!",0 WIN2 .BYTE "PLAYER ONE KICKED BUTT!",0 WIN3 .BYTE "PLAYER TWO KICKED BUTT!",0 .EVEN ;plbwpal_t ; .long 0,BIGPL1,GUNSP1,CLDS9,DESRTPL,BIGPL2,GUNSP2,0 plbwp1o_as ASNEW plyr1wnew_t ASXY >40,>1f,70,0 ASJMP plbw_as plbwp2o_as ASNEW plyr2wnew_t ASXY >40,>1f,-50,0 ASSVL BIGPL2 ASPAL >41 ASPAL >54 ASPAL >55 ASSVL GUNSP2 ASPAL >42 ASPAL >48 ASJMP plbw_as plbwp1w_as ASNEW plyr1wnew_t ASNEW plyr2lnew_t ASSVL BIGPL2 ASPAL >81 ASSVL GUNSP2 ASPAL >82 ASPAL >88 ASRUN plbw2txt_as ASJMP plbw_as plbwp2w_as ASNEW plyr1lnew_t ASNEW plyr2wnew_t ASSVL BIGPL2 ASPAL >41 ASPAL >54 ASPAL >55 ASSVL GUNSP2 ASPAL >42 ASPAL >48 ASRUN plbw1txt_as plbw_as ASADDW 1,animscnt ASNEW plyrbgnew_t ASFRA ribbonb_l,>48,-1 ASFRA ribbonl_l,>88,-1 ASRUN pbwcloud1_as ASRUN pbwcloud2_as ASRUN pbwcloud3_as ASRUN pbwsnd_as ASSLP 90 ASFRA plhdcc_l,>4c,1 ASFRA plhdmm_l,>4d,1 ASLAB 5 ASXY 0,>ff,0,1 ;Pan up ASSLP 1 ASDSJ ASLAB 20 ASXY 0,>ff,0,2 ASSLP 1 ASDSJ ASLAB 5 ASXY 0,>ff,0,1 ASSLP 1 ASDSJ ASANI LBOW2,>54 ASANI WRISTBND2,>50 ASANI HAND2,>55 ASANI GUN2,>51 ASXY >44,1,-1000,0 ;Put middle strap on screen ASSLP 4 ASANI LBOW1,>54 ASANI WRISTBND1,>50 ASANI HAND1,>55 ASANI GUN1,>51 ASXY >44,1,-1000,0 ;Straps off screen ASLAB 40 ASSND rackgun ASLAB 2 ASXY >50,>7,0,1 ;Shake gun ASXY >56,0,-1000,0 ;Show flame ASSLP 1 ASDSJ ASLAB 2 ASXY >50,>7,0,-1 ASXY >56,0,1000,0 ;Hide flame ASSLP 1 ASDSJ ASDSJ ASSLP 30 ASLAB 5 ASXY 0,>ff,0,-1 ;Pan down ASSLP 1 ASDSJ ASLAB 20 ASXY 0,>ff,0,-2 ASSLP 1 ASDSJ ASLAB 5 ASXY 0,>ff,0,-1 ASSLP 1 ASDSJ ASSLP 20 ASANI LBOW2,>54 ASANI WRISTBND2,>50 ASANI HAND2,>55 ASANI GUN2,>51 ASXY >44,1,1000,0 ;Middle strap on screen ASSLP 4 ASANI LBOW3,>54 ASANI WRISTBND3,>50 ASANI HAND3,>55 ASANI GUN3,>51 ASXY >44,1,1000,0 ;1st strap on screen ASADDW -1,animscnt ASEND pbwcloud1_as ASLAB 4 ASLAB 188 ASXY >10,0,1,0 ASSLP 4 ASDSJ ASXY >10,0,-188,0 ASDSJ ASEND pbwcloud2_as ASLAB 4 ASLAB 188 ASXY >11,0,1,0 ASSLP 5 ASDSJ ASXY >11,0,-188,0 ASDSJ ASEND pbwcloud3_as ASLAB 4 ASLAB 188 ASXY >12,0,1,0 ASSLP 6 ASDSJ ASXY >12,0,-188,0 ASDSJ ASEND pbwsnd_as ;Sounds ASSLP 130 ASSND shout ASSLP 170 ASSND gigle1 ASEND CLY .equ 142 plyrbgnew_t ;X,Y,img name,Z,oflags,oid ASITEMN 12,-40,CLOUD,25,DMAWNZ+M_FLIPH,>10 ASITEMN 200,-40,CLOUD,25,DMAWNZ+M_FLIPH,>10 ASITEMN 388,-40,CLOUD,25,DMAWNZ+M_FLIPH,>10 ASITEMN 12,-10,CLOUD,24,DMAWNZ+M_FLIPH,>11 ASITEMN 200,-10,CLOUD,24,DMAWNZ+M_FLIPH,>11 ASITEMN 388,-10,CLOUD,24,DMAWNZ+M_FLIPH,>11 ASITEMN -178,20,CLOUD,23,DMAWNZ,>12 ASITEMN 10,20,CLOUD,23,DMAWNZ,>12 ASITEMN 198,20,CLOUD,23,DMAWNZ,>12 ASITEMN 10,CLY,CLIFF3A,30,DMAWNZ,8 ASITEMN 128,CLY,CLIFF3A,30,DMAWNZ+M_FLIPH,8 ASITEMN 129,CLY+6,CLIFF2A,30,DMAWNZ,8 ASITEMN 186,CLY-1,CLIFF3A,30,DMAWNZ,8 ASITEMN 304,CLY-1,CLIFF3A,30,DMAWNZ+M_FLIPH,8 ASITEMN 355,CLY+7,CLIFF2A,30,DMAWNZ+M_FLIPH,8 ASITEMN 356,CLY+1,CLIFF3A,30,DMAWNZ,8 .word -1000 P1X .equ 120 P1Y .equ 23 P1LX .equ 70 P1LY .equ 30 P2X .equ 260 P2Y .equ 23 P2LX .equ 305 P2LY .equ 30 plyr1wnew_t ASITEMN P1X,P1Y,CCHED1,51,DMAWNZ,>4c ASITEMN P1X,P1Y,RIB1,45,DMAWNZ,>48 ASITEMN P1X,P1Y,BDBOD1,50,DMAWNZ,>40 ASITEMN P1X,P1Y,BDBOD2,50,DMAWNZ,>40 ASITEMN P1X,P1Y,RTARMBND,51,DMAWNZ,>40 ASITEMN P1X,P1Y,RTLBOW1,52,DMAWNZ,>40 ASITEMN P1X,P1Y,RTWRISTBND,53,DMAWNZ,>40 ASITEMN P1X,P1Y,RTHAND1,53,DMAWNZ,>40 ASITEMN P1X,P1Y,LFTARMBND,52,DMAWNZ,>40 ASITEMN P1X,P1Y,LBOW3,51,DMAWNZ,>54 ASITEMN P1X,P1Y,WRISTBND3,52,DMAWNZ,>50 ASITEMN P1X,P1Y,HAND3,54,DMAWNZ,>55 ASITEMN P1X,P1Y,GUN3,53,DMAWNZ,>51 ASITEMN P1X,P1Y,STRAP,51,DMAWNZ,>44 ASITEMN P1X+1000,P1Y,STRAPA,51,DMAWNZ,>45 ASITEMN P1X+1054,P1Y-33,T72BLAST1,55,DMAWNZ+M_FLIPV,>56 ASITEMN P1X+2054,P1Y-33,T72BLAST2,55,DMAWNZ+M_FLIPV,>56 .word -1000 plyr2wnew_t ASITEMN P2X,P2Y,MMHED1,51,DMAWNZ+M_FLIPH,>4d ASITEMN P2X,P2Y-5,RIB1,45,DMAWNZ,>48 ASITEMN P2X,P2Y,BDBOD1,50,DMAWNZ+M_FLIPH,>41 ASITEMN P2X,P2Y,BDBOD2,50,DMAWNZ+M_FLIPH,>42 ASITEMN P2X,P2Y,RTARMBND,51,DMAWNZ+M_FLIPH,>40 ASITEMN P2X,P2Y,RTLBOW1,52,DMAWNZ+M_FLIPH,>41 ASITEMN P2X,P2Y,RTWRISTBND,53,DMAWNZ+M_FLIPH,>40 ASITEMN P2X,P2Y,RTHAND1,53,DMAWNZ+M_FLIPH,>41 ASITEMN P2X,P2Y,LFTARMBND,52,DMAWNZ+M_FLIPH,>40 ASITEMN P2X,P2Y,LBOW3,51,DMAWNZ+M_FLIPH,>54 ASITEMN P2X,P2Y,WRISTBND3,52,DMAWNZ+M_FLIPH,>50 ASITEMN P2X,P2Y,HAND3,54,DMAWNZ+M_FLIPH,>55 ASITEMN P2X,P2Y,GUN3,53,DMAWNZ+M_FLIPH,>51 ASITEMN P2X,P2Y,STRAP,51,DMAWNZ+M_FLIPH,>44 ASITEMN P2X+1000,P2Y,STRAPA,51,DMAWNZ+M_FLIPH,>45 ASITEMN P2X+945,P2Y-33,T72BLAST1,55,DMAWNZ+M_FLIPV,>56 ASITEMN P2X+1945,P2Y-33,T72BLAST2,55,DMAWNZ+M_FLIPV,>56 .word -1000 plyr1lnew_t ASITEMN P1LX,P1LY,SMHEAD1,40,DMAWNZ+M_FLIPH,>80 ASITEMN P1LX-10,P1LY,LILRIB1,35,DMAWNZ,>88 ASITEMN P1LX,P1LY,SMBOD1,40,DMAWNZ+M_FLIPH,>81 ASITEMN P1LX,P1LY,SMBOD2,40,DMAWNZ+M_FLIPH,>82 ASITEMN P1LX,P1LY,SMARMBND,41,DMAWNZ+M_FLIPH,>80 ASITEMN P1LX,P1LY,SMWRISTS,41,DMAWNZ+M_FLIPH,>80 .word -1000 plyr2lnew_t ASITEMN P2LX,P2LY,SMHEAD2,40,DMAWNZ,>80 ASITEMN P2LX-1,P2LY-3,LILRIB1,35,DMAWNZ,>88 ASITEMN P2LX,P2LY,SMBOD1,40,DMAWNZ,>81 ASITEMN P2LX,P2LY,SMBOD2,40,DMAWNZ,>82 ASITEMN P2LX,P2LY,SMARMBND,41,DMAWNZ,>80 ASITEMN P2LX,P2LY,SMWRISTS,41,DMAWNZ,>80 .word -1000 ribbonb_l LW RIB1,4 LW RIB2,4 LW RIB3,4 LW RIB4,4 LWL0 RIB5,4 ribbonl_l LW LILRIB1,3 LW LILRIB2,4 LW LILRIB3,3 LW LILRIB4,4 LWL0 LILRIB5,4 plhdcc_l LW CCHED1,30 LW CCHED2,8 LW CCHED3,8 LW CCHED4,60 LW CCHED3,5 LW CCHED2,5 LW CCHED1,70 LW CCHED5,5 LWL0 CCHED6,15 plhdmm_l LW MMHED1,30 LW MMHED2,8 LW MMHED3,8 LW MMHED4,60 LW MMHED3,5 LW MMHED2,5 LW MMHED1,70 LW MMHED5,5 LWL0 MMHED6,15 plbw1txt_as ASSLP 140 ASNEW plbw1balloon_t ASASM movk 2,a0 calla RNDRNG0 subk 1,a0 jrn plbw110 jrz plbw120 ASENDASM ASTXT plbw1lose1_st ASJMP plbw280 plbw110 ASENDASM ASTXT plbw1lose2_st ASJMP plbw280 plbw120 ASENDASM ASTXT plbw1lose3_st ASJMP plbw280 plbw2txt_as ASSLP 140 ASNEW plbw2balloon_t ASASM movk 2,a0 calla RNDRNG0 subk 1,a0 jrn plbw210 jrz plbw220 ASENDASM ASTXT plbw2lose1_st ASJMP plbw280 plbw210 ASENDASM ASTXT plbw2lose2_st ASJMP plbw280 plbw220 ASENDASM ASTXT plbw2lose3_st plbw280 ASSLP 140 ASDEL 2 ASTXTK ASEND plbw1balloon_t ASITEMN P1LX+0,P1LY+8-20,BLLN1,46,DMAWNZ,2 ASITEMN P1LX+20,P1LY+8-20,BLLN2,46,DMAWNZ,2 ASITEMN P1LX+40,P1LY+8-20,BLLN2,46,DMAWNZ,2 ASITEMN P1LX+80,P1LY+8-20,BLLN1,46,DMAWNZ+M_FLIPH,2 ASITEMN P1LX+40,P1LY+40-20,BOON2B,47,DMAWNZ+M_FLIPH,2 .word -1000 plbw2balloon_t ASITEMN P2LX-80,P2LY+8-20,BLLN1,46,DMAWNZ,2 ASITEMN P2LX-60,P2LY+8-20,BLLN2,46,DMAWNZ,2 ASITEMN P2LX-40,P2LY+8-20,BLLN2,46,DMAWNZ,2 ASITEMN P2LX+0,P2LY+8-20,BLLN1,46,DMAWNZ+M_FLIPH,2 ASITEMN P2LX-40,P2LY+40-20,BOON2B,47,DMAWNZ,2 .word -1000 plbw1lose1_st XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I SUCK AT" XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"THIS GAME." .word -1 plbw1lose2_st XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I NEED" XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"A DRINK..." .word -1 plbw1lose3_st XYTXT PRTF8,P1LX+40,P1LY+12-20,2,"I NEED" XYTXT PRTF8,P1LX+40,P1LY+22-20,2,"MORE CASH." .word -1 plbw2lose1_st XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"PLAYER 1" XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"IS A DORK." .word -1 plbw2lose2_st XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"THAT BOY" XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"IS GOOD..." .word -1 plbw2lose3_st XYTXT PRTF8,P2LX-40,P2LY+12-20,2,"HOW CAN I" XYTXT PRTF8,P2LX-40,P2LY+22-20,2,"BEAT HIM?" .word -1 ******************************** * Dictator taunts players SUBRP dictator_taunt ;A0=Taunt # (0-?) movi dictator0_as,a8 subk 1,a0 jrnz dt20 movi dictator1_1p_as,a8 ;1 Player move @STATUS,a0 cmpi 3,a0 jrnz dt20 movi dictator1_2p_as,a8 ;2 Players dt20 CREATE ANIMPID,anim_script jruc anim_wait dictator0_as ASRUN dicttxt0_as ASJMP dictmain_as dictator1_1p_as ;1 player game ASRUN dicttxt1a_as ASJMP dictmain_as dictator1_2p_as ;2 player game ASRUN dicttxt1b_as dictmain_as ASADDW 1,animscnt ASNEW dictnew_t ASNEW dictnew2_t ASSND txtssnd ASLAB 50 ;Scroll up ASXY 0,>1f,0,-4 ASSLP 1 ASDSJ ASSLP 30 ASNEW dictboon_t ASRUN dictarm_as ASRUN dictsnd_as ASRUN dicteyes_as ASFRA dictmtk_l,>18,3 ASFRA dictmtk_l,>19,3 ASWAIT ASFRA dictmtk2_l,>18,1 ASFRA dictmtk2_l,>19,1 ASWAIT ASFRA dictmtk_l,>18,1 ASFRA dictmtk_l,>19,1 ASWAIT ASFRA dictmtk2_l,>18,1 ASFRA dictmtk2_l,>19,1 ASWAIT ASFRA dicteymd_l,>10,1 ASFRA dicteymd_l,>11,1 ASFRA dictmyell_l,>18,1 ASFRA dictmyell_l,>19,1 ASWAIT ASRUN dicteyes_as ASSLP 40 ASFRA dictmusuck_l,>18,1 ASFRA dictmusuck_l,>19,1 ASWAIT ASFRA dictsmile_l,>18,1 ASFRA dictsmile_l,>19,1 ASSLP 60*4 ASADDW -1,animscnt ASEND dicttxt0_as ASSLP 80 ASTXT dicttxta1_st ;Say1 ASSLP 180 ASTXTK ASTXT dicttxta2_st ;Say2 ASSLP 204 ASTXTK ASTXT dicttxta3_st ;Say3 ASEND dicttxt1a_as ASSLP 80 ASTXT dicttxtb1a_st ;Say1 ASJMP dicttxt1_as dicttxt1b_as ASSLP 80 ASTXT dicttxtb1b_st ;Say1 dicttxt1_as ASSLP 180 ASTXTK ASTXT dicttxtb2_st ;Say2 ASSLP 204 ASTXTK ASTXT dicttxtb3_st ;Say3 ASEND dictarm_as ;Move arm ASSLP 90 ASLAB 28 ASXY >20,1,-1,-8 ASSLP 1 ASDSJ ASSLP 20 ASLAB 3 ASLAB 10 ASLAB 3 ASXY >20,1,0,1 ASSLP 1 ASDSJ ASLAB 3 ASXY >20,1,0,-1 ASSLP 1 ASDSJ ASDSJ ASSLP 30 ASDSJ ASLAB 4 ;>Bang arm up and down ASLAB 6 ASXY >20,1,1,14 ASSLP 1 ASDSJ ASXY 0,>3f,0,-2 ;body up ASSND fisthit ASSLP 1 ASXY 0,>3f,0,2 ;body dn ASLAB 6 ASXY >20,1,-1,-14 ASSLP 1 ASDSJ ASDSJ ASLAB 8 ;>move arm off screen ASXY >20,1,1,14 ASSLP 1 ASDSJ ASXY 0,>3f,0,-2 ;body up ASSND GLSEXP ASSLP 1 ASXY 0,>3f,0,2 ;body dn ASEND dicteyes_as ASFRA dicteybl_l,>10,2 ASFRA dicteybl_l,>11,2 ASEND dictsnd_as ASSLP 15 ASSND ahkb1 ASSLP 60 ASSND ahkb2 ASSLP 60 ASSND ahkb3 ASSLP 60 ASSND ahkbsta ASSLP 72 ASSND ahkb1 ASSLP 60 ASSND ahkbsta ASSLP 72 ASSND ahkbang ASSLP 115 ASASM move @TNT_TYPE,a0 ;0=TAUNT ONE,1=RACK UP ONE jrnz dsnd5 ASENDASM ASSND ahkbang ASSLP 65 ASSND CVSDOFF ASEND dsnd5 ASENDASM ASSND yousuck ASEND dictnew_t ASITEMN 67,66,WRINK2,30,DMAWNZ+M_FLIPH+M_FLIPV,>40 ASITEMN 328,66,WRINK2,30,DMAWNZ+M_FLIPV,>40 ASITEMN 15,132,WRINK1,30,DMAWNZ,>40 ASITEMN 370,132,WRINK1,30,DMAWNZ+M_FLIPH,>40 ASITEMN 122,25,BIOSIGN,30,DMAWNZ,>40 ASITEMN 273,25,BIOSIGN,30,DMAWNZ+M_FLIPH,>40 .word -1000 ;End X .set 145 dictnew2_t ASITEMN X+1,210,MADBOD,250,DMAWNZ,1 ASITEMN X,210,MADBOD,250,DMAWNZ+M_FLIPH,1 ASITEMN X+1,210,MADNECK,250,DMAWNZ,1 ASITEMN X,210,MADNECK,250,DMAWNZ+M_FLIPH,1 ASITEMN X+1,210,MADHAT,250,DMAWNZ,1 ASITEMN X,210,MADHAT,250,DMAWNZ+M_FLIPH,1 ASITEMN X+1,210,MADEYE1,252,DMAWNZ,>10 ASITEMN X,210,MADEYE1,252,DMAWNZ+M_FLIPH,>11 ASITEMN X+1,210,MTHGRIM,252,DMAWNZ,>18 ASITEMN X,210,MTHGRIM,252,DMAWNZ+M_FLIPH,>19 ASITEMN X+74,300,MADARM,255,DMAWNZ+M_FLIPH,>20 ASITEMN X+74,300,MADFIST,256,DMAWNZ+M_FLIPH,>21 .word -1000 dictboon_t ASITEMN 220,17,BOON1,240,DMAWNZ,>60 ASITEMN 350,17,BOON1,240,DMAWNZ+M_FLIPH,>60 ASITEMN 270,75,BOON2,240,DMAWNZ+M_FLIPH,>60 .word -1000 dicteybl_l LW MADEYE1,20 LW MADEYE2,20 LW MADEYE3,50 LW MADEYE2,6 LW MADEYE1,5 LW MADEYE2,6 LW MADEYE3,40 LW MADEYE2,5 LW MADEYE1,4 LW MADEYE2,4 LW MADEYE1,5 LW MADEYE2,4 LW MADEYE3,50 LW MADEYE2,6 LWL0 MADEYE1,5 dicteymd_l LW MADEYE1,5 LW MADEYE2,15 LW MADEYE3,30 LWL0 MADEYE1,1 dictmtk_l LW MTHSMILE1,10 ;Mouth for ahkb1,2,3 (60 ticks) LW MTHOPEN1,4 LW MTHOPEN2,4 LW MTHOPEN1,3 LW MTHSMILE1,3 LW MTHOPEN1,4 LW MTHOPEN2,3 LW MTHOPEN3,4 LW MTHOPEN2,3 LW MTHOPEN1,3 LW MTHSMILE1,3 LW MTHOPEN1,3 LW MTHOPEN2,3 LW MTHOPEN3,3 LW MTHOPEN2,3 LW MTHOPEN1,3 LWL0 MTHSMILE1,1 dictmtk2_l LW MTHSMILE1,3 ;ahkbsta (72 ticks) LW MTHOPEN1,3 LW MTHOPEN2,3 LW MTHOPEN3,3 LW MTHOPEN2,3 LW MTHOPEN1,3 LW MTHSMILE1,2 LW MTHOPEN1,2 LW MTHOPEN2,2 LW MTHOPEN1,3 LW MTHSMILE1,2 LW MTHOPEN1,2 LW MTHOPEN2,3 LW MTHOPEN3,2 LW MTHOPEN2,3 LW MTHOPEN1,3 LW MTHOPEN2,2 LW MTHOPEN1,2 LW MTHOPEN1,3 LW MTHOPEN2,3 LW MTHOPEN3,2 LW MTHOPEN2,3 LW MTHOPEN1,3 LW MTHSMILE1,2 LW MTHOPEN1,3 LW MTHOPEN2,3 LW MTHOPEN1,3 LWL0 MTHSMILE1,1 dictmyell_l LW MTHOPEN1,2 ;ahkbang (75 ticks) LW MTHOPEN2,2 LW MTHOPEN3,3 LW MTHOPEN2,1 LW MTHOPEN1,3 LW MTHOPEN2,3 LW MTHOPEN3,2 LW MTHOPEN2,3 LW MTHSMILE1,1 LW MTHOPEN1,2 LW MTHOPEN2,3 LW MTHOPEN3,3 LW MTHOPEN2,2 LW MTHOPEN1,3 LW MTHOPEN2,2 LW MTHOPEN1,2 LW MTHSMILE1,2 LW MTHOPEN1,2 LW MTHOPEN2,2 LW MTHOPEN3,2 LW MTHOPEN2,2 LW MTHOPEN1,2 LW MTHOPEN2,3 LW MTHOPEN1,3 LW MTHSMILE1,3 LW MTHOPEN1,3 LW MTHOPEN2,3 LW MTHOPEN3,3 LW MTHOPEN2,3 LW MTHOPEN1,3 LWL0 MTHSMILE1,2 dictmusuck_l LW MTHSMILE1,5 ;You suck at this game! LW MTHOPEN1,3 LW MTHOPEN2,3 LW MTHOPEN3,2 LW MTHOPEN2,3 LW MTHOPEN1,3 LW MTHSMILE1,2 LW MTHOPEN1,3 LW MTHOPEN2,2 LW MTHOPEN3,2 LW MTHOPEN2,2 LW MTHOPEN1,2 LW MTHOPEN2,2 LW MTHOPEN3,3 LW MTHOPEN2,2 LW MTHSMILE1,2 LW MTHOPEN1,2 LW MTHOPEN2,2 LW MTHOPEN3,2 LW MTHOPEN2,2 LW MTHOPEN1,2 LW MTHSMILE1,2 LW MTHOPEN1,2 LW MTHOPEN2,2 LW MTHOPEN3,2 LW MTHOPEN2,2 LWL0 MTHOPEN1,2 dictsmile_l LW MTHSMILE1,30 LW MTHGRIM,50 LW MTHSMILE1,8 LWL0 MTHSMILE2,60 dicttxta1_st XYTXT PRTF8,286,25,1,"AMERICAN PIGS!!" XYTXT PRTF8,286,36,1,"GET OUT OF MY" XYTXT PRTF8,286,47,1,"PEACE LOVING" XYTXT PRTF8,286,58,1,"COUNTRY." .word -1 dicttxta2_st XYTXT PRTF8,286,30,1,"THESE ACTS OF" XYTXT PRTF8,286,41,1,"AGGRESSION WILL" XYTXT PRTF8,286,52,1,"NOT BE TOLERATED!" .word -1 dicttxta3_st XYTXT PRTF8,286,25,1,"PURSUE ME AND" XYTXT PRTF8,286,36,1,"YOU SHALL SWIM" XYTXT PRTF8,286,47,1,"IN POOLS OF YOUR" XYTXT PRTF8,286,58,1,"OWN BLOOD!!" .word -1 dicttxtb1b_st ;FOR 2 PLYRS XYTXT PRTF8,286,25,1,"YOU BOTH SUCK AT" XYTXT PRTF8,286,36,1,"THIS GAME! YOU" XYTXT PRTF8,286,47,1,"WILL NOT CAPTURE" XYTXT PRTF8,286,58,1,"ME. I AM TOO GOOD." .word -1 dicttxtb1a_st ;FOR 1 PLYR XYTXT PRTF8,286,25,1,"YOU SUCK AT THIS" XYTXT PRTF8,286,36,1,"GAME! YOU SHALL" XYTXT PRTF8,286,47,1,"NEVER CAPTURE ME!" XYTXT PRTF8,286,58,1,"I AM TOO GOOD." .word -1 dicttxtb2_st XYTXT PRTF8,286,25,1,"WITH MY ADVANCED" XYTXT PRTF8,286,36,1,"BIO-NUCLEAR" XYTXT PRTF8,286,47,1,"FACTORY I WILL" XYTXT PRTF8,286,58,1,"RULE THE WORLD!!" .word -1 dicttxtb3_st XYTXT PRTF8,286,25,1,"SO GIVE UP NOW" XYTXT PRTF8,286,36,1,"OR MY MEN WILL" XYTXT PRTF8,286,47,1,"PULL YOUR HEAD" XYTXT PRTF8,286,58,1,"OFF!" .word -1 NOTINUSE ;dicttxtb1b_st ; XYTXT PRTF8,286,25,1,"YOU BOTH SUCK AT" ;For 2 plyrs ; XYTXT PRTF8,286,36,1,"THIS GAME! YOU" ; XYTXT PRTF8,286,47,1,"WON'T CAPTURE ME" ; XYTXT PRTF8,286,58,1,"CUZ I CAN DANCE." ; .word -1 ;dicttxtb1a_st ; XYTXT PRTF8,286,25,1,"YOU SUCK AT THIS" ;For 1 plyr ; XYTXT PRTF8,286,36,1,"GAME! YOU SHALL" ; XYTXT PRTF8,286,47,1,"NEVER CAPTURE ME" ; XYTXT PRTF8,286,58,1,"CUZ I CAN DANCE." ; .word -1 dicttxt4_st XYTXT PRTF8,320,25,1,"YOU WILL DIE!" XYTXT PRTF8,320,35,1,"YOU WILL DIE!!" XYTXT PRTF8,320,45,1,"YOU WILL DIE!!!" .word -1 dicttxt8_st XYTXT PRTF8,320,25,1,("IF YOU CONTINUE,") XYTXT PRTF8,320,35,1,"THE HOSTAGES" XYTXT PRTF8,320,45,1,"WILL DIE!" .word -1 .endif ******************************** * Electrocution code SUBR fry_plyrs ;A8=Fry # (0=Plyrs, 1=Dict) ; clr a8 ;DEBUG ; movk 1,a8 ;DEBUG ; movi >1000,a0 ; calla KIL1C ;DEBUG movi ermtune,a0 calla ONESND calla STOPOBJS ;Keep all objs still movk 1,a0 ;Delay start of a 2nd plyr move a0,@NO_START move a0,@INTRO clr a0 move a0,@IRQSKYE movk 10,a0 move a0,@WORLDTLX+16 movi 960,a0 move a0,@WORLDTLY+16 SLEEPK 2 move a8,a8 jrnz fry_dict movi frypbg_t,a0 ;Show electric chairs move a0,@BAKMODS,L calla BGND_UD1 movi CHAIRP,a8 ;Pal name movi cycmem,a9 ;Ram area movi [59,64],a10 ;Begin/end color # movk 4,a11 ;Rate in ticks CREATE CYCPID,COLCYC ;Color cycler on ; JSRP WNDWOFF ; SLEEP 80 ; calla ERASE_TXT ; SLEEP 96 move @PLYROBJS,a9,L jrz f50 calla STOPPLYR f50 move @PLYROBJS+32,a9,L jrz f55 calla STOPPLYR f55 ; clr a0 ; move a0,@HALT ; movk 1,a11 ; CREATE0 STATIC_COVER ; SLEEPK 25 debugf movi frypdict_as,a8 ;Dictator taunt CREATE ANIMPID,anim_script move @STATUS,a6 btst 0,a6 ;Player1 jrz f200 movi fryp1_as,a8 CREATE ANIMPID2,anim_script f200 btst 1,a6 ;Player1 jrz f300 movi fryp2_as,a8 CREATE ANIMPID3,anim_script f300 SLEEP 509 CREATE FRYPID,frypmeters JSRP anim_wait callr anim_killall movi FRYPID,a0 calla KIL1C ; jruc debugf fry_done movi CYCPID,a0 calla KIL1C clr a0 ;Enable player starts move a0,@NO_START move a0,@INTRO movk 3,a0 move a0,@frydone ;Finished DIE frypbg_t .long ELECRM1BMOD .word 12,1000 .long -1 SUBR fry_dict movi frydbg_t,a0 ;Show electric chairs move a0,@BAKMODS,L calla BGND_UD1 movi CHAIRP,a8 ;Pal name movi cycmem,a9 ;Ram area movi [59,64],a10 ;Begin/end color # movk 4,a11 ;Rate in ticks CREATE CYCPID,COLCYC ;Color cycler on move @PLYROBJS,a9,L jrz fd50 calla STOPPLYR fd50 move @PLYROBJS+32,a9,L jrz fd55 calla STOPPLYR fd55 ;debugfd callr scores_bcdbin CREATE FRYPID,score_prt movi frydict_as,a8 ;Dictator CREATE ANIMPID,anim_script SLEEP 185+75 CREATE FRYPID,frydmeters JSRP anim_wait callr anim_killall movi FRYPID,a0 calla KIL1C callr scores_binbcd ; jruc debugfd jruc fry_done frydbg_t .long CHAIR2BMOD .word 102,1000 .long >ffffffff ******************************** * Fry meters (Process) WORDPD fmp1str ,0 ;Plyr 1 strength (0-?, 4LBits fractional) WORDPD fmp2str ,1 ;Plyr 2 ^ WORDPD fmgwts ,2 ;Electrocution gigawatts (0-?) Fry players WORDPD fmgwts1 ,2 ;^ Fry dictator by P1 WORDPD fmgwts2 ,3 ;^ P2 .bss fryp1stat,16 ;0=Plyr1 OK, -=Fried, 1=Hyper, >1=Bust free .bss fryp2stat,16 ;Plyr2 ^ FMTR_X .equ 14 ;Plyr mtr FMTR_Y .equ 39 FMTR_H .equ 192 FGMTR_X .equ 188 ;GWatt mtr FGMTR_Y .equ 14 FGMTR_H .equ 120 SUBRP frypmeters movi 185*16,a2 ;Initial strengths movk 2,a8 move a13,a9 addi fmp1str,a9 ;A9=*1st variable CREATE FRYPID,fm_swsc ;Start P1 switch scan move a2,*a9+ movk 5,a8 CREATE FRYPID,fm_swsc ;P2 ^ move a2,*a9+ movi [FMTR_X+19,0],a0 movi [FMTR_Y,0],a1 movi CLAMP1,a2 movi 198,a3 ;Z movi DMACAL+M_NOCOLL,a4 movi CLSANIM+>180,a5 ;Same as ANIM meter ID clr a6 clr a7 movk 2,b3 ;Cause skip of plyr meter movk 2,b4 move @STATUS,b2 btst 0,b2 ;Player1 jrz fm20 calla BEGINOBJ move a8,a10 ;A10=*P1 meter movi >1414,a0 move a0,*a10(OCONST) movk 12,a0 move a0,*a10(OSIZEX) clr b3 ;Ok fm20 movi [372+19,0],a0 movi [FMTR_Y,0],a1 movi CLSANIM+>280,a5 ;Same as ANIM meter ID btst 1,b2 ;Player2 jrz fm30 calla BEGINOBJ move a8,a11 ;A11=*P2 meter movi >1414,a0 move a0,*a11(OCONST) movk 12,a0 move a0,*a11(OSIZEX) clr b4 ;Ok fm30 move b3,@fryp1stat move b4,@fryp2stat movi [FGMTR_X+19,0],a0 movk 1,a1 movi 90,a3 ;Z movi CLSANIM+>80,a5 calla BEGINOBJ move a10,a2 clr a10 CREATE FRYPID,fm_gmtr ;Gigawatt meter move a2,a10 movi fryp1stat,a8 ;Cache A8/A9 movi fryp2stat,a9 fm50 SLEEPK 1 move @WORLDTLY+16,a7 addi FMTR_H+FMTR_Y,a7 movi FMTR_H*16-16,a3 movk 15,a4 ;A4=Strength drain move *a13(fmgwts),a0 cmpi 90,a0 jrlo fm60 movk 1,a2 move *a8,a1 jrnz fm54 move a2,*a8 ;P1 Hyper fm54 move *a9,a1 jrnz fm55 move a2,*a9 ;P2 Hyper fm55 cmpi 118,a0 jrlo fm60 sll 1,a4 ;*2 neg a4 ;They made it, so run up meters fm60 move *a8,a0 subk 1,a0 jrhi fm120 move *a13(fmp1str),a0 sub a4,a0 ;Decrease strength jrge fm70 movi -1,a1 move a1,*a8 ;Die clr a0 ;Set min fm70 move a0,*a13(fmp1str) cmp a3,a0 jrls fm80 ;In range? move a3,a0 ;Set max movk 2,a1 move a1,*a8 ;Break free fm80 srl 4,a0 ;/16 addk 1,a0 move a0,*a10(OSIZEY) move a7,a1 sub a0,a1 move a1,*a10(OYPOS) ;New Y fm120 move *a9,a0 subk 1,a0 jrhi fm300 move *a13(fmp2str),a0 sub a4,a0 jrgt fm150 movi -1,a1 move a1,*a9 ;Die clr a0 ;Set min fm150 move a0,*a13(fmp2str) cmp a3,a0 jrls fm180 move a3,a0 movk 2,a1 move a1,*a9 ;Break free fm180 srl 4,a0 addk 1,a0 move a0,*a11(OSIZEY) sub a0,a7 move a7,*a11(OYPOS) fm300 jruc fm50 SUBRP frydmeters clr a2 ;Initial strengths move a2,@fryp1stat movk 2,a8 move a13,a9 addi fmp1str,a9 ;A9=*1st variable CREATE FRYPID,fm_swsc ;Start P1 switch scan move a2,*a9+ movk 5,a8 CREATE FRYPID,fm_swsc ;P2 ^ move a2,*a9+ movi [57+19,0],a0 movk 1,a1 movi CLAMP1,a2 movi 90,a3 ;Z movi DMACAL+M_NOCOLL,a4 movi CLSANIM+>80,a5 ;Same as ANIM meter ID clr a6 clr a7 movi 50,a10 ;Meter Y offset move @STATUS,b2 btst 0,b2 ;Player1 jrz fdm20 calla BEGINOBJ CREATE FRYPID,fm_gmtr ;Gigawatt meter P1 fdm20 btst 1,b2 ;Player2 jrz fdm80 movi [324+19,0],a0 movk 1,a1 movi CLSANIM+>81,a5 ;Same as ANIM meter ID clr a7 calla BEGINOBJ addk 16,a9 CREATE FRYPID,fm_gmtr ;Gigawatt meter P2 fdm80 movi fryp1stat,a11 ;A11=Status (dictator) fdm100 SLEEPK 1 move @STATUS,b2 btst 0,b2 ;Player1 jrz fdm200 ;Not in game? move *a13(fmgwts1),a3 ;A3=Meter1 watts cmpi 80,a3 jrlo fdm150 movk 1,a2 ;Hyper cmpi FGMTR_H,a3 jrlo fdm130 move @P1DATA+PSCORE,a0,L ;1st to fry dict gets 10000 pts addi 10000,a0 move a0,@P1DATA+PSCORE,L subk 2,a2 ;-1 Kill dict fdm130 move a2,*a11 fdm150 move *a13(fmp1str),a0 jrz fdm200 clr a0 move a0,*a13(fmp1str) movk 7,a0 ;Skip watt add 87% calla RNDRNG0 move a0,a0 jrnz fdm170 addk 1,a3 move a3,*a13(fmgwts1) ;Add in watts fdm170 move @P1DATA+PSCORE,a0,L ;Bonus points addi 100,a0 move a0,@P1DATA+PSCORE,L fdm200 btst 1,b2 ;Player2 jrz fdm300 ;Not in game? move *a13(fmgwts2),a3 ;A3=Meter2 watts cmpi 80,a3 jrlo fdm250 move *a11,a0 jrn fdm250 ;P1 killed dict? movk 1,a2 ;Hyper cmpi FGMTR_H,a3 jrlo fdm230 move @P2DATA+PSCORE,a0,L ;1st to fry dict gets 10000 pts addi 10000,a0 move a0,@P2DATA+PSCORE,L subk 2,a2 ;-1 Kill dict fdm230 move a2,*a11 fdm250 move *a13(fmp2str),a0 jrz fdm300 clr a0 move a0,*a13(fmp2str) movk 7,a0 ;Skip watt add 87% calla RNDRNG0 move a0,a0 jrnz fdm270 addk 1,a3 move a3,*a13(fmgwts2) ;Add in watts fdm270 move @P2DATA+PSCORE,a0,L ;Bonus points addi 100,a0 move a0,@P2DATA+PSCORE,L fdm300 move *a11,a0 jrnn fdm100 ;Dict alive? SLEEP >7fff ******************************** * Fry switch scanner (Process) SUBRP fm_swsc ;A8=Bit to test, A9=*Strength var fmss50 SLEEPK 1 move @COINS,a0 btst a8,a0 jrnz fmss50 ;Off? move *a9,a0 addi 36,a0 ; addi 500,a0 ;DEBUG move a0,*a9 fmss70 SLEEPK 1 move @COINS,a0 btst a8,a0 jrz fmss70 ;Off? move *a9,a0 addi 36,a0 move a0,*a9 jruc fmss50 ******************************** * Fry gigawatt meter (Process) SUBRP fm_gmtr ;A8=*Meter obj, A9=*fmgwts var, A10=Y offset movi >1414,a0 move a0,*a8(OCONST) movk 19,a0 move a0,*a8(OSIZEX) clr a0 move a0,*a9 fmgm50 move *a9,a0 addk 1,a0 cmpi FGMTR_H,a0 jrls fmgm80 ;In range? movi FGMTR_H,a0 ;Set max fmgm80 move a0,*a9 addk 1,a0 move a0,*a8(OSIZEY) move @WORLDTLY+16,a1 addi FGMTR_H+FGMTR_Y,a1 add a10,a1 ;+Offset sub a0,a1 move a1,*a8(OYPOS) ;New Y SLEEPK 8 jruc fmgm50 ******************************** * Pulse fleshtones in pal APTRPD fppal_p ,0 ;Plyr 1 strength (0-?, 4LBits fractional) SUBRP fry_pulsep1 movi BIGPL1,a0 movi fryp1palmem,a10 jruc fpp5 SUBRP fry_pulsep2 movi BIGPL2,a0 movi fryp2palmem,a10 fpp5 move a0,*a13(fppal_p),L calla FINDPAL jrz fppx sll 8,a0 move a0,a11 ;needed later for palset movk 9,a9 clr a8 fpp20 move a10,a0 addk 2,a8 move a8,a2 move *a13(fppal_p),a1,L callr pal_addb SLEEPK 1 dsj a9,fpp20 movk 9,a9 fpp50 move a10,a0 subk 2,a8 move a8,a2 move *a13(fppal_p),a1,L callr pal_addb SLEEPK 1 dsj a9,fpp50 fppx DIE ******************************** * Change brightness of a palette * Each color in palette will have A2 added to its RGB * A0=*Ram for pal, A1=*Palette, A2=Brightness (-31 to 31) SUBRP pal_addb PUSH a3,a5,a7,a8 move *a1+,a14 ;# Colors move a14,*a0+ sll 23,a14 ;Remove any flags srl 23,a14 ;9 bits needed for # colors pb1c movk >1f,a8 ;A8=Mask for 5 bits of color pb100 move *a1+,a3 movk >1f,a7 and a3,a7 ;A7=Blue srl 5,a3 movk >1f,a5 and a3,a5 ;A5=Green srl 5,a3 ;A3=Red add a2,a3 ; add a2,a5 ; add a2,a7 cmp a8,a3 jrls pbrok move a8,a3 pbrok ; cmp a8,a5 ; jrls pbgok ; move a8,a5 ; ;pbgok cmp a8,a7 ; jrls pbbok ; move a8,a7 ; pbbok sll 10,a3 sll 5,a5 or a5,a3 or a7,a3 move a3,*a0+ ;Save color dsj a14,pb100 PULL a3,a5,a7,a8 move a10,a0 ;*Color data move a11,a1 ;Pal# move *a0+,a2 ;#Colors jauc PALSET ******************************** * Electrocution scripts frypdict_as ASADDW 1,animscnt ASBXY 0,58 ;Set base ASNEW dictnew2_t ASSND fisthit ASSND txtssnd ASLAB 50 ;Scroll up ASXY 0,>1f,0,-4 ASSLP 1 ASDSJ ASSLP 30 ASNEW dictboon_t ASTXT frypdicttxt_st ASRUN frypdictarm_as ASRUN frypdictsnd_as ASRUN dicteyes_as ASFRA dictmtk_l,>18,1 ASFRA dictmtk_l,>19,1 ASWAIT ASSLP 15 ASFRA dicteymd_l,>10,1 ASFRA dicteymd_l,>11,1 ASFRA dictmyell_l,>18,1 ASFRA dictmyell_l,>19,1 ASWAIT ASFRA dictsmile_l,>18,1 ASFRA dictsmile_l,>19,1 ASSLP 60 ASLAB 25 ;Scroll dn ASXY 0,>1f,0,8 ASSLP 1 ASDSJ ASTXTK ASKIL 0,>ff ASDELM 0,>ff ASRUN frypgigmeteron_as ASADDW -1,animscnt ASEND frypdicttxt_st XYTXT PRTF8,286,30+58,1,"YOU WILL PAY FOR" XYTXT PRTF8,286,41+58,1,"YOUR CRIMES." XYTXT PRTF8,286,52+58,1,"PREPARE TO FRY!!!" ; XYTXT PRTF8,286,58+58,1,"TO FRY!!!" .word -1 frypdictarm_as ;Move arm ASLAB 28 ASXY >20,1,-1,-8 ASSLP 1 ASDSJ ASLAB 10 ;Vibrate fist ASLAB 3 ASXY >20,1,0,1 ASSLP 1 ASDSJ ASLAB 3 ASXY >20,1,0,-1 ASSLP 1 ASDSJ ASDSJ ASLAB 4 ;>Bang arm up and down ASLAB 6 ASXY >20,1,1,14 ASSLP 1 ASDSJ ASXY 0,>3f,0,-2 ;body up ASSND fisthit ASSLP 1 ASXY 0,>3f,0,2 ;body dn ASLAB 6 ASXY >20,1,-1,-14 ASSLP 1 ASDSJ ASDSJ ASLAB 8 ;>move arm off screen ASXY >20,1,1,14 ASSLP 1 ASDSJ ASXY 0,>3f,0,-2 ;body up ASSND GLSEXP ASSLP 1 ASXY 0,>3f,0,2 ;body dn ASEND frypdictsnd_as ASSLP 15 ASSND ahkb3 ASSLP 60 ASSND ahkbang ASEND frypgigmeteron_as ;Scroll in the meter ASSLP 70 ASNEW frypgigmeter_t ASLAB 100 ASXY >82,0,0,2 ASSLP 1 ASDSJ ASEND frypgigmeter_t ASITEMN 172,2-258,GGSWRD,90,DMAWNZ,>82 ASITEMN 184,10-258,GGWTTS,91,DMAWNZ,>82 .word -1000 ******************************** * Player 1 scripts fryp1_as ASADDW 1,animscnt ASNEW fryplyr_t ASSLP 270 ASRUN frypdropin_as ASSLP 54 ASFRA fryp1look_l,>40,1 ASSLP 60 ASFRA clampclose_l,>20,1 ASSLP 5 ASSND SETDWN ASSLP 15 ASFRA clampclose_l,>21,1 ASSLP 5 ASSND SETDWN ASRUN fryp1meteron_as ASSLP 100 ASNEW fryshocks_t ASRUNI fryshocks_as,>70 ASRUNI fryshakex_as,>10 ASRUNI fryshakey_as,>10 ASSLP 30 fryp1_lp ASRUNI fryshakehdx_as,>30 ASRUNI fryshakehdy_as,>30 ASRUN fryp1stretch_as ASSLPR 5,14 ASJMPR 750,fryp1_40 ;75% skip shock ASRUN fryshakescr_as ASSND fpain1 ASLABR 1,4 ASNEW fryshockbig_t ASSLPR 1,4 ASDEL >60 ASNEW fryshockbigb_t ASSLPR 1,4 ASDEL >60 ASDSJ ASNEW fryshockbig_t ASSLP 2 ASDEL >60 fryp1_40 ASRUN fryp1unstretch_as ASSLP 16 ASRUNI fryp1face_as,>20 ASJMPR 800,fryp1_50 ;80% skip slouch ASSND fpain2 ASXY >40,0,0,9 ASANI ECTOR4,>41 ;Slouch ASANI ECTOR4,>46 ASSLPR 8,70 ASXY >40,0,0,-9 ASANI ECTOR1,>41 ASANI ECTOR1,>46 fryp1_50 ASCRE fry_pulsep1,0 ASJMPEQ 1,fryp1stat,fryp1h_lp fryp1_80 ASLABR 15,70 ASASM move @fryp1stat,a0 jrn fryp1_die subk 1,a0 jrgt fryp1_brkfree ASENDASM ASSLP 1 ASDSJ ASSND fpain3 ASKIL >20,7 ASJMP fryp1_lp fryp1h_lp ;Hyper loop ASSND fpain3 ASKIL >20,7 ASRUNI fryshakehdx_as,>30 ASRUNI fryshakehdy_as,>30 ASRUN fryp1stretch_as ASSLP 4 ASSND fpain1 ASRUN fryshakescr_as ASLABR 1,4 ASNEW fryshockbig_t ASSLPR 1,3 ASDEL >60 ASNEW fryshockbigb_t ASSLPR 1,3 ASDEL >60 ASDSJ ASRUNI frysprks2_as,>70 ;More sparks ASNEW fryshockbig_t ASSLP 2 ASDEL >60 ASRUN fryp1unstretch_as ASSLP 16 ASRUNI fryp1face_as,>20 ASCRE fry_pulsep1,0 ASJMPNE 1,fryp1stat,fryp1_80 ASSLPR 1,30 ASJMP fryp1h_lp fryp1_die ;Plyr fries ASENDASM ASRUN fryp1stretch_as fryp1_die2 ;P2 entry ASSLP 12 ASRUNI frysprks3_as,>70 ASLAB 15 ASRUN fryshakescr_as ASNEW fryshockbig_t ASSLP 2 ASDEL >60 ASNEW fryshockbigb_t ASSLP 2 ASDEL >60 ASDSJ ASDELM >70,>f ;Kill electricity ASKIL >70,7 ASKIL >10,7 ASKIL >20,7 ASRUN frysmoke_as ASRUN frywisp_as ASSND fburn ASXY >40,>f,0,-12 ASRUN fryskull_as ASZ >41,0,117 ASZ >46,0,117 ASFRA bonetor_l,>41,1 ASFRA bonetor_l,>46,1 ASANI BONEARM,>42 ;Make bones ASANI BONEARM,>47 ASANI BONELEG1,>44 ASANI BONELEG1,>49 ASANI BONELEG2,>45 ASANI BONELEG2,>4a ASDEL >43 ASDEL >48 ASSVL MTRP ;Bone pal ASPAL >42 ASPAL >47 ASPAL >44 ASPAL >49 ASPAL >45 ASPAL >4a fry_end_as ASSLP 60*5 ASADDW -1,animscnt ASEND fryp1_brkfree ;Plyr breaks free ASENDASM ASDELM >70,>f ;Kill electricity ASKIL >70,7 ASKIL >10,7 ASKIL >20,7 ASRUN fry_jmpup_as ASXY >40,0,0,-8 ASRUN fry_clampfly_as ASNEW fryclexp_t ASFRA BLUEEXP,>28,1 ASFRA BLUEEXP,>29,1 ASFRA BLUEEXP,>2a,1 ASFRA BLUEEXP,>2b,1 ASSND GLSEXP ASXYV >80,0,->30000,0 ASANI ECPHD1A,>40 ASANI ECTOR5,>41 ASANI ECTOR5,>46 ASANI ECWRIST3,>42 ASANI ECWRIST3,>47 ASANI ECFIST2,>43 ASANI ECFIST2,>48 ASANI ECLEG2,>44 ASANI ECLEG2,>49 ASANI ECLEG2A,>45 ASANI ECLEG2A,>4a ASSLP 10 ASANI ECTOR6,>41 ASANI ECTOR6,>46 ASANI ECWRIST4,>42 ASANI ECWRIST4,>47 ASANI ECFIST3,>43 ASANI ECFIST3,>48 ASZ >40,>f,130 ;Plyr hi Z ASZ >40,0,131 ASSLP 29 ASDELM >28,7 ;Kill explosions ASSND NOWAY ASSLP 11 ASANI ECPHD1F,>40 fryp1_brkfree2 ;P2 entry ASANI ECLEG3,>44 ASANI ECLEG3,>49 ASDEL >45 ASDEL >4a ASDEL >80 ;P1 Meter ASJMP fry_end_as fryp1meteron_as ;Scroll in the meter ASNEW fryp1meter_t ASLAB 100 ASXY >80,0,1,0 ASSLP 1 ASDSJ ASEND fryp1meter_t ASITEMN 50-100,10,SM2,200,DMAWNZ,>80 ASITEMN 26-100,13,SMARRW2,200,DMAWNZ,>80 ASITEMN 8-100,35,STRNGTHMTR,200,DMAWNZ,>80 ASITEMN 31-100,35,STRNGTHMTR,200,DMAWNZ+M_FLIPH,>80 .word -1000 fryp1look_l LW ECPHD1B,20 LW ECPHD1,25 LW ECPHD1C,20 LW ECPHD1,6 LW ECPHD1D,20 LW ECPHD1,5 LW ECPHD1E,20 LW ECPHD1A,60 LWL0 ECPHD1G,1 fryp1stretch_as ASANI ECPHD2,>40 ASXY >40,0,0,-5 ASANI ECTOR2,>41 ASANI ECTOR2,>46 ASANI ECWRIST2,>42 ASANI ECWRIST2,>47 ASSLP 4 ASANI ECPHD3,>40 ASXY >40,0,0,-5 ASANI ECTOR3,>41 ASANI ECTOR3,>46 ASEND fryp1unstretch_as ASANI ECPHD2,>40 ASXY >40,0,0,5 ASANI ECTOR2,>41 ASANI ECTOR2,>46 ASSLP 4 ASANI ECPHD1H,>40 ASXY >40,0,0,5 ASANI ECTOR1,>41 ASANI ECTOR1,>46 ASANI ECWRIST1,>42 ASANI ECWRIST1,>47 ASSLP 4 ASXY >40,0,0,9 ASANI ECTOR4,>41 ;Slouch ASANI ECTOR4,>46 ASSLP 4 ASXY >40,0,0,-9 ASANI ECTOR1,>41 ASANI ECTOR1,>46 ASEND fryp1face_as ;ID >20 ASJMPR 700,fp1f10 ;70% ASLABR 2,5 ;>Blink ASSLPR 3,20 ASANI ECPHD1G,>40 ASSLPR 3,20 ASANI ECPHD1H,>40 ASDSJ ASEND fp1f10 ASSND fpain2 ASJMPR 600,fp1f20 ASFRA fp1face1_l,>40,1 ASEND fp1f20 ASJMPR 200,fp1f30 ASFRA fp1face2_l,>40,1 ASEND fp1f30 ASFRA fp1face3_l,>40,1 ASEND fp1face1_l LW BUGEYE1A,5 LW BUGEYE1B,5 LW BUGEYE1C,5 LW BUGEYE1D,5 LW BUGEYE1C,5 LW BUGEYE1B,5 LWL0 BUGEYE1A,5 fp1face2_l LW BUGEYE2A,4 LW BUGEYE2B,4 LW BUGEYE2C,4 LW BUGEYE2B,4 LWL0 BUGEYE2A,4 fp1face3_l LW BUGEYE2A,3 LW BUGEYE2B,3 LW BUGEYE2C,2 LW BUGEYE2D,2 LW BUGEYE2E,2 LW BUGEYE2F,2 LW BUGEYE2E,2 LW BUGEYE2D,2 LW BUGEYE2C,3 LW BUGEYE2G,2 LW BUGEYE2H,2 LW BUGEYE2I,2 LW BUGEYE2J,2 LW BUGEYE2I,2 LW BUGEYE2H,2 LW BUGEYE2C,2 LW BUGEYE2B,2 LWL0 BUGEYE2A,2 ******************************** * Player 2 scripts fryp2_as ASADDW 1,animscnt ASBXY 186,0 ;Set base ASNEW fryplyr_t ASSVL BIGPL2 ;Black pal ASPAL >40 ASPAL >41 ASPAL >43 ASPAL >46 ASPAL >48 ASSLP 270 ASRUN frypdropin_as ASSLP 54 ASFRA fryp2look_l,>40,1 ASSLP 60 ASFRA clampclose_l,>20,1 ASSLP 5 ASSND SETDWN ASSLP 15 ASFRA clampclose_l,>21,1 ASSLP 5 ASSND SETDWN ASRUN fryp2meteron_as ASSLP 100 ASNEW fryshocks_t ASRUNI fryshocks_as,>70 ASRUNI fryshakex_as,>10 ASRUNI fryshakey_as,>10 ASSLP 30 fryp2_lp ASRUNI fryshakehdx_as,>30 ASRUNI fryshakehdy_as,>30 ASRUN fryp2stretch_as ASSLPR 5,14 ASJMPR 750,fryp2_40 ;75% skip shock ASRUN fryshakescr_as ASSND fpain1 ASLABR 1,4 ASNEW fryshockbig_t ASSLPR 1,4 ASDEL >60 ASNEW fryshockbigb_t ASSLPR 1,4 ASDEL >60 ASDSJ ASNEW fryshockbig_t ASSLP 2 ASDEL >60 fryp2_40 ASRUN fryp2unstretch_as ASSLP 16 ASRUNI fryp1face_as,>20 ASJMPR 800,fryp2_50 ;80% skip slouch ASSND fpain2 ASXY >40,0,0,9 ASANI ECTOR4,>41 ;Slouch ASANI ECTOR4,>46 ASSLPR 8,70 ASXY >40,0,0,-9 ASANI ECTOR1,>41 ASANI ECTOR1,>46 fryp2_50 ASCRE fry_pulsep2,0 ASJMPEQ 1,fryp2stat,fryp2h_lp fryp2_80 ASLABR 15,70 ASASM move @fryp2stat,a0 jrn fryp2_die subk 1,a0 jrgt fryp2_brkfree ASENDASM ASSLP 1 ASDSJ ASSND fpain3 ASKIL >20,7 ASJMP fryp2_lp fryp2h_lp ;Hyper loop ASSND fpain3 ASKIL >20,7 ASRUNI fryshakehdx_as,>30 ASRUNI fryshakehdy_as,>30 ASRUN fryp2stretch_as ASSLP 4 ASRUN fryshakescr_as ASSND fpain1 ASLABR 1,4 ASNEW fryshockbig_t ASSLPR 1,3 ASDEL >60 ASNEW fryshockbigb_t ASSLPR 1,3 ASDEL >60 ASDSJ ASRUNI frysprks2_as,>70 ;More sparks ASNEW fryshockbig_t ASSLP 2 ASDEL >60 ASRUN fryp2unstretch_as ASSLP 16 ASRUNI fryp2face_as,>20 ASCRE fry_pulsep2,0 ASJMPNE 1,fryp2stat,fryp2_80 ASSLPR 1,30 ASJMP fryp2h_lp fryp2_die ;Plyr 2 fries ASENDASM ASRUN fryp2stretch_as ASJMP fryp1_die2 fryp2_brkfree ;Plyr 2 breaks free ASENDASM ASDELM >70,>f ;Kill electricity ASKIL >70,7 ASKIL >10,7 ASKIL >20,7 ASRUN fry_jmpup_as ASXY >40,0,0,-8 ASRUN fry_clampfly_as ASNEW fryclexp_t ASFRA BLUEEXP,>28,1 ASFRA BLUEEXP,>29,1 ASFRA BLUEEXP,>2a,1 ASFRA BLUEEXP,>2b,1 ASSND GLSEXP ASXYV >80,0,>30000,0 ASANI ECP2HD1A,>40 ASANI ECTOR5,>41 ASANI ECTOR5,>46 ASANI ECWRIST3,>42 ASANI ECWRIST3,>47 ASANI ECFIST2,>43 ASANI ECFIST2,>48 ASANI ECLEG2,>44 ASANI ECLEG2,>49 ASANI ECLEG2A,>45 ASANI ECLEG2A,>4a ASSLP 10 ASANI ECTOR6,>41 ASANI ECTOR6,>46 ASANI ECWRIST4,>42 ASANI ECWRIST4,>47 ASANI ECFIST3,>43 ASANI ECFIST3,>48 ASZ >40,>f,130 ;Plyr hi Z ASZ >40,0,131 ASSLP 29 ASDELM >28,7 ;Kill explosions ASSND NOWAY ASSLP 11 ASANI ECP2HD1F,>40 ASJMP fryp1_brkfree2 fryp2meteron_as ;Scroll in the meter ASNEW fryp2meter_t ASLAB 100 ASXY >80,0,-1,0 ASSLP 1 ASDSJ ASEND fryp2meter_t ASITEMN 280+100-186,10,SM2,200,DMAWNZ,>80 ASITEMN 372+100-186,13,SMARRW2,200,DMAWNZ+M_FLIPH,>80 ASITEMN 366+100-186,35,STRNGTHMTR,200,DMAWNZ,>80 ASITEMN 389+100-186,35,STRNGTHMTR,200,DMAWNZ+M_FLIPH,>80 .word -1000 fryp2look_l LW ECP2HD1B,20 LW ECP2HD1,25 LW ECP2HD1C,20 LW ECP2HD1,6 LW ECP2HD1D,20 LW ECP2HD1,5 LW ECP2HD1E,20 LW ECP2HD1A,60 LWL0 ECP2HD1G,1 fryp2stretch_as ASANI ECP2HD2,>40 ASXY >40,0,0,-5 ASANI ECTOR2,>41 ASANI ECTOR2,>46 ASANI ECWRIST2,>42 ASANI ECWRIST2,>47 ASSLP 4 ASANI ECP2HD3,>40 ASXY >40,0,0,-5 ASANI ECTOR3,>41 ASANI ECTOR3,>46 ASEND fryp2unstretch_as ASANI ECP2HD2,>40 ASXY >40,0,0,5 ASANI ECTOR2,>41 ASANI ECTOR2,>46 ASSLP 4 ASANI ECP2HD1H,>40 ASXY >40,0,0,5 ASANI ECTOR1,>41 ASANI ECTOR1,>46 ASANI ECWRIST1,>42 ASANI ECWRIST1,>47 ASSLP 4 ASXY >40,0,0,9 ASANI ECTOR4,>41 ;Slouch ASANI ECTOR4,>46 ASSLP 4 ASXY >40,0,0,-9 ASANI ECTOR1,>41 ASANI ECTOR1,>46 ASEND fryp2face_as ;ID >20 ASJMPR 700,fp2f10 ;70% ASLABR 2,5 ;>Blink ASSLPR 3,20 ASANI ECP2HD1G,>40 ASSLPR 3,20 ASANI ECP2HD1H,>40 ASDSJ ASEND fp2f10 ASSND fpain2 ASJMPR 600,fp2f20 ASFRA fp2face1_l,>40,1 ASEND fp2f20 ASJMPR 200,fp2f30 ASFRA fp2face2_l,>40,1 ASEND fp2f30 ASFRA fp2face3_l,>40,1 ASEND fp2face1_l LW BUG2EYE1A,5 LW BUG2EYE1B,5 LW BUG2EYE1C,5 LW BUG2EYE1D,5 LW BUG2EYE1C,5 LW BUG2EYE1B,5 LWL0 BUG2EYE1A,5 fp2face2_l LW BUG2EYE2A,4 LW BUG2EYE2B,4 LW BUG2EYE2C,4 LW BUG2EYE2B,4 LWL0 BUG2EYE2A,4 fp2face3_l LW BUG2EYE2A,3 LW BUG2EYE2B,3 LW BUG2EYE2C,2 LW BUG2EYE2D,2 LW BUG2EYE2E,2 LW BUG2EYE2F,2 LW BUG2EYE2E,2 LW BUG2EYE2D,2 LW BUG2EYE2C,3 LW BUG2EYE2G,2 LW BUG2EYE2H,2 LW BUG2EYE2I,2 LW BUG2EYE2J,2 LW BUG2EYE2I,2 LW BUG2EYE2H,2 LW BUG2EYE2C,2 LW BUG2EYE2B,2 LWL0 BUG2EYE2A,2 ******************************** * Generic electrocution scripts FP1X .equ 104 FP1Y .equ 38 fryplyr_t ASITEMN FP1X,FP1Y-254,ECPHD1A,101,DMAWNZ,>40 ASITEMN FP1X,FP1Y-254,ECTOR1,100,DMAWNZ,>41 ASITEMN FP1X,FP1Y-254,ECWRIST1,101,DMAWNZ,>42 ASITEMN FP1X,FP1Y-254,ECFIST1,103,DMAWNZ,>43 ASITEMN FP1X,FP1Y-254,ECLEG1,115,DMAWNZ,>44 ASITEMN FP1X,FP1Y-254,ECLEG1A,104,DMAWNZ,>45 ASITEMN FP1X-1,FP1Y-254,ECTOR1,100,DMAWNZ+M_FLIPH,>46 ASITEMN FP1X-1,FP1Y-254,ECWRIST1,101,DMAWNZ+M_FLIPH,>47 ASITEMN FP1X-1,FP1Y-254,ECFIST1,103,DMAWNZ+M_FLIPH,>48 ASITEMN FP1X-1,FP1Y-254,ECLEG1,115,DMAWNZ+M_FLIPH,>49 ASITEMN FP1X-1,FP1Y-254,ECLEG1A,104,DMAWNZ+M_FLIPH,>4a ASITEMN FP1X-81,FP1Y+61,CLAMP1,102,DMAWNZ,>20 ASITEMN FP1X+81,FP1Y+61,CLAMP1,102,DMAWNZ+M_FLIPH,>21 .word -1000 frypdropin_as ;Player drops into chair ASLAB 11 ASXY >40,>f,0,6 ASSLP 1 ASDSJ ASLAB 11 ASXY >40,>f,0,8 ASSLP 1 ASDSJ ASLAB 10 ASXY >40,>f,0,10 ASSLP 1 ASDSJ ASEND clampclose_l LW CLAMP2,5 LWL0 CLAMP3,1 clampopen_l LW CLAMP2,5 LWL0 CLAMP1,1 fryshockbig_t ASITEMN FP1X,FP1Y-15,SHOCK1A,150,DMAWNZ,>60 ASITEMN FP1X,FP1Y-15,SHOCK1B,150,DMAWNZ,>60 ASITEMN FP1X,FP1Y-15,SHOCK1C,150,DMAWNZ,>60 ASITEMN FP1X,FP1Y-15,SHOCK1D,152,DMAWNZ,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK1A,150,DMAWNZ+M_FLIPH,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK1B,150,DMAWNZ+M_FLIPH,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK1C,150,DMAWNZ+M_FLIPH,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK1D,152,DMAWNZ+M_FLIPH,>60 .word -1000 fryshockbigb_t ASITEMN FP1X,FP1Y-15,SHOCK2A,150,DMAWNZ,>60 ASITEMN FP1X,FP1Y-15,SHOCK2B,150,DMAWNZ,>60 ASITEMN FP1X,FP1Y-15,SHOCK2C,150,DMAWNZ,>60 ASITEMN FP1X,FP1Y-15,SHOCK2D,152,DMAWNZ,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK2A,150,DMAWNZ+M_FLIPH,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK2B,150,DMAWNZ+M_FLIPH,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK2C,150,DMAWNZ+M_FLIPH,>60 ASITEMN FP1X-1,FP1Y-15,SHOCK2D,152,DMAWNZ+M_FLIPH,>60 .word -1000 fryshocks_t ASITEMN FP1X+3,FP1Y,BLT1,110,DMAWNZ,>70 ASITEMN FP1X-5,FP1Y,BLT1,110,DMAWNZ+M_FLIPH,>71 ASITEMN FP1X-60,FP1Y+95,LILBLT1,110,DMAWNZ,>72 ASITEMN FP1X+60,FP1Y+95,LILBLT1,110,DMAWNZ+M_FLIPH,>73 ASITEMN FP1X,FP1Y+55,LILBLT1,110,DMAWNZ,>74 ASITEMN FP1X,FP1Y+85,LILBLT1,110,DMAWNZ+M_FLIPH,>75 ASITEMN FP1X,FP1Y+120,LILBLT1,118,DMAWNZ,>76 ASITEMN FP1X,FP1Y+160,LILBLT1,118,DMAWNZ,>77 .word -1000 fryshocks_as ;ID >70 ASRUN fryshock2_as ASRUN fryshock3_as ASRUN fryshock4_as ASRUN fryshock5_as ASRUN fryshock6_as ASRUN fryshock7_as ASRUN fryshock8_as ASRUN fryshocksnd_as ASRUN frysprks_as fs1lp ASFRA dbolt_l,>70,1 ASWAIT ASHIDE >70 ASSLPR 5,50 ASSHOW >70 ASJMP fs1lp fryshock2_as ASFRA dbolt_l,>71,1 ASWAIT ASHIDE >71 ASSLPR 5,50 ASSHOW >71 ASJMP fryshock2_as fryshock3_as ASFRA lbolt_l,>72,1 ASWAIT ASHIDE >72 ASSLPR 5,50 ASSHOW >72 ASJMP fryshock3_as fryshock4_as ASFRA lbolt_l,>73,1 ASWAIT ASHIDE >73 ASSLPR 5,50 ASSHOW >73 ASJMP fryshock4_as fryshock5_as ASFRA sbolt_l,>74,1 ASWAIT ASHIDE >74 ASSLPR 5,50 ASSHOW >74 ASJMP fryshock5_as fryshock6_as ASFRA sbolt_l,>75,1 ASWAIT ASHIDE >75 ASSLPR 5,50 ASSHOW >75 ASJMP fryshock6_as fryshock7_as ASFRA sbolt_l,>76,1 ASWAIT ASHIDE >76 ASSLPR 5,50 ASSHOW >76 ASJMP fryshock7_as fryshock8_as ASFRA sbolt_l,>77,1 ASWAIT ASHIDE >77 ASSLPR 5,50 ASSHOW >77 ASJMP fryshock8_as fryshocksnd_as ;ID >70 ASSND fshock ASSLPR 20,80 ASJMP fryshocksnd_as dbolt_l LW BLT1,2 LW BLT2,2 LW BLT3,2 LW BLT4,2 LW BLT5,2 LWL0 BLT6,2 lbolt_l LW LILBLT1,3 LW LILBLT2,3 LW LILBLT3,3 LW LILBLT4,3 LW LILBLT5,3 LWL0 LILBLT6,3 sbolt_l LW LILBLT1,1 LW LILBLT2,1 LW LILBLT3,1 LW LILBLT4,1 LW SBOLT1,2 LW SBOLT2,2 LW SBOLT3,2 LW SBOLT4,2 LW SBOLT5,2 LW SBOLT6,2 LWL0 SBOLT7,2 frysprks_as ;ID >70 ASLAB 500 ASRUNI frysprk_as,0 ASSLPR 5,15 ASDSJ ASEND frysprks2_as ;ID >70 ASSLP 20 ASLAB 6 ASRUNI frysprk_as,0 ASSLPR 1,6 ASDSJ ASEND frysprk_as ;ID 0 ASNEW frysprk_t ASFRA frysprk_l,-1,0 ASJMPR 500,fs20 ;50% L or R ASADDWO M_FLIPH,OFLAGS ;Left ASXYRNG -1,0,-55,-15,-20,32 ASSVRL ->10000,->4000 ASJMP frysprkg_as fs20 ASXYRNG -1,0,15,55,-20,32 ;Right ASSVRL >4000,>10000 frysprkg_as ;Gravity ASSLP 12 ASADLVO OXVEL ASLAB 32 ASADDLO >3000,OYVEL ASSLP 1 ASDSJ ASXYV0 ASEND frysprks3_as ;ID >70 ASRUNI frysprk3_as,0 ASSLPR 2,5 ASJMP frysprks3_as frysprk3_as ;ID 0 ASNEW frysprk_t ASFRA frysprk_l,-1,0 ASJMPR 500,fs320 ASADDWO M_FLIPH,OFLAGS ;Left ASXYRNG -1,0,-55,-15,-20,32 ASSVRL ->e0000,->30000 ASJMP frysprkg_as fs320 ASXYRNG -1,0,15,55,-20,32 ;Right ASSVRL >30000,>e0000 ASJMP frysprkg_as frysprk_t ASITEMN FP1X-10,FP1Y+56,SPARKL1,118,DMAWNZ,0 .word -1000 frysprk_l LW SPARKL1,3 LW SPARKL2,3 LW SPARKL3,3 LW SPARKL4,3 LW SPARKL5,3 LW SPARKL6,3 LW SPARKL7HOLD,26 LW SPARKL9,3 LW SPARKL10,3 LW SPARKL11,3 LW SPARKL12,3 LW SPARKL13,3 LW SPARKL14,3 LW SPARKL15,3 LW SPARKL16,3 LW SPARKL17,3 LW SPARKL18,3 LW SPARKL19,3 LWL0 SPARKL20,3 fryshakex_as ;ID >10 ASJMPR 500,fsx20 ASXY >40,>f,-1,0 ASSLPR 1,2 ASXY >40,>f,1,0 ASSLPR 1,2 ASJMP fryshakex_as fsx20 ASXY >40,>f,1,0 ASSLPR 1,2 ASXY >40,>f,-1,0 ASSLPR 1,2 ASJMP fryshakex_as fryshakey_as ;ID >10 ASXY >40,>f,0,-1 ASSLPR 1,3 ASXY >40,>f,0,1 ASSLPR 1,3 ASJMP fryshakey_as fryshakehdx_as ;ID >30 ASLAB 4 ASXY >40,0,-1,0 ASSLPR 1,3 ASXY >40,0,1,0 ASSLPR 1,3 ASXY >40,0,1,0 ASSLPR 1,3 ASXY >40,0,-1,0 ASSLPR 1,3 ASDSJ ASEND fryshakehdy_as ;ID >30 ASLAB 4 ASXY >40,0,0,1 ASSLPR 1,3 ASXY >40,0,0,-1 ASSLPR 1,3 ASDSJ ASEND fryshakescr_as ASASM movk 8,a10 calla SHAKER ASENDASM ASEND fryshakescr2_as ASASM movi 100,a10 calla SHAKER ASENDASM ASEND fryclexp_t ASITEMN FP1X-81,FP1Y+95,CLAMP1,102,DMAWNZ,>28 ASITEMN FP1X-81+25,FP1Y+95,CLAMP1,102,DMAWNZ,>29 ASITEMN FP1X+81-25,FP1Y+95,CLAMP1,102,DMAWNZ,>2a ASITEMN FP1X+81,FP1Y+95,CLAMP1,102,DMAWNZ,>2b .word -1000 fry_clampfly_as ASZ >20,1,250 ASFRA clampopen_l,>20,1 ASFRA clampopen_l,>21,1 ASSLP 5 ASXYV >20,0,->70000,->20000 ASXYV >21,0,>70000,->20000 ASSLP 90 ASDELM >20,1 ASEND fry_jmpup_as ;Jump out of chair ASRUN fryplyrgrav_as ASXYV >40,>f,0,->84000 ASSLP 50 ASXYVA >40,>f,0,0 ASEND fryplyrgrav_as ;Plyr gravity ASLAB 49 ASXYV >40,>f,0,>5800 ASSLP 1 ASDSJ ASEND fryexp_t ASITEMN FP1X-60,FP1Y+20,CLD1A,120,DMAWNZ,0 .word -1000 okbm_l LW OKBM1,4 LW OKBM2,4 LW OKBM3,4 LW OKBM4,4 LW OKBM5,4 LW OKBM6,4 LWL0 OKBM7,4 xpld_l LW XPLD1,4 LW XPLD2,4 LW XPLD3,4 LW XPLD4,4 LW XPLD5,4 LW XPLD6,4 LW XPLD7,5 LW XPLD8,5 LW XPLD9,5 LWL0 XPLD10,5 frysmoke_as ASLAB 200 ASNEW fryexp_t ASXYRNG -1,0,0,130,30,100 ASSVRL ->10000,>10000 ASADLVO OXVEL ASSVRL ->40000,->10000 ASADLVO OYVEL ASJMPR 600,fs10 ;60% hi Z ASADDWO -40,OZPOS fs10 ASFRA okbm_l,-1,1 ASSLP 1 ASDSJ ASEND fryskull_as ;Drop off skull ASZ >40,0,118 ASXY >40,0,0,43 ASFRA skull_l,>40,1 ASSLP 30 ASRUN fryskullgrav_as ASXYV >40,0,>10000,>2000 ASSLP 29 ASXYV >40,0,->1f000,->84000 ASSND fskullb ASSLP 34 ASXYV >40,0,0,->84000 ASSND fskullb ASSLP 31 ASXYVA >40,0,0,0 ASSND fskullb ASEND fryskullgrav_as ;Skull gravity ASLAB 92 ASXYV >40,0,0,>3800 ASSLP 1 ASDSJ ASEND skull_l LWL SKULL1,NEWPALET+30,MTRP LW SKULL2,6 LW SKULL3,7 LW SKULL4,8 LW SKULL5,8 LW SKULL4,6 LW SKULL3,5 LW SKULL2,5 LW SKULL1,5 LWW SKULL2,FLIPBITS+4,M_FLIPH LW SKULL3,4 LWL0 SKULL4,1 bonetor_l LWL BONES1,NEWPALET+230,MTRP LW BONES2,3 LW BONES3,3 LW BONES4,3 LW BONES5,3 LWL0 BONES6,3 frywisp_as ASLAB 80 ASNEW frywisp_t ASXYRNG -1,0,-50,50,-28,17 ASJMPR 500,fryw10 ;50% either wisp ASFRA frywisp1_l,-1,0 ASJMP fryw20 fryw10 ASFRA frywisp2_l,-1,0 fryw20 ASJMPR 500,fryw40 ;50% low Z ASADDWO 18,OZPOS fryw40 ASSLP 2 ASDSJ ASEND frywisp_t ASITEMN FP1X,FP1Y+66,WISP1,101,DMAWNZ,0 .word -1000 frywisp1_l LW WISP1,5 LW WISP2,5 LW WISP3,5 LW WISP4,5 LW WISP5,5 LW WISP6,5 LW WISP7,5 LW WISP8,5 LW WISP9,5 LW WISP10,5 LW WISP11,5 LW WISP12,5 LW WISP13,5 LW WISP14,5 LWL0 WISP15,5 frywisp2_l LWW WISP1,FLIPBITS+8,M_FLIPH LW WISP2,8 LW WISP3,8 LW WISP4,8 LW WISP5,8 LW WISP6,8 LW WISP7,8 LW WISP8,8 LW WISP9,8 LW WISP10,8 LW WISP11,8 LW WISP12,8 LW WISP13,8 LW WISP14,8 LWL0 WISP15,8 ******************************** * Fry dictator scripts frydict_as ASADDW 1,animscnt ASBXY 91,0 ;Set base ASNEW frydict_t ASFRA frydlook_l,>40,1 ASSND ahkbang ASSLP 75+60 ASFRA clampclose_l,>20,1 ASSLP 5 ASSND SETDWN ASSLP 15 ASFRA clampclose_l,>21,1 ASSLP 5 ASSND SETDWN ASRUN frydmeteron_as ASSLP 80 ASNEW fryshocks_t ASRUNI fryshocks_as,>70 ASRUNI fryshakex_as,>10 ASRUNI fryshakey_as,>10 ASSLP 30 fryd_lp ASRUNI fryshakehdx_as,>30 ASRUNI fryshakehdy_as,>30 ASRUN frydstretch_as ASSLPR 4,14 fryd_8 ASASM move @fryp1stat,a0 jrz fryd_20 ;Not hyper? ASENDASM ASRUNI frysprks2_as,>70 ;More sparks ASRUNI frysprks2_as,>70 ;More sparks! ASJMP fryd_30 fryd_20 ASENDASM ASJMPR 750,fryd_40 ;75% skip shock fryd_30 ASRUN fryshakescr_as ASSND fpain1 ASLABR 1,4 ASNEW fryshockbig_t ASSLPR 1,4 ASDEL >60 ASNEW fryshockbigb_t ASSLPR 1,4 ASDEL >60 ASDSJ ASNEW fryshockbig_t ASSLP 2 ASDEL >60 fryd_40 ASRUN frydunstretch_as ASSLP 16 ASRUNI frydface_as,>20 ASJMPR 800,fryd_50 ;80% skip slouch ASSND fpain2 ASXY >40,0,0,9 ASANI AKTORSO4,>41 ;Slouch ASANI AKTORSO4,>46 ASSLPR 8,70 ASXY >40,0,0,-9 ASANI AKTORSO1,>41 ASANI AKTORSO1,>46 fryd_50 ASCRE fry_pulsep1,0 ASLABR 10,50 ASASM move @fryp1stat,a0 jrn fryd_die ASENDASM ASSLP 1 ASDSJ ASSND fpain3 ASKIL >20,7 ASJMP fryd_lp fryd_die ;Dict fries ASENDASM ASRUN frydstretch_as ASSLP 5 ASRUNI frysprks3_as,>70 ASRUN frydexp_as ASRUN frydexp_as ASLAB 120 ASSND fpain1 ASRUN fryshakescr2_as ASNEW fryshockbig_t ASSLPR 1,2 ASDEL >60 ASNEW fryshockbigb_t ASSLPR 1,2 ASDEL >60 ASDSJ ASDELM >70,>f ;Kill electricity ASKIL >70,7 ASKIL >10,7 ASKIL >20,7 ASRUN frysmoke_as ASRUN frywisp_as ASNEW frydbone_t ;FIX! ASSND fburn ASXY >40,>f,0,-12 ASRUN fryskull_as ASZ >41,0,117 ASZ >46,0,117 ASFRA bonetor_l,>41,1 ASFRA bonetor_l,>46,1 ASANI BONELEG1,>44 ;Make bones ASANI BONELEG1,>49 ASANI BONELEG2,>45 ASANI BONELEG2,>4a ASDEL >43 ASDEL >48 ASSVL MTRP ;Bone pal ASPAL >44 ASPAL >49 ASPAL >45 ASPAL >4a ASSLP 60*2 ASSND totcarn ASJMP fry_end_as frydict_t ASITEMN FP1X,FP1Y,AKHED1,101,DMAWNZ,>40 ASITEMN FP1X,FP1Y,AKTORSO1,100,DMAWNZ,>41 ASITEMN FP1X,FP1Y,ECFIST1,103,DMAWNZ,>43 ASITEMN FP1X,FP1Y,AKLEG1,115,DMAWNZ,>44 ASITEMN FP1X,FP1Y,AKLEG2,104,DMAWNZ,>45 ASITEMN FP1X-1,FP1Y,AKTORSO1,100,DMAWNZ+M_FLIPH,>46 ASITEMN FP1X-1,FP1Y,ECFIST1,103,DMAWNZ+M_FLIPH,>48 ASITEMN FP1X-1,FP1Y,AKLEG1,115,DMAWNZ+M_FLIPH,>49 ASITEMN FP1X-1,FP1Y,AKLEG2,104,DMAWNZ+M_FLIPH,>4a ASITEMN FP1X-81,FP1Y+61,CLAMP1,102,DMAWNZ,>20 ASITEMN FP1X+81,FP1Y+61,CLAMP1,102,DMAWNZ+M_FLIPH,>21 .word -1000 frydmeteron_as ;Scroll in the meter ASASM move @STATUS,a0 btst 0,a0 jrz fdmo20 ASENDASM ASNEW frydmeter1_t ASASM fdmo20 move @STATUS,a0 btst 1,a0 jrz fdmo30 ASENDASM ASNEW frydmeter2_t ASASM fdmo30 ASENDASM ASLAB 30 ASXY >80,0,2,0 ASXY >81,0,-2,0 ASSLP 1 ASDSJ ASEND frydmeter1_t ASITEMN 2-112,2+50,GGSWRD,90,DMAWNZ,>80 ASITEMN 14-112,10+50,GGWTTS,91,DMAWNZ,>80 .word -1000 frydmeter2_t ASITEMN 2+275,2+50,GGSWRD,90,DMAWNZ,>81 ASITEMN 14+275,10+50,GGWTTS,91,DMAWNZ,>81 .word -1000 frydlook_l LW AKHED1,2 ;Angry speech LW AKHED9,6 LW AKHED1,3 LW AKHED9,8 LW AKHED1,3 LW AKHED9,8 LW AKHED1,3 LW AKHED9,2 LW AKHED1,6 LW AKHED9,6 LW AKHED1,2 LW AKHED9,3 LW AKHED1,9 LW AKHED9,9 LW AKHED1,5+10 LW AKHED2,20 ;Look LW AKHED1,10 LWW AKHED2,FLIPBITS+20,M_FLIPH LWW AKHED1,FLIPBITS+20,0 LW AKHED3,25 LW AKHED1,5 LWL0 AKHED6,1 frydstretch_as ASXY >40,0,0,-5 ASANI AKTORSO2,>41 ASANI AKTORSO2,>46 ASSLP 4 ASXY >40,0,0,-5 ASANI AKTORSO3,>41 ASANI AKTORSO3,>46 ASEND frydunstretch_as ASXY >40,0,0,5 ASANI AKTORSO2,>41 ASANI AKTORSO2,>46 ASSLP 4 ASXY >40,0,0,5 ASANI AKTORSO1,>41 ASANI AKTORSO1,>46 ASSLP 4 ASXY >40,0,0,9 ASANI AKTORSO4,>41 ;Slouch ASANI AKTORSO4,>46 ASSLP 4 ASXY >40,0,0,-9 ASANI AKTORSO1,>41 ASANI AKTORSO1,>46 ASEND frydface_as ;ID >20 ASJMPR 800,fdf10 ASLABR 2,5 ;>Blink 20% ASSLPR 3,20 ASANI AKHED4,>40 ASSLPR 3,20 ASANI AKHED8,>40 ASDSJ ASEND fdf10 ASSND fpain2 ASJMPR 440,fdf20 ASJMPR 333,fdf30 ASJMPR 500,fdf40 ASFRA fdface1_l,>40,1 ;15% ASEND fdf20 ASFRA fdface2_l,>40,1 ;35% ASEND fdf30 ASFRA fdface3_l,>40,1 ;15% ASEND fdf40 ASFRA fdface4_l,>40,1 ;15% ASEND fdface1_l LW BIGEYES1,5 LW BIGEYES2,5 LW BIGEYES3,5 LW BIGEYES4,5 LW BIGEYES5,5 LW BIGEYES4,5 LW BIGEYES3,5 LW BIGEYES2,5 LWL0 BIGEYES1,5 fdface2_l LW AKHED8,4 LW BIGEYES1,4 LW BIGEYES2,4 LW BIGEYES1,4 LW AKHED8,4 LW AKHED5,4 LWL0 AKHED4,4 fdface3_l LW AKHED9,5 LW AKHED10,20 LW AKHED9,5 LWL0 AKHED7,5 fdface4_l LW BIGEYES1,3 LW BIGEYES2,3 LW BIGEYES3,2 LW BIGEYES4,2 LW BIGEYES5,2 LW BIGEYES6,2 LW BIGEYES5,2 LW BIGEYES4,2 LW BIGEYES3,3 LW BIGEYES7,2 LW BIGEYES8,2 LW BIGEYES9,2 LW BIGEYES10,2 LW BIGEYES9,2 LW BIGEYES8,2 LW BIGEYES7,2 LW BIGEYES2,2 LWL0 BIGEYES1,2 frydexp_as ASLAB 300 ASNEW fryexp_t ASXYRNG -1,0,0,130,20,100 ASSVRL ->e0000,>e0000 ASADLVO OXVEL ASSVRL ->e0000,>e0000 ASADLVO OYVEL ASJMPR 500,fde10 ;50% low Z ASADDWO 40,OZPOS fde10 ASJMPR 200,fde20 ASJMPR 250,fde40 ASJMPR 333,fde50 ASJMPR 500,fde60 ASFRA okbm_l,-1,1 ASJMP fde300 fde20 ASFRA FIREEXP,-1,1 ;Has pal ASJMP fde400 fde40 ASFRA BOOM3,-1,1 ;^ ASJMP fde400 fde50 ASFRA BLUEEXP,-1,1 ;^ ASJMP fde400 fde60 ASFRA xpld_l,-1,1 fde300 ASSVRLT frydpal_t ASPAL -1 fde400 ASSND fryexp ASSLP 1 ASSND fryexp2 ASDSJ ASEND frydpal_t .word 4 .long GREYPAL,RDBOOM,GRNBOOM,BLUBOOM frydbone_t ASITEMN FP1X,FP1Y-254,BONEARM,101,DMAWNZ,>42 ASITEMN FP1X-1,FP1Y-254,BONEARM,101,DMAWNZ+M_FLIPH,>47 .word -1000 ******************************** * Run an animation script (Process) .bss animscnt ,16 ;# anim scripts running APTRPD animslobj_p ,0 ;*Last obj created LONGPD animsv ,2 ;Temp value WORDPD animsbx ,4 ;Base X WORDPD animsby ,5 ;Base Y WORDPD animsfnum ,6 ;# FRANIMs running APTRPD animslp_p ,7 ;*Loop point table pos APTRPD animslp_t ,9 ;(*Loop point, Loop cnt)*5 ;AnimScript commands AsNEW .equ 0 ; AsDEL .equ 1 ;ID AsDELM .equ 2 ;ID AsFRA .equ 4 ;ID or Last AsANI .equ 5 ;ID AsHIDE .equ 6 ;ID AsSHOW .equ 7 ;ID AsPAL .equ 8 ;ID or Last AsXY .equ 10 ;ID AsXYRNG .equ 11 ;ID or Last AsXYV .equ 13 ;ID AsXYVA .equ 14 ;ID AsXYV0 .equ 16 ;Last AsZ .equ 17 ;ID AsBXY .equ 18 ; AsSLP .equ 20 ; AsSLPR .equ 21 ; AsWAIT .equ 22 ; AsTXT .equ 30 ; AsTXTK .equ 31 ; AsLAB .equ 40 ; AsLABR .equ 41 ; AsDSJ .equ 43 ; AsJMP .equ 45 ; AsJMPR .equ 46 ; AsJMPEQ .equ 47 ; AsJMPNE .equ 48 ; AsRUN .equ 50 ; AsRUNI .equ 51 ; AsCRE .equ 52 ; AsKIL .equ 53 ; AsASM .equ 55 ; AsSND .equ 60 ; AsADDW .equ 70 ; AsADDWO .equ 71 ;Last AsADDLO .equ 72 ;Last AsADLVO .equ 73 ;Last AsSVRL .equ 74 ; AsSVRLT .equ 75 ; AsSVL .equ 76 ; SUBRP anim_script ;A8=*Script clr a9 SUBRP anim_script2 ;A8=*Script, A9=Base Y:X move a9,*a13(animsbx),L ;Save XY move *a13(PROCID),a11 subi ANIMPID,a11 srl 8,a11 sll 8,a11 ;A11=ID offset (0->300) clr a1 move a1,*a13(animsfnum) move a13,a1 addi animslp_t,a1 move a1,*a13(animslp_p),L ans50 move *a8+,a1 ;Get command move *a8+,a0,L ;Get data cmpi AsNEW,a1 ;>New objects jrne ans200 PUSH a8 move a0,a9 ans100 move *a9+,a2,L ;*Image move *a9+,a0,L ;Get XY move *a13(animsbx),a3,L addxy a3,a0 ;Add base move a0,a1 sll 16,a0 srl 16,a1 ;Remove X sll 16,a1 move *a9+,a3 ;Z move *a9+,a4 ;Flags addi M_NOCOLL,a4 move *a9+,a5 ;ID addi CLSANIM,a5 add a11,a5 ;+offset clr a6 clr a7 calla BEGINOBJ move *a9,a0 cmpi -1000,a0 jrne ans100 ;End? move a8,*a13(animslobj_p),L ;Save * to last one PULL a8 jruc ans50 ans200 cmpi AsFRA,a1 ;>FRANIM jrne ans300 move a11,a6 ;Save a11 move a0,a9 move *a13(PROCID),a1 ;Inherit same ID+1 addk 1,a1 move *a8+,a10 ;OID jrn ans250 ;No ID? addi CLSANIM,a10 add a11,a10 ;+offset move *a8+,a11 ;#Loops jrn ans220 move *a13(animsfnum),a2 ;+1 FRANIM cnt addk 1,a2 move a2,*a13(animsfnum) ans220 movi anims_franim,a7 calla GETPRC move a13,*a0(anfc_p),L move a6,a11 jruc ans50 ans250 addk 16,a8 ;Skip #loops move a8,a10 move *a13(animslobj_p),a8,L ;Get * to last one movi FRQDELDIE,a7 calla GETPRC move a10,a8 jruc ans50 ans300 cmpi AsSLP,a1 ;>Sleep jrne ans350 subk 16,a8 ;-WORD calla PRCSLP jruc ans50 ans350 cmpi AsSLPR,a1 ;>Sleep random jrne ans600 subk 16,a8 ;-WORD zext a0 move *a8+,a1 calla RNDRNG calla PRCSLP jruc ans50 ans600 cmpi AsWAIT,a1 ;>Wait on FRANIMs jrne ans700 subk 32,a8 ;-LONG ans620 SLEEPK 2 move *a13(animsfnum),a1 jrnz ans620 jruc ans50 ans700 cmpi AsXY,a1 ;>New XY rel to current pos jrne ans800 subk 16,a8 ;-WORD move *a8+,a2 move *a8+,a4 move *a8+,a5 anshs move a0,a1 ;Entry for HIDE/SHOW zext a1 ansxyr addi CLSANIM,a1 add a11,a1 ;+offset move @OBJLST,a0,L ans720 callr obj_find jrz ans50 move *a0(OXPOS),a6 ;New X add a4,a6 move a6,*a0(OXPOS) move *a0(OYPOS),a6 ;New Y add a5,a6 move a6,*a0(OYPOS) move *a0,a0,L jrnz ans720 jruc ans50 ans800 cmpi AsXYRNG,a1 ;>New XY rel to current pos in rndrng jrne ans900 subk 16,a8 ;-WORD sext a0 move *a8+,a1 calla RNDRNG move a0,a4 move *a8+,a0 move *a8+,a1 calla RNDRNG move a0,a5 move *a8+,a1 jrn ans850 ;No ID? move *a8+,a2 jruc ansxyr ans850 addk 16,a8 ;Skip mask move *a13(animslobj_p),a0,L ;Get * to last one move *a0(OXPOS),a6 ;New X add a4,a6 move a6,*a0(OXPOS) move *a0(OYPOS),a6 ;New Y add a5,a6 move a6,*a0(OYPOS) jruc ans50 ans900 cmpi AsXYV,a1 ;>Set XYVel jrne ans1000 move a0,a4 move *a8+,a5,L move *a8+,a1 move *a8+,a2 addi CLSANIM,a1 add a11,a1 ;+offset move @OBJLST,a0,L ans920 callr obj_find jrz ans50 move *a0(OXVEL),a6,L add a4,a6 move a6,*a0(OXVEL),L move *a0(OYVEL),a6,L add a5,a6 move a6,*a0(OYVEL),L move *a0,a0,L jrnz ans920 jruc ans50 ans1000 cmpi AsXYVA,a1 ;>Set XYVel absolute jrne ans1050 move a0,a4 move *a8+,a5,L move *a8+,a1 move *a8+,a2 addi CLSANIM,a1 add a11,a1 ;+offset move @OBJLST,a0,L ans1020 callr obj_find jrz ans50 move a4,*a0(OXVEL),L move a5,*a0(OYVEL),L move *a0,a0,L jrnz ans1020 jruc ans50 ans1050 cmpi AsXYV0,a1 ;>XYVel = 0 jrne ans1100 subk 32,a8 ;-LONG move *a13(animslobj_p),a0,L ;Get * to last one clr a1 move a1,*a0(OXVEL),L move a1,*a0(OYVEL),L jruc ans50 ans1100 cmpi AsZ,a1 ;>Set Z pos jrne ans1200 subk 16,a8 ;-WORD move *a8+,a2 move *a8+,a4 move a0,a1 zext a1 addi CLSANIM,a1 add a11,a1 ;+offset move @OBJLST,a0,L ans1120 callr obj_find jrz ans50 move a4,*a0(OZPOS) move *a0,a0,L jrnz ans1120 jruc ans50 ans1200 cmpi AsLAB,a1 ;>Set label jrne ans1250 subk 16,a8 ;-WORD anslab move *a13(animslp_p),a2,L move a8,*a2+,L ;Save * move a0,*a2+ move a2,*a13(animslp_p) jruc ans50 ans1250 cmpi AsLABR,a1 ;>Set label randomly jrne ans1300 subk 16,a8 ;-WORD zext a0 move *a8+,a1 calla RNDRNG jruc anslab ans1300 cmpi AsDSJ,a1 ;>Decrement and loop to label jrne ans1400 subk 32,a8 ;-LONG move *a13(animslp_p),a1,L move -*a1,a2 subk 1,a2 move a2,*a1 jrz ans1330 move -*a1,a8,L ;Get *Loop jruc ans50 ans1330 subk 32,a1 ;Del loop entry move a1,*a13(animslp_p),L jruc ans50 ans1400 cmpi AsPAL,a1 ;>Set palette jrne ans1600 subk 32,a8 move *a13(animsv),a0,L ;Get *Pal calla GETFPAL move a0,a4 move *a8+,a1 jrn ans1450 addi CLSANIM,a1 add a11,a1 ;+offset move @OBJLST,a0,L clr a2 ;No mask ans1420 callr obj_find jrz ans50 move a4,*a0(OPAL) move *a0,a0,L jrnz ans1420 ;More? jruc ans50 ans1450 move *a13(animslobj_p),a0,L ;Get * to last obj move a4,*a0(OPAL) jruc ans50 ans1600 cmpi AsANI,a1 ;>Do ANI on OID jrne ans1800 move a0,a5 move *a8+,a1 ;OID addi CLSANIM,a1 add a11,a1 ;+offset move @OBJLST,a0,L clr a2 ;No mask ans1620 callr obj_find jrz ans50 move a8,a9 move a5,a1 ;*Img move a0,a8 ;*Obj move *a8(OFLAGS),a4 ;Same flags calla ANI move a8,a0 move a9,a8 move *a0,a0,L jrnz ans1620 ;More? jruc ans50 ans1800 cmpi AsDEL,a1 ;>Delete obj jrne ans2000 subk 16,a8 ;-WORD clr a1 ans1850 zext a0 addi CLSANIM,a0 add a11,a0 ;+offset calla KILOBJN jruc ans50 ans2000 cmpi AsDELM,a1 ;>Delete obj with mask jrne ans2400 subk 16,a8 ;-WORD move *a8+,a1 jruc ans1850 ans2400 cmpi AsRUN,a1 ;>Run a new anim script jrne ans2450 move *a13(PROCID),a1 ;Inherit same ID ans2420 move a8,a10 move a0,a8 ;*Script move *a13(animsbx),a9,L ;Get base XY movi anim_script2,a7 calla GETPRC move a10,a8 jruc ans50 ans2450 cmpi AsRUNI,a1 ;>Run a new anim script with ID jrne ans2500 move *a8+,a1 addi ANIMPID,a1 add a11,a1 ;+offset jruc ans2420 ans2500 cmpi AsCRE,a1 ;>Create a process jrne ans2600 move *a8+,a9,L ;Pass A9 to process movi ANIMPID+>ff,a1 add a11,a1 ;+offset move a0,a7 calla GETPRC jruc ans50 ans2600 cmpi AsKIL,a1 ;>Kill processes with mask jrne ans2700 subk 16,a8 ;-WORD zext a0 addi ANIMPID,a0 add a11,a0 ;+offset move *a8+,a1 calla KILALLN jruc ans50 ans2700 cmpi AsJMP,a1 ;>Jump to new location jrne ans2750 move a0,a8 jruc ans50 ans2750 cmpi AsJMPR,a1 ;>Jump to new location if RND<# jrne ans2780 move a0,a4 movi 999,a0 ;.1 % resolution calla RNDRNG0 move *a8+,a1 cmp a1,a0 jrhs ans50 move a4,a8 ;Do jmp jruc ans50 ans2780 cmpi AsJMPEQ,a1 ;>Jump to new location if = to mem jrne ans2790 move *a0,a0 ;Get value move *a8+,a2,L move *a8+,a1 cmp a1,a0 jrne ans50 ;Not same? move a2,a8 ;Do jmp jruc ans50 ans2790 cmpi AsJMPNE,a1 ;>Jump to new location if != to mem jrne ans2900 move *a0,a0 ;Get value move *a8+,a2,L move *a8+,a1 cmp a1,a0 jreq ans50 ;Same? move a2,a8 ;Do jmp jruc ans50 ans2900 cmpi AsSND,a1 ;>Do a snd call jrne ans3000 calla ONESND jruc ans50 ans3000 cmpi AsASM,a1 ;>Inline code jrne ans3200 subk 32,a8 ;-LONG exgpc a8 jruc ans50 ans3200 cmpi AsHIDE,a1 ;>Hide an OID (X+1000) jrne ans3300 movi 1000,a4 ans3220 subk 16,a8 ;-WORD clr a2 clr a5 jruc anshs ans3300 cmpi AsSHOW,a1 ;>Show an OID (X-1000) jrne ans3500 movi -1000,a4 jruc ans3220 ans3500 cmpi AsADDW,a1 ;>Add WORD to mem jrne ans3600 move *a8+,a1 move *a0,a2 add a1,a2 move a2,*a0 jruc ans50 ans3600 cmpi AsADDWO,a1 ;>Add WORD to last obj+offset jrne ans3700 subk 16,a8 move *a13(animslobj_p),a1,L ;Get * to last one move *a8+,a2 ;Offset add a2,a1 move *a1,a2 sext a0 add a0,a2 move a2,*a1 jruc ans50 ans3700 cmpi AsADDLO,a1 ;>Add LONG # to last obj+offset jrne ans3800 move *a13(animslobj_p),a1,L ;Get * to last one move *a8+,a2 ;Offset add a2,a1 move *a1,a2,L add a0,a2 move a2,*a1,L jruc ans50 ans3800 cmpi AsADLVO,a1 ;>Add LONG value to last obj+offset jrne ans4000 subk 16,a8 move *a13(animslobj_p),a1,L ;Get * to last one zext a0 add a0,a1 ;+Offset move *a13(animsv),a0,L ;Get value move *a1,a2,L add a0,a2 move a2,*a1,L jruc ans50 ans4000 cmpi AsSVRL,a1 ;>Set value to rnd long jrne ans4200 move *a8+,a1,L calla RNDRNG move a0,*a13(animsv),L jruc ans50 ans4200 cmpi AsSVRLT,a1 ;>Set value to rnd long from a table jrne ans4400 move a0,a4 move *a4+,a0 ;#Table entries subk 1,a0 calla RNDRNG0 sll 5,a0 ;*32 add a0,a4 move *a4,a0,L move a0,*a13(animsv),L jruc ans50 ans4400 cmpi AsSVL,a1 ;>Set value to long jrne ans5000 move a0,*a13(animsv),L jruc ans50 ans5000 cmpi AsBXY,a1 ;>Add # to BaseXY jrne ans6000 move *a13(animsbx),a1,L addxy a0,a1 move a1,*a13(animsbx),L jruc ans50 ans6000 cmpi AsTXT,a1 ;>Print text jrne ans6100 callr prt0_xy jruc ans50 ans6100 cmpi AsTXTK,a1 ;>Kill text jrne ans9000 move a8,-*a12,L ;Save in process stack calla ERASE_TXT ; movk 4,a11 ;Save A11! ; JSRP text_shrink ;Sleeps move *a12+,a8,L subk 32,a8 ;-LONG jruc ans50 ans9000 SLEEPK 1 ;>Wait on FRANIMs before exit move *a13(animsfnum),a1 jrnz ans5000 DIE ******************************** * Animation of a part (Process) APTRPD anfc_p,0 ;*AnimScrpt process that made me, set by AS APTRPD anfl,2 ;*Franim list SUBRP anims_franim ;A9=*FRAN list, A10=OID, A11=# Loops move @OBJLST,a8,L ;>Find object anf100 move *a8(OID),a0 cmp a10,a0 jreq anf300 move *a8,a8,L jrnz anf100 jruc anf700 ;No match! anf300 move a9,*a13(anfl),L anf340 JSRP FRANIMQ move *a13(anfl),a9,L ;Go to 1st move a11,a11 jrn anf340 ;-=Infinite dsj a11,anf340 anf700 move a11,a11 jrn anf800 move *a13(anfc_p),a0,L ;Get *Creator move *a0(animsfnum),a2 ;#Frans-1 subk 1,a2 move a2,*a0(animsfnum) anf800 DIE ******************************** * Wait for animation processes to finish SUBRP anim_wait anw10 SLEEPK 3 move @animscnt,a1 jrgt anw10 RETP ******************************** * Kill all animation processes and objects SUBR anim_killall clr a0 move a0,@animscnt movi ANIMPID,a0 ;>Kill processes movi >3ff,a1 calla KILALLN movi CLSANIM,a0 ;>Delete objs movi >3ff,a1 jauc KILOBJN ******************************** * Find an object by OID SUBRP obj_find ;A0=*1st obj, A1=OID, A2=!Mask, A3=Trashed andn a2,a1 of20 move *a0(OID),a3 andn a2,a3 ;Remove bits cmp a1,a3 jreq of50 move *a0,a0,L jrnz of20 of50 move a0,a0 ;A0=*Obj or 0 rets ;Pass CC ******************************** * Extra junk!!! NOTINUSE ******************************** * Calls DO_RACKUP .ref SCORE_FLAG .ref KILBGND,KILALL SUBRP rackcaller rc10 SLEEPK 30 move @SLDEBUG,a0 btst 0,a0 jrz rc10 movk 1,a0 move a0,@INTRO calla KILBGND clr a0 clr a1 calla KILALL clr a0 clr a1 calla KILOBJ clr a0 move a0,@SCORE_FLAG clr a0 move a0,@WORLDTLX+16 movi >35b,a0 move a0,@WORLDTLY+16 jruc DO_RACKUP movi statspal,a0 ;>Cycle color loop movk 31,a1 clr a2 rp45 move a2,*a0+ addk 16,a2 dsj a1,rp45 movi 60*4,a8 clr a9 clr a10 rp50 move @PCNT,a0 sll 32-2,a0 srl 32-2,a0 jrnz rp70 ;Skip cycle movi 31*32*32+ 31*32+ 1,a0 movi colorbuf,a1 move a0,*a1+ ;Set 1st color movi statspal,a2 movk 30,a4 rp55 move *a2,a3 ;Get color # addk 16,a3 movi statscolor_t,a0 add a3,a0 move *a0(16),a5 ;Next is end? jrge rp60 clr a3 ;Restart rp60 move *a0+,*a1+ move a3,*a2+ dsj a4,rp55 callr setpal0 rp70 SLEEPK 1 ;Sleep 4?? dsj a8,rp50 ******************************** * Set palette 0 from buffer .bss colorbuf ,16*31 ;31 Color buffer SUBRP setpal0 PUSH a1,a2 movi colorbuf,a0 ;*Color movk 1,a1 ;Palette 0, Color 1 movk 31,a2 ;# Colors calla PALSET PULL a1,a2 rets ******************************** * Convert BCD to ASCII .bss scorebuf ,12*8 ;11 char_s SUBRP bcdtoasc ;A0.L=BCD PUSH a1,a2,a3 movi scorebuf+11*8,a1 clr a2 movb a2,*a1 movk 4,a3 bcd5 dsj a3,bcd10 ;Convert BCD movk 3,a3 movi ',',a2 subk 8,a1 movb a2,*a1 bcd10 movk >f,a2 and a0,a2 addi '0',a2 subk 8,a1 movb a2,*a1 srl 4,a0 jrne bcd5 move a1,a0 PULL a1,a2,a3 rets ******************************** * Read joysticks SUBRP joy_read move @SWITCH,a0 not a0 rets ;Pass CC ******************************** ; movi bonush_st,a0 ;>Rackup items ; movi hostage_l,a1 ; move @P1DATA+THSTGS,a2 ; move @P2DATA+THSTGS,a3 ; movk 5,a4 ; JSRP bonus_showrack ; ; movi bonusf_st,a0 ; movi flag_l,a1 ; move @P1DATA+TFLAGS,a2 ; move @P2DATA+TFLAGS,a3 ; movk 6,a4 ; JSRP bonus_showrack ; ; movi bonusg_st,a0 ; movi gems_l,a1 ; move @P1DATA+CASHCNT,a2 ; move @P2DATA+CASHCNT,a3 ; movk 3,a4 ; JSRP bonus_showrack ******************************** * Do a bonus rack APTRPD BONUSLP,0 ;*Bonus anim list WORDPD BONUSC1,2 ;Play 1 # items WORDPD BONUSC2,3 ;Play 2 ^ WORDPD BONUSPT,4 ;Points per item SUBRP bonus_showrack ;A0=*XY text, A1=*Anim list, A2=1Cnt, A3=2Cnt ;A4=Points per item move @STATUS,a8 btst 0,a8 jrnz bsr20 clr a2 bsr20 btst 1,a8 jrnz bsr25 clr a3 bsr25 move a1,*a13(BONUSLP),L move a2,*a13(BONUSC1) move a3,*a13(BONUSC2) move a4,*a13(BONUSPT) callr prt0_xy movi racksup,a0 calla ONESND movk 10,a0 move a0,@boanimdeath1 move a0,@boanimdeath2 movi hostxy_t,a8 ;A8=*Next XY clr a9 ;A9=Play1 cnt clr a10 ;A10=Play2 cnt clr a11 ;A11=P1/2 Death delay bits bsr40 move *a13(BONUSC1),a0 cmp a0,a9 jrlo bsr70 ;Cnt up? move @boanimdeath1,a0 jrle bsr90 btst 0,a11 jrnz bsr60 addk 1,a11 ;Set bit 0 PUSH a0,a8,a9 move a13,a8 clr a9 CREATE0 bonus_flashwinblk PULL a0,a8,a9 addk 14,a0 ;Add delay bsr60 subk 1,a0 move a0,@boanimdeath1 jruc bsr90 bsr70 addk 1,a9 move @P1DATA+PSCORE,a0,L move *a13(BONUSPT),a1 add a1,a0 ;Add bonus move a0,@P1DATA+PSCORE,L movi rack1it,a0 calla ONESND move *a8,a1 ;Get X jrn bsr90 PUSH a9,a10,a11 move *a13(BONUSLP),a9,L clr a10 movi boanimdeath1,a11 CREATE0 bonus_anim PULL a9,a10,a11 bsr90 move *a13(BONUSC2),a0 cmp a0,a10 jrlo bsr120 move @boanimdeath2,a0 jrle bsr150 btst 1,a11 jrnz bsr100 addk 2,a11 ;Set bit 1 PUSH a0,a8,a9 move a13,a8 movk 1,a9 CREATE0 bonus_flashwinblk PULL a0,a8,a9 addk 14,a0 ;Add delay bsr100 subk 1,a0 move a0,@boanimdeath2 jruc bsr150 bsr120 addk 1,a10 move @P2DATA+PSCORE,a0,L move *a13(BONUSPT),a1 add a1,a0 ;Add bonus move a0,@P2DATA+PSCORE,L movi rack1it,a0 calla ONESND move *a8,a1 ;Get X jrn bsr150 PUSH a9,a10,a11 move *a13(BONUSLP),a9,L movi 184,a10 ;X offset movi boanimdeath2,a11 CREATE0 bonus_anim PULL a9,a10,a11 bsr150 move *a8,a0 jrn bsr180 addk 32,a8 ;Next XY bsr180 movk 3,a0 callr sleep_var move @boanimdeath1,a0 ;Both done? jrgt bsr40 move @boanimdeath2,a0 jrgt bsr40 movi kilfgnd,a0 calla ONESND calla ERASE_TXT RETP hostxy_t .word 30,45, 60,45, 90,45, 120,45, 150,45 .word 45,65, 75,65, 105,65, 135,65 .word 30,85, 60,85, 90,85, 120,85, 150,85 .word 45,105, 75,105, 105,105, 135,105 .word -1 ******************************** * Flash other players blocks if he won SUBRP bonus_flashwinblk ;A8=*Creators process, A9=P1 or P2 (0-1) move *a8(BONUSC1),a1 move *a8(BONUSC2),a2 move @WORLDTLX+16,a10 move a9,a9 jrnz bfwb70 SWAP a1,a2 addi 190,a10 ;A10=Min X of tiles bfwb70 cmp a2,a1 jrlo bfwbx ;Win round? movi 190,a11 ;A11=X range of tiles movk 3,a8 bfwb80 movi DMACNZ+M_NOCOLL,a3 callr bonus_flashblk SLEEPK 2 movi DMAWNZ+M_NOCOLL,a3 callr bonus_flashblk SLEEPK 8 dsj a8,bfwb80 bfwbx DIE SUBRP bonus_flashblk ;A3=OFLAGS, A10=XMin, A11=XWidth move @OBJLST,a1,L bfb20 move *a1(OZPOS),a0 subi 200,a0 subk 1,a0 jrhi bfb30 ;Not 200-201? move *a1(OXPOS),a0 sub a10,a0 cmp a11,a0 jrhi bfb30 move a3,*a1(OFLAGS) movi >909,a0 move a0,*a1(OCONST) bfb30 move *a1,a1,L jrnz bfb20 rets ******************************** * Animation of a bonus item (Process) SUBRP bonus_anim ;A8=*XY, A9=*FRANIM table, A10=X offset ;A11=*boanimdeath var move *a8+,a0 ;Get X move *a8+,a1 ;Get Y move *a11,a2 move a2,*a13(PDATA) ;Save death # addk 1,a2 ;+1 move a2,*a11 add a10,a0 sll 16,a0 sll 16,a1 move *a9,a2,L movi 220,a3 movi DMAWNZ+M_NOCOLL,a4 clr a5 clr a6 clr a7 calla BEGINOBJ move a9,*a13(PDATA+16),L bo40 movk 4,a1 ;Do one, no sleep JSRP FRANIM jrnc bo60 move *a13(PDATA+16),a9,L jruc bo40 bo60 move a0,a10 bo80 SLEEPK 1 move *a11,a0 ;Get death # move *a13(PDATA),a1 cmp a0,a1 jrgt bo90 dsj a10,bo80 jruc bo40 bo90 move a8,a0 calla DELOBJ DIE ******************************** .endif .end