diff --git a/BALLCODE.ASM b/BALLCODE.ASM new file mode 100644 index 0000000..dafd137 --- /dev/null +++ b/BALLCODE.ASM @@ -0,0 +1,923 @@ +jumps +FLIPPERL EQU 2 ;OBS! M¸STA VARA 2 F™R ATT DET SKA BLI RˇTT SHIFTKEYS +FLIPPERR EQU 1 +tt equ 5 ;cpe +nn equ 6 +rotslowdown=2 +SPLH=33 +SW=336 +BPL=SW/4 +banh=576 +STOTMAX EQU 2048 +flipstruc struc +typ DB 1 ;Left/Right +LastFrame DB 1 ;Blit again? +LeftX DW 1 ;Leftmost block position +TopY DW 1 ;Uppermost block position +FlipX DW 1 ;Words wide +FlipY DW 1 ;Lines high +FlipX1 DW 1 ;Left Border +FlipX2 DW 1 ;Right Border +FlipY1 DW 1 ;Upper Border +FlipY2 DW 1 ;Lower Border +RotCentX DW 1 +RotCentY DW 1 +PowerZonE DW 1 ;Quadrants for power calculations +FlipSize DW 1 ;Offset to next flipper +FlipVinkelHast DW 1 ;Speed °/200:th second +FlipVinkel DW 1 ;Angel from zero +FlipFrame DW 1 ;Frame to use +FlipFrames DW 1 ;Last frame +FlipFramesMax DW 1 +FlipAxUp DW 1 +FlipAxDown DW 1 +FlipMaxHastUp DW 1 +FlipMaxHastDown DW 1 +LASTGFXFRAME DW 0 +FLIPGFXSTART DW ? +FLIPMAXPEK DW ? +FLIPTOPPEK DW ? +FLIPPEK DW ? +FLIPTAB DW ? +FLIPDIFS DW ? +FlipData Dw 1 ;Data for flippers +ENDS +.286 +false equ 0 +true equ 255 +include \source\macros1.asm +public kollakulan,flipper3 +data segment para public 'data' +extrn exahitx,exahity,rotation,sc_X,sc_y,sin,adjusttable,x_pos,y_pos,x_pos_hi,y_pos_hi,x_hast,y_hast,gfxmask21_offset,gfxmask23_offset,gfxmask13_offset,hitpointer:word,screenhast,screenpos,screenposy,materialdata,bumper2lista_l,bumperlista_l,fliplinfo,gravx,gravy +extrn inside_rastint:byte,holdstill:byte,ballhigh:byte,hitvalue:byte,materialbit:byte,bumperwashit:byte,ball_down:byte,allowflip:byte,shiftkeys:byte,tiltflag:byte,tiltkey:byte +EVENDATA +XY_LIST DW 16,8 ,16,9 ,16,10 ,15,11 ,15,12 ,14,13 ,13,14 ,12,15 ,11,15 ,10,16 ,9,16 ,8,16 ,7,16 ,6,16 ,5,15 ,4,15 ,3,14 ,2,13 ,1,12 ,1,11 ,0,10 ,0,9 ,0,8 ,0,7 ,0,6 ,1,5 ,1,4 ,2,3 ,3,2 ,4,1 ,5,1 ,6,0 ,7,0 ,8,0 ,9,0 ,10,0 ,11,1 ,12,1 ,13,2 ,14,3 ,15,4 ,15,5 ,16,6 ,16,7 +SC_KV DW ? +ANTALPIX DB ? +EVENDATA +xtoadd dw 0 +ytoadd dw 0 +;********************************** R™R EJ +materialinfo label word +FRVAGG DW ? +FRBoLL DW ? +STUTS DW ? +MINSTHAST DW ? +INFVINK DW ? +;*********************************** +MINUSHAST DW -4100 +PLUSHAST DW 4100 +bumperpower DW -7000 +kickerpower DW -2000 +kickminhast DW -300 +TILTHASTFW DW 600 +TILTHASTRV DW -200 +public MINUSHAST,PLUSHAST,bumperpower,kickerpower,kickminhast,TILTHASTFW,tILTHASTRv +data ends +MASK1_2 SEGMENT PARA PUBLIC 'DATA' +MASK1_2 ENDS +MASK2_2 SEGMENT PARA PUBLIC 'DATA' +MASK2_2 ENDS +MASK1_1 SEGMENT PARA PUBLIC 'DATA' +MASK1_1 ENDS +FlipBit Equ 10b +RubberBit Equ 3 +StaalBit Equ 110b +SteelBit Equ 101b +PlastBit Equ 7 +cos equ offset sin+512*2 +code segment para public 'code' +assume cs:code,ds:data +extrn moveflipmask:near +KollaKulan proc near + CMP CS:INKO,TRUE + JE INKOD + MOV CS:INKO,TRUE + pusha + call sc_program + popa + MOV CS:INKO,FALSE +INKOD: retn +INKO DB FALSE +KollaKulan endp +sc_program proc near + CMP HOLDSTILL,TRUE + JE NOMOVE + + call sc_krock + jc sc_nocoll + call sc_newdir +sc_nocoll: + call tilt0 + call sc_move + call draw_flippers + + mov al,shiftkeys + and al,inside_rastint + test al,100b + jnz slutt + + call sc_krock + jc sc_nocoll2 + call sc_newdir +sc_nocoll2: + call tilt0 + call sc_move + call draw_flippers +SLUTT: retn +NOMOVE: + CALL TILT0 + CALL DRAW_FLIPPERS + mov al,shiftkeys + and al,inside_rastint + test al,100b + jnz slutt + CALL TILT0 + CALL DRAW_FLIPPERS + JMP SLUTT +sc_program endp +CHECKBOUNDS MACRO REG,MINST,MEST + LOCAL ND00,ND01 + CMP REG,MINST + JGE ND00 + MOV REG,MINST + JMP SHORT ND01 +ND00: CMP REG,MEST + JLE ND01 + MOV REG,MEST +ND01: + ENDM +v_up equ dl +v_dn equ dh +v_left equ bh +v_right equ bl ;m†ste vara bl +last_point equ ch +angel equ bp +kvartingar equ di +bit0=1 +bit1=2 +bit2=4 +bit3=8 +bit4=16 +bit5=32 +bit6=64 +bit7=128 +bit8=256 +bit9=512 +bit10=1024 +bit11=2048 +bit12=4096 +bit13=8192 +bit14=16384 +bit15=32768 +v_upleft=8 +v_upright=4 +v_dnright=2 +v_dnleft=1 +checkpoint macro bitno,vinkel,kvart,punktno + local nohit,notul,notur,notdl,notdr + test al,bitno + jz nohit + add angel,vinkel + or kvartingar,kvart + mov last_point,punktno +ifidn , + inc v_up + inc v_left +endif +ifidn , + inc v_up + inc v_right +endif +ifidn , + inc v_dn + inc v_left +endif +ifidn , + inc v_dn + inc v_right +endif +nohit: endm +checkpoint2 macro raster,byteno,bitno,vinkel,kvart,punktno + mov ax,es:[si+40*raster+byteno] + rol ax,cl + checkpoint bitno,vinkel,kvart,punktno + endm +;*********************************************************************** +sc_krock proc near +sc_ch00: + mov ax,mask1_2 + CMP BALLHIGH,FALSE + JE LOWER_PLANE + MOV AX,MASK2_2 +LOWER_PLANE: + mov es,ax + mov ax,sc_y + add ax,screenposY + dec ax ;ringen „r runt bollen + mov si,40 + mul si + mov si,ax + mov ax,sc_x + dec ax ;ringen „r runt bollen + shr ax,3 + add si,ax ;si=adr till ”versta v„nstra byten i bollen + mov cx,sc_x + dec cx ;ringen „r runt bollen + and cl,111b + inc cl + + xor v_up,v_up + xor v_dn,v_dn + xor v_left,v_left + xor v_right,v_right + xor angel,angel + xor kvartingar,kvartingar + + mov ax,es:[si+1] + rol ax,cl + checkpoint bit6,1616,v_upleft,35 + checkpoint bit7,1577,v_upleft,34 +sc_kr: mov ax,es:[si] + rol ax,cl + checkpoint bit0,1536,v_upleft,33 + checkpoint bit1,1495,v_upright,32 + checkpoint bit2,1456,v_upright,31 +sc_k00l:mov ax,es:[si+41] + rol ax,cl + checkpoint bit4,1705,v_upleft,37 + checkpoint bit5,1668,v_upleft,36 +sc_k00r:mov ax,es:[si+40] + rol ax,cl + checkpoint bit3,1404,v_upright,30 + checkpoint bit4,1367,v_upright,29 +sc_k01: + checkpoint2 2,1,bit3,1762,v_upleft,38 + checkpoint2 2,0,bit5,1310,v_upright,28 +sc_k02: + checkpoint2 3,1,bit2,1822,v_upleft,39 + checkpoint2 3,0,bit6,1250,v_upright,27 +sc_k03: + checkpoint2 4,1,bit1,1879,v_upleft,40 + checkpoint2 4,0,bit7,1193,v_upright,26 +sc_k04: + checkpoint2 5,1,bit1,1916,v_upleft,41 + checkpoint2 5,0,bit7,1156,v_upright,25 +sc_k05: + checkpoint2 6,1,bit0,1968,v_upleft,42 ;????? + checkpoint2 6,-1,bit0,1104,v_upright,24 +sc_k06: + checkpoint2 7,1,bit0,2007,v_upleft,43 ;??? + checkpoint2 7,-1,bit0,1065,v_upright,23 +sc_k07: + checkpoint2 8,1,bit0,0000,v_dnleft,0 ;??? + checkpoint2 8,-1,bit0,1024,v_dnright,22 +sc_k08: + checkpoint2 9,1,bit0,0041,v_dnleft,1 ;??? + checkpoint2 9,-1,bit0,0983,v_dnright,21 +sc_k09: + checkpoint2 10,1,bit0,0080,v_dnleft,2 ;??? + checkpoint2 10,-1,bit0,0944,v_dnright,20 +sc_k10: + checkpoint2 11,1,bit1,0132,v_dnleft,3 + checkpoint2 11,0,bit7,0892,v_dnright,19 +sc_k11: + checkpoint2 12,1,bit1,0169,v_dnleft,4 + checkpoint2 12,0,bit7,0855,v_dnright,18 +sc_k12: + checkpoint2 13,1,bit2,0226,v_dnleft,5 + checkpoint2 13,0,bit6,0798,v_dnright,17 +sc_k13: + checkpoint2 14,1,bit3,0286,v_dnleft,6 + checkpoint2 14,0,bit5,0738,v_dnright,16 +sc_k14: + checkpoint2 15,1,bit4,0343,v_dnleft,7 + checkpoint bit5,0380,v_dnleft,8 +sc_k14r: + checkpoint2 15,0,bit3,0644,v_dnright,14 + checkpoint bit4,0681,v_dnright,15 + +sc_k15l: + checkpoint2 16,1,bit6,0432,v_dnleft,9 + checkpoint bit7,0471,v_dnleft,10 +sc_k15r: + checkpoint2 16,0,bit0,0512,v_dnright,11 + checkpoint bit1,0553,v_dnright,12 + checkpoint bit2,0592,v_dnright,13 + +sc_k16: + cmp kvartingar,11 + je scq0 + cmp kvartingar,9 + je scq0 + cmp kvartingar,13 + je scq0 + jmp short scq1 +scq0: + mov ah,v_dn + xor al,al + shl ax,3 + add angel,ax + +scq1: add v_left,v_up + add v_dn,v_left + add v_right,v_dn + jz no_krock + shr v_right,1 + mov antalpix,v_right + mov ax,angel + xor dx,dx + xor bh,bh ;bl=v_right + div bx + and ax,2047 + mov sc_kv,ax ;krock_vinkel ber„knad!!!! + +GET_MATERIAL: + mov bl,last_point + xor bh,bh + shl bx,2 + mov cx,xy_list[bx] + mov bx,xy_list[bx+2] + add cx,sc_x + DEC CX + add bx,sc_y + DEC BX + CMP BX,576 + JgE NO_KROCK ;NEDANF™R BANANS SLUT + mov ax,40 + add bx,ScreenPosY + ;add screenposy,d1 + mul bx + mov bx,cx + shr bx,3 + add ax,bx + mov si,ax + and cl,111b + mov ch,128 + shR ch,cl + xor cl,cl + CMP BALLHIGH,TRUE + JE GETHIMTRL + set_es mask1_1 + test es:[si],ch + jz notm1 + mov cl,1 +notm1: + set_es mask1_2 + test es:[si],ch + jz notm2 + or cl,10B +notm2: + mov ax,si + xchg al,ah + and ah,11b + mov al,4 + mov dx,3ceh + out dx,ax ;set read plane + set_es 0a000h + CMP SI,230*40 + JAE GO_STD2 + MOV AX,SI + SHR AX,4 + INC AX + MOV DX,80 + MUL DX + SHR SI,2 + ADD SI,AX + ADD SI,SPLH*BPL + JMP DONE_WEIRD2 +GO_STD2:SUB SI,230*40 + shr si,2 + add si,GFXMASK13_OFFSET +DONE_WEIRD2: + test es:[si],ch + jz notm3 + or cl,100B +notm3: jmp storemtrl +gethimtrl: + set_es mask2_2 + test es:[si],ch + jz notm2b + or cl,10b +notm2b: + mov ax,si + xchg al,ah + and ah,11b + mov al,4 + mov dx,3ceh + out dx,ax ;set read plane + shr si,2 + add si,GFXMASK21_OFFSET + set_es 0a000h + test es:[si],ch + jz notm1b + or cl,1 +notm1b: + sub si,GFXMASK21_OFFSET + add si,GFXMASK23_OFFSET + test es:[si],ch + jz notm3b + or cl,100b +notm3b: +storemtrl: + mov hitvalue,cl +; MOV SIFFRORNA+11,CL + + mov ax,1408 ;(44/2048)*65536=1408 + mul sc_kv + add ax,8000h + adc dx,0 + shl dx,2 + mov bx,dx + mov si,xy_list[bx] + mov di,xy_list[bx+2] + add si,sc_x + add di,sc_Y + mov exahitx,si + mov exahity,di + + mov xtoadd,0 + mov ytoadd,0 + + push si di + mov cl,hitvalue + xor ch,ch + mov si,cx + mov materialbit,cl + shl si,4 + add si,offset materialdata + mov di,offset materialinfo + set_es ds + mov cx,5 + rep movsw + pop di si + + mov cl,hitvalue + cmp cl,flipbit + je findflip + CMP cl,PLASTBIT + JE CHECKBUMPER ;BUMPERS + cmp cl,rubberbit + je checkbumper2 ;SIDE KICKERS + clc + retn +checkbumper2: + mov bx,OFFSET bumper2lista_L + jmp short searchbumper +checkbumper: + mov bx,offset bumperlista_L +searchbumper: + CMP TILTFLAG,TRUE + JE LASTBUMP +findbump: + cmp word ptr [bx],-1 + je lastbump + cmp si,DS:[bx] + jb nobump + cmp di,[bx+2] + jb lastbump + cmp si,[bx+4] + ja nobump + cmp di,[bx+6] + ja nobump + MOV AX,[BX+8] + MOV HITPOINTER,AX + ;hitpointer, linkitem, hitgroup + mov bumperwashit,true +lastbump: + clc + retn +nobump: + add bx,10 + jmp findbump +findflip: + mov bx,offset FlipLInfo +findfliploop: + test [bx].typ,0ffh + jz noflipfound + cmp si,[bx].flipx1 + jb nextflipl + cmp si,[bx].flipx2 + ja nextflipl + cmp di,[bx].flipy1 + jb nextflipl + cmp di,[bx].flipy2 + jbe thisflipl +nextflipl: + add bx,size flipstruc + jmp findfliploop +noflipfound: + clc + retn + +thisflipl: + cmp [bx].typ,flipperR + je thisflipR + sub si,[bx].rotcentx + js flipfixl + sub di,[bx].rotcenty + test [bx].powerzone,0ffh + jz noswapl + xchg si,di + mov ax,di + sar ax,1 + or ax,ax + jns nonegflipL2 + neg ax + jmp nonegflipL2 +noswapL:mov ax,di + or ax,ax + jns nonegflipL + neg ax +nonegflipL: + sar ax,2 +nonegflipL2: + add si,ax + neg si + mov ax,[bx].flipvinkelhast + imul si + mov ytoadd,ax + mov ax,[bx].flipvinkelhast + imul di + mov xtoadd,ax +flipfixL: + clc + retn +thisflipR: + sub si,[bx].rotcentx + jns flipfixR + sub di,[bx].rotcenty + test [bx].powerzone,0ffh + jz noswapR + xchg si,di + mov ax,di + sar ax,1 + jns nonegflipR2 + neg ax + jmp nonegflipR2 +noswapR:neg si + neg di + mov ax,di + jns nonegflipR + neg ax +nonegflipR: + sar ax,2 +nonegflipR2: + add si,ax + neg si + mov ax,[bx].flipvinkelhast + imul si + mov ytoadd,ax + mov ax,[bx].flipvinkelhast + imul di + mov xtoadd,ax +flipfixR: + clc + retn + + +no_krock: +; MOV EXAHITX,0 ;CP? +; MOV EXAHITY,0 + stc + retn +sc_krock endp +sc_newdir proc near + mov si,x_hast + mov di,y_hast + add si,xtoadd + add di,ytoadd + add di,screenhast + ;check speed bounds + CHECKBOUNDS SI,MINUSHAST,PLUSHAST + CHECKBOUNDS DI,MINUSHAST,PLUSHAST + + mov bx,2048 + sub bx,sc_kv + and bx,2047 ;beh”vs om sc_kv=0 (det kan nog va en bug, sa ulf) + add bx,bx + mov ax,cos[bx] + imul si + mov bp,dx + mov cx,ax + mov ax,sin[bx] + imul di + sub cx,ax + sbb bp,dx +rept 3 + shl cx,1 + rcl bp,1 ;bp=x cos(v)-y sin(v) (normalhast) +endm + mov ax,sin[bx] + imul si + mov si,dx + mov cx,ax + mov ax,cos[bx] + imul di + add cx,ax + adc si,dx +rept 3 + shl cx,1 + rcl si,1 ;si=x sin(v)+y cos(v) +endm + xchg si,bp ;si=d0 + mov di,BP ;di=d2 +;**************** + or si,si + jz toosloow2 + js toosloow2 + neg si + + cmp si,minsthast + jl ok001 + xor si,si + jmp toosloow + +ok001: mov ax,16 + imul di + idiv si + or ax,ax + jns ok000 + neg ax +ok000: cmp ax,infvink + jb ssab + xor si,si + jmp toosloow +ssab: + or si,si + jz toosloow + cmp bumperwashit,false + je toosloow + cmp materialbit,rubberbit + je sidekick + add si,bumperpower ;BUMPER + jmp nobumperpower +sidekick: + cmp si,kickminhast + jg toosloow + add si,kickerpower ;KICKER + jmp short nobumperpower +toosloow: + mov bumperwashit,false +nobumperpower: + mov ax,si + imul_256 + idiv stuts + sub si,ax + + mov cx,frvagg + mov bp,frboll + cmp si,-1023 + jl sincos + mov ax,si + neg ax + sar ax,6 + inc ax + mov bx,ax + mul cx + mov cx,ax + mov ax,bx + mul bp + mov bp,ax + +sincos: + mov ax,rotation + add ax,screenhast ;make tilt instable + sub ax,di + imul_256 + push ax dx + JCXZ NOTC + idiv cx +NOTC: mov cx,ax + pop dx ax + OR BP,BP + JZ NOD + idiv bp +NOD: add di,cx + sub rotation,ax + + mov ax,2048 ;friktion y-led + imul di + mov di,2048+1 + idiv di + mov di,ax + + mov bx,sc_kv + add bx,bx + mov ax,cos[bx] + imul si + mov bp,dx + mov cx,ax + mov ax,sin[bx] + imul di + sub cx,ax + sbb bp,dx + shl cx,1 + rcl bp,1 ;bp=-x cos(v)+y sin(v) + + mov ax,sin[bx] + imul si + mov si,dx + mov cx,ax + mov ax,cos[bx] + imul di + add cx,ax + adc si,dx + shl cx,1 + rcl si,1 ;si=x sin(v)+y cos(v) + + sub bp,xtoadd + sub si,ytoadd + sub si,screenhast + + CHECKBOUNDS BP,MINUSHAST,PLUSHAST + CHECKBOUNDS SI,MINUSHAST,PLUSHAST + + mov x_hast,bp + mov y_hast,si + + CMP ANTALPIX,6 + JB NONEG2 + MOV BX,SC_KV + SHL BX,1 + MOV AX,-256*4 + IMUL WORD PTR COS[BX] + MOV AX,DX + CWD + ADD X_POS,AX + ADC X_pos_HI,DX + MOV AX,-256*4 + IMUL WORD PTR SIN[BX] + MOV AX,DX + CWD + ADD Y_POS,AX + ADC y_pos_HI,DX +NONEG2: RETN +toosloow2: + mov bumperwashit,false + retn +sc_newdir endp + +sc_move proc near + MOV AX,Y_HAST + cwd + ADD Y_pos,AX + adc y_pos_hi,dx + mov ax,y_pos + mov dx,y_pos_hi + mov bx,1024 + idiv bx + mov sc_y,ax + CMP SC_Y,banh + JL FINY + mov ball_down,true +FINY: + MOV AX,X_HAST + cwd + ADD x_pos,AX + adc x_pos_hi,dx + mov ax,x_pos + mov dx,x_pos_hi + mov bx,1024 + idiv bx + mov sc_x,ax + + MOV AX,GRAVY + ADD Y_HAST,AX + MOV AX,GRAVX + ADD X_HAST,AX + + + mov ax,rotation + or ax,ax + jz rotok + js slowrotneg + sub rotation,rotslowdown + jg rotok + mov rotation,0 + jmp short rotok +slowrotneg: + add rotation,rotslowdown + js rotok + mov rotation,0 +rotok: retn +sc_move endp +draw_flippers proc near + mov bx,offset flipLinfo +draw_flip: + cmp [bx].typ,0 + jz flippers_drawn + mov si,sc_x + mov di,sc_y + cmp si,[bx].flipx1 + jb no_idea + cmp si,[bx].flipx2 + ja no_idea + cmp di,[bx].flipy1 + jb no_idea + cmp di,[bx].flipy2 + ja no_idea + CALL MOVEFLIPMASK +no_idea:add bx,size flipstruc + jmp draw_flip +flippers_drawn: + retn +draw_flippers endp +TILT0 PROC NEAR + CMP TILTKEY,FALSE + JE TILTDOWN +TILTUP: + MOVA SCREENHAST,TILTHASTFW + MOV AX,SCREENPOS + ADD AX,SCREENHAST + MOV SCREENPOS,AX + CMP AX,STOTMAX + JBE FLIPPER4 +BENZ: MOV SCREENHAST,0 + MOV SCREENPOS,STOTMAX + JMP SHORT FLIPPER4 +TILTDOWN: + MOVA SCREENHAST,TILTHASTRV + MOV AX,SCREENPOS + ADD AX,SCREENHAST + MOV SCREENPOS,AX + JGE FLIPPER4 + MOV SCREENHAST,0 + MOV SCREENPOS,0 +FLIPPER4: + MOV AX,SCREENPOS + SHR AX,9 + MOV SCREENPOSY,AX +FLIPPER3: + + MOV BX,OFFSET FLIPLINFO +NEXTFLIPFIX: + CMP [BX].TYP,flipperL + je fixLflip + CMP [BX].TYP,flipperR + je fixRflip + retn +fixRflip: + test SHIFTKEYS,1 + jz downflip + jmp short upflip +fixLflip: + test SHIFTKEYS,10b + jz downflip +UpFlip: cmp AllowFlip,false + je DownFlip + MOV AX,[BX].FLIPVINKELHAST + ADD AX,[BX].FLIPAXUP + CMP AX,[BX].FLIPMAXHASTUP ; + JLE TOOSLOW + MOV AX,[BX].FLIPMAXHASTUP +TooSlow: + MOV [BX].FLIPVINKELHAST,AX + NEG AX + ADD AX,[BX].FlipVinkel + MOV [bx].FlipVinkel,AX + ShL AX,1 + MOV SI,AX + MOV AX,ADJUSTTABLE[SI] + OR AX,AX + JNz FLI03 + MOV [BX].FlipVinkelHast,0 + MOV [BX].FlipVinkel,0 + XOR AX,AX +fli03: Cmp ax,[BX].FlipFrames + JL FLI01 + MOV [BX].FLIPVINKELHAST,0 + MOVA [BX].FLIPVINKEL,[BX].FLIPFRAMESMAX + MOV AX,[BX].FLIPFRAMES +fli01: + MOV [BX].FLIPFRAME,AX + ADD BX,SIZE FLIPSTRUC + JMP NEXTFLIPFIX + +downflip: + + MOV AX,[BX].FLIPVINKELHAST + ADD AX,[BX].FLIPAXdown + MOV [BX].FLIPVINKELHAST,AX + NEG AX + ADD AX,[BX].FlipVinkel + MOV [bx].FlipVinkel,AX + ShL AX,1 + MOV SI,AX + MOV AX,ADJUSTTABLE[SI] + OR AX,AX + Jnz FLI02 + MOV [BX].FlipVinkelHast,0 + MOV [BX].FlipVinkel,0 + XOR AX,AX +fli02: Cmp ax,[BX].FlipFrames + JL FLI00 + MOV [BX].FLIPVINKELHAST,0 + MOVA [BX].FLIPVINKEL,[BX].FLIPFRAMESMAX + MOV AX,[BX].FLIPFRAMES +fli00: MOV [BX].FLIPFRAME,AX + ADD BX,SIZE FLIPSTRUC + JMP NEXTFLIPFIX +TILT0 ENDP +code ends +end \ No newline at end of file diff --git a/FANTASIE.ASM b/FANTASIE.ASM new file mode 100644 index 0000000..1a6376c --- /dev/null +++ b/FANTASIE.ASM @@ -0,0 +1,6677 @@ +SAVEPAL=0 +keyhandler=65h +MONGI_RESIPLAY=0 +MUSIKKAOS=0 +DEBUG=0 +DEMOVER=0 +ARROWS=1 +STAND_ALONE=0 +CREATE_FLIP_DATA=0 +GLAPP_SIZE=0 +CENTSCREEN=3 + +TT EQU 5 ;CP! +NN EQU 6 +PUBLIC TT,NN + +COMMENT\*********************************************************************** +ALLA: +skydd - SLUMPEN! +testa p† flera datorer +cheats + +GABRIEL: +LJUD F™R OFTA VID STONEBONE +CHECKSUMMA SKYDDET +*Kolla minneskrav j„ttenoga med st”rsta SDRen +*spela en massa p† magnus dator † din farsas notebook (m extern sk„rm) + +JOHAN: +FELHANTERINGEN CP! (¸TMINSTONE OUT OF MEM) +NYA FLD-LOGGAN! (FRONT.LBM P¸ DIN DATOR) +TONINGEN SKA INTE SLUTA P¸ BAJSBRUNT UTAN P¸ SVART! +*Kolla minneskrav j„ttenoga med st”rsta SDRen +spela en massa p† TFT notebook + gotlandsdatorn + +DANIEL: +SB16 +JOHANS SYNDROM +PAS 16 (l†na Steins) + +?HˇNGDE VID UPPSTART AV BILLION (STEWART) +?BALL STUCK AFTER PAUSE +?386SX16 FICK MEDIUM (INTERNAL) +??SCANDICS SYNDROM + +(MUSIC ON/OFF BORDE ST™DJA SUPERLˇGEN (DVS ANDRA MAINSLINGOR ˇN S_MAIN) +(anv„nd nya clears!!) +SPELTESTA BILLION +adlib och thing kn„pper till vid play sdr-laddning endast i introN? + +******************************************************************************\ + +.286 +JUMPS +LOCALS __ + +TRUE EQU 255 +FALSE EQU 0 + +xst=165 +yst=450 +NOOFWAITSYNCS=0 +NO_OF_PLAYERS=8 ;NOTE: F1-F8 +inactivetime=12 ;(secs) +TA_TID=15 ;SYNCS EN KEY ˇR GILTIG EFTER DEN BLIVIT TRYCKT +SLIME_FACTOR_DEFAULT=11 ;5=OUT OF SCREEN 55=HARD +AWAYFROMMIDDLE=20 +MOUSETOTAL=2 +MOUSEMIDDLE=MOUSETOTAL/2 + +STACKEN SEGMENT PARA STACK 'STACK' + DB 256 DUP (0) +STACKEN ENDS + +includelib fantasie +;includelib cleaR +INCLUDE C:\source\MACROS1.ASM +INCLUDE C:\source\MACROS3.ASM +INCLUDE FANTASIE.MAC + +SKALA56 MACRO SKALVAR +MOV AX,5 +IMUL SKALVAR +MOV CX,6 +IDIV CX +MOV SKALVAR,AX +ENDM + + +if (bana EQ 1) + INCLUDE pland.ASM +endif +if (bana EQ 2) + INCLUDE sdev.ASM +endif +if (bana EQ 3) + INCLUDE show.ASM +endif +if (bana EQ 4) + INCLUDE stones.ASM +endif + +flipstruc struc +typ DB 1 ;Left/Right +LastFrame DB 1 ;Blit again? +LeftX DW 1 ;Leftmost block position +TopY DW 1 ;Uppermost block position +FlipX DW 1 ;Words wide +FlipY DW 1 ;Lines high +FlipX1 DW 1 ;Left Border +FlipX2 DW 1 ;Right Border +FlipY1 DW 1 ;Upper Border +FlipY2 DW 1 ;Lower Border +RotCentX DW 1 +RotCentY DW 1 +PowerZonE DW 1 ;Quadrants for power calculations +FlipSize DW 1 ;Offset to next flipper +FlipVinkelHast DW 1 ;Speed °/200:th second +FlipVinkel DW 1 ;Angel from zero +FlipFrame DW 1 ;Frame to use +FlipFrames DW 1 ;Last frame +FlipFramesMax DW 1 +FlipAxUp DW 1 +FlipAxDown DW 1 +FlipMaxHastUp DW 1 +FlipMaxHastDown DW 1 +LASTGFXFRAME DW 0 +FLIPGFXSTART DW ? +FLIPMAXPEK DW ? +FLIPTOPPEK DW ? +FLIPPEK DW ? +FLIPTAB DW ? +FLIPDIFS DW ? +FlipData Dw 1 ;Data for flippers +ENDS +;**************************************************************** +FLIPPERL EQU 2 ;OBS! M¸STA VARA 2 F™R ATT DET SKA BLI RˇTT SHIFTKEYS +FLIPPERR EQU 1 + +springh=17 +NOT_PLAYING=60*INACTIVETIME +rotslowdown=2 +PILHAST=1024 ;256+128 ;1024/4=256 +SLOW=0 +MARGIT=0 +FLASHIT=0 +SW=336 +BPL=SW/4 +HIRES=false +RES600=false +HZ50=FALSE + +IF HIRES + IF RES600 + SH=600 + ELSE + SH=480 + ENDIF +ELSE + IF HZ50 + SH=256 + ELSE + SH_HI=350 + SH_LO=240 + ENDIF +ENDIF + +SPLH=33 +MAXGAPU_LO=(SH_LO-SPLH)/2-AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2 +MAXGAPD_LO=(SH_LO-SPLH)/2+AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2 +MAXGAPU_HI=(SH_HI-SPLH)/2-AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2 +MAXGAPD_HI=(SH_HI-SPLH)/2+AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2 + +IF HIRES + IF RES600 + LATE_INTERRUPT_RASTER = (SH/2-SPLH)/2+BALLH+SPLH ;600 + ELSE + LATE_INTERRUPT_RASTER = (SH/2-SPLH)/2+BALLH ;480 + ENDIF +ELSE + LATE_INTERRUPT_RASTER_HI = (SH_HI/2-SPLH)/2+BALLH ;480 + LATE_INTERRUPT_RASTER_LO = (SH_LO-SPLH)/2+F3HEIGHT/2 ;+BALLH ;240 +ENDIF + +IF RES600 + MIDDLE_RASTER = (SH-SPLH)/2+SPLH +ELSE + MIDDLE_RASTER_LO = (SH_LO-SPLH)/2 + MIDDLE_RASTER_HI = (SH_HI-SPLH)/2 +ENDIF + +UPPER EQU TRUE +LOWER EQU FALSE + +IF CREATE_FLIP_DATA + PUBLIC FLIPLINFO +ENDIF + +public exahitx,exahity,rotation,sc_X,sc_y,adjusttable,x_pos,y_pos,x_pos_hi,y_pos_hi,x_hast,y_hast,gfxmask21_offset,gfxmask23_offset,gfxmask13_offset,hitpointer,screenhast,screenpos,screenposy,materialdata,bumper2lista_l,bumperlista_l,gravx,gravy +public INSIDE_RASTINT,holdstill,ballhigh,hitvalue,materialbit,bumperwashit,ball_down,allowflip,shiftkeys,tiltflag,tiltkey +public moveflipmask + +DATA SEGMENT PARA PUBLIC 'DATA' +extrn MINUSHAST:word ;l„gg dessa externer i datasegmentet +extrn pluSHAST:word +extrn bumperpower:word +extrn kickerpower:word +extrn kickminhast:word +extrn TILTHASTFW:word +extrn TILTHASTRV:word + +SOUNDCFG DB "SOUND.CFG",0 +DRV DB "c:\Masm\DS20\RESIPLAY\resiplay.exe",15 DUP(0) +PARMS DW 10 DUP(0) +LASTJINGLE DB ? +LASTLASTJINGLE DB ? +LASTPRIORITY DB ? +JINGLEJUMPCNT DB ? +;LASTLOOPVAL DB ? +SLOWCNT DB 0 +;**************** STUDS-VARIABLER ************************************** +PAUSEFLAG DB FALSE +TILTKEY DB FALSE +TILTFLAG DB FALSE +EVENDATA +TILTCOUNTER DW ? +STOTMAX EQU 2048 +SCREENPOS DW 0 +SCREENPOSY DW 0 +SCREENHAST DW 0 +muzik_off db false +kvot=4 +MaterialData dw 1792,1792/Kvot,400,-300,38,0,0,0 +FLipprubber dw 1792,1792/Kvot,400,-600,18,0,0,0 ;Flipper + dw 1792,1792/Kvot,400,-600,18,0,0,0 +rubber dw 896,896/Kvot,875,-200,38,0,0,0 ;Rubber + dw 1792,1792/Kvot,400,-300,38,0,0,0 +staal dw 30000,30000/Kvot,1000,-400,38,0,0,0 ;Spring Steel +Steel dw 10000,10000/Kvot,450,-700,38,0,0,0 ;Steel +plastic dw 10000,10000/Kvot,400,-500,38,0,0,0 ;Plastic +bumperwashit db false +ball_down db false +hitpointer dw ? +GFXMASK21_OFFSET dw FIRSTMASK_GFXADR +GFXMASK23_OFFSET dw ? +gFXMASK13_OFFSET dw ? +springpos db 0 +realpos db 0 +SPRINGTASK DW OFFSET SPRINGSTEEN +INSIDE_RASTINT DB FALSE +INSIDE_BALLHANDLER DB FALSE +INSIDE_RESTOFVBLANK DB FALSE +SLIME_FACTOR DW SLIME_FACTOR_DEFAULT ;5=OUT OF SCREEN 55=HARD +;********************************************** +ADJUST EQU 55 +;******************************* + dw adjust*2 dup(0) ;h”r +adjusttable dw adjust*24 dup(0) ; ihop +;*********************************** +hitvalue db 0,0 +materialbit db 0,0 +ROTATION DW 0 +SC_X DW XST +SC_Y DW YST +X_POS DW 0 +X_POS_HI DW 0 +Y_POS DW 0 +Y_POS_HI DW 0 +X_HAST DW 0 +Y_HAST DW 0 +EXAHITX DW 0 +EXAHITY DW 0 +GRAVY DW 10*tt/nn +GRAVX DW 0 +OLDPOS DW ? +OLDSHIFT DW ? +oldx dw 0 +oldy dw 25 + +IF HIRES + SPLITLINE DW SH-SPLH +ELSE + SPLITLINE DW ? ;HI:SH_HI-SPLH, LO:(SH_LO-33)*2 +ENDIF + +START_RASTER DW ? +RASTERPOS DW 0 +STATUS DB ? +LATEGFX DB ? +VERYFIRSTPUT DB ? +PUTITBETWEEN DB ? +PUTF3BETWEEN DB ? +FORCELATEF3 DB ? +BUFR DW 0 +FLIPPEKARE DW ? +FLIPPTR DW ? +FLIPADR DW ? +FLIPXPOS DW ? +FLIPYPOS DW ? +FLIPSEG DW ? +FLIPWIDTH DW ? +FLIPHEIGHT DW ? +FLIPSTORLEK DW ? +FLIPLINESIZE DW ? +ASSUME DS:DATAFLIP ;******************************************* +LEFTFLIP2PTR DW OFFSET LEFTFLIP2TAB +LEFTFLIPPTR DW OFFSET LEFTFLIPTAB +RIGHTFLIPPTR DW OFFSET RIGHTFLIPTAB +ASSUME DS:DATA ;************************************************** +SHIFTKEYS DB 0 +INTERRUPTS_ON DB false +HOLDSTILL DB FALSE +uppstartad db false +RGBBUFFER DB RGB_BUFFER_LEN DUP(0) +RGBBUFPTR DW RGBBUFFER +LASTCHECK DW ? +LASTAREA DW ? +BALLHIGH DB ? +TASKLIST DW NOOFTASKS DUP(DUMRET) +NO_OF_ACTIVE_TASKS DW 0 +SAVESOURCE DW ? +SCREENFORCE DW ? +SCREENFORCE2 DW -1 +SCROLLPOS DW ? +CURRENT_PRIORITY DB ? +SPRING_VALID DB ? +SHIFTPRESSED DB ? +KEYTASK DW ? +JINGLE_READY_ANIM DB TRUE +JINGLE_READY_LOGIC DB TRUE +MATRIX_SPEED DW ? +MATRIX_CNT DW ? +MATRIX_ONOFF DW ? +MATRIX_IS_FLASHING DB ? +INTFLAG DB FALSE +INH_EFF DB ? +BONUSSIFFRORNA DB 12 DUP(?) ;BCD CODED +TEMPSIFFRORNA DB 12 DUP(?) ;BCD CODED +BONUSMULTIPEL DW ? +ADDOR DB 11 DUP(0), 1, 11 DUP(0) +ADDORPEK DW ? +BONUSPEK DW ? +LOOSING DB ? +ALLOWFLIP DB ? +first_time_you_fool db true ;Jaaaa det r„cker s† h„r! (ANVˇNDS ˇVEN VID ESC I CHUTEN) +if demover +MINUTE_5_COUNTER DW 0 +fiveminutes db false +endif +BALLS DB 12 DUP(0) ;FIRST 11 DIGITS MUST NEVER BE CHANGED +NO_OF_BALLS DB 1 ;WILL BE CHANGED +SCORECHANGED DB ? +SPECIAL_SCORE_CHANGED DB ? +I_UTSKJUT DB TRUE +behovs_provad db false +SPECIALMODE DB FALSE +ADDPLAYERS DB true +SUPER_INIT DB ? ;TRUE WHILE INITING SUPER MODE (FOR JP ETC) +NEXT_A DW 0 +DOTRUT DW offset cs:nodot +sisa dw 0 +clearval dw ? +slump_countern dw ? +MAKE_BAD DB false ;cpskydd (ska va true) +calamares_delay db 0 +already_beaten db ? +VISAKEYS DB ? +VISAPOANG DW 0 +STUDSSCOREN DW 0 +INHIBIT_COUNT_DOWN DB ? ;(PENETRATION OF SPECIAL MODE) +EOTS DB ? ;UPP TILL VARJE BANA ATT ANVˇNDA +DOT_READY DB ? +LAGERARBETAREN DW ? +LILLE_LAGERARBETAREN DB ? +PAUSE_LAGRET DB 320/2*16/8+1 DUP(0) +PAUSE_TEXT DB 'GAME PAUSED',0 +INSIDE_DOLIGHTS DB FALSE +SYNC_COUNTER DW 0 +INT_WAS_HERE DB ? +INT_WAS_HERE2 DB ? +DNPRESSED DB FALSE +MOUSEINSTALLED DB ? +DECCOR DW ? ;WAITJINGLE2 +FFLAG DB 0 ;F11/F12 +HI_RES DB ? ;350 OR 240 LINES + +FLASHSTRUC STRUC + LNUM DB ? + FLASHCOUNTER DB ? + TURNOFF DB ? + RESETFC DB ? +ENDS +REALFLASHLIST DB MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC DUP(0) +LIGHTSTATUS DB NOOFLIGHTS+1 DUP(0) +WAITLIST DW MAX_NO_OF_WAIT_SYNCS DUP(0) + +TOGGLAR_STRUCEN STRUC + S_BALLS DB ? + S_ANGLE DB ? + S_SCROLLING DB ? + S_IM DB ? + S_RESOLUTION DB ? + S_MODE DB ? +ENDS +TOGGLAREN DB SIZE TOGGLAR_STRUCEN DUP (0) + +;cp cp cp cp! +hi_1 db '8 ',94,0 +hi_2 db '9 ',94,0 +hi_3 db '9'+1,' ',94,0 +hi_4 db '9'+2,' ',94,0 +ALFA_KEYS DB 13 DUP(0),0,2 DUP(0),'QWERTYUIOP',0,0,0,0,'ASDFGHJKL',0,0,0,0,0,'ZXCVBNM',6 dup (0),'*',(128-50-7) dup (0),20 dup (0) +scan_code db ? +sec_left dw ? +sync_per_sec dw 60 +sync_left dw ? +val_to_print dw ? +time_left dB ? +sec_asc db ?,?,0 +NODOTCOUNT DW ? +fjanttext dw ? +PRINTTASK DW ? +AX_PRINT DW ? +DI_PRINT DW ? +clear_box_start dw ? +clear_box_bredd dw ? +clear_box_hojd dw ? +rullstart dw ? +rulltext dw ? +rull_pos dw ? +stop_at_pos dw ? +upp_add dw ? +first_high db false ;cp? +HIGHSCORE DB false ;CP? +no_demomusic db false ;cp? +DEMOMODE DB TRUE +F1F8_CODE DB ? +OLD_F1F8_CODE DB ? +PLAYERS DB 0 +PLAYERS_CP DB FALSE +CARMEN DW ? +PLAYER DB ? +ORGPLAYER DB ? +extrn sin:word,material:word +;fonter +TOM_BRUN DB 13 DUP(0) ;F™R ¸ R™JJA MED ASS¸! +extrn font5,font8,font11,font13 +densomsparhanhar db ? +TILTDISABLED DB FALSE +dont_know_yet db ? +AFTER_CHEAT DB TRUE +cheatpekare dw 0 +cheatinput db 12+2 dup (' ') + +cheats dw JOHANRUT + db 'JOHAN$' + + dw TECHRUT + db 'TECH$' + + dw TSPRUT + db 'TSP$' + + DW DANIELRUT + DB 'DANIEL$' + + DW GABRIELRUT + DB 'GABRIEL$' + + DW CHEATRUT + DB 'CHEAT$' + + DW TILTRUT + DB 'EARTHQUAKE$' + + DW BALLSRUT + DB 'EXTRA*BALLS$' + + DW SNAILRUT + DB 'SNAIL$' + + DW FAIRPLAYRUT + DB 'FAIR*PLAY$' + + dw robbanrut + db 'ROBBAN$' + + dw steinrut + db 'STEIN$' + + dw greetrut + db 'GREET$' + dw 255 ;255 avslutar!! + +SNAILSCROLL DB 21 DUP (1),'I WOULD RATHER BE A SPARROW THAN A SNAIL',21 DUP(1),255 +BALLSSCROLL DB 21 DUP (1),'YOU WILL NOW GET 7 BALLS DUDE',21 DUP(1),255 +FAIRPLAYSCROLL DB 21 DUP (1),'ALL CHEATS ARE NOW RESET',21 DUP(1),255 +TILTSCROLL DB 21 DUP (1),'THE TILT FEATURE IS NOW DISABLED',21 DUP(1),255 +CHEATSCROLL DB 21 DUP (1),' THERE ARE A LOT OF NASTY CHEATS IN THIS GAME SO JUST START TYPING ON YOUR KEYBOARD',21 DUP(1),255 +johanscroll DB 21 dup(1),'THE DOT MATRIX SYSTEM AND SOME OF THE GAME SYSTEM AND THE WHOLE OF THE SPEED DEVILS TABLE WERE PERFECTLY CODED BY JOHAN ',21 DUP(1),255 +DANIELSCROLL DB 21 dup(1),'THE MUSIC PLAYER AND THE BALL CALCULATIONS AND THE BILLION DOLLAR GAMESHOW TABLE WERE SUPERBLY CODED BY DANIEL',21 DUP(1),255 +GABRIELSCROLL DB 21 dup(1),'THE GAME SYSTEM AND BOTH THE PARTYLAND AND STONES N BONES TABLES WERE CODED MEGA NICELY BY GABRIEL',21 DUP(1),255 +TSPSCROLL DB 21 DUP(1),'THE SPACEPIGS RULE FOREVER',21 DUP (1),255 + +greetSCROLL DB 21 dup(1),'GREETINGS GO TO ALL THE GUYS WHO HELPED US BETA TEST THIS GAME' + DB ' STEIN, BJORN, JENS, RILLE, ROBBAN AND OF COURSE STEWART AND BAZZA' + DB ' A MEGA GREET GOES TO ROBBAN FOR THE GUSPLAYER' + DB ' DIGITAL ILLUSIONS - HOPE TO SEE YOU AGAIN SOON' + db ' STEWART AND BAZZA - WE LOOK FORWARD TO MEETING YOU GUYS' + DB ' GREETINGS TO ALL SPACEPIGS MEMBERS HENRIK, ERIK, TOM AND OF COURSE - OURSELVES' + DB ' SPECIAL GREETS GO TO CASCADA AND THE CODEBLASTERS' + DB ' TO TRITON AND FUTURE CREW - YOUR DEMOS ARE IMPRESSING' + DB ' TO ALL OTHER GROUPS - KEEP UP THE GOOD WORK' + DB ' ALL OF YOU GUYS STUDYING MASTER OF SCIENCE IN UPPSALA AND STOCKHOLM - BUY US A BEER IF YOU ENJOY THE GAME' + DB ' ALSO GREETINGS TO THE CAPED CRUSADER OF THE FINGERBOBS (ATARI SCENE) TCC ' + DB 'SAYS HI TO CREEPER, OBERJE, DAWN, RACHAEL AND ANN. HI ALSO TO ' + DB 'THE GREAT BAZZA AT 21ST CENTURY. ' + DB ' TO THE CODERS OF EMM386 AND QEMM DRIVERS - MAKE THE INTERRUPT HANDLING FASTER' + DB ' RIGHT NOW THEY MAKE THE COMPUTER GO SOOOOOOO SLOW',21 DUP(1),255 +ROBBANSCROLL DB 21 dup(1),'THANX FOR THE GRAVIS ULTRASOUND PLAYER',21 DUP(1),255 +STEINSCROLL DB 21 dup(1),'HOPE WE CAN MAKE THAT VECTORGAME WE TALKED ABOUT',21 DUP(1),255 +TECHSCROLL DB 21 dup(1),'YEAH YOU ARE PROBABLY WONDERING HOW IT IS POSSIBLE TO MAKE A GAME LIKE THIS ON THE PC' + DB ' FIRST OF ALL THE GAME IS CODED IN 100 PERCENT ASSEMBLER LANGUAGE ' + DB ' WE RUN IN A SPECIAL VGA 320 X 240 OR 360 X 350 IN 256 COLOR MODE HARDWARE IS USED FOR SCROLLING THE TABLE ' + DB ' THE FLIPPERS AND DOT MATRIX SCOREPANEL ARE DELTA ANIMATED AND TO MAKE THE GRAPHICS RUN FLICKER FREE WE ARE USING RASTER INTERRUPTS THE PALETTE IS USED FOR FLASHING THE LIGHTS ' + DB ' THE MUSIC ROUTINE HAS FEATURES SUCH AS SOFT CLIPPING AND INTERPOLATIVE MIXING ' + DB ' ALTOGETHER THIS MAKES THE GAME POSSIBLE TO RUN ON A 12 MHZ 286 WITH SOUNDBLASTER MUSIC AT 16KHZ IN EACH FRAME' + DB 21 DUP (1),255 + +techTS label worD + clearit + dw _scroll,TECHSCROLL + dw 0 +CHEATTS label worD + clearit + dw _scroll,CHEATSCROLL + dw 0 +robbanTS label worD + clearit + dw _scroll,robbanSCROLL + dw 0 +steinTS label worD + clearit + dw _scroll,steinSCROLL + dw 0 +greetTS label worD + clearit + dw _scroll,greEtSCROLL + dw 0 +DANIELTS label worD + clearit + dw _scroll,DANIELSCROLL + dw 0 +GABRIELTS label worD + clearit + dw _scroll,GABRIELSCROLL + dw 0 +JOHANTS label worD + clearit + dw _scroll,JOHANSCROLL + dw 0 +tSPTS label worD + clearit + dw _scroll,TSPSCROLL + dw 0 +QUAKETS label worD + clearit + dw _scroll,TILTSCROLL + dw 0 +SnailTS LABEL WORD + CLEARIT + DW _SCROLL,SNAILSCROLL + DW 0 +BallsTS LABEL WORD + CLEARIT + DW _SCROLL,BALLSSCROLL + DW 0 +FairPlayTS LABEL WORD + CLEARIT + DW _SCROLL,FAIRPLAYSCROLL + DW 0 + +NewplayerTS label word + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,no_of_players_text,sw*2*10/4+16*1/4 + dw 0 +;quitting fr†gan +quit_fragenTS LABEL WORD + CLEARIT + dw _flashoff,? + DW _PRINT13,quit_TEXT,sw*2/4*2+16*0/4 + dw _WAIT_YN,? + dw _jmp,showhighsTS + +HALL_DIG_BORTATS dw _wait,1 + DW _LOCK,1 + dw 0 + +quit_TEXT DB 'REALLY QUIT ','Z'+2,'Y OR N','Z'+3,0 +quitgam_TEXT DB ' END GAME ','Z'+2,'Y OR N','Z'+3,0 + +DATA ENDS + +CODE SEGMENT PARA PUBLIC 'CODE' + ASSUME CS:CODE,DS:DATA + EXTRN UNPKLBM:NEAR,kollakulan:near + EXTRN PUTBALL:NEAR,DELBALL:NEAR + MARG DB 0 + OLDMARG DB 0 + +FANTASIES PROC FAR + MOV BP,DS + MOV AH,4AH + MOV BX,LASTSEG + SUB BX,BP + ADD BX,1024/16 + INT 21H ;HˇR F™RSVINNER BAN-GRAFIKEN + MOV AX,DATA + MOV DS,AX +IF STAND_ALONE + MOV TOGGLAREN.S_SCROLLING,1 +ELSE + MOV AX,0200H ;RESIDENTA TOGGLAREN => LOKALA TOGGLAREN + MOVE ES,DS + LEA BX,TOGGLAREN + INT KEYHANDLER +ENDIF + +if stand_alone + mov hi_res,true +else + MOV HI_RES,FALSE + CMP TOGGLAREN.S_RESOLUTION,0 + JZ ITS_LOW_RES + MOV HI_RES,TRUE +ITS_LOW_RES: +endif + +;HˇR DANIEL!!! + CMP TOGGLAREN.S_ANGLE,0 + JZ NORMAL_ANGLE + CALL TABLE_ANGLE +NORMAL_ANGLE: + + MOV NO_OF_BALLS,3 + CMP TOGGLAREN.S_BALLS,0 + JZ ITS_3_BALLS + MOV NO_OF_BALLS,5 +ITS_3_BALLS: + + CMP TOGGLAREN.S_IM,0 + JE ITS_ON_THE_MUSIC + CALL MUSIC_TOGGLE +ITS_ON_THE_MUSIC: + + CMP TOGGLAREN.S_SCROLLING,1 + JB CF11 + JA CF9 + CALL F10 + JMP SHORT KLAR +CF9: CALL F9 + JMP SHORT KLAR +CF11: CALL F11 +KLAR: + +if debug + debugclear +endif +IF DEBUG + debugmess 0,0,"Pinball Fantasies PC by FrontLine Design" +ENDIF + cli ;CP!? +IF DEBUG + debugmess 0,1,"Initing..." +ENDIF + CALL INIT_SIN + CALL INIT_SCROLL + call init_ballspeed + CALL INIT_MATRIX + + CALL BREDDA_MASK +IF DEBUG + debugmess 0,1,"Init gfx..." +ENDIF + CALL INIT_GFX +IF DEMOVER +ELSE + CALL INIT_HIGHS +ENDIF + MOVE DS,DATA + + ;************** CHECKSUMMA 1 START *************** +CHECK1_START: + MOV RGBBUFPTR,OFFSET RGBBUFFER + CALL RECALC_LIGHTS + CALL RECALCFLASHLIST + + CALL MASKS2GFX ;INUTI LIGGER INIT_FLIPPERS (AV N¸N ANLEDNING) +;FATALT_HOPP: + CALL INIT_SPRING + CALL INIT_KEY + cmp hi_res,true + jne notcalc3 + or shiftkeys,100b +notcalc3: + CALL INIT_MOUSE + CALL INIT_SOUND +CHECK1_END: + ;************** CHECKSUMMA 1 END *************** + + MOVE DS,DATA + MOV STATUS,LOWER ;INIT BEEM VARS + MOV VERYFIRSTPUT,TRUE + MOV LATEGFX,FALSE + MOV INTERRUPTS_ON,FALSE + + CALL JUST_ONE_TIME_RESET + CALL JUST_ONE_TIME_RESET_TABLE + + sti + + + call go_DEMO_mode ;CP! DEMO MODE + + MOV SCREENFORCE,BANH-(SH_LO-SPLH) + CMP HI_RES,TRUE + JNE NOTHIRES2 + MOV SCREENFORCE,BANH-(SH_HI-SPLH) + CALL KILL_UPPER_LINE +NOTHIRES2: + MOV CARMEN,-1 + + +if demover + CALL game_MUSIC ;cp! demo mode +else + CALL demo_MUSIC ;cp! demo mode +endif + call setscreenstart + CALL INIT_INTS + + call slack_lights_i_pelle + + CMP TOGGLAREN.S_MODE,0 + JZ DONOTCONV + CALL COLOR_2_BW + call pelle_2_bw +DONOTCONV: + + +; XOR BX,BX +;TONA: ADD BX,1 + mov bx,256 + CALL SETPAL +; cmp bx,256 +; jb tona + + MOV AX,4 + MOV BX,2 + mov cx,0 ;0=use configurated rate + INT 66H ;PLAY MODULE + IF_ERROR 1,OUTOFMEMORY + IF_ERROR 2,INIT_ERR + + + + mov uppstartad,true + MOV INTERRUPTS_ON,TRUE ;********** INTERRUPTS ENABLED! ********** +IF DEBUG + debugmess 0,1,"Running... " +ENDIF +IF DEBUG + MOV AH,48H + MOV BX,0FFFFH + INT 21H + DEBUGVAL 0,22,BX,"Free memory after all: " +ENDIF + jmp main +TABLE_ANGLE Proc Near +;for (c=0;c<11;c++) ramptable[c]-=4; + + mov bx,offset ramptable + cmp hi_res,false + je goda_grannar + mov bx,offset ramptable_hi +goda_grannar: + mov cx,no_of_ramps +luta: sub word ptr [bx+2],3 + add bx,4 + loop luta + retn +TABLE_ANGLE EndP + +init_ballspeed proc near ;ers„tt den gamla med denna +cmp hi_res,true +je no_adde_malmberg + +mov bx,offset materialdata +mov cx,8 +mov bp,5 +mov si,6 +hemul: mov ax,[bx+6] +imul bp +idiv si +mov [bx+6],ax +add bx,16 +loop hemul + +skala56 MINUSHASt +skala56 PLUSHAST +skala56 bumperpower +skala56 kickerpower +skala56 kickminhast +skala56 TILTHASTFW +skala56 TILTHASTRV + +no_adde_malmberg: +retn +init_ballspeed endp +;********** +already_quitting db false +checkquit: + cmp cs:already_quitting,true + je no_fragen_sie_bitte_die_ende + mov cs:keyboard_enabled,false + mov CS:ALREADY_QUITTING,TRUE + mov bx,offset quit_fragenTS + call do_matrix +no_fragen_sie_bitte_die_ende: +retn +;*********** + +KILL_UPPER_LINE PROC NEAR + SETWRITE 1111B + MOVE ES,0A000H + MOV DI,SPLH*SW/4 + MOV CX,320/4/2 + XOR AX,AX +LUPPEN: STOSW + LOOP LUPPEN + RET +KILL_UPPER_LINE ENDP + +checkpause: +if demover +; jmp nopause +endif + CMP PAUSEFLAG,false + JE NOPAUSE + mov interrupts_on,false + mov al,15 + int 66h ;STOP + CALL PRINT_PAUSE +; DEBUGMESS 20,6,"in i pauseloopen" + mov scan_code,-1 + +FEELP: cmp scan_code,1 ;leverkorv + je kaka_calamares ;Esc pressed!! +kaka_pasa: + cmp scan_code,-1 + JE FEELP + cmp scan_code,1 + je kaka_calamares ;Esc pressed!! Y or N ???? +judas: ;L†t han l”pa!! + mov calamares_delay,30 + mov scan_code,-1 +; DEBUGMESS 20,6,"ut ur den!!!!!!!" + + + mov cx,0 ;0=use configurated rate + MOV AX,4 + MOV BX,3 + INT 66H ;PLAY MODULE + IF_ERROR 1,OUTOFMEMORY + IF_ERROR 2,INIT_ERR + CALL RESTORE_AFTER_PAUSE + mov interrupts_on,true + mov pauseflag,false +NOPAUSE: + RETN + +lat_den_sta: +;=============== DETTA ˇR EN CP-L™SNING F™R ATT F¸ TYST ====================== + MOVE DS,DATA + MOV HOLDSTILL,TRUE + CALL RESTORE_AFTER_PAUSE + mov pauseflag,false + +;MOV INTERRUPTS_ON,TRUE +;MOV CS:QUITTING,TRUE +;MOV SI,0 ;? +;RETN + + + xor muzik_off,true +;CP? jz its_off_not + +;CP? call its_off ;Turn him on . . . not! +its_off_not: + mov cs:levin,true ;en riktig urban!! + mov si,0 + push si + MOV CX,0 + MOV AL,6 + INT 66H ;set vol + mov interrupts_on,true + pop si + + mov cx,0 ;0=use configurated rate + MOV AX,4 + MOV BX,3 + INT 66H ;PLAY MODULE +; IF_ERROR 1,OUTOFMEMORY +; IF_ERROR 2,INIT_ERR + JMP QUIT ;CP!? + + MOV CS:QUITTING,TRUE + mov si,1 + retn +;============================================================================= +kaka_calamares: + PUSH OFFSET quit_TEXT + POP AX_PRINT + MOVE DI_PRINT,sw*4/4 + call print_it_klux +do_kk_again: + mov scan_code,-1 +keck_agan: + cmp scan_code,-1 + je keck_agan ;wait for keypress! + mov bx,offset alfa_keys + mov al,scan_code + xlat + cmp al,'Y' ;y or anything! + je quitteras + jmp judas ;l†t han g†!! +quitteras: + jmp lat_den_sta +; jmp judas + + +ifscan macro tangent,rutin + local nedu + cmp scan_code,tangent + jne nedu + mov scan_code,-1 + call rutin +nedu: + endm +ifscan_set macro tangent,var,val + local nedu + cmp scan_code,tangent + jne nedu + mov scan_code,-1 + mov var,val +nedu: + endm +checkgamequit: + SETBALLPOS 300,570,0,0,FALSE + MOV CS:KEYBOARD_ENABLED,TRUE + addtask to_demo_from_game + CALL DEMO_MUSIC ;CP!??? + mov scan_code,-1 + call kill_flashor + mov bx,offset showhighsTS + call do_matrix + retn + +;checkgamequit: + CMP ADDPLAYERS,TRUE + JE NO_END_GAME + PUSH OFFSET quitgam_TEXT + POP AX_PRINT + MOVE DI_PRINT,sw*4/4 + call print_it_klux +do_kks_again: + mov scan_code,-1 + MOV CS:KEYBOARD_ENABLED,FALSE + ADDTASK ALLADIN + RETN + +NO_END_GAME: + ADDTASK END_GAMEN ;VID FLERA SPEL:POLYGAMI? + RETN + +ALLADIN: +kecks_agan: + cmp scan_code,-1 + je RETSTICKA ;kecks_agan ;wait for keypress! + MOV CS:NEGERN,60 ;S¸ MAN HINNER STˇDA TILLS FARBROR STEWI KOMMER + mov bx,offset alfa_keys + mov al,scan_code + xlatb + cmp al,'Y' ;y or anything! + je end_gamen +ko_gamen: + ADDTASK CP_WAIT_FOR_MATRIX + mov bx,offset SHOWplayerSTS + call do_matrix + SUICIDE +RETSTICKA: +retn +NEGERN DB ? +CP_WAIT_FOR_MATRIX: +; DEC CS:NEGERN +; JZ JOBBA_DIG + cmp dotrut,offset nodot + je jobba_dig ;st„dat † klart!! + RETN +JOBBA_DIG: + MOV CS:KEYBOARD_ENABLED,TRUE + mov scan_code,-1 + SUICIDE +end_gamen: + SETBALLPOS 300,570,0,0,FALSE + addtask to_demolation_derby + MOV first_time_you_fool,true + MOV CS:NEGERN,6 ;S¸ bollen hinner sl„ckas + suicide +to_demolation_derby: + DEC CS:NEGERN + jz negressen + retn +negressen: + MOV CS:KEYBOARD_ENABLED,TRUE + addtask to_demo_from_game + CALL DEMO_MUSIC ;CP!??? + mov scan_code,-1 + SUICIDE + +checkstartkeys: + MOV AL,SCAN_CODE + CMP AL,3BH + JB NOTF1F8 + CMP AL,42H + JA NOTF1F8 + MOV SCAN_CODE,-1 + CMP ADDPLAYERS,FALSE + JE STARTDONE + MOV ADDPLAYERS,FALSE + MOV F1F8_CODE,AL ;=0: NOT PRESSED! + MOV OLD_F1F8_CODE,AL + MOV PLAYERS_CP,FALSE + +NOTF1F8: + CMP AL,1CH + JNE NOTENTER + MOV SCAN_CODE,-1 + CMP PLAYERS,8 + JNB STARTDONE + CMP ADDPLAYERS,FALSE + JE STARTDONE + CMP PLAYERS_CP,FALSE + JE PLAYERS_NOT_CP + MOV PLAYERS,0 + MOV PLAYERS_CP,FALSE +PLAYERS_NOT_CP: + INC PLAYERS + MOV AL,PLAYERS + ADD AL,3BH-1 ;3BH=CODE FOR F1 + MOV ADDPLAYERS,FALSE + MOV F1F8_CODE,AL + MOV OLD_F1F8_CODE,AL + JMP STARTDONE +NOTENTER: + +STARTDONE: + RETN + +KEYBOARD_ENABLED DB true +SETTER DB 2 +tiltkey2 db false +TILTLOGIC: + CMP TILTDISABLED,TRUE + JE RETTMIGGA + pusha + cmp i_utskjut,true ;Ej skjutit ut den + je tiltdone + CMP TILTFLAG,TRUE ;redan 'tilt tilt tilt' + JE tiltDONE + CMP BALL_DOWN,TRUE ;Redan d”tt + JE TILTDONE + CMP cs:TILTKEY2,TRUE + JE TILTDONE ;REDAN BANKAT!! + ADD TILTCOUNTER,60 + +; mov bx,tiltcounter +; debugval 0,12,bx,'tiltcounter=' + + mov cs:tiltkey2,true + + CMP TILTCOUNTER,120 ;Tv¸ ska g¸ + JA DOTIL + CMP TILTCOUNTER,60 + JBE TILTDONE + CALL HE_ALMOST_TILTED ;Varningsjingle + JMP tiltDONE +DOTIL: + MOV TILTFLAG,TRUE ;L†t han f† 'tilt tilt tilt' + CALL HE_TILTED + JMP TILTDONE + +TILTDONE: + mov scan_code,-1 + popa +RETTMIGGA: + RETN + +music_toggle: + xor muzik_off,true + jnz its_off + + mov al,springjingle + mov s_spring,al + mov al,mainjingle + mov s_main,al + mov lastjingle,mainjingle + CMP SPRING_VALID,TRUE + CMP i_utskjut,TRUE + JNE NOSPRINGTUNE + MOV LASTJINGLE,SPRINGJINGLE +NOSPRINGTUNE: + cmp jinglejumpcnt,1 + jnl mdone + mov jinglejumpcnt,1 + jmp mdone +its_off: ;NEJ! STˇNG AV! + mov al,emptyjingle + mov byte ptr s_spring,al + mov byte ptr s_main,al + cmp lastjingle,emptyjingle + je mdone + addtask turnoffmusic +notM: +mdone: retn + +turnoffmusic: + mov current_priority,0 + playjingle s_empty + suicide + +checkcheat: + mov bx,offset alfa_keys + mov al,scan_code + cmp al,-1 + je novalidkey + nil ah + xlat + cmp al,0 + je novalidkey + mov densomsparhanhar,al + move es,data + mov scan_code,-1 + mov bx,cheatpekare + mov [bx+offset cheatinput],al + inc cheatpekare + cmp cheatpekare,12 ;av s„kerhetssk„l, ska aldrig h„nda!! + jbe eatit + mov cheatpekare,0 + mov cx,12 + mov di,offset cheatinput + mov al,' ' + rep stosb +; debugmess 0,2,'overflow' + retn +eatit: +;check it +coulditbe: + mov si,offset cheats + mov dont_know_yet,false + +checkit: + mov di,offset cheatinput + lodsw + cmp ax,255 + je endofcheats ;inga cheats st„mde!! + mov bx,ax ;f”r att kunna kalla p† bx om det st„mde!! + mov dx,0 +nexttest: + lodsb + cmp al,'$' + je found + + cmp dx,cheatpekare + jae nownaaaating + inc dx + cmp al,[di] + jne notfound + inc di + jmp nexttest +nownaaaating: +; debugmess 0,1,'no naating' +; debugmess 0,2,'no naating' + mov dont_know_yet,true +notfound: + lodsb + cmp al,'$' + je checkit + jmp notfound +endofcheats: + cmp dont_know_yet,true + je norezza_ofit + mov cheatpekare,1 + mov cx,11 + mov di,offset cheatinput + mov al,densomsparhanhar + stosb + mov al,' ' + rep stosb +norezza_ofit: + retn +novalidkey: + retn + +found: + mov cheatpekare,0 + call bx + retn + +MAIN: +if debug + MOV AL,9 + INT 66H + mov BL,AL + NIL BH + debugval 40,19,bx,"CURRENT POSITION: " + mov BL,LASTJINGLE + NIL BH + debugval 0,19,bx,"LASTJINGLE: " + cmp dotrut,offset nodot + je ledignuju + debugmess 0,2,'DOT BUSY' + jmp ulurkur + ledignuju: + debugmess 0,2,'DOT FREE' + ulurkur: + debugbcd 50,0,siffrorna,"siffrorna=" +endif + + + cmp cs:keyboard_enabled,false + je no_command_keys ;D† tangentbordet „r upptaget . . + + ;SKALL ALLTID FUNKA: + IFSCAN 67,F9 + IFSCAN 68,F10 + CMP FFLAG,11 + JNE NF11 + CALL F11 +NF11: + CMP FFLAG,12 + JNE NF12 + CALL F12 +NF12: + +;******** if demomode ****** + cmp demomode,true + jne no_demomode + ;Tangenter: f-keys + quit + cheats (om n†n orkar!) JOHAN ¸RKADE + call checkstartkeys + call checkcheat + ifscan 1,checkquit + jmp no_command_keys + +no_demomode: + cmp loosing,true + je no_command_keys + +;******** if in chute ****** +if demover +else + cmp spring_valid,true ;cp! + jne no_chute + ifscan 1,checkgamequit + cmp cs:keyboard_enabled,false + je no_command_keys ;D† tangentbordet „r upptaget . . + call checkstartkeys +endif +no_chute: +;******** if ingame ******** + ;Tangenter: pause + IFSCAN 57,TILTLOGIC + ifscan 50,music_toggle + ifscan_set 25,pauseflag,true + call checkpause +no_command_keys: + ifscan_set 1,SCAN_CODE,-1 + + inc slump_countern + cmp holdstill,false + je noskruv + mova rotation,slump_countern + and rotation,1023 + test rotation,1 + jz noskruv + neg rotation +noskruv: +IF DEBUG + debugval 0,6,sc_y,"Ypos=" +; DEBUGVAL 0,8,FLIPLINFO.LASTGFXFRAME,"LASTGFXFRAME" + MOV BL,FLIPLINFO.LASTFRAME + NIL BH +; DEBUGVAL 0,9,BX,"LASTFRAME" +; DEBUGVAL 0,10,FLIPLINFO.FLIPFRAME,"FLIPFRAME" + mov bl,jingle_ready_anim + nil bh +; debugval 40,2,bx,"jing_red_anim=" + mov bl,jingle_ready_logic + nil bh +; debugval 40,3,bx,"JING_RED_LOGIC" + debugval 0,3,gravx,"X gravitation=" + debugval 0,4,gravy,"Y gravitation=" + debugval 0,5,sc_x,"Xpos=" + cmp ballhigh,true + je notl + debugmess 0,7,"Lower level" +notl: + cmp ballhigh,true + jne noth + debugmess 0,7,"Upper level" +noth: + mov cx,word ptr hitvalue + debugval 0,8,cx,"Material=" + debugval 0,9,rotation,"rotation=" + MOV CL,CURRENT_PRIORITY + MOV CH,0 +; debugval 0,13,cx,"CURRENT PRIORITY: " +; debugbcd 30,9,JACKVALUE,"JACKPOT=" +; debugbcd 0,9,player_area.p_siffrorna,"player_area Po„ng=" +; debugbcd 0,10,player_area.p_bonussiffrorna,"player_area Bonus=" + debugVAL 0,11,NO_OF_ACTIVE_TASKS,"No of active tasks=" +;******* + mov ax,sc_y + MOV DX,0 + mov bX,576/25+1 + div bX + mov bp,ax + mov ax,sc_x + MOV DX,0 + mov bX,320/40 + div bX + mov si,ax + add si,40 +;******* + push si bp + mov si,oldx + mov bp,oldy + debugmess si,bp," " + pop bp si + mov oldx,si + mov oldy,bp + debugmess si,bp,"O" +ENDIF + + CMP CS:QUITTING,TRUE + JE QUIT +; mov time_left,true + SET_ES 0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] ;CREATE MUSIC + JMP MAIN +QUITTING DB FALSE + +F9: MOV SLIME_FACTOR,9 + RETN + +F10: MOV SLIME_FACTOR,SLIME_FACTOR_DEFAULT + RETN + +F11: MOV FFLAG,0 + MOV SLIME_FACTOR,20 + RETN + +F12: MOV FFLAG,0 + MOV SLIME_FACTOR,40 + RETN + +JUST_ONE_TIME_RESET: + mov current_prIORITY,0 + MOV LASTJINGLE,0 + MOV LASTPRIORITY,0 + MOV PRINTTASK,OFFSET DUMRET + mov rullstart,0 + mov rulltext,0 + mov rull_pos,0 + mov upp_add,0 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov rull_pos,0 + MOV ALLOWFLIP,FALSE +if demover + MOV F1F8_CODE,3bh ;CP! automatic 1 player in demo version +else + MOV F1F8_CODE,0 ;CP! not automatic 1 player in game version + MOV OLD_F1F8_CODE,0 +endif + MOV HOJD_ADD,0 + MOV NODOTCOUNT,NOT_PLAYING-2 + MOV FJANTTEXT,FALSE + MOV CENT,FALSE + + CALL RESETFLASHLIST + CALL RESET_TASK_LIST + CALL RESET_WAITLIST + cmp hi_res,true + calle hires_changes + RETN +hires_changes: + mov sync_per_sec,71 ;? + retn +RESET_WAITLIST: + MOVE ES,DS + NIL AX + MOV DI,OFFSET WAITLIST + MOV CX,MAX_NO_OF_WAIT_SYNCS + REP STOSW ;CP! + RETN + +WHEN_NEW_BALL_RESET: + MOV LASTCHECK,0 + MOV SPRING_VALID,TRUE + MOV SHIFTPRESSED,FALSE + MOV KEYTASK,OFFSET DUMRET + MOV JINGLE_READY_ANIM,TRUE + MOV JINGLE_READY_LOGIC,TRUE + MOV INH_EFF,FALSE + MOV LOOSING,FALSE + MOV SPECIALMODE,FALSE + MOV INHIBIT_COUNT_DOWN,FALSE ;(PENETRATION OF SPECIAL MODE) + MOV DOT_READY,TRUE + CALL RESETFLASHLIST + CALL RESET_TASK_LIST + CALL RESET_WAITLIST + + CMP PARTYFLASH,TRUE + JE NO_UPDAT_PLEASE + MOV MATRIX_IS_FLASHING,FALSE + call kill_flashor +;F”r att inte senaste spelarens score skall synas!! + CMP VISAKEYS,TRUE + JNE NONEWPL + MOV VISAKEYS,FALSE +; updat_score +; mov bx,offset newplayerTS +; call do_matrix + JMP REDIGRET +NONEWPL: + updat_score + mov bx,offset SHOWplayerSTS + call do_matrix +REDIGRET: + retn +NO_UPDAT_PLEASE: + RETN + +RESET_TASK_LIST PROC NEAR + MOV AX,OFFSET DUMRET + MOV CX,NOOFTASKS + MOV BX,OFFSET TASKLIST +RESETNXTTASK: + MOV [BX],AX + ADD BX,2 + LOOP RESETNXTTASK + RETN +RESET_TASK_LIST ENDP + +WHEN_NEW_GAME_RESET: + MOV CS:KEYBOARD_ENABLED,TRUE + MOV AFTER_CHEAT,FALSE + MOV BALLS[11],1 + MOV AL,BALLS[11] + ADD AL,'7' ;SEPEKOMPENSERING + MOV BALLSTEXT[5],AL + MOV PLAYER,1 + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING +if demover +else + MOV PLAYERSTEXT[7],AL +endif +;cpskydd MOV MAKE_BAD,true ;gnu urban + ;************** CHECKSUMMA 1 AVKˇNNING *************** + MOV SI,OFFSET CHECK1_START + MOV CX,OFFSET CHECK1_END + SUB CX,SI + XOR AH,AH + MOVE DS,CODE +SVEN_BERTIL_TAUBE: + LODSB + ADD AH,AL + LOOP SVEN_BERTIL_TAUBE + MOVE DS,DATA + SUB AH,2 +COMMENT\ ;* #CHK# kommentera bort... +PUSHA +MOV AL,AH +NIL AH +DCLS +DPRINTVAL AX," AX=" +POPA +\ + +if (bana EQ 1) + CMP AH,197+7 +endif +if (bana EQ 2) + CMP AH,165+7 +endif +if (bana EQ 3) + CMP AH,37+7 +endif +if (bana EQ 4) + CMP AH,83+7 +endif + JnE WASnt_OKKK + MOV MAKE_BAD,false ;gnu urban +WASnt_OKKK: + MOV ADDPLAYERS,TRUE + MOV DOT_READY,TRUE + mov already_beaten,false + MOV VISAKEYS,TRUE + RETN + +INIT_ERR: + SET_DS DATA + CALL UNINST_KEY + MOV AX,0 + INT 66H + MOV AX,3 + INT 10H + PRINTMESS "Can't init sound device!" + MOV AX,4C02H + INT 21H + +errorloadingmod: + SET_DS DATA + CALL UNINST_KEY + MOV AX,0 + INT 66H + MOV AX,3 + INT 10H + PRINTMESS "Error loading module!" + MOV AX,4C04H + INT 21H +cantfindmod: + SET_DS DATA + CALL UNINST_KEY +if mongi_resiplay +else + MOV AX,0 + INT 66H +endif + MOV AX,3 + INT 10H + PRINTMESS "Can't find " + mova ds,data + mov dx,offset modul + mov ax,900h + int 21h + +if mongi_resiplay + MOV AX,0 + INT 66H +else +endif + + MOV AX,4C04H + INT 21H +OUTOFMEMORY: + SET_DS DATA + CALL UNINST_KEY + MOV AX,0 + INT 66H + MOV AX,3 + INT 10H + PRINTMESS "Out of memory! The selected sounddriver requires more memory!",13,10,"Please refer to the manual!",13,10,13,10 + MOV AX,4C01H + INT 21H +levin db false +ERRQUIT: +QUIT: +IF STAND_ALONE +ELSE + mov interrupts_on,false + mov cs:fading,true + call readpal + mov si,256 +gosp: CMP SYNC_COUNTER,0 + JZ GOSP + MOV SYNC_COUNTER,0 + DEC SI + call faderut + push si + cmp cs:levin,true + je goga_dada + mova es,0 + mov ax,8 + pushf + call dword ptr es:[66h*4] +goga_dada: + pop si + or si,si + jg gosp + +ENDIF + MOV AX,0 + INT 66H ;DISINST SOUND + MOV AX,0 + INT 33H ;RESET MOUSEDRIVER/CHECK IF MOUSE INSTALLED + + CALL UNINST_KEY +IF DEMOVER +ELSE + CALL SAVE_HIGHS +ENDIF +IF STAND_ALONE + MOV AX,3 + INT 10H +ENDIF +IF DEBUG + debugmess 0,1,"Thanx for playing!" +ENDIF + MOV AX,4C00H + INT 21H + + +jcall dw 0 +JINGLE_HANDLER PROC FAR +IF DEBUG + inc cs:jcall + debugval 0,12,cs:jcall,"jinglecall no " +ENDIF + SET_DS DATA + cli + DEC JINGLEJUMPCNT +IF DEBUG + pushf + mov BL,LASTJINGLE + NIL BH + debugval 0,19,bx,"LASTJINGLE: " + mov bL,jinglejumpcnt + NIL BH + debugval 0,20,bx,"Jinglejumpcnt: " +; mov bL,LASTLOOPVAL +; NIL BH +; debugval 0,21,bx,"LASTLOOPVAL: " + popf +ENDIF + JZ JINGLEREADY + JL JINGLELOOP + jmp check_m_off + retf +JINGLELOOP: + MOV JINGLEJUMPCNT,0 + jmp check_m_off + RETF +JINGLEREADY: + + MOV AL,LASTPRIORITY + MOV CURRENT_PRIORITY,AL +; MOV AL,LASTLOOPVAL + MOV JINGLEJUMPCNT,0 ;AL + MOV AL,LASTJINGLE +muzikof: + MOV JINGLE_READY_ANIM,TRUE + MOV JINGLE_READY_LOGIC,TRUE +check_m_off: + sti + cmp muzik_off,false + je goretf + cmp al,lastmainpos + ja goretf + mov al,emptyjingle +goretf: RETF +ENDP + +MASKS2GFX PROC NEAR + PUSH DS + mov bp,GFXMASK21_OFFSET + MOVA DS,MASK2_1 + MOVA ES,0A000H + MOV DX,3C4H + MOV AL,2 + MOV CX,4 + MOV AH,10001B +BITPL: PUSH CX + OUT DX,AX + ROL AH,1 + MOV DI,bp + MOV SI,CX + DEC SI + XOR SI,11B + MOV CX,510*40/4 +FLYT: MOVSB + ADD SI,3 + LOOP FLYT + POP CX + LOOP BITPL + MOV BP,DI + mova ds,data + mov GFXMASK23_OFFSET,di + PUSHA + PUSH ES + CALL INIT_FLIPPERS ;CP!? + POP ES + POPA + + + MOVA DS,MASK2_3 + MOV DX,3C4H + MOV AL,2 + MOV CX,4 + MOV AH,10001B +BITPL2: PUSH CX + OUT DX,AX + ROL AH,1 + MOV DI,BP ;FIRSTPOS + MOV SI,CX + DEC SI + XOR SI,11B + MOV CX,510*40/4 +FLYT2: MOVSB + ADD SI,3 + LOOP FLYT2 + POP CX + LOOP BITPL2 + MOV BP,DI + mova ds,data + mov GFXMASK13_OFFSET,di + MOVA DS,MASK1_3 + MOV DX,3C4H + MOV AL,2 + MOV CX,4 + MOV AH,10001B +BITPL3: PUSH CX + OUT DX,AX + ROL AH,1 + MOV DI,BP ;FIRSTPOS + MOV SI,CX + DEC SI + XOR SI,11B + ADD SI,230*40 ;RESTEN FINNS I MARGINALEN + MOV CX,(576-230)*40/4 +FLYT3: MOVSB + ADD SI,3 + LOOP FLYT3 + POP CX + LOOP BITPL3 + + MOV DX,3C4H + MOV AL,2 + MOV CX,4 + MOV AH,10001B +BITPL4: PUSH CX + OUT DX,AX + ROL AH,1 + MOV DI,SPLH*BPL+80 ;FIRSTPOS + MOV SI,CX + DEC SI + XOR SI,11B + MOV CX,575 +FLYT4: +REPT 4 + MOVSB + ADD SI,3 +ENDM + ADD DI,80 + LOOP FLYT4 + POP CX + LOOP BITPL4 + POP DS + RETN +ENDP +INIT_FLIPPERS PROC NEAR + mov si,offset adjusttable + mov cx,adjust*24 + mov bx,adjust +makeadjust: + mov ax,adjust*24 + sub ax,cx + xor dx,dx + div bx + mov [si],ax + add si,2 + loop makeadjust + + MOVE ES,0A000H + MOV DX,3C4H + MOV AX,0F02H + OUT DX,AX + MOV DI,0 + MOV CX,SPLH*BPL + MOV AL,0 + REP STOSB ;RENSA GRAFIKMINNET VID ARB. OMR¸DET + +if create_flip_data + call init_the_flips +else + call load_the_flips + + MOV BX,OFFSET FLIPLINFO + mov [bx].flipdata,flipleft + mov [bx+size flipstruc].flipdata,flipright + mov [bx+2*(size flipstruc)].flipdata,flipleft2 + + cmp hi_res,true + je nosk56 + SKALA56 [BX].FLIPAXUP + SKALA56 [BX].FLIPAXDOWN + SKALA56 [BX].FLIPMAXHASTUP + SKALA56 [BX].FLIPMAXHASTDOWN +FAN=SIZE FLIPSTRUC + SKALA56 [BX+FAN].FLIPAXUP + SKALA56 [BX+FAN].FLIPAXDOWN + SKALA56 [BX+FAN].FLIPMAXHASTUP + SKALA56 [BX+FAN].FLIPMAXHASTDOWN + SKALA56 [BX+FAN*2].FLIPAXUP + SKALA56 [BX+(FAN)*2].FLIPAXDOWN + SKALA56 [BX+(FAN)*2].FLIPMAXHASTUP + SKALA56 [BX+(FAN)*2].FLIPMAXHASTDOWN ;df ...slutar h„r +nosk56: + add [bx+size flipstruc].fliptab,8 + add [bx+size flipstruc].fliptoppek,8 + add [bx+size flipstruc].flippek,8 + add [bx+size flipstruc].flipmaxpek,8 + push bx + add bx,size flipstruc + add [bx+size flipstruc].fliptab,8*2 + add [bx+size flipstruc].fliptoppek,8*2 + add [bx+size flipstruc].flippek,8*2 + add [bx+size flipstruc].flipmaxpek,8*2 + pop bx + +MASKAR: CMP [BX].TYP,0 + JZ INGA_FLER_MASKAR + mov [bx].lastframe,-1 ;force blit + mov ax,[bx].flipsize + mov cx,3 + nil dx + div cx + mov [bx].flipsize,ax + PUSH BX + CALL ORMASKFLIP + CALL MOVEFLIPMASK + POP BX + ADD BX,SIZE FLIPstruc + JMP MASKAR +INGA_FLER_MASKAR: +endif + RETN +load_the_flips: + mov si,0 + mova ds,flipgfxseg + assume ds:flipgfxseg + mova es,0a000h +bipl=1 +rept 4 + setwrite bipl + mov cx,flipgfxfilesize + SHR CX,2 + MOV DI,GFXADR_FOR_FLIP_ANIM_DATA + rep movsb + bipl=bipl*2 +endm + assume ds:data + mova ds,data + retn +if create_flip_data +init_the_flips: + MOV BX,OFFSET FLIPLINFO +INIT_FLEPS: + CMP [BX].TYP,0 + JZ FLEPS_INITED + MOV FLIPPEKARE,BX + PUSH BX + ;ES=FLIPSEG; CX=FLIPX; DX=FLIPY ;FLIPPTR=ADR TO FLIPANIMTAB + MOVA [BX].FLIPGFXSTART,CS:DIFPTR + MOVA ES,[BX].FLIPDATA + MOV CX,[BX].LEFTX + MOV DX,[BX].TOPY + MOVA FLIPPTR,[BX].FLIPTAB + MOV AX,[BX].FLIPX + SHL AX,1 + MOV FLIPLINESIZE,AX + SHL AX,3 + MOV FLIPWIDTH,AX + MOVA FLIPHEIGHT,[BX].FLIPY + MOVA FLIPSTORLEK,[BX].FLIPSIZE + MOVA CS:MAXDIFFAR,[BX].FLIPDIFS + CALL INIT_FLIPPER + + POP BX + CALL ORMASKFLIP + CALL MOVEFLIPMASK + ADD BX,SIZE FLIPSTRUC + JMP INIT_FLEPS + +FLEPS_INITED: + assume ds:dataflip +L_len=offset rightfliptab-offset leftfliptab +R_len=offset leftflip2tab-offset rightfliptab +L2_len=offset temptab-offset leftflip2tab +L_pos=offset leftfliptab +R_pos=offset rightfliptab +L2_pos=offset leftflip2tab + assume ds:data + createfile flipdatafil_L + mova ds,dataflip + writefile bx,L_len,L_pos + closefile bx + mova ds,data + createfile flipdatafil_R + mova ds,dataflip + writefile bx,R_len,R_pos + closefile bx + mova ds,data + createfile flipdatafil_L2 + mova ds,dataflip + writefile bx,L2_len,L2_pos + closefile bx + mova ds,data + + CREATEFILE FLIPSTRUCFIL ;SKRIV FLIPSTRUCKEN + MOV SI,OFFSET FLIPLINFO + MOV CX,(SIZE FLIPSTRUC)*3+2 + WRITEFILE BX,CX,SI + CLOSEFILE BX + + mov bp,cs:difptr + mov si,GFXADR_FOR_FLIP_ANIM_DATA + sub bp,si + createfile flipgfxfil + mova ds,0a000h + mov cx,4 +skriv_gfx: + mov dx,3ceh + mov ah,4 + sub ah,cl + mov al,4 + out dx,ax ;v„lj l„s plan + writefile bx,bp,si + loop skriv_gfx + mova ds,data + closefile bx + retn +endif +MAXDIFFAR DW ? +DIV0: IRET +MOVEFLIPMASK: ;BX PEKAR TILL FLIPPER + MOV CX,[BX].FLIPFRAME + cmp cl,[bx].lastframe + je dont_doit + mov [bx].lastframe,cl + MOV SI,[BX].LEFTX + MOV DI,[BX].TOPY + MOV BP,[BX].FLIPX + SHL BP,1 + MOV DX,[BX].FLIPY + PUSH DS + MOV AX,[BX].FLIPSIZE + MOVE DS,[BX].FLIPDATA + MOVE ES,MASK1_2 + PUSH DX + MUL CX + PUSH AX + MOV AX,40 + MUL DI + SHR SI,3 + ADD SI,AX + MOV DI,SI + + POP SI +if create_flip_data + ADD SI,BP + ADD SI,BP +endif + POP DX + MOV CX,DX +MOVFLIP: + PUSH CX + MOV CX,BP + REP MOVSB + POP CX +if create_flip_Data + ADD SI,BP + ADD SI,BP +endif + ADD DI,40 + SUB DI,BP + LOOP MOVFLIP + POP DS +dont_doit: + RETN +ORMASKFLIP: + MOVE ES,[BX].FLIPDATA + MOV SI,[BX].LEFTX + MOV DI,[BX].TOPY + MOV CX,[BX].FLIPFRAMES + INC CX + MOV BP,[BX].FLIPX + SHL BP,1 + MOV DX,[BX].FLIPY + PUSH DS + MOVE DS,MASK1_2 + MOV AX,40 + PUSH DX + MUL DI + POP DX + SHR SI,3 + ADD SI,AX + MOV DI,SI + + MOV SI,BP + SHL SI,1 + XCHG SI,DI +if create_flip_data +else + mov di,0 +endif + +ORFLIPS: + PUSH SI + PUSH CX + MOV CX,DX +ORFLIP: + PUSH SI + PUSH CX + MOV CX,BP +ORRA: LODSB + OR ES:[DI],AL + INC DI + LOOP ORRA + POP CX + POP SI + + ADD SI,40 +if create_flip_data + ADD DI,BP + ADD DI,BP +endif + LOOP ORFLIP + POP CX + POP SI + LOOP ORFLIPS + POP DS + RETN +ENDP +IF CREATE_FLIP_DATA +INIT_FLIPPER PROC NEAR ;ES=FLIPSEG; CX=FLIPX; DX=FLIPY ;FLIPPTR=ADR TO FLIPANIMTAB + MOV FLIPSEG,ES + MOV FLIPXPOS,CX + MOV FLIPYPOS,DX + MOV AX,FLIPYPOS + ADD AX,SPLH + MOV BX,BPL + MUL BX + MOV BX,FLIPXPOS + SHR BX,2 + ADD AX,BX + MOV FLIPADR,AX + MOV SI,AX ;(FLIPY+SPLH)*BPL+FLIPX/4 + MOV DI,(800-60*2)*BPL+40 + PUSH DI + CALL COPYFLIPBGR + POP DI + MOV BP,0 + MOV AX,FLIPXPOS + AND AX,11B + CALL PUTFLIPPER + OR SHIFTKEYS,11B + MOV BX,FLIPPEKARE + MOV [BX].FLIPFRAME,0 + MOV [BX].FLIPVINKELHAST,0 +RITAFLIPPRAR: + CALL NESTAFRAME + ;BP=FLIPNO + MOV SI,FLIPADR ;(FLIPY+SPLH)*BPL+FLIPX/4 + MOV DI,(800-60*2)*BPL + ADD DI,BUFR + PUSH DI + CALL COPYFLIPBGR + POP DI + PUSH DI + MOV AX,FLIPXPOS + AND AX,11B + CALL PUTFLIPPER + POP DI + PUSH BP + MOV BP,40 ;60*BPL + CMP BUFR,0 + JZ CORC + NEG BP +CORC: + MOV SI,FLIPPTR + MOV BX,FLIPPEKARE + ADDA FLIPPTR,[BX].FLIPDIFS + MOVA [BX].FLIPMAXPEK,FLIPPTR + TEST SHIFTKEYS,11B + JZ NOSI + MOVA [BX].FLIPTOPPEK,FLIPPTR +NOSI: + CALL CMPFLIPBOX + POP BP + XOR BUFR,40 ;60*BPL + MOV AH,0 +; INT keyhandler + OR BP,BP + JNZ RITAFLIPPRAR + + mov bx,flippekare + CALL SORTFLIPPERDATA + + MOV BP,0 + MOV DI,FLIPADR ;(FLIPY+SPLH)*BPL+FLIPX/4 + MOV AX,FLIPXPOS + AND AX,11B + CALL PUTFLIPPER + RETN +NESTAFRAME: + MOV BX,FLIPPEKARE + INC [BX].FLIPFRAME + TEST SHIFTKEYS,11B + JNZ NODEC + SUB [BX].FLIPFRAME,2 +NODEC: + MOV BP,[BX].FLIPFRAME + CMP BP,[BX].FLIPFRAMES + JNE DORET + AND SHIFTKEYS,11111100B +DORET: RETN +ENDP +SORTFLIPPERDATA PROC NEAR + MOV SI,[BX].FLIPTAB + MOV CX,[BX].FLIPFRAMES + INC CX + call sortflip + MOV CX,[BX].FLIPFRAMES +; inc Cx + MOV SI,[BX].FLIPtoppek + add si,[BX].FLIPDIFS + call sortflip + retn +sortflip: + MOVA DS,DATAFLIP + MOVA ES,DS + ASSUME DS:DATAFLIP ;***************************************** +SORTDATA: + PUSH CX SI bx + + ADD SI,9*2 + MOV DI,OFFSET TEMPTAB + dec cx + jz deunika + cmp cx,8 + jbe sortera + mov cx,8 +sortera:push cx si + mov bp,cx + + mov cx,[SI-9*2] ;ANTAL DELTA BYTES + mov bx,0 +sorti: push cx si + MOV AX,DS:[SI+bx] + cmp ax,-1 + je didfind + + mov cx,bp +findit: ADD SI,CS:MAXDIFFAR + CALL FINDWORD + JnC DIDFIND + loop findit + stosw + pop si + mov word ptr ds:[si+bx],-1 ;markera att denna redan „r lagrad + mov ax,[si+bx+2] + stosw + + jmp short orvar + +DIDFIND: + pop si +orvar: pop cx + add bx,4 + loop sorti + + mov ax,di + sub ax,offset temptab + shr ax,2 + shl bp,1 + mov ds:[si+bp-9*2],ax ;lagra antal delta som hittats hitils + shr bp,1 + + pop si cx + loop sortera +deunika: + push si ;flytta in de som var helt unika sist + mov cx,[si-9*2] +desista:lodsw + cmp ax,-1 + je nostor + stosw + movsw + sub si,2 +nostor: add si,2 + loop desista + pop si + + mov cx,[si-9*2] + mov di,si + mov si,offset temptab + shl cx,1 + rep movsw ;l„gg in den sorterade listan i orginalet + + POP bx SI CX + ADD SI,CS:MAXDIFFAR + LOOP SORTDATA + MOVA DS,DATA + RETN +FINDWORD: + pusha + mov cx,CS:MAXDIFFAR ;Maxdifs-5 + SHR CX,2 + SUB CX,5 +leta: cmp ds:[si],ax + je foudit + add si,4 + loop leta + popa + stc + RETN +foudit: popa + clc + retn + ASSUME DS:DATA ;********************************** +ENDP +ENDIF +INIT_KEY PROC NEAR + SET_ES 0 + CLI + MOV AX,OFFSET KEYINT + XCHG AX,ES:[9*4] + MOV CS:OLD9,AX + MOV AX,CS + XCHG AX,ES:[9*4+2] + MOV CS:OLD9+2,AX + MOV AX,OFFSET div0 + XCHG AX,ES:[0*4] + MOV CS:OLD0,AX + MOV AX,CS + XCHG AX,ES:[0*4+2] + MOV CS:OLD0+2,AX + STI + RETN +OLD9 DW 0,0 +old0 dw 0,0 +ENDP +UNINST_KEY PROC NEAR + SET_ES 0 + CLI + MOVE ES:[9*4],CS:OLD9 + MOVE ES:[9*4+2],CS:OLD9+2 + MOVE ES:[0*4],CS:OLD0 + MOVE ES:[0*4+2],CS:OLD0+2 + STI + RETN +ENDP + +KEYINT PROC NEAR + PUSHA + PUSH DS + MOV AL,20H + OUT 20H,AL + MOVA DS,DATA + IN AL,60H + PUSH AX + IN AL,61H + OR AL,80H + OUT 61H,AL + AND AL,7FH + OUT 61H,AL + POP AX + STI + +;DPRINTVAL AX," AX=" +;DPRINT " " + + test al,80h + jnz no_alfa_key + mov scan_code,al + MOV CS:SETTER,TA_TID +IF SAVEPAL +CMP AL,3 +JNE NO_UBBE_KUKEN +MOVE ES:[9*4],CS:OLD9 +MOVE ES:[9*4+2],CS:OLD9+2 +NO_UBBE_KUKEN: +ENDIF +no_alfa_key: + + CMP CS:E0,TRUE + JE DOE0 + CMP AL,0E0H + JNE NOTE0 + MOV CS:E0,TRUE + JMP KEYDONE +NOTE0: + CMP AL,57H ;F11 + JNE NOTF11 + MOV FFLAG,11 + JMP KEYDONE +NOTF11: + CMP AL,58H ;F12 + JNE NOTF12 + MOV FFLAG,12 + JMP KEYDONE +NOTF12: + CMP AL,2AH + JE DSSK + CMP AL,38H + JE DSSK + CMP AL,1DH + JE DSSK + JMP SHORT NOTLSDN +DSSK: TEST SHIFTKEYS,10B + JNZ NOTLSDN + OR SHIFTKEYS,10B + MOV SHIFTPRESSED,TRUE ;LEFT SHIFT KEY PRESSED + cmp allowflip,false + je keydone + soundeffect sflippupp,0 + JMP KEYDONE +NOTLSDN: + CMP AL,36H + JE DSSKR + JMP SHORT NOTRSDN +DSSKR: TEST shiftkeys,1 + jnz notrsdn + OR SHIFTKEYS,1 + MOV SHIFTPRESSED,TRUE ;RIGHT SHIFT KEY PRESSED + cmp allowflip,false + je keydone + soundeffect sflippupp,0 + JMP KEYDONE +NOTRSDN: + CMP AL,36H+80H + JE DSSKR2 + JMP SHORT NOTRSUP +DSSKR2: AND SHIFTKEYS,0FEH + JMP KEYDONE +NOTRSUP: + + CMP AL,2AH+80H + JE DSSK2 + CMP AL,38H+80H + JE DSSK2 + CMP AL,1DH+80H + JE DSSK2 + JMP SHORT NOTLSup +DSSK2: AND SHIFTKEYS,11111101B + JMP KEYDONE +NOTLSUP: + + CMP AL,57 + JNE NOTSPC + CMP TILTKEY,TRUE + JE KEYDONE + MOV TILTKEY,TRUE + JMP KEYDONE +NOTSPC: + CMP AL,57+80H + JNE NOTSPCU + MOV TILTKEY,FALSE + MOV cs:TILTKEY2,FALSE + + JMP KEYDONE +NOTSPCU: +COMMENT\ + CMP AL,44 + JNE NOTZ + MOV CURRENT_PRIORITY,101 + JMP KEYDONE +NOTZ: +\ +if arrowS + CMP AL,2 + JNE NOT2 + CLI + MOV INTERRUPTS_ON,FALSE + SET_ES 0A000H + MOV AX,0DH + INT 10H + MOV SI,0 + SET_DS MASK2_2 + MOV CX,200*40 + MOV DI,0 + REP MOVSB + cli + mov dx,3d4h + mov ax,0ch + out dx,ax + inc al + out dx,ax + JMP $ +NOT2: + CMP AL,72 + JNE NOTPUP + MOV Y_HAST,-1*PILHAST + MOV X_HAST,0 + JMP KEYDONE +NOTPUP: + CMP AL,75 + JNE NOTPL + MOV X_HAST,-1*PILHAST + MOV Y_HAST,0 + JMP KEYDONE +NOTPL: + CMP AL,77 + JNE NOTPR + MOV X_HAST,1*PILHAST + MOV Y_HAST,0 + JMP KEYDONE +NOTPR: + CMP AL,80 + JNE NOTPDN + MOV Y_HAST,1*PILHAST + MOV X_HAST,0 + JMP KEYDONE +NOTPDN: +endif +KEYDONE: + POP DS + POPA + IRET + +E0 DB FALSE + +DOE0: MOV CS:E0,FALSE + CMP DEMOMODE,TRUE + JE DOE0_DEMO + + CMP AL,49H + JNE NOT_PGUP +; AND SHIFTKEYS,11111011B + JMP KEYDONE +NOT_PGUP: + CMP AL,51H + JNE NOT_PGDN +; OR SHIFTKEYS,00000100B + JMP KEYDONE +NOT_PGDN: + + CMP AL,50H ;(ARROW DOWN) + JNE NOTARD + MOV SPRINGTASK,OFFSET SPRINGSTEEN + MOV DNPRESSED,TRUE + JMP KEYDONE +NOTARD: + CMP AL,80h+50H ;(ARROW DOWN up) + JNE NOTARdu + MOV SPRINGTASK,OFFSET SPRINGUP + MOV DNPRESSED,FALSE + JMP KEYDONE +NOTARdu: + + CMP AL,38H ;right alt + JE DSSKR + CMP AL,1DH ;right ctrl + JE DSSKR + CMP AL,38H+80h ;right alt up + JE DSSKR2 + CMP AL,1DH+80h ;right ctrl up + JE DSSKR2 + JMP KEYDONE + +NOTE0_DEMO: + JMP KEYDONE + + +DOE0_DEMO: + CMP AL,49H + JNE NOT_PGUP2 + AND SHIFTKEYS,11111011B + JMP KEYDONE +NOT_PGUP2: + CMP AL,51H + JNE NOT_PGDN2 + OR SHIFTKEYS,00000100B + JMP KEYDONE +NOT_PGDN2: + JMP KEYDONE + +KEYINT ENDP + + + +MINIX DW ? +THESCRPOS DW ? +if create_flip_data +PUTFLIPPER PROC NEAR ;INPUT: BP=FLIP NO, DI=SCRPOS, AX=MINIX + MOV CS:THESCRPOS,DI + MOV CS:MINIX,AX + SET_ES FLIPSEG + MOV CX,FLIPHEIGHT ;CX=LINE COUNTER + MOV BX,0 ;BX=Y COORD + +SCANFLIPY: + PUSH CX + MOV CX,FLIPWIDTH ;CX=ROW COUNTER + MOV AX,0 ;AX=X COORD + +SCANFLIPX: + PUSH AX BX CX + MOV CX,BP + CALL READFLIPPIX + MOV BX,OFFSET BIT2COL + XLATB + OR AL,AL + JZ NOPUT + MOV DL,AL + POP CX BX AX + PUSH AX BX CX + + MOV DI,CS:THESCRPOS + ADD AX,CS:MINIX + + CALL PUTFLIPPIX +NOPUT: POP CX BX AX + INC AX + LOOP SCANFLIPX + + INC BX + POP CX + LOOP SCANFLIPY + RETN +PUTFLIPPER ENDP +endif +SETSCREENSTART PROC NEAR + MOV BX,SC_Y + PUSH BP + MOV BP,(SH_LO-SPLH)/2-BALLH/2-AWAYFROMMIDDLE + CMP HI_RES,TRUE + JNE NOTHIRES3 + MOV BP,(SH_HI-SPLH)/2-BALLH/2-AWAYFROMMIDDLE +NOTHIRES3: + SUB BX,BP + POP BP + JNL BXOK1 +IF GLAPP_SIZE + MOV BX,-GLAPP_SIZE +ELSE + MOV BX,0 +ENDIF + JMP SHORT BXOK2 +BXOK1: PUSH AX + MOV AX,BANH-(SH_LO-SPLH) + CMP HI_RES,TRUE + JNE NOTHIRES4 + MOV AX,BANH-(SH_HI-SPLH) +NOTHIRES4: + CMP BX,AX + POP AX + JB BXOK2 + + MOV BX,BANH-(SH_LO-SPLH)+GLAPP_SIZE + CMP HI_RES,TRUE + JNE NOTHIRES5 + MOV BX,BANH-(SH_HI-SPLH)+GLAPP_SIZE +NOTHIRES5: + +BXOK2: CMP SCREENFORCE,-1 + JE NOSCREENFORCE + + MOV BX,SCREENFORCE ;THIS IS THE POWERFUL SCREEN FORCE + ADD BX,SPLH + PUSH BX +IF RES600 + MOV BX,2 + ADD BX,SCREENPOSY +ENDIF + SETRASTERPOS bx + POP BX + PUSH BX + SHL BX,4 + MOV RASTERPOS,BX + POP BX + SUB BX,SPLH + MOV START_RASTER,BX + RETN + +NOSCREENFORCE: + cmp screenforce2,-1 + je nosf + mov bx,screenforce2 +nosf: + ADD BX,SPLH + PUSH BX + mov ax,bx + mov bx,rasterpos + sar bx,4 + sub ax,bx + +IF GLAPP_SIZE + PUSHF ;df + POP CX + CMP SCREENFORCE2,-1 ;INGET GLAPP OM SCREENFORCE!!!!!!!!!!! + JNE GLAPP_DONE + PUSH CX + POPF + JS MINSU + SUB AX,GLAPP_SIZE + JNS GLAPP_DONE + XOR AX,AX + JMP SHORT GLAPP_DONE +MINSU: ADD AX,GLAPP_SIZE + JS GLAPP_DONE + XOR AX,AX +ENDIF +GLAPP_DONE: + MOV BX,SLIME_FACTOR + IMUL BX + MOV BX,AX + SAR AX,2 + + add rasterpos,ax + POP BX + MOV AX,RASTERPOS + SAR AX,4 + SUB BX,AX + JNS GAP_POS + + PUSH BP + MOV BP,MAXGAPU_LO + CMP HI_RES,TRUE + JNE NOTHIRES10 + MOV BP,MAXGAPU_HI +NOTHIRES10: + ADD BX,BP + POP BP + JG BX_OKI + SAL BX,4 + ADD RASTERPOS,BX + JMP SHORT BX_OKI +GAP_POS: + + PUSH BP + MOV BP,MAXGAPD_LO + CMP HI_RES,TRUE + JNE NOTHIRES11 + MOV BP,MAXGAPD_HI +NOTHIRES11: + SUB BX,BP + POP BP + JL BX_OKI + SAL BX,4 + ADD RASTERPOS,BX +BX_OKI: + + mov bx,rasterpos + sar bx,4 + ADD BX,SCREENPOSY + push bx +IF RES600 + MOV BX,SCREENPOSY + ADD BX,2 +ENDIF +; MOV BX,SPLH+BANH + SETRASTERPOS bx + pop bx + sub bx,splh + MOV START_RASTER,BX + RETN +SETSCREENSTART ENDP + + + +PUTTHEBALL PROC NEAR ;FN: DELETES AND PUTS THE BALL. + ;INPUT: VERYFIRSTPUT, PUTITBETWEEN, PUTF3BETWEEN + ; IF XXBETWEEN=TRUE THE FLIPPER(S) ARE DELTA + ; MOVED BETWEEN THE DELETING AND THE PUTTING + ; OF THE BALL. +IF MARGIT + SETMARG 1 +ENDIF + PUSHA + SET_ES 0A000H + CMP VERYFIRSTPUT,TRUE + JE DNDB + MOV DI,OLDPOS ;OLDPOS + MOV CX,OLDSHIFT ;OLDSHIFT + MOV SI,OFFSET UNDANSPR ;SAVEDDATA OFFSET + SET_DS HIDDEN1 ;SAVEDDATA SEGMENT + CALL DELBALL + SET_DS DATA +DNDB: + + CMP PUTITBETWEEN,TRUE + JNE DNDLF + CALL DOFLIPPER +DNDLF: + CMP PUTF3BETWEEN,TRUE + JNE DNDLF2 + CALL DOFLIPPER3 +DNDLF2: + +IF MARGIT + SETMARG 1 +ENDIF + MOV VERYFIRSTPUT,FALSE + MOV DX,SC_X ;X POS + MOV SI,SC_Y ;Y POS + CMP HOLDSTILL,TRUE + JE NOTILTADD + ADD SI,SCREENPOSY +NOTILTADD: + ADD SI,SPLH + MOV DI,OFFSET UNDANSPR ;SAVEDDATA OFFSET + MOV BP,OFFSET HID1-SPLH*SW/8-576*2 + SET_ES HIDDEN1 ;SAVEDDATA SEGMENT + CMP BALLHIGH,FALSE + JE BLHA + ADD BP,42*576 +BLHA: + CALL PUTBALL + SET_DS DATA + MOV OLDPOS,SI ;OLDPOS + MOV OLDSHIFT,DX ;OLDSHIFT + + POPA +IF MARGIT + SETMARG 0 +ENDIF + RETN +PUTTHEBALL ENDP + + +VBLANK_INT: + MOVE DS,DATA + INC SYNC_COUNTER + MOV INT_WAS_HERE,TRUE + MOV INT_WAS_HERE2,TRUE + CMP INTERRUPTS_ON,TRUE + JE VBLANKOK +RETAF: MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG + RETF ;RET +VBLANKOK: + OR AX,AX + MOV TIME_LEFT,TRUE + JZ NO_MUSIC_CRISIS + MOV TIME_LEFT,FALSE +NO_MUSIC_CRISIS: + + cmp calamares_delay,0 ;tryck inte p† pause f”r t„tt inp†!! + je docaldecc + dec calamares_delay +docaldecc: + ADD SLUMP_COUNTERN,1030 + + CMP DEMOMODE,TRUE + JE VBLANK_INT_DEMO + +;********************* SPELETS RUTINER *********************** + + INC SLOWCNT + AND SLOWCNT,SLOW + JNZ RETAF + + CMP CS:LAST_WAS_VB,TRUE + JE RETAF + + MOV AL,INSIDE_BALLHANDLER + MOV INSIDE_BALLHANDLER,TRUE + CMP AL,TRUE + JE RETAF + CMP AL,TRUE + JE RETAF + + SAVEGFXREGS + MOV PUTF3BETWEEN,FALSE + MOV FORCELATEF3,FALSE + + CMP SC_Y,F3TOP-BALLH+2 ;NO I: SC_Y + BALLH < F3TOP + JB NO_INTEFERRENCE + CMP SC_Y,F3TOP+F3HEIGHT-2 ;NO I: SC_Y > F3TOP + F3HEIGHT + JA NO_INTEFERRENCE + MOV PUTF3BETWEEN,TRUE + JMP KEEP_COOL + +NO_INTEFERRENCE: + MOV AX,F3TOP+F3HEIGHT/2-SH_LO/2 + CMP HI_RES,TRUE + JNE NOTHIRES6 + MOV AX,F3TOP+F3HEIGHT/2-SH_HI/2 +NOTHIRES6: + CMP START_RASTER,AX + JB F3_IS_LOW + MOV FORCELATEF3,TRUE + JMP HIGH_F3_DONE +F3_IS_LOW: + CALL DOFLIPPER3 +HIGH_F3_DONE: +KEEP_COOL: + + MOV AX,START_RASTER + PUSH BP + MOV BP,MIDDLE_RASTER_LO + CMP HI_RES,TRUE + JNE NOTHIRES8 + MOV BP,MIDDLE_RASTER_HI +NOTHIRES8: + ADD AX,BP + POP BP + CMP SC_Y,AX + JB BALL_HIGH + +BALL_LOW: + CMP STATUS,UPPER + JE BALL_LOW_STATUS_HIGH + +BALL_LOW_STATUS_LOW: + MOV PUTITBETWEEN,TRUE ;PUT IT BETWEEN + CALL PUTTHEBALL ;PUT THIS SYNC + CALL KOLLAKULAN ;CALC NEXT SYNC + MOV LATEGFX,FALSE + JMP BALLREADY + +BALL_LOW_STATUS_HIGH: + MOV STATUS,LOWER + CALL DOFLIPPER ;DO FLIPPER + CALL KOLLAKULAN ;CALC NEXT SYNC + MOV LATEGFX,FALSE + JMP BALLREADY + +BALL_HIGH: + CMP STATUS,UPPER + JE BALL_HIGH_STATUS_HIGH + +BALL_HIGH_STATUS_LOW: + MOV STATUS,UPPER + MOV LATEGFX,TRUE ;PUT NEXT SYNC LAST + MOV PUTITBETWEEN,TRUE ;PUT IT BETWEEN + CALL PUTTHEBALL ;PUT THIS SYNC + CALL KOLLAKULAN ;CALC NEXT SYNC + JMP BALLREADY + +BALL_HIGH_STATUS_HIGH: + CALL DOFLIPPER ;DO FLIPPER + CALL KOLLAKULAN ;CALC NEXT SYNC + MOV LATEGFX,TRUE ;PUT NEXT SYNC LAST + + MOV AX,START_RASTER + PUSH BP + MOV BP,MIDDLE_RASTER_LO+5 ;5=CPMARGINAL + CMP HI_RES,TRUE + JNE NOTHIRES9 + MOV BP,MIDDLE_RASTER_HI+5 ;5=CPMARGINAL +NOTHIRES9: + ADD AX,BP + POP BP + CMP AX,F3TOP + JB F3ISLOW + JMP BALLREADY + +F3ISLOW: + CALL DOFLIPPER3 + +BALLREADY: + CALL DO_PHYSICS ;LEVELS,RAMPER,MM + MOV INSIDE_BALLHANDLER,FALSE + CMP INSIDE_RESTOFVBLANK,FALSE + JE DO_THE_REST + RESTOREGFXREGS + MOV CS:LAST_WAS_VB,TRUE + MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG + RETF + +DO_THE_REST: + MOV CS:LAST_WAS_VB,TRUE + MOV INSIDE_RESTOFVBLANK,TRUE + CALL UPDATE_COUNTERS + + CALL DO_ELECTRONICS + CALL SPRINGTASK +IF MARGIT +SETMARG 14 +ENDIF + + cmp time_left,false + je skip_matrix ;no time left! Skip it!! +; mov time_left,false ;ok, time was left last time! + MOV AL,CS:INSIDE_MATRIX + MOV CS:INSIDE_MATRIX,TRUE + CMP AL,TRUE + JE SKIP_MATRIX + CALL DO_THE_DOTMATRIX ;updatera d† matrixen! + MOV CS:INSIDE_MATRIX,FALSE +skip_matrix: + CALL DOLIGHTS + +IF MARGIT +RESTOREMARG +ENDIF +IF MARGIT +SETMARG 0 +ENDIF + MOV INSIDE_RESTOFVBLANK,FALSE + RESTOREGFXREGS + MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG + RETF + +INSIDE_MATRIX DB FALSE +LAST_WAS_VB DB FALSE + +;****************************************************************************** + + +DO_THE_DOTMATRIX PROC NEAR ;JOHANS TUNGA RUTINER! + CALL DO_THE_ANIMATIONS + MOV AX,AX_PRINT + MOV DI,DI_PRINT + CALL PRINTTASK + MOV PRINTTASK,OFFSET DUMRET + RETN +DO_THE_DOTMATRIX ENDP + + +DO_THE_ANIMATIONS PROC NEAR + cmp intflag,true ;gabriel vill ABSOLUT penetrera!! + je aterstallaren +laddanasta: + MOV DX,DOTRUT + MOV SI,SISA + CALL DX + MOVE DS,DATA + MOV SISA,SI + CMP SI,0 + JNE NOTFREEYET ;JOBBAR P¸ EN EFFEKT! + MOV DOTRUT,OFFSET CS:NODOT + MOV BX,NEXT_A + CMP BX,0 + JE ts_slut ;NOMOREANIMS + CALL DO_SPEC_MATRIX ;ANIMATION SLUT, LADDA NˇSTA? + jmp nomoreanims +ts_slut: +; mov behovs_provad,true + CALL KILL_FLASHOR ;cp!!?? + ;d”da flashor + +NOMOREANIMS: + MOV DOT_READY,TRUE + JMP HOPPA_FORBI +aterstallaren: ;(dan efter??) + mov intflag,false + jmp laddanasta +NOTFREEYET: +HOPPA_FORBI: + RETN +DO_THE_ANIMATIONS ENDP + + + +DO_MATRIX: + call kill_flashor + MOV DOT_READY,FALSE + MOV NODOTCOUNT,0 + MOV BEHOVS_PROVAD,TRUE +DO_SPEC_MATRIX: + UPDAT_SCORE + JMP [BX] + +_ANIMATION: + STARTANIM [BX+2] + JMP NORMAL_END +_SCROLL: + STARTSCROLL [BX+2] + JMP NORMAL_END +_NUMBER: + MOVE SISA,[BX+2] + MOV DOTRUT,OFFSET SIFFRORRUT + JMP NORMAL_END + +_FLASHON: ;BX NOT USED! + MOV AX,[BX+2] ;AX=FLASHSPEED + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET WAITRUT + MOV MATRIX_SPEED,AX + MOV MATRIX_CNT,AX + MOV MATRIX_ONOFF,TRUE + MOV MATRIX_IS_FLASHING,TRUE + JMP NORMAL_END + +print8_task: + + call reset_numberbuf + mov si,si_siffror + mov di,di_siffror + mov hojd_1,8 + mov hojd_add,bredd_1/4-sw*8*2/4 + mov font_adr,offset font8 + call print_number + retn +print11_task: + call reset_numberbuf + mov si,si_siffror + mov di,di_siffror + mov hojd_1,11 + mov hojd_add,bredd_1/4-sw*11*2/4 + mov font_adr,offset font11 + call print_number + retn +print13_task: + call reset_numberbuf + mov si,si_siffror + mov di,di_siffror + mov hojd_1,13 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + call print_number + retn + +print5_task: + call reset_numberbuf + mov si,si_siffror + mov di,di_siffror + mov hojd_1,5 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + call print_number + retn + +_print11_number: + move sisa,1 + mov dotrut,offset waitrut + mov tabort_diovre_fnt,0 + PUSH [BX+2] + POP si_siffror + MOVE DI_siffror,[BX+4] + MOV PRINTTASK,OFFSET PRINT11_task + jmp print_end +_print13_number: + move sisa,1 + mov dotrut,offset waitrut + mov tabort_diovre_fnt,0 + PUSH [BX+2] + POP si_siffror + MOVE DI_siffror,[BX+4] + MOV PRINTTASK,OFFSET PRINT13_task + jmp print_end +_print8_number: + move sisa,1 + mov dotrut,offset waitrut + mov tabort_diovre_fnt,0 + PUSH [BX+2] + POP si_siffror + MOVE DI_siffror,[BX+4] + MOV PRINTTASK,OFFSET PRINT8_task + jmp print_end + +_print8_number_CENT: + MOV CENT,TRUE + move sisa,1 + mov dotrut,offset waitrut + mov tabort_diovre_fnt,0 + PUSH [BX+2] + POP si_siffror + MOVE DI_siffror,[BX+4] + MOV PRINTTASK,OFFSET PRINT8_task + jmp print_end + +_print13_number_CENT: + MOV CENT,TRUE + move sisa,1 + mov dotrut,offset waitrut + mov tabort_diovre_fnt,0 + PUSH [BX+2] + POP si_siffror + MOVE DI_siffror,[BX+4] + MOV PRINTTASK,OFFSET PRINT13_task + jmp print_end + +_print5_number: + move sisa,1 + mov dotrut,offset waitrut + mov tabort_diovre_fnt,0 + PUSH [BX+2] + POP si_siffror + MOVE DI_siffror,[BX+4] + MOV PRINTTASK,OFFSET PRINT5_task + jmp print_end + +_SOUND_EFFECT: + move sisa,1 + mov dotrut,offset waitrut + + MOV AX,[BX+2] + MOV CX,[BX+4] + PUSH BX + SOUNDEFFECT2 AX,CL + POP BX + + JMP PRINT_END +_lastjingle: + move sisa,1 + mov dotrut,offset waitrut + mov ax,[bx+2] + mov lastjingle,al + mov si,77 ;urko! + jmp normal_end +_JINGLE: + move sisa,1 + mov dotrut,offset waitrut + + MOV SI,[BX+2] + mov current_priority,0 + mov jinglejumpcnt,1 +; MOV AL,BYTE PTR [SI] +; MOV LASTJINGLE,AL +; MOV LASTLOOPVAL,1 + PUSH BX + call DoplaYJINGLE ;JOHAN SOM HAR SKRIVIT? + POP BX + JMP NORMAL_END +_COUNTDOWNCONTINUE: ;INPUT: ?,?, VALUE TO PRINT + MOV SUPER_INIT,FALSE + MOV SISA,1 + MOV DOTRUT,OFFSET COUNTDOWN + CALL RESET_NUMBERBUF + MOVE VAL_TO_PRINT,[BX+6] + MOV SYNC_LEFT,1 + MOV INHIBIT_COUNT_DOWN,FALSE + JMP THREE_END + +_countdown: +MEGA_RESET: + MOV SUPER_INIT,FALSE +;input: seconds, value to print + mov sisa,1 + mov dotrut,offset countdown + call reset_numberbuf + move val_to_print,[bx+6] + mov sync_left,1 + + mov [sec_asc],'A'-10+0 + mov [sec_asc+1],'A'-10+1 + mov al,[bx+2] + add [sec_asc],al + mov al,[bx+4] + add [sec_asc+1],al + jmp three_end + +_countdown2: +;input: ?, ? (update panel!) + CMP SUPER_INIT,TRUE + JE MEGA_RESET + mov sisa,1 + mov dotrut,offset countdown + call reset_numberbuf + mov sync_left,1 + jmp three_end + +countdown: + CMP INHIBIT_COUNT_DOWN,TRUE + JE INH_CD + dec sync_left + jnz no_rez_this_sync + mova sync_left,sync_per_sec + + cmp [sec_asc+1],'A'-10 + jne over_it_again + cmp [sec_asc],'*' + je uninstall_count +over_it_again: + + + dec [sec_asc+1] + cmp [sec_asc+1],'A'-10-1 + jnz ingen_fara + add [sec_asc+1],10 + dec [sec_asc] + +ingen_fara: + CMP [SEC_ASC],'A'-10 + JNE NOT_ZERO + MOV [SEC_ASC],'*' +NOT_ZERO: + +;[SEC_ASC] PEKAR P¸ MSD, (0='*') [SEC_ASC+1] PEKAR P¸ LSD +;LˇS AV BARA! + PUSHA ;CP! + CALL READ_SPECIAL_MODE_COUNTER + POPA + + mov hojd_1,11 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*11*2/4 + mov font_adr,offset font11 + push offset sec_asc + pop AX_PRINT + MOVE DI_PRINT,SW*6/4+16*18/4 ;cpw! + MOV PRINTTASK,OFFSET PRINT_TEXT + mov si,1 + retn +no_rez_this_sync: +INH_CD: + mov tabort_diovre_fnt,0 + move si_siffror,val_to_print + move di_siffror,SW*4/4+16*2/4 ;cpw! + mov printtask,offset print13_TASK + mov si,1 + retn +uninstall_count: + +; mov specialmode,false + mov sisa,0 + mov si,0 + retn +_rullgardin_upp: + mov dotrut,offset rullgardin_upp + move rulltext,[bx+2] + move stop_at_pos,[bx+4] + mov rull_pos,16 + jmp print_end + +_rullgardin_ned: + mov dotrut,offset rullgardin_ned + move rulltext,[bx+2] + move stop_at_pos,[bx+4] + mov rull_pos,-13 + jmp print_end + +rullgardin_upp: +;rull_pos startv„rde m†ste vara satt till 16!!! + dec rull_pos + + cmp rull_pos,16-14 + jg noradering_upp + mov ax,rull_pos + add ax,13 + mov bx,sw*2/4 + mul bx + mov clear_box_start,ax + add clear_box_start,2*sw/4 + mov clear_box_bredd,320/4 + mov clear_box_hojd,1 + call clear_box2 + +noradering_upp: + + mov hojd_1,13 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + + call putfont + mov ax,stop_at_pos + cmp rull_pos,ax + je rezzeta + mov si,1 + retn + +rullgardin_ned: +;rull_pos startv„rde m†ste vara satt till -13!!! + inc rull_pos + + cmp rull_pos,1 + jl noradering_ned + mov ax,rull_pos + sub ax,1 + mov bx,sw*2/4 + mul bx + mov clear_box_start,ax + add clear_box_start,2*sw/4 + mov clear_box_bredd,320/4 + mov clear_box_hojd,1 + call clear_box2 + +noradering_ned: + mov hojd_1,13 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + + call putfont + mov ax,stop_at_pos + cmp rull_pos,ax + je rezzeta + mov si,1 + retn +rezzeta: + mov si,0 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + retn + +putfont: + mov ax,rull_pos + cmp ax,0 + jge kapa_ej_overkant + +;Kapa i ”verkant! + + neg ax ;g”r ax positiv! + mov tabort_diovre,ax + mov tabort_diovre_fnt,ax ;s† mycket som skall kapas! + mov di,sw*2/4 ;”versta rastern + jmp print_it + +kapa_ej_overkant: + + cmp ax,16-13 ;matrixhojd-fonthojd + jle kapa_ej_nederkant +; neg ax ;-pos +; add ax,16 ;=> ax=16-pos + add ax,13-16 + mov tabort_diovre,ax ;s† mycket som ska kapas! + mov tabort_diovre_fnt,0 ;men inget i ”vekant + mov ax,rull_pos + inc ax + mov bx,sw/4*2 ;di=rull_pos*sw*2/4 + mul bx + mov di,ax + jmp print_it + +kapa_ej_nederkant: + mov tabort_diovre,0 ;s„tt ut hela! + mov tabort_diovre_fnt,0 +; mov ax,rull_pos + mov bx,sw/4*2 ;di=rull_pos*sw*2/4 + mul bx + mov di,ax + add di,sw/4*2 +print_it: + CMP TABORT_DIOVRE,13 + JAE SKIPIT_PRINT + mov ax,rulltext + call print_text +SKIPIT_PRINT: + retn + + +clear_box2: + ;obs EJ en taskig rutin!! + mov cx,clear_box_hojd + mov di,clear_box_start + move es,0a000h + +doline_clear2: + push cx + mov cx,clear_box_bredd + push di + push cx + setwrite 1 + mov al,matrixhi + rep stosb + pop cx + pop di + push di + setwrite 100b + mov al,matrixhi + rep stosb + pop di + pop cx + add di,sw*2/4 + loop doline_clear2 + + retn + + +PP_DO_LINE PROC NEAR ;INPUT: ES:SI=SOURCE, LAGERARBETARNA=DEST + MOV CX,320/4 + MOV DI,LAGERARBETAREN + MOV BYTE PTR DS:[DI],0 +PP_NEXT_BYTE: + PUSH CX + NIL DH + CMP BYTE PTR ES:[SI],MATRIXLO + JNE ITS_GREY + NOT DH +ITS_GREY: + AND DH,LILLE_LAGERARBETAREN + OR DS:[DI],DH + INC SI + ROR LILLE_LAGERARBETAREN,1 + JNC EJ_BYTE_AV_BYTE + INC DI + MOV BYTE PTR DS:[DI],0 +EJ_BYTE_AV_BYTE: + POP CX + LOOP PP_NEXT_BYTE + MOV LAGERARBETAREN,DI + RETN +PP_DO_LINE ENDP + +PP_DO_BITPLANE PROC NEAR ;INPUT: RˇTT BITPLAN SATT + MOV CX,16 + MOV SI,SW*4/4/2 +PP_NEXT_LINE: + PUSH CX SI + CALL PP_DO_LINE + POP SI CX + ADD SI,SW/4*2 + LOOP PP_NEXT_LINE + RETN +PP_DO_BITPLANE ENDP + +PRINT_PAUSE: + CALL MATRIXON_ + CALL DOLIGHTS + MOV LAGERARBETAREN,OFFSET PAUSE_LAGRET + MOV LILLE_LAGERARBETAREN,10000000B + MOVE ES,0A000H + MOV CX,4 +PP_NEXT_BITPLANE: + PUSH CX + MOV AL,4 + SUB AL,CL + SETREAD AL + CALL PP_DO_BITPLANE + POP CX + DEC CX + LOOP PP_NEXT_BITPLANE + + PUSH OFFSET PAUSE_TEXT + POP AX_PRINT + MOVE DI_PRINT,sw*4/4+16*0/4+4*5-2 + call print_it_klux + CALL MATRIXON_ + CALL DOLIGHTS + RETN +print_it_klux: + MOV CLEAR_BOX_START,SW/4*2 + MOV CLEAR_BOX_BREDD,320/4 + MOV CLEAR_BOX_HOJD,16 + CALL CLEAR_BOX2 + MOV HOJD_1,13 + MOV HOJD_ADD,BREDD_1/4-SW*13*2/4 + MOV FONT_ADR,OFFSET FONT13 + MOV TABORT_DIOVRE,0 + MOV TABORT_DIOVRE_FNT,0 + MOV AX,AX_PRINT + MOV DI,DI_PRINT + CALL PRINT_TEXT + retn +PP_DO_LINE2 PROC NEAR ;INPUT: ES:DI=DEST, LAGERARBETARNA=SOURCE + MOV CX,320/4 + MOV SI,LAGERARBETAREN +PP_NEXT_BYTE2: + PUSH CX + MOV AL,DS:[SI] + AND AL,LILLE_LAGERARBETAREN + MOV AL,MATRIXLO + JNZ ITS_YELLOW + MOV AL,MATRIXHI +ITS_YELLOW: + STOSB + ROR LILLE_LAGERARBETAREN,1 + JNC EJ_BYTE_AV_BYTE2 + INC SI +EJ_BYTE_AV_BYTE2: + POP CX + LOOP PP_NEXT_BYTE2 + MOV LAGERARBETAREN,SI + RETN +PP_DO_LINE2 ENDP + +PP_DO_BITPLANE2 PROC NEAR ;INPUT: RˇTT BITPLAN SATT + MOV CX,16 + MOV DI,SW*4/4/2 +PP_NEXT_LINE2: + PUSH CX DI + CALL PP_DO_LINE2 + POP DI CX + ADD DI,SW/4*2 + LOOP PP_NEXT_LINE2 + RETN +PP_DO_BITPLANE2 ENDP + +RESTORE_AFTER_PAUSE PROC NEAR + MOV LAGERARBETAREN,OFFSET PAUSE_LAGRET + MOV LILLE_LAGERARBETAREN,10000000B + MOVE ES,0A000H + MOV CX,2 + MOV AL,1 +PP_NEXT_BITPLANE2: + PUSH AX CX + SETWRITE AL + CALL PP_DO_BITPLANE2 + POP CX AX + SHL AL,2 + LOOP PP_NEXT_BITPLANE2 + RETN +RESTORE_AFTER_PAUSE ENDP + +_print13: + move sisa,1 + mov dotrut,offset waitrut + MOV HOJD_1,13 + MOV HOJD_ADD,BREDD_1/4-SW*13*2/4 + MOV FONT_ADR,OFFSET FONT13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + MOVE AX_PRINT,[BX+2] + MOVE DI_PRINT,[BX+4] + MOV PRINTTASK,OFFSET PRINT_TEXT + jmp print_end +_print11: + move sisa,1 + mov dotrut,offset waitrut + mov hojd_1,11 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*11*2/4 + mov font_adr,offset font11 + MOVE AX_PRINT,[BX+2] + MOVE DI_PRINT,[BX+4] + MOV PRINTTASK,OFFSET PRINT_TEXT + jmp print_end +_print8: + move sisa,1 + mov dotrut,offset waitrut + mov hojd_1,8 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*8*2/4 + mov font_adr,offset font8 + MOVE AX_PRINT,[BX+2] + MOVE DI_PRINT,[BX+4] + MOV PRINTTASK,OFFSET PRINT_TEXT + jmp print_end +_print5: + move sisa,1 + mov dotrut,offset waitrut + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOVE AX_PRINT,[BX+2] + MOVE DI_PRINT,[BX+4] + MOV PRINTTASK,OFFSET PRINT_TEXT + jmp print_end +;****************************** +print_END: + ADD BX,6 + CMP WORD PTR [BX],0 + JNE _NEXTp_ + MOV BX,0 +_NEXTp_: + MOV NEXT_A,BX + RETN +;****************************** +three_end: + ADD BX,6+2 + CMP WORD PTR [BX],0 + JNE _NEXTp_Q + MOV BX,0 +_NEXTp_Q: + MOV NEXT_A,BX + RETN + +MATRIX_BLINKOR: + CMP MATRIX_IS_FLASHING,TRUE + JNE NOBLINKOR + DEC MATRIX_CNT + JNZ DUMRET + MOVE MATRIX_CNT,MATRIX_SPEED + MOV SI,OFFSET MATRIXOFF + XOR MATRIX_ONOFF,0FFH + JZ THE_OTHER + MOV SI,OFFSET MATRIXON +THE_OTHER: + MOVE ES,DS + MOV DI,RGBBUFPTR + ;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR! + MOVSB ;START COL + LODSB ;AL=RGB LEN + STOSB + MOV CL,AL + NIL CH + REP MOVSB ;R,G,B ETC + MOV RGBBUFPTR,DI +NOBLINKOR: + RETN + +MATRIXON_: + MOV SI,OFFSET MATRIXON + MOVE ES,DS + MOV DI,RGBBUFPTR + ;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR! + MOVSB ;START COL + LODSB ;AL=RGB LEN + STOSB + MOV CL,AL + NIL CH + REP MOVSB ;R,G,B ETC + MOV RGBBUFPTR,DI +; CALL DOLIGHTS + RETN + +MATRIXOFF_: + MOV SI,OFFSET MATRIXOFF + MOVE ES,DS + MOV DI,RGBBUFPTR + ;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR! + MOVSB ;START COL + LODSB ;AL=RGB LEN + STOSB + MOV CL,AL + NIL CH + REP MOVSB ;R,G,B ETC + MOV RGBBUFPTR,DI +; CALL DOLIGHTS + RETN + + +_FLASHOFF: + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET WAITRUT + CALL KILL_FLASHOR + JMP NORMAL_END + +_MATRIXLGT: + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET WAITRUT + CMP WORD PTR [BX+2],0 + JE OFF_WITH_IT + CALL MATRIXON_ + JMP BORT_LELLE_VAN +OFF_WITH_IT: + CALL MATRIXOFF_ +BORT_LELLE_VAN: + JMP NORMAL_END + +_SETDECCOR: + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET WAITRUT + MOVE DECCOR,DS:[BX+2] + JMP NORMAL_END + +KILL_FLASHOR PROC NEAR + pusha + MOV MATRIX_IS_FLASHING,FALSE + MOV SI,OFFSET MATRIXON + MOVE ES,DS + MOV DI,RGBBUFPTR + ;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR! + MOVSB ;START COL + LODSB ;AL=RGB LEN + STOSB + MOV CL,AL + NIL CH + REP MOVSB ;R,G,B ETC + MOV RGBBUFPTR,DI + popa + RETN +KILL_FLASHOR ENDP + +_WAIT: + MOVE SISA,[BX+2] ;HUR M†NGA + MOV DOTRUT,OFFSET WAITRUT +;galopp + JMP NORMAL_END + +_WAITifmulti: + MOVE SISA,[BX+2] ;HUR M†NGA + cmp players,1 + jne dowwe + mov sisa,2 ;cpgnu? venta inte om ej multiplayer +dowwe: MOV DOTRUT,OFFSET WAITRUT +;galopp + JMP NORMAL_END +_LOCK: + MOVE SISA,[BX+2] ;HUR M†NGA + MOV DOTRUT,OFFSET LOCKRUT +;galopp + JMP NORMAL_END +LOCKRUT: + MOV SI,1 + RETN + +_WAIT_YN: + MOVE SISA,[BX+2] ;HUR M†NGA + MOV DOTRUT,OFFSET WAITRUT_YN +;galopp + JMP NORMAL_END +endit: + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXT_hh + MOV BX,0 +_NEXT_hh: + MOV NEXT_A,BX + RETN +clearend: + mov si,0 + retn + +_clear1: ;clear all matrix + MOVE SISA,1 + MOV DOTRUT,OFFSET rclear1 + mov clearval,0 + jmp endit +rclear1: + add clearval,2*sw/4 + move clear_box_start,clearval + mov clear_box_bredd,320/4 + mov clear_box_hojd,16 + call clear_box2 + jmp clearend + +_clear2: ;clear from top to bottom + MOVE SISA,1 + MOV DOTRUT,OFFSET rclear2 + mov clearval,0 + jmp endit +rclear2: + add clearval,2*sw/4 + cmp clearval,2*sw*18/4-2*SW/4 + je clearend + move clear_box_start,clearval + mov clear_box_bredd,320/4 + mov clear_box_hojd,1 + call clear_box2 + mov si,1 + retn +_clear3: ;clear from left to right + MOVE SISA,1 + MOV DOTRUT,OFFSET rclear3 + mov clearval,sw*2/4-1 + jmp endit +rclear3: + add clearval,1 + cmp clearval,320/4+sw*2/4 + je clearend + move clear_box_start,clearval + mov clear_box_bredd,1 + mov clear_box_hojd,16 + call clear_box2 + mov si,1 + retn +_clear4: ;clear 4 raster top to bottom + MOVE SISA,1 + MOV DOTRUT,OFFSET rclear4 + mov clearval,0 + jmp endit +rclear4: + add clearval,2*sw/4 + cmp clearval,2*sw*5/4 + je clearend + + move clear_box_start,clearval + mov clear_box_bredd,320/4 + mov clear_box_hojd,1 + call clear_box2 + + move clear_box_start,clearval + add clear_box_start,4*2*sw/4 + mov clear_box_bredd,320/4 + mov clear_box_hojd,1 + call clear_box2 + + move clear_box_start,clearval + add clear_box_start,8*2*sw/4 + mov clear_box_bredd,320/4 + mov clear_box_hojd,1 + call clear_box2 + + move clear_box_start,clearval + add clear_box_start,12*2*sw/4 + mov clear_box_bredd,320/4 + mov clear_box_hojd,1 + call clear_box2 + + + mov si,1 + retn + + +_FADE: + MOVE SISA,[BX+2] ;HUR M†NGA + MOV DOTRUT,OFFSET FADERUT + PUSHA + PUSH ES + MOV CS:FADING,TRUE + CALL READPAL + POP ES + POPA +;galopp + JMP NORMAL_END +FADING DB FALSE +READPAL: + MOV DX,3C7H + MOV AL,0 + OUT DX,AL + MOV DX,3C9H + MOV CX,3*256 + MOVA ES,CS + MOV DI,OFFSET CS:PALLE +RPAL: + IN AL,DX + STOSB + LOOP RPAL + RETN +SETPAL: + MOV DX,3C8H + MOV AL,0 + OUT DX,AL + MOV CX,3*256 + MOV DI,OFFSET CS:PALLE +SPAL: + MOV AL,CS:[DI] + XOR AH,AH + MUL BX + MOV AL,AH + MOV DX,3C9H + OUT DX,AL + INC DI + LOOP SPAL + RETN +PALLE DB 3*256 DUP(32) +FADERUT: + DEC SI + PUSHA + PUSH ES + MOV CX,SI + TEST CX,15 + JNZ NONEW16 + MOV AL,6 + INT 66H +NONEW16:MOV BX,CX + CALL SETPAL + POP ES + POPA + RETN +_WAITJINGLE: + MOV DOtRUT,OFFSET WAITJINGLE + JMP NORMAL_END +_WAITJINGLE2: + MOV DOtRUT,OFFSET WAITJINGLE2 + JMP NORMAL_END + +WAITRUT: + DEC SI + RETN + + +WAITRUT_YN: + mov al,scan_code + cmp al,-1 + je feltecken_du2 ;ej tryckt! + mov scan_code,-1 + mov bx,offset alfa_keys + xlat + cmp al,0 + je feltecken_du2 ;felaktigt tecken! + CMP AL,'N' + JE NOKVTTER + CMP AL,'Y' + JE do_quit_mr + jmp nokvtter +do_quit_mr: + MOV CS:QUITTING,TRUE +NOKVTTER: + mov cs:already_quitting,false + mov cs:keyboard_enabled,true + MOV SI,0 + RETN +feltecken_du2: + MOV SI,1 + RETN + +PARTYRUT: +; DEC SI + RETN + +WAITJINGLE: + mov si,TRUE + CMP JINGLE_READY_ANIM,TRUE + JNE DUMRET + MOV SI,0 + RETN + +WAITJINGLE2: ;WAITJINGLE2 HAR EN SPECIALARE F™R NOSOUND + ;OBS! DECCOR M¸STE VARA SATT INNAN DENNA RUT ANVˇNDS. + mov si,TRUE + PUSH ES + PUSHA + SET_ES 0 + MOV AX,21 + PUSHF + CALL DWORD PTR ES:[66H*4] ;TEST IF NOSOUND + TEST AL,1000B + JNZ ITWASNOSOUND + CMP JINGLE_READY_ANIM,TRUE + JNE QWJ2 + JMP SHORT ENDOFIT +ITWASNOSOUND: + DEC DECCOR + JZ ENDOFIT +QWJ2: POPA + POP ES + RETN +ENDOFIT: + POPA + POP ES + NIL SI + RETN + +PEKORB DW SCORE + DW CODE2 +SIFFRORRUT: + PUSHA + MOV BX,SW*2/4-16*2/4 ;TJA, VAD¸ CENTRERAD?? + MOVE ES,CS + CALL DWORD PTR ES:PEKORB + POPA + UPDAT_SCORE + MOV SI,0 + RETN +;****************************** +NORMAL_END: + ADD BX,4 + CMP WORD PTR [BX],0 + JNE _NEXT_ + MOV BX,0 +_NEXT_: + MOV NEXT_A,BX + RETN +;****************************** +PEKOR DW SCORE + DW CODE2 +NODOT: +;NO EFFECT IS RUNNING!! +;SHOW THE SCORE! +; debugmess 0,1,'NODOT ' + + cmp cs:keyboard_enabled,false + je i_show_naaathing ;if keyb disabled, a quest is on the screen!! + CMP NODOTCOUNT,NOT_PLAYING + JE SHOW_HI_ETC + CMP AFTER_CHEAT,TRUE + JE CHEATED + CMP DEMOMODE,TRUE + JE SHOW_HI_2 + +; CMP NODOTCOUNT,0 +; JNE ONLY_SCORE + + CMP I_UTSKJUT,TRUE + JE ONLY_SCORE + cmp behovs_provad,true + jne only_score + mov behovs_provad,false ;skriv ut bara f”rsta g†ngen! + MOV BX,OFFSET showplayersTS + CALL DO_SPEC_MATRIX + JMP ONLY_SCORE +CHEATED: + MOV AFTER_CHEAT,FALSE + MOV BX,OFFSET showHighSTS + CALL DO_MATRIX +; debugmess 0,0,"cheat" + JMP i_show_naaathing +SHOW_HI_ETC: + cmp spring_valid,true + je overitagain + mov fjanttext,true +if demover + moval play_text[8],'7'+1 +else + moval play_text[8],playerstext[7] +endif + moval play_text[18],ballstext[5] + MOV BX,OFFSET showInfoTS + CALL DO_MATRIX + JMP OVERITAGAIN +SHOW_HI_2: + MOV BX,OFFSET AfterDemoModeTS ;cp!!?? + CALL DO_MATRIX + jmp overitagain +overitagain_heter_nisse: + mov first_time_you_fool,false +OVERIT: MOV BX,OFFSET showHighSTS + CALL DO_MATRIX +OVERITAGAIN: + +ONLY_SCORE: + CALL CHECKHIGHSCORE + INC NODOTCOUNT + + mov si,offset siffrorna + mov bx,SW*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR +i_show_naaathing: + MOV SI,0 + RETN ;DUMRET F™R DOTS + +CHECKHIGHSCORE: + pusha + cmp i_utskjut,true + je end_chkofhiscre + cmp specialmode,true + je end_chkofhiscre + cmp already_beaten,true + je end_chkofhiscre + mov di,offset hi_score_list + MOV SI,OFFSET SIFFRORNA +Hcheck_list: + mov cx,12 + mov bx,0 +Hcheck_num: + mov al,[di+bx] + cmp [si+bx],al + jb Hnot_beaten + ja Hbeaten + inc bx + loop Hcheck_num +Hnot_beaten: +end_chkofhiscre: + popa + RETN +Hbeaten: + mov already_beaten,true + MOV BX,OFFSET BEATENTS + CALL DO_MATRIX + mov behovs_provad,true + popa + RETN + + +;****** +_beaten_matrix: + pusha + cmp already_beaten,true + je bend_chkofhiscre + mov di,offset hi_score_list + MOV SI,OFFSET SIFFRORNA +bHcheck_list: + mov cx,12 + mov bx,0 +bHcheck_num: + mov al,[di+bx] + cmp [si+bx],al + jb bHnot_beaten + ja bHbeaten + inc bx + loop bHcheck_num +bHnot_beaten: +bend_chkofhiscre: + popa + add bx,2 + jmp [bx] + +bHbeaten: + mov already_beaten,true + popa + mov bx,offset beaten_bh_ts + JMP [BX] + + +print_siffror5__: + ;print_numbers input e si=offset till bcd:n, di=pos † skriva ut + mov si,si_siffror + mov di,di_siffror + mov hojd_1,5 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + call print_number + + +print_siffror5: ;DETTA ˇR HˇRMED EN TASKRUTIN!!! + ;print_numbers input e si=offset till bcd:n, di=pos † skriva ut + mov si,si_siffror + mov di,di_siffror + mov hojd_1,5 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + call print_number + SUICIDE + +print_siffror8: ;CP! + ;print_numbers input e si=offset till bcd:n, di=pos † skriva ut + mov hojd_1,8 + mov hojd_add,bredd_1/4-sw*8*2/4 + mov font_adr,offset font8 + call print_number +retn +print_siffror11: + ;print_numbers input e si=offset till bcd:n, di=pos † skriva ut + mov hojd_1,11 + mov hojd_add,bredd_1/4-sw*11*2/4 + mov font_adr,offset font11 + call print_number +retn +print_siffror13: + ;print_numbers input e si=offset till bcd:n, di=pos † skriva ut + mov hojd_1,13 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + call print_number +Retn + + + + +FLIPPRA: +IF DEBUG + mov cs:Reknare,0 ;cp! debugging info +; DEBUGVAL 0,5,[BX].LASTGFXFRAME,"LASTGFXFRAME: " +ENDIF + SET_ES 0A000H + MOV DX,3C4H + MOV AX,0F02H + OUT DX,AX ;;ALLA BITPLAN P¸ + + MOV DX,3CEH + MOV AX,4105H + OUT DX,AX ;ARONSSON ON + + + MOV AX,[BX].TOPY + ADD AX,SPLH + MOV DI,BPL + MUL DI + MOV DI,AX + MOV AX,[BX].LEFTX + SHR AX,2 + ADD DI,AX + + + MOV AX,[BX].FLIPFRAME + MOV CX,AX + SUB CX,[BX].LASTGFXFRAME + XCHG [BX].LASTGFXFRAME,AX + JE NOMOVE ;;OM 0: INGET JAG KAN G™RA + JA WAYUP + NEG CX + MOV DX,[BX].FLIPDIFS + MUL DX + MOVE [BX].FLIPPEK,[BX].FLIPMAXPEK + SUB [BX].FLIPPEK,AX + JMP DANIM +reknare dw 0 +maxreknare dw 0 +WAYUP: + MOV DX,[BX].FLIPDIFS + MUL DX + ADD AX,[BX].FLIPTAB + MOV [BX].FLIPPEK,AX +DANIM: + PUSH 0 + CMP CX,9 + JBE DELTA_ANIMERA + POP AX ;DUMMY POP + MOV AX,CX + SUB AX,9 + PUSH AX + MOV CX,9 +DELTA_ANIMERA: + PUSH CX DI + PUSH BX + MOV BX,[BX].FLIPPEK +; debugclear +; debugval 10,10,bx,"=" +; jmp quit + MOVA DS,DATAFLIP + mov si,cx + dec si + shl si,1 + MOV CX,[BX+si] ;cp! ska va bx+si + jcxz nobytestoanim +IF DEBUG + add cs:reknare,cx + CMP CS:REKNARE,300 + JB INGEN_HORSE + DEBUGVAL 0,4,BX,"BX VA=" + DEBUGVAL 15,4,SI,"SI VA=" + DEBUGVAL 35,4,[BX+SI],"[BX+SI] VA=" + POP BX + MOVA DS,DATA + DEBUGVAL 20,5,[BX].LASTGFXFRAME,"NEW GFXFRAME: " + JMP QUIT +ENDIF +INGEN_HORSE: + ADD BX,2*9 + CALL DELTANIM +nobytestoanim: + MOVA DS,DATA + POP BX + ADDA [BX].FLIPPEK,[BX].FLIPDIFS + POP DI CX + LOOP DELTA_ANIMERA + POP CX +IF DEBUG + mov cs:Reknare,0 ;cp! debugging info +ENDIF + OR CX,CX + PUSH 0 + JNZ DELTA_ANIMERA + POP AX ;DUMMY POP +IF DEBUG + mov cx,cs:reknare + cmp cs:maxreknare,cx + ja nomove + mov cs:maxreknare,cx + debugval 0,3,cs:maxreknare,"max antal deltade bytes per frame: " +ENDIF +NOMOVE: + MOV DX,3CEH + MOV AX,4005H + OUT DX,AX ;ARONSSON OFF + RETN + +DOFLIPPER: +IF MARGIT + SETMARG 31 +ENDIF + MOV BX,OFFSET FLIPLINFO + CALL FLIPPRA + ADD BX,(SIZE FLIPSTRUC) + CALL FLIPPRA +IF MARGIT + SETMARG 0 +ENDIF + RETN +DOFLIPPER3: +IF MARGIT + SETMARG 15 +ENDIF + MOV BX,OFFSET FLIPLINFO+(SIZE FLIPSTRUC)*2 + cmp byte ptr [bx],0 + jz no_upper_flip + CALL FLIPPRA +no_upper_flip: +IF MARGIT + SETMARG 0 +ENDIF + RETN + +LATE_RASTER_INTERRUPT: + MOVE DS,DATA + MOV INT_WAS_HERE,TRUE + MOV INT_WAS_HERE2,TRUE + CMP SLOWCNT,0 + JNZ RETTEF + CMP INTERRUPTS_ON,TRUE + JE LRINTOK +RETTEF: + MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG + RETF ;RET +LRINTOK: + MOV TIME_LEFT,TRUE + OR AX,AX + JZ NO_MUSIC_CRISIS3 + MOV TIME_LEFT,FALSE +NO_MUSIC_CRISIS3: + CMP DEMOMODE,TRUE + JE LATE_RASTER_INTERRUPT_DEMO + +;*********************** SPELETS RUTINER **************************** + + CMP INSIDE_RASTINT,FALSE + JNE RETTEF + + CMP CS:LAST_WAS_VB,TRUE + JNE RETTEF + + CALL SETSCREENSTART + CMP INSIDE_BALLHANDLER,FALSE + JNE RETTEF + + MOV INSIDE_RASTINT,TRUE + SAVEGFXREGS + CALL KOLLAKULAN ;G”R TV† BER„KNINGAR + CMP LATEGFX,TRUE + JNE NOLGFX + MOV PUTITBETWEEN,FALSE + CALL PUTTHEBALL +NOLGFX: CMP FORCELATEF3,TRUE + JNE NOFF3 + CALL DOFLIPPER3 +NOFF3: + + MOV AL,F1F8_CODE ;TAR HAND OM F1F8_CODE I GAMEMODE + OR AL,AL + JZ NOF1F8_TODAY + MOV F1F8_CODE,0 + SUB AL,3BH-1 ;3BH=CODE FOR F1 + MOV PLAYERS,AL + ADD AL,'0'+7 + MOV NO_OF_PLAYERS_TEXT[8],AL + MOV BX,OFFSET no_of_playersTS + CALL DO_MATRIX + SOUNDEFFECT S_ADDPLAYER2,0 + mov addplayers,false + addtask allow_addpl +NOF1F8_TODAY: + RESTOREGFXREGS + MOV CS:LAST_WAS_VB,FALSE + MOV INSIDE_RASTINT,FALSE + MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG + RETF + +DOLON PROC NEAR + REALON BL + RETN +DOLON ENDP + +DOLOFF PROC NEAR + REALOFF BL + RETN +DOLOFF ENDP + +DOSUICIDE PROC NEAR + MOV BX,SAVESOURCE + MOV DS:[BX],OFFSET DUMRET + DEC NO_OF_ACTIVE_TASKS + RETN +DOSUICIDE ENDP + +DOWAITSYNCS PROC NEAR + CMP DS:[BX],DX + JE THISISIT + INC WORD PTR DS:[BX] + CLC + RETN +THISISIT: + MOV WORD PTR DS:[BX],0 + STC + RETN +DOWAITSYNCS ENDP + +DOLIGHTON PROC NEAR + NIL BH + MOV LIGHTSTATUS[BX],TRUE + LON BL + RETN +DOLIGHTON ENDP + +DOLIGHTOFF PROC NEAR + NIL BH + MOV LIGHTSTATUS[BX],FALSE + LOFF BL + RETN +DOLIGHTOFF ENDP + +DOLIGHTFLASH PROC NEAR + MOV BX,OFFSET REALFLASHLIST +NEXTFLASHPOST: + CMP [BX].LNUM,0 + JE FOUNDFLASHPOST + ADD BX,SIZE FLASHSTRUC + CMP BX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC+OFFSET REALFLASHLIST + JNE NEXTFLASHPOST + JMP CP_MEN_OKEJ +FOUNDFLASHPOST: + MOV [BX].LNUM,DL + MOV [BX].FLASHCOUNTER,AL + MOV [BX].TURNOFF,DH + SHL DH,1 + MOV [BX].RESETFC,DH +CP_MEN_OKEJ: + RETN +DOLIGHTFLASH ENDP + +DOENDFLASH PROC NEAR + MOV BX,OFFSET REALFLASHLIST +NEXTFLASHPOST2: + CMP [BX].LNUM,DL + JNE WASNTTHISONE + MOV [BX].LNUM,0 + JMP DONTBOTHER +WASNTTHISONE: + ADD BX,SIZE FLASHSTRUC + CMP BX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC+OFFSET REALFLASHLIST + JNE NEXTFLASHPOST2 +DONTBOTHER: + RETN +DOENDFLASH ENDP + +RESETFLASHLIST PROC NEAR + MOV CX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC + MOV DI,OFFSET REALFLASHLIST + MOVA ES,DS + NIL AL + REP STOSB + RETN +RESETFLASHLIST ENDP + + +FLASHTHELIGHTS PROC NEAR ;OBS! ˇNDRAR ENDAST PALETTEN, EJ STATUS!!! + MOV BX,OFFSET REALFLASHLIST +NEXTFLASHER: + CMP [BX].LNUM,0 + JZ NOTTHISONE + CMP [BX].FLASHCOUNTER,0 + JNZ NOTZEROISIT +GOTOZERO: + PUSH BX + LON [BX].LNUM + POP BX + JMP LETSINCIT +NOTZEROISIT: + MOV AL,[BX].TURNOFF + CMP [BX].FLASHCOUNTER,AL + JNE NOTOFFISIT + PUSH BX + LOFF [BX].LNUM + POP BX + JMP LETSINCIT +NOTOFFISIT: + MOV AL,[BX].RESETFC + CMP [BX].FLASHCOUNTER,AL + JNE NOTRESETISIT + MOV [BX].FLASHCOUNTER,0 + JMP GOTOZERO +NOTRESETISIT: +LETSINCIT: + INC [BX].FLASHCOUNTER +NOTTHISONE: + ADD BX,SIZE FLASHSTRUC + CMP BX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC+OFFSET REALFLASHLIST + JNE NEXTFLASHER + RETN +FLASHTHELIGHTS ENDP + +RECALC_LIGHTS PROC NEAR ;FN: DPAINT RGB VALUES -> MCGA RGB VALUES + MOV SI,OFFSET LON1 + MOV DI,OFFSET LON1 + MOVE ES,DS +NEXTPOST: + LODSB ;START COL + OR AL,AL + JZ NOMOREPOSTS + STOSB + + LODSB ;BLOCK LEN + MOV DL,3 + MUL DL + MOV CX,AX + STOSB + +NEXTCOLOR: + LODSB ;RECALC 0-100 -> 0-63 + MOV DL,162 ;(63/100*256=161.28) AX=AL*162*256 + MUL DL + MOV AL,AH + STOSB + LOOP NEXTCOLOR + JMP NEXTPOST +NOMOREPOSTS: + RETN +RECALC_LIGHTS ENDP + +SLACK_LIGHTS PROC NEAR ;FN: TURNS OUT ALL LIGHTS + cmp uppstartad,true + jne dumret + MOV AX,1 +SLAGAIN:PUSH AX + MOV BX,AX + MOV LIGHTSTATUS[BX],FALSE + MOV BL,AL + NIL BH + DEC BX + SHL BX,1 + MOV SI,LONINDEX[BX] + MOVE ES,DS + + CALL SLACK_THIS_LIGHT + + POP AX + INC AX + CMP AX,NOOFLIGHTS + JBE SLAGAIN + RETN +SLACK_LIGHTS ENDP +SLACK_THIS_LIGHT PROC NEAR ;FN: SLˇCKER RGBPOST. KOLLAR ATT DET GICK BRA! + ;INPUT: SI PEKAR P¸ RGB-POSTEN + ;OUTPUT: SI PEKAR P¸ NˇSTA RGB-POST + PUSH AX BX CX DX BP + MOV BL,INTERRUPTS_ON + MOV INTERRUPTS_ON,FALSE + MOV BP,SI +TRY_IT_AGAIN2: + MOV INT_WAS_HERE2,FALSE + ;G™R POSTEN [SI] FAST SLACK! + MOV DX,3C8H + LODSB ;AL=START COL + OUT DX,AL + INC DX + LODSB ;AL=RGB DATA LEN + MOV CL,AL + NIL CH +REPUTA: LODSB + SHR AL,1 + OUT DX,AL + LOOP REPUTA + CMP INT_WAS_HERE2,FALSE + JE ITS_REALLY_OK2 + MOV SI,BP + JMP TRY_IT_AGAIN2 +ITS_REALLY_OK2: + MOV INTERRUPTS_ON,BL + POP BP DX CX BX AX + RETN +SLACK_THIS_LIGHT ENDP +SLACK_THIS_LIGHT_i_pelle PROC NEAR ;FN: SLˇCKER RGBPOST. KOLLAR ATT DET GICK BRA! + ;INPUT: SI PEKAR P¸ RGB-POSTEN + ;OUTPUT: SI PEKAR P¸ NˇSTA RGB-POST + PUSH AX BX CX DX BP + ;G™R POSTEN [SI] FAST SLACK! + LODSB ;AL=START COL + mov ah,3 + mul ah + add ax,offset cs:palle + mov di,ax + LODSB ;AL=RGB DATA LEN + MOV Cx,Ax + xor ch,ch +REPUTA7:LODSB + SHR AL,1 + mov cs:[di],al + inc di + LOOP REPUTA7 + POP BP DX CX BX AX + RETN +SLACK_THIS_LIGHT_i_pelle ENDP + +SLACK_LIGHTS_i_pelle PROC NEAR ;FN: TURNS OUT ALL LIGHTS + MOV AX,1 +SLAGAIN2:PUSH AX + MOV BX,AX + MOV LIGHTSTATUS[BX],FALSE + MOV BL,AL + NIL BH + DEC BX + SHL BX,1 + MOV SI,LONINDEX[BX] + MOVE ES,DS + + CALL SLACK_THIS_LIGHT_i_pelle + + POP AX + INC AX + CMP AX,NOOFLIGHTS + JBE SLAGAIN2 + RETN +SLACK_LIGHTS_i_pelle ENDP + +DOLIGHTS PROC NEAR + CMP INSIDE_DOLIGHTS,TRUE + JE DONT_BOTHER + MOV INSIDE_DOLIGHTS,TRUE + CMP CS:FADING,TRUE + JE ITSFADING + + MOV SI,OFFSET RGBBUFFER +DONEXTLIGHT: + CMP SI,RGBBUFPTR + JE DONOMORE + CALL DO_THIS_LIGHT + JMP DONEXTLIGHT +ITSFADING: +DONOMORE: + MOV RGBBUFPTR,OFFSET RGBBUFFER + MOV INSIDE_DOLIGHTS,FALSE +DONT_BOTHER: + RETN +DOLIGHTS ENDP + +DO_THIS_LIGHT PROC NEAR ;FN: UTF™R RGBPOST. KOLLAR ATT DET GICK BRA! + ;INPUT: SI PEKAR P¸ RGB-POSTEN + ;OUTPUT: SI PEKAR P¸ NˇSTA RGB-POST + PUSH AX BX CX DX BP + MOV BL,INTERRUPTS_ON + MOV INTERRUPTS_ON,FALSE + MOV BP,SI +TRY_IT_AGAIN: + MOV INT_WAS_HERE,FALSE + ;G™R POSTEN [SI]! + MOV DX,3C8H + LODSB ;AL=START COL + OUT DX,AL + INC DX + LODSB ;AL=RGB DATA LEN + MOV CL,AL + NIL CH + REP OUTSB + CMP INT_WAS_HERE,FALSE + JE ITS_REALLY_OK + MOV SI,BP + JMP TRY_IT_AGAIN +ITS_REALLY_OK: + MOV INTERRUPTS_ON,BL + POP BP DX CX BX AX + RETN +DO_THIS_LIGHT ENDP + + + +DO_ELECTRONICS PROC NEAR ;EXEKVERAS VARJE UTRˇKNING, EJ VARJE SYNC + PUSHA + PUSH ES +if demover + INC MINUTE_5_COUNTER + CMP MINUTE_5_COUNTER,5*60*60-2 + Jne NOLIMIT + mov fiveminutes,true +; MOV SPECIALMODE,FALSE +; MOV INH_EFF,FALSE + MOV HOLDSTILL,TRUE + PLAYJINGLE S_GAMEOVER2 + MOV BX,OFFSET MINUTE5TS + CALL DO_MATRIX +; EFFECT MINUTE5 +; MOV SPECIALMODE,TRUE +NOLIMIT: +endif + + CALL CHECK_AREAS + CALL CHECK_TARGETS + CALL CHECK_SHIFTKEYS + CALL MATRIX_BLINKOR +; CALL DO_PHYSICS + + CALL KEYTASK ;KEYTASK CHANGED BY KEYINT + MOV KEYTASK,OFFSET DUMRET + CALL DO_TASKS + CALL FLASHTHELIGHTS + POP ES + POPA + RETN +DO_ELECTRONICS ENDP + +DO_PHYSICS PROC NEAR + CMP TILTCOUNTER,0 + JZ NOTI + DEC TILTCOUNTER +NOTI: CALL CHECK_BUMPERS + CALL CHECK_RAMPS + CALL CHECK_LEVELS + CMP BALL_DOWN,TRUE + JNE DONT_LOOSE_BALL + CMP LOOSING,TRUE + JE DONT_LOOSE_BALL + CALL LOOSE_BALL +DONT_LOOSE_BALL: + RET +DO_PHYSICS ENDP + +CHECK_RAMPS PROC NEAR + MOV SI,SC_X + ADD SI,8 + SHR SI,3 + MOV AX,SC_Y + ADD AX,8 + MOV CX,40 + MUL CX + ADD SI,AX + + DEC SI + MOV CX,3 +FINDRAMP: + PUSH SI CX + call get_hi_ramp_byte + CMP BALLHIGH,TRUE + Je GotLo + CALL GET_LO_RAMP_BYTE +GOTLO: POP CX SI + INC SI + OR AL,AL + JZ GETRAMP + LOOP FINDRAMP + JMP NORAMP +GETRAMP: + CMP BX,NO_OF_RAMPS + JAE NORAMP + SHL BX,2 + cmp hi_res,true + je hiramp + MOVA GRAVX,ramptable[BX] + MOVA GRAVY,ramptable[BX+2] +NORAMP: RETN +hiramp: + MOVA GRAVX,ramptable_hi[BX] + MOVA GRAVY,ramptable_hi[BX+2] + retn +get_hi_ramp_byte: + push si + PUSH SI + MOV AX,SI + XCHG AH,AL + AND AH,11B + SHR SI,2 + MOV AL,4 + MOV DX,3CEH + OUT DX,AX + MOV BX,GFXMASK21_OFFSET + set_es 0a000h + MOV AL,BYTE PTR ES:[SI+BX] + POP SI + SET_ES MASK2_2 + OR AL,BYTE PTR ES:[SI] + SET_ES 0A000H + SHR SI,2 + ADD SI,GFXMASK23_OFFSET + MOV BL,ES:[SI] + AND BX,15 + pop si + RETN +GET_LO_RAMP_BYTE: + push si + SET_ES MASK1_1 + MOV AL,ES:[SI] + SET_ES MASK1_2 + OR AL,ES:[SI] + PUSH AX + SET_ES 0A000H + CMP SI,230*40 + JAE GO_STD + PUSH SI + MOV AX,SI + SHR AX,4 + INC AX + MOV CX,80 + MUL CX + SHR SI,2 + ADD SI,AX + ADD SI,SPLH*BPL + MOV BL,ES:[SI] + POP SI + SHR SI,2 + JMP DONE_WEIRD +GO_STD: SHR SI,2 + ADD SI,GFXMASK13_OFFSET + MOV BL,ES:[SI-(9200/4)] +DONE_WEIRD: + POP AX + AND BX,15 + pop si + RETN +ENDP + +CHECK_BUMPERS PROC NEAR + CMP BUMPERWASHIT,FALSE + JE NOBUMPA + MOV BUMPERWASHIT,FALSE + MOV BX,HITPOINTER + LEA SI,[BX+2] + MOV DI,OFFSET SIFFRORNA + PUSH BX + CALL ADDSCOREBCD + POP BX + MOV SCORECHANGED,TRUE + MOV BP,DS:[BX] + SOUNDEFFECT DS:[BP],0 + CALL BUMPER_WAS_HIT_PROC +NOBUMPA: + RETN +ENDP + + + +DOADDTASK PROC NEAR ;INPUT:DX=OFFSET THETASK + MOV BX,OFFSET TASKLIST +HOWABOUTNEXTTASKTHEN: + CMP DS:[BX],OFFSET DUMRET + JE FOUNDFREETASK + ADD BX,2 + CMP BX,NOOFTASKS*2+OFFSET TASKLIST + JNE HOWABOUTNEXTTASKTHEN +; DEBUGMESS 40,2,"MAX NO OF TASKS" + JMP ERRQUIT +FOUNDFREETASK: + INC NO_OF_ACTIVE_TASKS + MOV DS:[BX],DX +IF DEBUG + debugVAL 0,11,NO_OF_ACTIVE_TASKS,"No of active tasks=" +ENDIF + RETN +DOADDTASK ENDP + +DO_TASKS PROC NEAR + MOV CX,NOOFTASKS + MOV BX,OFFSET TASKLIST +DONXTTASK: + PUSH CX + PUSH BX + MOV SAVESOURCE,BX + CALL [BX] ;M¸STE VARA [BX]! + POP BX + POP CX + ADD BX,2 + LOOP DONXTTASK + RETN +DO_TASKS ENDP + + +DOEFFECTBRACK PROC NEAR ;INPUT: SI=OFFSET EFFECT STRUCTURE + ;OUTPUT: AL=1 IF TS DONE ELSE AL=0 + LODSW ;OFFSET JINGLE STRUC + OR AX,AX + JZ NOJINGLE2 + PUSH SI + PLAYJINGLE AX + POP SI + +JUMP_2_JUMP_2: + UPDAT_INFOBAR + + pusha + mov di,offset siffrorna ;hela scoren!! + call addscorebcd + MOV SCORECHANGED,TRUE + popa + add si,12 ;SCORE SIZE=12 + pusha + mov di,offset BONUSsiffrorna + call addscorebcd + popa + add si,12 ;BONUS SIZE=12 + + LODSW ;OFFSET DOT STRUC + OR AX,AX + JZ NO_EFF_IT_IS_STAR_WARS + MOV BX,AX + CALL DO_MATRIX ;KALLA P¸ JOHAN! + MOV AL,1 + RETN +NO_EFF_IT_IS_STAR_WARS: + MOV AL,0 + RETN +NOJINGLE2: + LODSB ;PRIORITY + JMP JUMP_2_JUMP_2 +DOEFFECTBRACK ENDP + + +DOEFFECT PROC NEAR ;INPUT: SI=OFFSET EFFECT STRUCTURE + ;OUTPUT: AL=1 IF TS DONE ELSE AL=0 + LODSW ;OFFSET JINGLE STRUC + OR AX,AX + JZ NOJINGLE + CMP AL,BYTE PTR S_LOSTBALL ;CP!? (ANNARS H™RS INTE LOSTBALL!) + JE DOEFF + CMP INH_EFF,TRUE + JE NOEFF1 + CMP SPECIALMODE,TRUE + JE NOEFF1 +DOEFF: PUSH SI + PLAYJINGLE AX + POP SI +NOEFF1: +JUMP_2_JUMP: + PUSHF + +;Gabriel! H„r „r hur man addar p† en score!! +;detta „r upp till dig att r”ja upp! +;(si pekar p† effektscoren!!) +;JAHAPP, MEN DET ˇR JU REDAN GJORT! + + UPDAT_INFOBAR + + pusha + mov di,offset siffrorna ;hela scoren!! + call addscorebcd + MOV SCORECHANGED,TRUE + popa + add si,12 ;SCORE SIZE=12 + + pusha + mov di,offset BONUSsiffrorna + call addscorebcd + popa + add si,12 ;BONUS SIZE=12 + + POPF + JC SORRY_MORE_IMPORTANT_STUFF_TO_DO + LODSW ;OFFSET DOT STRUC + OR AX,AX + JZ NO_EFF_IT_IS + CMP INH_EFF,TRUE + JE NOEFF2 + CMP SPECIALMODE,TRUE + JE NOEFF2 + MOV BX,AX + CALL DO_MATRIX ;KALLA P¸ JOHAN! + MOV AL,1 + RETN +NOEFF2: +NO_EFF_IT_IS: +SORRY_MORE_IMPORTANT_STUFF_TO_DO: + MOV EOTS,TRUE + MOV AL,0 + RETN +NOJINGLE: + LODSB ;PRIORITY + CMP AL,CURRENT_PRIORITY + JMP JUMP_2_JUMP +DOEFFECT ENDP + +DOPLAYJINGLE PROC NEAR ;INPUT: SI=OFFSET JINGLE STRUCTURE + OR SI,SI + JZ NOPLAYJINGLE + LODSB ;JINGLE NO + NIL AH + MOV BX,AX + LODSB ;REPEAT ??? ;CP? + ;AL=REPEAT + push ax + xchg JINGLEJUMPCNT,AL + mov bp,ax + LODSB ;PRIORITY + CMP AL,CURRENT_PRIORITY + JB NOTNOW_ASHOLE ;SAME PRIORITY OVERRIDES! + MOV CURRENT_PRIORITY,AL + MOV AL,16 + PUSH BX + INT 66H ;AL=FORCE POSITION, BX=THE POSITION + POP BX ;ret: AL=OLD POSITION + + pop dx ; utifall att jinglehandlern har gjort + mov jinglejumpcnt,dl ; sitt under tiden..... + + MOV JINGLE_READY_ANIM,FALSE + MOV JINGLE_READY_LOGIC,FALSE +IF DEBUG + DEBUGVAL 0,17,BX,"SENASTE BEORDRAD JINGLE: " +ENDIF + MOV BL,AL + XOR BH,BH +IF DEBUG + DEBUGVAL 0,15,BX,"RETURNED JINGLE POSITION: " + INC CS:JINGLEORDER + DEBUGVAL 0,16,CS:JINGLEORDER,"JINGLE ORDER NO: " +ENDIF + mov bx,bp + cmp bl,0 + jg noplayjingle + CMP AL,62 + JE NOPLAYJINGLE + MOV LASTJINGLE,AL +NOPLAYJINGLE: + CLC + RETN +NOTNOW_ASHOLE: + pop ax ;trash + STC + RETN +JINGLEORDER DW 0 +DOPLAYJINGLE ENDP + + +;****************************************************************************** + +DOADVANCE PROC NEAR ;FN: LIGHT NEXT LIGHT IN LIST + ;INPUT: SI=OFFSET TO THE LIST + ; LIST STRUC: DB COUNTER,LNO1,LNO2,...,-1 + ;OUTPUT: -C- IF END OF LIST REACHED + PUSH SI + LODSB ;GET LIST COUNTER + NIL AH + ADD SI,AX + LODSB ;AL=LIGHT TO LIGHTED + PUSH SI + LIGHTON AL ;TURN ON CORRECT LIGHT + POP SI + LODSB ;AL=NEXT LIGHT, IF -1: END OF LIST + CMP AL,-1 + JE REACHED_END_OF_LIST + POP SI + INC BYTE PTR [SI] ;INC LIST COUNTER + CLC + RETN +REACHED_END_OF_LIST: + POP SI + MOV BYTE PTR [SI],0 ;RESET LIST COUNTER + STC + RETN +DOADVANCE ENDP + +CHECK_TARGETS PROC NEAR + CMP TILTFLAG,TRUE + JE QCT + CMP EXAHITX,0 + JNZ ITSAHIT + CMP EXAHITY,0 + JZ NOHIT +ITSAHIT: + MOV CX,EXAHITX + MOV DX,EXAHITY + ADD DX,SCREENPOSY ;CP!? DET SKA NOG VA S¸ HˇR + MOV EXAHITX,0 + MOV EXAHITY,0 + MOV SI,OFFSET ZONLISTA_L + CMP BALLHIGH,TRUE + JE NOHIT + JMP STARTITHERE3 +NASTAAREA3: + POP SI + ADD SI,5*2 +STARTITHERE3: + PUSH SI + LODSW + OR AX,AX + JZ NOMOREAREAS3 + CMP CX,AX + JB NASTAAREA3 + LODSW + CMP DX,AX + JB NASTAAREA3 + LODSW + CMP CX,AX + JA NASTAAREA3 + LODSW + CMP DX,AX + JA NASTAAREA3 + LODSW + CALL AX +NOMOREAREAS3: + POP SI +NOHit: +QCT: RETN +CHECK_TARGETS ENDP + +CHECK_LEVELS PROC NEAR + MOV CX,SC_X + ADD CX,BALLH/2 + MOV DX,SC_Y + ADD DX,BALLH/2 + ADD DX,SCREENPOSY ;CP!? DET SKA NOG VA S¸ HˇR + MOV SI,OFFSET LEVEL1LISTA + CMP BALLHIGH,TRUE + JE BALLHGH2 + MOV SI,OFFSET LEVEL2LISTA +BALLHGH2: + JMP STARTITHERE2 +NASTAAREA2: + POP SI + ADD SI,4*2 +STARTITHERE2: + PUSH SI + LODSW + CMP AX,-1 + JE NOMOREAREAS2 + CMP CX,AX + JB NASTAAREA2 + LODSW + CMP DX,AX + JB NASTAAREA2 + LODSW + CMP CX,AX + JA NASTAAREA2 + LODSW + CMP DX,AX + JA NASTAAREA2 + NOT BALLHIGH +NOMOREAREAS2: + POP SI + RETN +CHECK_LEVELS ENDP + + +CHECK_AREAS PROC NEAR + MOV CX,SC_X + ADD CX,BALLH/2 + MOV DX,SC_Y + ADD DX,BALLH/2 + ADD DX,SCREENPOSY ;CP!? DET SKA NOG VA S¸ HˇR + MOV SI,OFFSET AREALISTA_U + CMP BALLHIGH,TRUE + JE BALLHGH + MOV SI,OFFSET AREALISTA_L +BALLHGH: + CMP TILTFLAG,TRUE + JNE NOT_TILT_AREOR + MOV SI,OFFSET AREALISTA_U_T + CMP BALLHIGH,TRUE + JE BALLHGH3 + MOV SI,OFFSET AREALISTA_L_T +BALLHGH3: +NOT_TILT_AREOR: + JMP STARTITHERE +NASTAAREA: + POP SI + ADD SI,5*2 +STARTITHERE: + PUSH SI + LODSW + OR AX,AX + JZ NOMOREAREAS + CMP CX,AX + JB NASTAAREA + LODSW + CMP DX,AX + JB NASTAAREA + LODSW + CMP CX,AX + JA NASTAAREA + LODSW + CMP DX,AX + JA NASTAAREA + LODSW + CMP LASTCHECK,AX + JE CALLREADY + MOV LASTCHECK,AX + CALL AX + MOVE LASTAREA,LASTCHECK + JMP CALLREADY +NOMOREAREAS: + MOV LASTCHECK,0 +CALLREADY: + POP SI + RETN +CHECK_AREAS ENDP + +SPRINGIT: ;THIS not IS A TASK anymore, not TRIGGED BY KEYINT + CMP DNPRESSED,FALSE + JE NO_WAY + CMP SPRINGPOS,(SPRINGH-1)*2 + JAE NO_WAY + INC SPRINGPOS + CALL PUTSPRING +NO_WAY: RETN + +SPRINGSTEEN: ;BRUCE! + CMP MOUSEINSTALLED,TRUE + JNE NOT_OKIDOK + MOV AX,03H + INT 33H + CMP DL,MOUSEMIDDLE + JB MOVED_UP + JNA DIDNT_MOVE + + CMP SPRINGPOS,(SPRINGH-1)*2 + JAE _4GETIT + INC SPRINGPOS + JMP SPRINGPOS_CALCED +MOVED_UP: + CMP SPRINGPOS,0 + JZ _4GETIT + DEC SPRINGPOS +SPRINGPOS_CALCED: + PUSH BX + CALL PUTSPRING + MOV CX,0 + MOV DX,MOUSEMIDDLE + MOV AX,04H + INT 33H ;SET MOUSE YPOS TO MOUSEMIDDLE + POP BX +DIDNT_MOVE: +_4GETIT: + TEST BL,1 + JZ NOSPRINGUP + MOV SPRINGTASK,OFFSET SPRINGUP +NOSPRINGUP: +NOT_OKIDOK: + CALL SPRINGIT + RETN + +springup: + mov Cl,springpos + xor Ch,Ch + JCXZ NOUP + CMP SPRING_VALID,FALSE + JE DOUP2 + cmp hi_res,true + je nilsbedrupp + mov ax,(-5000/15)/2*TT/NN + jmp kukenkarl +nilsbedrupp: + mov ax,(-5000/15)/2 +kukenkarl: + imul Cx + mov bp,ax + mov ax,slump_countern + and ax,255 + sub bp,ax + CMP MAKE_BAD,TRUE + JE BADDAREN + SETBALLSPEED 0,bp ;cp! +BADDAREN: + mova rotation,slump_countern + and rotation,15 ;cp!? +DOUP2: + MOV AL,SPRINGPOS + XOR AH,AH + SHL AX,6 + MOV BL,(SPRINGH-1)*2 + DIV BL ;AL=CALCULATED SPRING SOUND VOLUME + soundeffect sfjader,AL + mov springpos,0 + call putspring + CMP MOUSEINSTALLED,TRUE + JNE NO_M_INST + MOV AX,04H + NIL CX + MOV DX,MOUSEMIDDLE + INT 33H ;SET MOUSE YPOS TILL MOUSEMIDDLE +NO_M_INST: +NOUP: + MOV SPRINGTASK,OFFSET SPRINGSTEEN ;INTE PRINCE + retn + +INIT_MOUSE: + MOVE ES,0 + CMP WORD PTR ES:[33H*4],0 + JNE OKIDOK + CMP WORD PTR ES:[33H*4+2],0 + JE NOT_OKIDOKI +OKIDOK: MOV MOUSEINSTALLED,TRUE + JMP OVERHOPP +NOT_OKIDOKI: + MOV MOUSEINSTALLED,FALSE +OVERHOPP: + MOVE ES,0A000H + MOV AX,0 + INT 33H ;RESET MOUSEDRIVER/CHECK IF MOUSE INSTALLED + CMP AX,0 + JE NOMOUSEINSTALLED + MOV AX,08H + MOV CX,0 ;MIN MOUSE POS + MOV DX,MOUSETOTAL ;MAX MOUSE POS + INT 33H + MOV AX,0FH + MOV CX,8 + MOV DX,16*4 + INT 33H ;SET MICKEY TO PIXEL RATIO + RETN +NOMOUSEINSTALLED: + MOV MOUSEINSTALLED,FALSE + RETN + +GATE_STRUC STRUC + G_POS DW ? + G_NEG DW ? + G_WHERE DW ? + G_WIDTH DW ? + G_HEIGHT DW ? +ENDS + +MOVE_MASK_DATA PROC NEAR ;FN: OPENS OR CLOSES GATES + ;INPUT: DS:SI=SOURCE, ES:DI=DEST + ; DX=WIDTH, CX=HEIGHT +NEXTLINE: + PUSH CX + MOV CX,DX + PUSH DI + REP MOVSB + POP DI + ADD DI,40 + POP CX + LOOP NEXTLINE + RETN +MOVE_MASK_DATA ENDP +MOVE_MASK_DATA_b PROC NEAR ;FN: OPENS OR CLOSES GATES + ;INPUT: DS:SI=SOURCE, ES:DI=DEST + ; DX=WIDTH, CX=HEIGHT +NEXTLINE3: + PUSH CX + MOV CX,DX + PUSH DI + REP MOVSB + add si,dx + add si,dx + POP DI + ADD DI,40 + POP CX + LOOP NEXTLINE3 + RETN +MOVE_MASK_DATA_b ENDP + +DO_PUT_GATE_POS_HIGH: ;INPUT BX=OFFS GATE + MOV SI,[BX].G_POS + MOV DI,[BX].G_WHERE + MOVE ES,MASK2_2 + MOV DX,[BX].G_WIDTH + MOV CX,[BX].G_HEIGHT + ADD SI,DX + CALL MOVE_MASK_DATA_B + RETN + +DO_PUT_GATE_NEG_HIGH: ;INPUT BX=OFFS GATE + MOV SI,[BX].G_NEG + MOV DI,[BX].G_WHERE + MOVE ES,MASK2_2 + MOV DX,[BX].G_WIDTH + MOV CX,[BX].G_HEIGHT + ADD SI,DX + CALL MOVE_MASK_DATA_B + RETN + +DO_PUT_GATE_POS_LOW: ;INPUT BX=OFFS GATE + MOV SI,[BX].G_POS + MOV DI,[BX].G_WHERE + MOVE ES,MASK1_2 + MOV DX,[BX].G_WIDTH + MOV CX,[BX].G_HEIGHT + ADD SI,DX + CALL MOVE_MASK_DATA_B + RETN + +DO_PUT_GATE_NEG_LOW: ;INPUT BX=OFFS GATE + MOV SI,[BX].G_NEG + MOV DI,[BX].G_WHERE + MOVE ES,MASK1_2 + MOV DX,[BX].G_WIDTH + MOV CX,[BX].G_HEIGHT + ADD SI,DX + CALL MOVE_MASK_DATA_B + RETN + +INIT_INTS PROC NEAR + MOV AX,11 ;INIT VBLANK INT + MOV BL,100 + MOV DX,OFFSET VBLANK_INT + MOVE ES,CS + INT 66H + + MOV CX,LATE_INTERRUPT_RASTER_LO*2 + CMP HI_RES,TRUE + JNE NOTHIRES1 + MOV CX,LATE_INTERRUPT_RASTER_HI*2 +NOTHIRES1: + MOV DX,OFFSET LATE_RASTER_INTERRUPT + MOV BL,200 + MOVE ES,CS + MOV AX,12 ;INIT RASTER INT + INT 66H + RETN +INIT_INTS ENDP + +GO_GAME_MODE PROC NEAR ;TURNS OFF THE DEMO MODE AND STARTS THE GAME + MOV DEMOMODE,FALSE + RETN +GO_GAME_MODE ENDP + +GO_DEMO_MODE PROC NEAR ;TURNS ON THE DEMO MODE + MOV CS:ALREADY_QUITTING,FALSE + MOV CS:KEYBOARD_ENABLED,TRUE + MOV DEMOMODE,TRUE + RETN +GO_DEMO_MODE ENDP + + +VBLANK_INT_DEMO: + MOVE DS,DATA + SAVEGFXREGS + + CALL FLASH + CALL MATRIX_BLINKOR + +IF MARGIT +SETMARG 14 +ENDIF + + cmp time_left,false + je skip_matrixD ;no time left! Skip it!! +; mov time_left,false ;ok, time was left last time! + + MOV AL,CS:INSIDE_MATRIX + MOV CS:INSIDE_MATRIX,TRUE + CMP AL,TRUE + JE SKIP_MATRIXD + CALL DO_THE_DOTMATRIX ;updatera d† matrixen! + MOV CS:INSIDE_MATRIX,FALSE +skip_matrixD: + CALL DOLIGHTS + +IF MARGIT +RESTOREMARG +ENDIF +IF MARGIT +SETMARG 0 +ENDIF + + RESTOREGFXREGS + MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG + RETF + + +LATE_RASTER_INTERRUPT_DEMO: + MOVE DS,DATA + CMP INTERRUPTS_ON,TRUE + JE LRINTOKD + MOV AX,0 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER F¸R HAN KLARA + RETF ;RET +LRINTOKD: + SAVEGFXREGS + MOV AX,BANH-(SH_LO-SPLH) + CMP HI_RES,TRUE + JNE NOTHIRES7 + MOV AX,BANH-(SH_HI-SPLH) +NOTHIRES7: + CMP SCREENFORCE,AX + JL NOT_BOTTOM + MOV CARMEN,-1 +NOT_BOTTOM: + CMP SCREENFORCE,0 + JG NOT_TOP + MOV CARMEN,1 +NOT_TOP: + MOV AX,CARMEN + ADD SCREENFORCE,AX + CALL SETSCREENSTART + + CMP F1F8_CODE,0 ;TAR HAND OM F1F8_CODE I DEMOMODE + JZ NOF1F8 + MOV AL,F1F8_CODE + MOV F1F8_CODE,0 + SUB AL,3BH-1 ;3BH=CODE FOR F1 + MOV PLAYERS,AL + ADD AL,'0'+7 + MOV NO_OF_PLAYERS_TEXT[8],AL + MOV BX,OFFSET first_no_of_playersTS + CALL DO_MATRIX + SOUNDEFFECT S_ADDPLAYER2,0 + + MOV SCREENFORCE,-1 + + CALL GO_GAME_MODE ;TO GAME FROM DEMO + + CALL WHEN_NEW_GAME_RESET + CALL WHEN_NEW_GAME_RESET_TABLE + + CALL GAME_MUSIC + + CALL NEW_BALL + + MOV ADDPLAYERS,FALSE + ADDTASK ALLOW_ADDPL ;TILL†T INGA NYA ADDS F”RNS OM 30 SYNCAR + +NOF1F8: + RESTOREGFXREGS + MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG + RETF + +ALLOW_ADDPL: + WAITSYNCS 15 + MOV ADDPLAYERS,TRUE + SUICIDE + +SNART_NEW_BALL: + WAITSYNCS 30 + CALL NEW_BALL_PART_TWO + SUICIDE + +;****************************************************************************** + + +;*************************** Updatera alla spelares pstruc!!!! *********** +UPDATE_P_STRUC_4_ALL_PLAYERS: + MOV BX,0 + MOV CX,8 +THE_PLAYERS: + PUSH BX CX + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA + CALL VARS_2_P_STRUC_2 + POP CX BX + INC BX + LOOP THE_PLAYERS + RETN + + +FLASH PROC NEAR + MOVE DS,DATA + MOV SI,OFFSET FLASHLIST + MOVE ES,DS +FLASHAGAIN: + CMP WORD PTR DS:[SI],-1 + JZ NOMOREFLASHING + PUSH SI + CALL DOTHISFLASH + POP SI + ADD SI,10 + JMP FLASHAGAIN +NOMOREFLASHING: + RETN +FLASH ENDP + +DOTHISFLASH PROC NEAR ;INPUT:SI + MOV DI,SI + LODSW + INC AX + STOSW + MOV BP,AX + LODSW + MOV DI,AX + LODSW + CMP BP,AX + JE TURNITOFF + LODSW + CMP BP,AX + JE TURNITON +TURNBACK: + RETN +TURNITOFF: + LODSW + LODSW + LOFF AL + JMP TURNBACK +TURNITON: + LODSW + PUSH SI + PUSH DI + PUSH ES + LON AL + POP ES + POP AX + POP DI + SUB DI,10 + STOSW + JMP TURNBACK +DOTHISFLASH ENDP + +RECALCFLASHLIST PROC NEAR + MOVE ES,DS + MOV SI,OFFSET FLASHLIST +NEXTPOSTEN: + CMP WORD PTR DS:[SI],-1 + JE NOMOREFPOSTS + PUSH SI + MOV DI,SI + MOVSW ;CNT + LODSW + STOSW ;1ST + MOV BX,AX + LODSW + ADD AX,BX + MOV BX,AX + STOSW ;OFF + LODSW + ADD AX,BX + STOSW ;ON + POP SI + ADD SI,10 + JMP NEXTPOSTEN +NOMOREFPOSTS: + RETN +RECALCFLASHLIST ENDP + +INIT_SOUND PROC NEAR + OPENFILE SOUNDCFG + JC NOSOUNDCFG +if musikkaos +else + READFILE BX,13,DRV ;get name of selected sound driver +endif + CLOSEFILE BX + + MOV AX,DS + MOV ES,AX + MOV AX,4B00H ;fn 4b = load and execute exe file + MOV BX,OFFSET PARMS + MOV DX,OFFSET DRV + INT 21H ;LOAD DRIVER + + MOV AL,19 + MOV DX,OFFSET JINGLE_HANDLER + MOVE ES,CS + INT 66H + + MOV AX,18 ;fn 18 + MOV DX,OFFSET MODUL + INT 66H ;LOAD MODULE + IF_ERROR 1,outofmemory + IF_ERROR 3,cantfindmod + IF_ERROR 4,errorloadingmod + + SLACKDRIVELED + CLC + RETN +NOSOUNDCFG: + MOV AX,3 + INT 10H + PRINTMESS "Can't find sound configurations file." + STC + RETN +ENDP +INIT_HIGHS PROC NEAR ;READ HIGH-SCORES + OPENFILE HI_SCORE_FILE + JC NOFILE + READFILE BX,16*4,HI_SCORE_LIST + CLOSEFILE BX +NOFILE: RETN +INIT_HIGHS ENDP +SAVE_HIGHS PROC NEAR ;WRITE HIGH-SCORES + CREATEFILE HI_SCORE_FILE + JC NOFILE2 + WRITEFILE BX,16*4,HI_SCORE_LIST + CLOSEFILE BX +NOFILE2:RETN +SAVE_HIGHS ENDP +INIT_MATRIX PROC NEAR + PUSHA + MOV DOTRUT,OFFSET NODOT + MOV SISA,0 + MOV BX,OFFSET CLEARTS + CALL DO_MATRIX ;RENSA UPP LITE!! + + UPDAT_SCORE + POPA + RETN +INIT_MATRIX ENDP +set_360x350: + mov ax,13h + int 10h ; Video display ah=functn 00h + ; set display mode in al + mov dx,3C4h + mov al,4 + out dx,al ; port 3C4h, EGA sequencr index + ; al = 4, memory mode select + mov dx,3C5h + mov al,6 + out dx,al ; port 3C5h, EGA sequencr func + mov dx,3C4h + mov al,2 + out dx,al ; port 3C4h, EGA sequencr index + ; al = 2, map mask register + mov dx,3C5h + mov al,0Fh + out dx,al ; port 3C5h, EGA sequencr func + + mov ax,0A000h + mov es,ax + mov cx,0ffffh + mov al,0 + mov di,0 + cld + rep stosb + + mov dx,3C2h + mov al,0A7H ;0E7h + out dx,al ; port 3C2h, EGA misl out reg + mov dx,3D4h + mov al,11h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 11h, light pen low + mov dx,3D5h + in al,dx ; port 3D5h, CGA/EGA indxd data + and al,7 + push ax + mov dx,3D4h + mov al,11h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 11h, light pen low + pop ax + mov dx,3D5h + out dx,al ; port 3D5h, CGA/EGA indxd data + + mov dx,3D4h + mov al,0 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 0, horiz char total + mov dx,3D5h + mov al,6Bh ; 'k' + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,1 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 1, horiz char display + mov dx,3D5h + mov al,59h ; 'Y' + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,2 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 2, horz sync position + mov dx,3D5h + mov al,5Ah ; 'Z' + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,3 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 3, horiz sync width + mov dx,3D5h + mov al,8Eh + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,4 + out dx,al ; port 3D4h, CGA/EGA reg index + + mov dx,3D5h + mov al,5Eh-CENTSCREEN ; '^' + out dx,al ; port 3D5h, CGA/EGA indxd data + + mov dx,3D4h + mov al,5 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 5, vert total adjust + mov dx,3D5h + mov al,8Ah-CENTSCREEN + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,6 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 6, vert char displayd + mov dx,3D5h + mov al,0BFH ;0Dh ;VERTICAL TOTAL + out dx,al ; port 3D5h, CGA/EGA indxd data + + mov dx,3D4h + mov al,7 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 7, vert sync position + mov dx,3D5h + mov al,1FH ;3Eh ; '>' + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,9 + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 9, max raster address + mov dx,3D5h + mov al,40h ; '@' + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,10h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 10h, light pen high + mov dx,3D5h + mov al,83H ;0EAh + out dx,al ; port 3D5h, CGA/EGA indxd data + + mov dx,3D4h + mov al,12h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 12h, vert end scan line + mov dx,3D5h + mov al,05DH ;0DFh + out dx,al ; port 3D5h, CGA/EGA indxd data + + mov dx,3D4h + mov al,13h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 13h, offset line width + mov dx,3D5h + mov al,BPL/2 ;2Dh ; '-' + out dx,al ; port 3D5h, CGA/EGA indxd data + + mov dx,3D4h + mov al,14h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 14h, underline scan lin + mov dx,3D5h + mov al,0FH ;0 + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,15h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 15h, vert start blankng + mov dx,3D5h + mov al,063H ;E7h + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,16h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 16h, vert end blanking + mov dx,3D5h + mov al,0BAH ;6 + out dx,al ; port 3D5h, CGA/EGA indxd data + mov dx,3D4h + mov al,17h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 17h, mode control + mov dx,3D5h + mov al,0E3h + out dx,al ; port 3D5h, CGA/EGA indxd data + + MOV DX,3D4H ;SET HORIZ END + MOV AL,01H + MOV AH,80-1 ;(DET MAN VILL HA GENOM 4) + OUT DX,AX + + mov dx,3D4h + mov al,11h + out dx,al ; port 3D4h, CGA/EGA reg index + ; al = 11h, light pen low + mov dx,3D5h + mov al,0A5H ;0ACh + out dx,al ; port 3D5h, CGA/EGA indxd data + + + retn + +INIT_GFX PROC NEAR + CALL SET_MCGAB + CALL SET240 +IF HZ50 + call set50hz +ENDIF + + MOVE DS,DATA + CMP HI_RES,TRUE + JNE NOTHIRES13 + CALL SET_360X350 +NOTHIRES13: + + CALL SETSCREENSTART +IF RES600 +ELSE + CALL SETSPLIT +ENDIF + + mov bx,0 + call setpal ;sl„ck sk„rmen SLˇCK + + SET_ES 0A000H + MOV AX,STAGE1_1 + MOV ES,AX + MOV AX,0 ;xpos + MOV BX,0+SPLH ;ypos + MOV CX,SW + MOV BP,10b ;bp=0: s„tt inte paletten + MOV DX,0 ;es:dx=adress till bild + CALL UNPKLBM + MOV AX,STAGE1_2 + MOV ES,AX + MOV AX,0 ;xpos + MOV BX,144+SPLH ;ypos + MOV CX,SW + MOV BP,10b ;bp=0: s„tt inte paletten + MOV DX,0 ;es:dx=adress till bild + CALL UNPKLBM + MOV AX,STAGE1_3 + MOV ES,AX + MOV AX,0 ;xpos + MOV BX,288+SPLH ;ypos + MOV CX,SW + MOV BP,10b ;bp=0: s„tt inte paletten + MOV DX,0 ;es:dx=adress till bild + CALL UNPKLBM + MOV AX,STAGE1_4 + MOV ES,AX + MOV AX,0 ;xpos + MOV BX,432+SPLH ;ypos + MOV CX,SW +IFDEF HALFBRIGHT + MOV BP,110b ;bp=111: s„tt paletten, HALFBRIGHT +ELSE + MOV BP,10b ;bp=11: s„tt paletten, NO HALFBRIGHT +ENDIF + + MOV DX,0 ;es:dx=adress till bild + CALL UNPKLBM + + mov si,dx + mova ds,stage1_4 + mov di,offset CS:PALLE ;tempor„r lagringsplats + mova es,CS + mov cx,768 + rep movsb + mova ds,data + +COMMENT\ + MOV AX,1000H + MOV BL,10H + MOV BH,1 + INT 10H + \ + RETN + +INIT_SPRING: + CALL PUTSPRINGINGFX + mov dx,3c4h + mov ax,0f02h + out dx,ax + set_es 0a000h + mov al,00 + mov di,(splh+banh)*bpl + mov cx,bpl*4 + rep stosb + call putspring + RETN +INIT_GFX ENDP +PUTSPRINGINGFX PROC NEAR + PUSH DS + MOVA DS,SPRINGSEG + MOVA ES,0A000H + MOV SI,0 + MOV DI,SPRINGSOURCEADR + MOV DX,3C4H + MOV AL,2 + MOV CX,23 +SROW: PUSH CX + MOV AH,10001B + MOV CX,10 +SPR: PUSH CX + OUT DX,AX + MOVSB + ROL AH,1 + JC NEWBYTE + DEC DI +NEWBYTE:POP CX + LOOP SPR + INC DI + POP CX + LOOP SROW + POP DS + RETN + ENDP +putspring proc near + mov al,springpos + shr al,1 + sub al,3 + mov realpos,al + mov si,springsourceadr + jge goforit + mov realpos,0 + mov bl,-3 + imul bl + add si,ax +goforit: + + push ds + mov ax,0a000h + mov es,ax + mov al,realpos + mov bl,bpl + mul bl + add ax,springdestadr + mov di,ax + mov dx,3c4h + mov ax,0f02h + out dx,ax + + cmp realpos,0 + jz noclear + sub di,bpl + XOR AX,AX + mov es:[di],ax + mov ax,0302h + out dx,ax + XOR AL,AL + mov es:[di+2],al + mov ax,0f02h + out dx,ax + add di,bpl +noclear: + MOV DX,3CEH + mov Ax,4105h + out dx,ax + mov cx,springh + sub cl,realpos + mov ax,es + mov ds,ax + + push cx di SI +ritaspring: + movsb + movsb + INC SI + add di,bpl-2 + loop ritaspring + pop SI di cx + mov dx,3c4h + mov ax,302h + out dx,ax + add di,2 +ritaspring2: + ADD SI,2 + movsb + add di,bpl-1 + loop ritaspring2 + + mov dx,3ceh + mov ax,4005h + out dx,ax + + pop ds + retn +putspring endp +Set50Hz proc near + mov dx,3d4h + mov ax,0011h + out dx,ax ;unprotect 0-7 in crtc! + + mov ax,07006h + out dx,ax + mov ax,0ba07h ;3e + out dx,ax + mov ax,02510h ;ea + out dx,ax + mov ax,0011h ;let be! + out dx,ax + mov ax,0ff12h ; + out dx,ax + mov ax,0ff15h ;b7 + out dx,ax + mov ax,01116h ;28 + out dx,ax + mov dx,3c4h + mov ax,0100h ; synchronous reset + out dx,ax ; + mov dx,3c2h ; + mov al,0e3h ; use 25 mHz dot clock, 480 lines res. + out dx,al ; + mov dx,3c4h ; + mov ax,0300h ; restart sequencer + out dx,ax ; running again + retn +endp +setsplit PROC NEAR +vga: ;bit 0-8 + MOV DX,3D4H + MOV AL,11H + OUT DX,AL + INC DX + IN AL,DX + AND AL,127 + OUT DX,AL ;OSKRIVSKYDDA + ;bit 0-8 + mov dx,3d4h + mov al,18h + + MOV SPLITLINE,(SH_LO-33)*2 + CMP HI_RES,TRUE + JNE NOTHIRES12 + MOV SPLITLINE,SH_HI-SPLH +NOTHIRES12: + + mov ah,BYTE PTR SPLITLINE + DEC AH + out dx,ax + ;bit 9 + + mov al,BYTE PTR SPLITLINE+1 + and al,1 + shL al,4 + mov ah,al + + mov al,07 + out dx,al + inc dx + in al,dx + dec dx + and al,11101111b + or al,ah + mov ah,al + mov al,7 + out dx,ax + ;bit 10 + mov dx,3d4h + mov al,09 + out dx,al + inc dx + in al,dx + dec dx + and al,10111111b + mov ah,al + mov al,09 + out dx,ax + ;All 10 bits set + ret + +SETSPLIT ENDP +BIOSDATA DB 64 DUP(0) +SET_MCGAB PROC NEAR + SET_ES CS + MOV AX,13H +IF HIRES +FINDMODE: + PUSH AX + INT 10H + MOV AH,1BH + MOV BX,0 + MOV DI,OFFSET CS:BIOSDATA + INT 10H + POP AX + CMP WORD PTR BIOSDATA[27H],256 + JNE NOTTHISMODE +IF RES600 + CMP BYTE PTR BIOSDATA[2AH],5 ;600 LINJER +ELSE + CMP BYTE PTR BIOSDATA[2AH],3 ;480 LINJER +ENDIF + JE MODEFOUND +NOTTHISMODE: + INC AX + JMP FINDMODE +MODEFOUND: +ELSE + INT 10H +ENDIF + MOV BX,SW ;CALC BX (SET LINE LENGTH) + SHR BX,3 + MOV CX,320 ;CALC CX (HORIZ END) + SHR CX,2 + DEC CX + MOV DX,3D4H ;UNLOCK + MOV AL,11H + MOV AH,0 + OUT DX,AX + + MOV DX,3D4H ;SET HORIZ END + MOV AL,01H + MOV AH,CL ;(DET MAN VILL HA GENOM 4) + OUT DX,AX + + MOV DX,3D4H ;SET LINE LENGTH (I MINNESUPPBYGGNADEN) + MOV AL,13H + MOV AH,BL + OUT DX,AX + + MOV DX,3C4H ;SET MCGAB (NO CHAIN FOUR, USE 256KB) + MOV AL,04H + OUT DX,AL + INC DX + IN AL,DX + AND AL,11110110B + OUT DX,AL +if hires +IF RES600 +else + JMP NO_1417 +ENDIF +ENDIF + MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE + MOV AL,14H + OUT DX,AL + INC DX + IN AL,DX + AND AL,10111111B ;10011111B SVARAR MOT KOMMENTAREN + OUT DX,AL + MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE) + MOV AL,17H + MOV AH,11100011B + OUT DX,AX +NO_1417: +if hires +ELSE + MOV DX,3CCH + IN AL,DX + MOV DX,3C2H + OR AL,11000000B + OUT DX,AL ;s„tt 240-linjers sk„rmh”jd +endif + + RETN +SET_MCGAB ENDP +SET240 PROC NEAR + mov dx,03d4h + mov al,11h + out dx,al + inc dx + in al,dx + and al,7fh + out dx,al + dec dx + cld +IF RES600 + mov si,offset xparabl + mov cx,1 +ELSE + MOV SI,OFFSET XPARABL2 + MOV CX,10 +ENDIF +xvploop: + mov ax,cs:[si] + add si,02h + out dx,ax + jmp $+2 + + loop xvploop +IF HIRES + MOV DX,3D4H + MOV AL,9 + OUT DX,AL + INC DX + IN AL,DX + AND AL,01111111B + OUT DX,AL +ENDIF + + RETN + +xparabl db 14h,00h + +xparabl2 db 06h,0Dh ,07h,03eh ,09h,40H+80H,10h,0EAh ,11h,0ch ,12h,0dfh ,14h,00h + db 15h,0eah,016h,06h,17h,0e3h + +SET240 ENDP +READFLIPPIX PROC NEAR ;AX=X ;BX=Y ;CX=FLIP NO ;ES=SEGPTR TO FLIPS + PUSH AX + MOV AX,FLIPSTORLEK + MUL CX + MOV SI,AX ;SI=ADR TO FLIPPER AREA + MOV AX,FLIPLINESIZE + ADD AX,AX + ADD AX,FLIPLINESIZE + MUL BX + ADD SI,AX ;SI=ADR TO CORRECT LINE + POP AX + MOV CL,AL + SHR AX,3 + ADD SI,AX ;SI=ADR TO BYTE CONTAINING FLIPPER PIXEL + AND CX,111B + MOV DL,128 + JCXZ NOROR + SHR DL,CL ;DL=BITMASK IN BYTE +NOROR: + XOR AL,AL + TEST BYTE PTR ES:[SI],DL + JZ NOTB0 + OR AL,1 +NOTB0: + PUSH SI + ADD SI,FLIPLINESIZE + TEST BYTE PTR ES:[SI],DL + POP SI + JZ NOTB1 + OR AL,10B +NOTB1: + PUSH SI + ADD SI,FLIPLINESIZE + ADD SI,FLIPLINESIZE + TEST BYTE PTR ES:[SI],DL + POP SI + JZ NOTB2 + OR AL,100B +NOTB2: + RETN +ENDP + +PUTFLIPPIX PROC NEAR ;DI=SKˇRM OFFSET ;AX,BX=X,Y ;DL=COLOR + PUSH ES + MOV CX,AX + MOV AL,BPL + MUL BL + ADD DI,AX + MOV AX,CX + SHR AX,2 + ADD DI,AX + AND CX,11B + MOV AH,1 + JZ NOSHL + SHL AH,CL +NOSHL: MOV AL,2 + MOV CL,DL + MOV DX,3C4H + OUT DX,AX + SET_ES 0A000H + MOV ES:[DI],CL + POP ES + RETN +ENDP +COPYFLIPBGR PROC NEAR ;SI=ADR TO S¸S ;DI=ADR TO DEST + PUSH ES DS + SET_ES 0A000H + SET_DS ES + MOV DX,3C4H + MOV AX,0F02H + OUT DX,AX + MOV DX,3CEH + MOV AX,4105H + OUT DX,AX + MOV CX,53 +COPPYA: PUSH CX + MOV CX,20 + REP MOVSB + POP CX + ADD DI,BPL-20 + ADD SI,BPL-20 + LOOP COPPYA + MOV AX,4005H + OUT DX,AX + + POP DS ES + RETN +ENDP +CMPFLIPBOX PROC NEAR ;DI=ADR TO NEW FLIPPER BOX ;BP=OFFSET FROM NEW TO OLD + ;DS:SI=ADR TO ADR-AREA + MOV CS:DIFCNT,0 + MOV CS:ORGDI,DI + PUSH DS SI + SET_DS DATAFLIP + SET_ES 0A000H + MOV DX,3C4H + MOV AX,0F02H + OUT DX,AX + MOV DX,3CEH + MOV AX,4105H + OUT DX,AX + MOV AX,4 + MOV CX,53 +CMPR: PUSH CX + MOV CX,16 +CHECK4: + OUT DX,AX + MOV BL,ES:[DI+BP] + CMP BL,ES:[DI] + JE LIKA + SUB DI,CS:ORGDI + MOV DS:[SI+2*9],DI ;2*9 ˇR F™R DE WORD SOM TALAR OM + ADD DI,CS:ORGDI ;HUR MYCKET SOM BEH™VS F™R ETT S¸ STORT HOPP + INC CS:DIFCNT + PUSH DI + CALL LOOK4BLOCK + JC COULDNTFIND + MOV DS:[SI+2*9+2],DI + ADD SI,4 + POP DI + JMP SHORT NEXT4 +COULDNTFIND: + MOV BL,ES:[DI] ;LADDA L¸SKRETSARNA MED DET MAN VILL HA + MOV DI,CS:DIFPTR + MOV DS:[SI+2*9+2],DI + ADD SI,4 + STOSB + MOV CS:DIFPTR,DI + POP DI + JMP SHORT NEXT4 +LIKA: + INC AH + AND AH,11B + JNZ CHECK4 +NEXT4: MOV AH,0 + INC DI + LOOP CHECK4 + ADD DI,BPL-16 + POP CX + LOOP CMPR + POP SI + MOVE DS:[SI],CS:DIFCNT + POP DS + MOV AX,4005H + OUT DX,AX +IF DEBUG + mov ax,cs:difcnt + cmp cs:maxdifcnt,ax + jae dumret + mov cs:maxdifcnt,ax + DEBUGVAL 0,23,CS:maxDIFCNT,"max ANTAL 4-BLOCK SOM SKILLDE: " +ENDIF + RETN +maxdifcnt dw 0 +LOOK4BLOCK: + PUSH AX BX CX SI + MOV AX,4 + OUT DX,AX + MOV BL,ES:[DI] + INC AH + OUT DX,AX + MOV BH,ES:[DI] + INC AH + OUT DX,AX + MOV CL,ES:[DI] + INC AH + OUT DX,AX + MOV CH,ES:[DI] + + move ds,data + MOV SI,GFXADR_FOR_FLIP_ANIM_DATA + move ds,dataflip + + +NEXTBLOCK: + XOR AH,AH + OUT DX,AX + CMP BYTE PTR ES:[SI],BL + JNE NOTTHISBLOCK + INC AH + OUT DX,AX + CMP BYTE PTR ES:[SI],BH + JNE NOTTHISBLOCK + INC AH + OUT DX,AX + CMP BYTE PTR ES:[SI],CL + JNE NOTTHISBLOCK + INC AH + OUT DX,AX + CMP BYTE PTR ES:[SI],CH + JNE NOTTHISBLOCK +THISBLOCK: ;! + MOV DI,SI + CLC +UNIQUE: POP SI CX BX AX + RETN +NOTTHISBLOCK: + INC SI + CMP SI,CS:DIFPTR + JB NEXTBLOCK + STC + JMP UNIQUE +DIFCNT DW ? +DIFPTR DW GFXADR_FOR_FLIP_ANIM_DATA +ORGDI DW ? +ENDP +DELTANIM PROC NEAR ;BX=ADR TO ADR-LISTA ;SI=ADR TO GFXDELTA ;DI=ADR FOR OUTPUT + MOV AX,DI +DODELTA: + MOV DI,[BX] + ADD DI,AX ;CP! KAN G™RAS INNAN + MOV SI,[BX+2] + DB 26H ;ES: + MOVSB + ADD BX,4 + LOOP DODELTA + RETN +ENDP +INIT_SIN: + MOV SI,OFFSET SIN + MOV CX,2048+2048/4 +XCHGSIN:LODSB + MOV AH,AL + LODSB + MOV DS:[SI-2],AX + LOOP XCHGSIN + RETN +BREDDA_MASK: + PUSH DS + ASSUME DS:HIDDEN1 + SET_DS HIDDEN1 + SET_ES DS + MOV DI,OFFSET HIDDA + MOV SI,OFFSET HID1 + CALL BREDDA + SET_DS HIDDEN2 + SET_ES DS + MOV DI,OFFSET HIDDA2 + MOV SI,OFFSET HID2 + CALL BREDDA + ASSUME DS:DATA + POP DS + RETN +BREDDA: + MOV CX,576 +LINE1: PUSH CX + MOV CX,40 + REP MOVSB + ADD DI,2 + POP CX + LOOP LINE1 + RETN +DUMRET: RETN +pelle_2_bw proc near + mov si,offset cs:palle + mov ax,cs + mov es,ax + mov cx,256 + xor bh,bh +bmw: mov bl,es:[si] + mov ax,bx + mov bl,es:[si+1] + add ax,bx + mov bl,es:[si+2] + add ax,bx + mov bl,3 + div bl + mov es:[si],al + mov es:[si+1],al + mov es:[si+2],al + add si,3 + loop bmw + retn +pelle_2_bw endp + +COLOR_2_BW PROC NEAR ;FN: CONV PALETTE AND LIGHT RGB DATA TO BW + ;WARNING! MUST BE RUN AFTER THE MAIN RGB DATA + ;CONVERTER HAS FINISHED ITS JOB. +comment\ + MOV BX,0 ;START WITH COLOR 0 + MOV CX,256 ;256 COLORS +NEXT_COL: + PUSH CX + CALL GET_COLOR_DATA ;DH,CH,CL=COLOR DATA + + MOV DL,DH + NIL DH + MOV AL,CH + NIL AH + ADD DX,AX + MOV AL,CL + ADD AX,DX + MOV CL,3 + DIV CL + MOV CL,AL + + CALL SET_COLOR_DATA_BW ;CL=COLOR DATA + INC BX + POP CX + LOOP NEXT_COL +\ +;*** THAT WAS THE PALETTE. NOW LET'S CONVERT THE RGB DATA *** + + MOVE ES,DS + MOV SI,OFFSET LON1 + MOV CX,NOOFLIGHTS+1 +CONV_NEXT_POST: + PUSH CX + INC SI + LODSB ;AL=RGB DATA LEN + NIL AH + MOV BL,3 + DIV BL + MOV CX,AX +CONV_NEXT_RGB_BLOCK: + PUSH CX + MOV DI,SI + NIL AH + LODSB + MOV DX,AX + LODSB + ADD DX,AX + LODSB + ADD AX,DX + MOV BL,3 + DIV BL + STOSB + STOSB + STOSB + POP CX + LOOP CONV_NEXT_RGB_BLOCK + + POP CX + LOOP CONV_NEXT_POST + + RETN +COLOR_2_BW ENDP +comment\ +GET_COLOR_DATA PROC NEAR ;FN: READ SINGLE COLOR FROM PALETTE + ;INPUT: BX=COLOR NO + ;OUTPUT: DH,CH,CL=COLOR DATA, BX UNTOUCHED + ;WARNING! USING BIOS! + PUSH BX + MOV AL,15H + MOV AH,10H + INT 10H + POP BX + RETN +GET_COLOR_DATA ENDP + +SET_COLOR_DATA_BW PROC NEAR ;FN: WRITE SINGLE COLOR TO PALETTE + ;INPUT: BL=COL NO, CL=BW COLOR DATA + ;OUTPUT: BX UNTOUCHED + MOV DX,3C8H + MOV AL,BL + OUT DX,AL + INC DX + MOV AL,CL + OUT DX,AL ;OUT R + OUT DX,AL ;OUT G + OUT DX,AL ;OUT B + RETN +SET_COLOR_DATA_BW ENDP +\ +FANTASIES ENDP + +addscoreBCD: + ;funkar typ: addbcd [di],[si], addera [di] med [si] + antalsiffror=11 ;(999.999.999.999) + mov al,[di+antalsiffror] + add al,[si+antalsiffror] + aaa + mov [di+antalsiffror],al + pos=1 +rept (antalsiffror) + mov al,[di-pos+antalsiffror] + adc al,[si-pos+antalsiffror] + aaa + mov [di-pos+antalsiffror],al + pos=pos+1 +endm + retn + +DO_UPDATE_LIGHT PROC NEAR ;INPUT:AL=LINUM, AH=[STRUCADR] + CMP AH,TRUE + JE ITS_ON + LIGHTOFF AL + RETN +ITS_ON: LIGHTON AL + RETN +DO_UPDATE_LIGHT ENDP + +DO_UPDATE_PSTRUC PROC NEAR ;INPUT:AL=LINUM, BX=STRUCADR + PUSH BX + MOV BL,AL + NIL BH + MOV AH,TRUE + CMP LIGHTSTATUS[BX],AH + POP BX + JE ITS_ON2 + MOV BYTE PTR [BX],FALSE + RETN +ITS_ON2: + MOV BYTE PTR [BX],TRUE + RETN +DO_UPDATE_PSTRUC ENDP +TECHrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset TECHTS + call do_matrix + retn +TSPrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset TSPTS + call do_matrix + retn +JOHANrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset JOHANTS + call do_matrix + retn +DANIELrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset DANIELTS + call do_matrix + retn +GABRIELrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset GABRIELTS + call do_matrix + retn +CHEATrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset CHEATTS + call do_matrix + retn +TILTrut: + MOV AFTER_CHEAT,TRUE + MOV TILTDISABLED,TRUE + mov bx,offset QUAKETS + call do_matrix + retn +robbanrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset robbanTS + call do_matrix + retn +steinrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset steinTS + call do_matrix + retn +greetrut: + MOV AFTER_CHEAT,TRUE + mov bx,offset GREETTS + call do_matrix + retn + +SNAILRUT: + MOV AFTER_CHEAT,TRUE + MOV BX,OFFSET SnailTS + CALL DO_MATRIX + OR SHIFTKEYS,00000100B + RETN + +BALLSRUT: + MOV AFTER_CHEAT,TRUE + MOV BX,OFFSET BallsTS + CALL DO_MATRIX + MOV NO_OF_BALLS,5 + RETN + +FAIRPLAYRUT: + MOV AFTER_CHEAT,TRUE + MOV BX,OFFSET FairPlayTS + CALL DO_MATRIX + AND SHIFTKEYS,11111011B ;RESET SPEED + MOV TILTDISABLED,FALSE ;RESET TILT + MOV NO_OF_BALLS,3 + RETN + +include print.asm +;INCLUDE BALLCODE.ASM +INCLUDE SCROLL.ASM +INCLUDE ANIMA.ASM +INCLUDE SCORE.ASM + +CODE ENDS + +END FANTASIES + + + + \ No newline at end of file diff --git a/FANTASIE.MAC b/FANTASIE.MAC new file mode 100644 index 0000000..05b7092 --- /dev/null +++ b/FANTASIE.MAC @@ -0,0 +1,443 @@ +ADDBCD MACRO DE,SO + MOV SI,OFFSET SO + MOV DI,OFFSET DE + CALL ADDSCOREBCD + ENDM +DOWNCOUNT MACRO CNT,RUT + LOCAL ARZERO + CMP CNT,0 + JZ ARZERO + DEC CNT + JNZ ARZERO + CALL RUT +ARZERO: ENDM +UPDATE_LIGHT MACRO LINUM,STRUCADR + ;FN: DOES LIGHTON LINUM IF [STRUCADR] IS TRUE, AND OFF IF FALSE. + PUSH BX + MOV AL,LINUM + MOV AH,STRUCADR + CALL DO_UPDATE_LIGHT + POP BX +ENDM + +UPDATE_PSTRUC MACRO STRUCADR,LINUM + ;FN: [STRUCADR]=TRUE IF LINUM IS ON, FALSE IF OFF + PUSH BX + LEA BX,STRUCADR + MOV AL,LINUM + CALL DO_UPDATE_PSTRUC + POP BX +ENDM + +IFZEROBCD MACRO BCDOFFS + LOCAL NOTZZZERO,AGAINZZZERO,ENDZZZERO + ;FN: TEST IF BCD CODED FIGURE = 0 + ;INPUT: OFFSET TO BCD CODED FIGURE + ;OUTPUT: -C- IF NOT ZERO + PUSH AX BX CX + PUSH OFFSET BCDOFFS + POP BX + MOV CX,6 + NIL AX +AGAINZZZERO: + CMP [BX],AX + JNZ NOTZZZERO + ADD BX,2 + LOOP AGAINZZZERO + CLC + JMP ENDZZZERO +NOTZZZERO: + STC +ENDZZZERO: + POP CX BX AX +ENDM +updat_infobar macro +local nofjant + mov nodotcount,0 + cmp fjanttext,true + jne nofjant + pusha + mov bx,OFFSET showplayersTS + call do_matrix + mov fjanttext,false + popa +nofjant: +endm + +updat_score macro +;rensa buffern!! + push es + move es,data + mov ax,1212h ;tja, vadsomhelst som scoren inte kan va!! + mov di,offset oldbuf + mov cx,12/2 + rep stosw + mov es:lastcommas,0 ;komman kommer att komma s„ttas ut :-) + pop es +endm + +startanim macro offerten ;anim som ska animeras, om upptaget s„tts intflag +local noanimallowed +local nointerrupt + mov si,sisa + cmp si,0 + je nointerrupt ;jne noanimallowed + mov intflag,true +nointerrupt: + assume ds:data2 +; lea si,offerten + mov si,offerten + move ds,data2 + mov animptr,0 + mov vblanksbet,1 + move loopes,ds:[si-4] + move ds,data + assume ds:data + mov dotrut,offset animation_routine + mov sisa,si + +noanimallowed: +endm + +startscroll macro offerten ;text som ska skrollas, om upptaget h„nder inget +local noscrollallowed +local nointerrupt + + mov si,sisa + cmp si,0 + je nointerrupt ;jne noanimallowed + mov intflag,true +nointerrupt: +; jne noscrollallowed +; assume ds:data + mov si,offerten +; lea si,offerten + assume ds:data + mov dotrut,offset scrolle + mov sisa,si +noscrollallowed: +endm + + +EFFECT MACRO EFFOFFSET + MOV SI,OFFSET EFFOFFSET + CALL DOEFFECT +ENDM + +IF_ERROR MACRO ERR,ADR + LOCAL NOTERR + CMP AL,ERR + JNE NOTERR + JMP ADR +NOTERR: ENDM + +READREG MACRO PORT,INDEX + MOV DX,PORT + MOV AL,INDEX + OUT DX,AL + INC DX + IN AL,DX + ENDM + +WRITEREG MACRO PORT,INDEX + MOV DX,PORT + MOV AH,AL + MOV AL,INDEX + OUT DX,AX + ENDM + +SAVEGFXREGS MACRO + READREG 3C4H,2 ;BITPLANMASK + MOV AH,AL + READREG 3CEH,0 ;SET/RESET + PUSH AX + READREG 3CEH,1 ;ENABLE SET/RESET + MOV AH,AL + READREG 3CEH,4 ;READ MAP SELECT + PUSH AX + READREG 3CEH,5 ;WRITEMODE + MOV AH,AL + READREG 3CEH,8 ;BITMASK + PUSH AX + MOV DX,3CEH + MOV AX,0FF08H + OUT DX,AX ;BITMASK OUTAD + ENDM + +RESTOREGFXREGS MACRO + POP AX + PUSH AX + MOV AL,AH + WRITEREG 3CEH,5 + POP AX + WRITEREG 3CEH,8 + POP AX + PUSH AX + WRITEREG 3CEH,4 + POP AX + MOV AL,AH + WRITEREG 3CEH,1 + POP AX + PUSH AX + WRITEREG 3CEH,0 + POP AX + MOV AL,AH + WRITEREG 3C4H,2 + ENDM + +WAITSYNCS MACRO NOOFSYNCS + LOCAL DONTDORETN + MOV DX,NOOFSYNCS + MOV BX,NOOFWAITSYNCS+OFFSET WAITLIST + CALL DOWAITSYNCS + JC DONTDORETN + RETN +DONTDORETN: + NOOFWAITSYNCS=NOOFWAITSYNCS+2 +ENDM + +ADDTASK MACRO THETASK + MOV DX,OFFSET THETASK + CALL DOADDTASK +ENDM + +SUICIDE MACRO + JMP DOSUICIDE +ENDM + +LIGHTON MACRO LIGHTNUM + MOV BL,LIGHTNUM + CALL DOLIGHTON +ENDM + +LIGHTOFF MACRO LIGHTNUM + MOV BL,LIGHTNUM + CALL DOLIGHTOFF +ENDM + +LIGHTFLASH MACRO LIGHTNUM,FLASHSPEED + MOV DL,LIGHTNUM + MOV DH,FLASHSPEED + NIL AL + CALL DOLIGHTFLASH +ENDM + +SYNCEDFLASH MACRO LIGHTNUM,FLASHSPEED,SYNCVAR + MOV DL,LIGHTNUM + MOV DH,FLASHSPEED + MOV AL,SYNCVAR + CALL DOLIGHTFLASH +ENDM + +INVERTEDSYNCEDFLASH MACRO LIGHTNUM,FLASHSPEED,SYNCVAR + LOCAL ALOK + MOV DL,LIGHTNUM + MOV DH,FLASHSPEED + MOV AL,SYNCVAR + ADD AL,DH + MOV BL,DH + SHL BL,1 + CMP AL,BL + JB ALOK + SUB AL,BL +ALOK: CALL DOLIGHTFLASH +ENDM + +ENDFLASH MACRO LIGHTNUM + MOV DL,LIGHTNUM + CALL DOENDFLASH +ENDM + +REALON MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES + MOV BL,LIGHTNOO + NIL BH + DEC BX + SHL BX,1 + MOV SI,LONINDEX[BX] + MOVE ES,DS + MOV DI,RGBBUFPTR + ;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR! + MOVSB ;START COL + LODSB ;AL=RGB LEN + STOSB + MOV CL,AL + NIL CH + REP MOVSB ;R,G,B ETC + MOV RGBBUFPTR,DI +ENDM + +LON MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES + MOV BL,LIGHTNOO + CALL DOLON +ENDM + +REALOFF MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES + LOCAL NXTCUL + MOV BL,LIGHTNOO + NIL BH + DEC BX + SHL BX,1 + MOV SI,LONINDEX[BX] + MOVE ES,DS + MOV DI,RGBBUFPTR + ;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR! + MOVSB ;START COL + LODSB ;AL=RGB LEN + STOSB + MOV CL,AL + NIL CH +NXTCUL: LODSB + SHR AL,1 + STOSB + LOOP NXTCUL + MOV RGBBUFPTR,DI +ENDM + +LOFF MACRO LIGHTNOO ;DESTROYS: AX,BX,CX,SI,DI,ES + MOV BL,LIGHTNOO + CALL DOLOFF +ENDM + +ADDSCORE MACRO HOWMUCH + MOV SI,OFFSET HOWMUCH + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + MOV SCORECHANGED,TRUE + UPDAT_INFObar +ENDM + +ADDBONUS MACRO HOWMUCH + LOCAL MB_LOOPEN2,NO_LOOP2 + MOV SI,OFFSET HOWMUCH + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,BONUSMULTIPEL +MB_LOOPEN2: + PUSHA + CALL ADDSCOREBCD + POPA + JCXZ NO_LOOP2 + LOOP MB_LOOPEN2 +NO_LOOP2: +ENDM + +PLAYJINGLE MACRO JINGSTRUC + MOV SI,OFFSET JINGSTRUC + CALL DOPLAYJINGLE +ENDM +PLAYJINGLE_PENETRATE MACRO JINGSTRUC + MOV JINGLEJUMPCNT,1 + + MOV SI,OFFSET JINGSTRUC + CALL DOPLAYJINGLE +ENDM + +JINGLE MACRO JING + MOV BX,JING + MOV AL,JINGLEJUMPCNT + MOV LASTLOOPVAL,AL + MOV AL,16 + INT 66H +ENDM + +SETBALLPOS MACRO XP,YP,XS,YS,PP + MOV SC_X,XP + MOV SC_Y,YP + MOV BALLHIGH,PP + MOV AX,1024 + MUL SC_X + MOV X_POS,AX + MOV X_POS_HI,DX + MOV AX,1024 + MUL SC_Y + MOV Y_POS,AX + MOV Y_POS_HI,DX + MOV Y_HAST,YS + MOV X_HAST,XS +; MOV ROTATION,0 ;cp!? blir fler variationer utan (drop zone bl a) +ENDM + +SETBALLSPEED MACRO XS,YS + MOV Y_HAST,YS + MOV X_HAST,XS + MOV ROTATION,0 +ENDM + +SOUNDEFFECT MACRO EFFECT,volume + mov bh,volume + MOV CL,EFFECT+0 + MOV BL,EFFECT+1 + MOV DL,EFFECT+3 + INC DL + MOV AL,17 + INT 66H +ENDM +SOUNDEFFECT2 MACRO EFFECT,volume + mov Dh,volume + MOV BX,EFFECT + MOV CL,[BX+0] + MOV DL,[BX+3] + MOV BL,[BX+1] + MOV BH,DH + INC DL + MOV AL,17 + INT 66H +ENDM + +PLAYEFF MACRO EFFECT,PERIOD + MOV CL,EFFECT + MOV BL,PERIOD + MOV DL,4 + MOV AL,17 + INT 66H +ENDM + +SET_DS MACRO KLAS + PUSH KLAS + POP DS + ENDM +SET_ES MACRO KLAS + PUSH KLAS + POP ES + ENDM + +SETMARG MACRO COLOR + MOV DX,3DAH + IN AL,DX + MOV DL,0C0H + MOV AL,11H+20H + OUT DX,AL + MOV AL,COLOR + OUT DX,AL + ENDM +OUTA MACRO PORT,INDEX,DATA + MOV DX,PORT + MOV AL,INDEX + MOV AH,DATA + OUT DX,AX + ENDM +SYNC MACRO + LOCAL L1,L2 + MOV DX,3DAH +L1: IN AL,DX + TEST AL,8 + JNZ L1 +L2: IN AL,DX + TEST AL,8 + JZ L2 + ENDM +SETRASTERPOS MACRO RASTER + MOV AX,SW/4 + MUL RASTER + MOV BX,AX + MOV DX,3D4H + MOV AL,0CH + MOV AH,BH + OUT DX,AX + INC AL + MOV AH,BL + OUT DX,AX + ENDM + + + + \ No newline at end of file diff --git a/INTRO.ASM b/INTRO.ASM new file mode 100644 index 0000000..7639c38 --- /dev/null +++ b/INTRO.ASM @@ -0,0 +1,4878 @@ + +;KOLLA P¸ BUPPEN! (ILLEGAL SPARNING?) + +;fADNINGAR GJORDA MED MACROT REPOUTSB, SOM E LITE SL”ARE, TILLR„CKLIGT????? + +CHECK1NUM=4EH ;JˇMT! +finmenu=1 +showall=0 ;visa mig ALLT! (Snuskigt???) +NOOFWORDS=64 ;OBS S™K SLUMPEN! +demover=0 +keyhandler=65h +NOFILLIT=0 +bpl=80 +IF DEMOVER +trim=67000/16 ;i paragrafer +ELSE +trim=+67000/16 ;i paragrafer +ENDIF +pm_test=0 +covtime=28 +fl1storlek=110 +THETRIM=22 +checktrim=-223+14h+20h +checktrim2=24-52+24-138-3+24-61+24-96+24 +firstpictime=1 +t21sttime=349-28-THETRIM+3 +vikingtime=658-17-THETRIM+1 +fld_logotime=980-80+9+1-THETRIM+3 +presenttime=0 +fantasietime=50*30 + +infotime=0 ;60*25 + +GURKA=42 + +LINJEN=8 +charwith=18 +charheight=14 +mellanrum=4 +FONTW=18 ;"BOKSTAV-MED" +sdrsizze=35 ;ca sizen p† en sdr!!! +WORDLEN=8 ;EVEN NUMBER!!!! +mod1size=252868 +pos1=3 ;mod1size/65536 +pos2=56260 ;mod1size-pos1*65536 +nosnd_needed=530-sdrsizze ;ska ha ca 2 k mer (start!!) +needed=573-sdrsizze ;ska ha ca 2 k mer (start!!) +lsize=300 ;obs!!!!! KOM I H¸G ¸ KOLLA!!! +basememreq_cp=(needed-lsize) ;free mem required (size needed-size of intro+size of start.exe) +nosoundmemreq_cp=(nosnd_needed-lsize) ;if no music, or XMS detected +nosoundmemreq=basememreq_cp/16*1000+trim-38000/16 ;nosoundmemreq_cp/16*1000+trim +basememreq=basememreq_cp/16*1000+trim +DIST=10 +musikkaos=0 + +menutime=9 +texttime=7 + +intpic2pos=150 +t21stpos=0 +vikingpos=240 +vikingadr=320/4*247 +fld_logopos=246*2 +nofcolors=64 + +TEXTCOLOR=60 +clear_boxen macro vart_start,bredden,hojden +local lajban_laban_o_lajla_samt_det_lilla_spoket_laban + move es,0a000h + mov al,es:[128/8+3] ;d„r „r det svart min v„n!! + mov cx,hojden + mov di,vart_start +lajban_laban_o_lajla_samt_det_lilla_spoket_laban: + push cx + mov cx,bredden + rep stosb + add di,80 + sub di,bredden + pop cx + loop lajban_laban_o_lajla_samt_det_lilla_spoket_laban +endm + +repoutsb macro + local lerum +lerum: + outsb + jmp $+2 + loop lerum ;n”dv„ndigt l†ngsam!! +endm +STRLEN MACRO DEST,TEXT ;DOES NOT INCLUDE ,0 + LOCAL NXTCH,NOMRCC,TEMPCNT + PUSHA + MOV CS:TEMPCNT,0 + MOV SI,OFFSET TEXT + NIL BX +NXTCH: LODSB + OR AL,AL + JZ NOMRCC + INC BX + JMP NXTCH +TEMPCNT DB ? +NOMRCC: MOV CS:TEMPCNT,BL + POPA + MOV DEST,CS:[OFFSET TEMPCNT] +ENDM + + +;SetWBPL Set write BPL mask +SetWBPL macro BPLmask + mov dx,3c4h + mov ah,BPLmask + mov al,2 + out dx,ax + endm +;-) +;SetRBPL Set read BPL# (remember: just ONE at the time) +SetRBPL macro BPLnr + mov dx,3ceh + mov ah,BPLnr + mov al,4 + out dx,ax + endm + + + +STRCOPY MACRO DEST,SOURCE + PUSHA + PUSH ES + PUSH OFFSET DEST + PUSH OFFSET SOURCE + POP SI + POP DI + MOVE ES,DS + STRLEN CL,SI + NIL CH + INC CX + REP MOVSB + POP ES + POPA +ENDM + +STRCOPY2 MACRO DEST,SOURCE ;DOES NOT COPY ,0 + PUSHA + PUSH ES + PUSH OFFSET DEST + PUSH OFFSET SOURCE + POP SI + POP DI + MOVE ES,DS + STRLEN CL,SI + NIL CH + REP MOVSB + POP ES + POPA +ENDM + + + + +SIMINT MACRO INTNO + MOVE ES,0 + PUSHF + CALL DWORD PTR ES:[INTNO*4] +ENDM +savestack macro + move cs:s_s,ss + mov cs:s_p,sp +endm +restorestack macro + move ss,cs:s_s + mov sp,cs:s_p +endm + +borland macro + push es di cx + mov ax,0700h + mov di,0 + move es,0b800h + mov cx,160*25/2 + rep stosw + pop cx di es +endm + +HUGO MACRO NEBUL + LOCAL STRUMPA,FERTICH,SCHLUKA,DUNK + MOV DI,CS:PEKARN + MOV SI,OFFSET NEBUL + MOVE DS,DATA + MOVE ES,0B800H +STRUMPA: + LODSB + CMP AL,'$' + JE FERTICH + CMP AL,13 + JE SCHLUKA + CMP AL,10 + JE DUNK + STOSB + INC DI + JMP STRUMPA +SCHLUKA: + MOV AX,DI + NIL DX + MOV CX,160 + DIV CX + mov bp,ax + MUL CX + mov di,ax + + MOV Dx,Bp + mov dh,dl + add dh,2 + MOV DL,0 + XOR BX,BX + MOV AH,02H + INT 10H + + JMP STRUMPA +DUNK: + ADD DI,160 + JMP STRUMPA +FERTICH: + MOV CS:PEKARN,DI +ENDM +SPYMESS MACRO MESSAGE + LOCAL MESS,GNU,FERTICH,STRUMPA,schluka,dunk + JMP GNU +MESS DB MESSAGE,'$' +GNU: PUSHA + PUSH DS + MOV AX,CS + MOV DS,AX + MOV Dx,offset cs:mess + mov ax,900h + int 21h + pop ds + popa + ENDM +comment\ +SPYMESS MACRO MESSAGE + LOCAL MESS,GNU,FERTICH,STRUMPA,schluka,dunk + JMP GNU +MESS DB MESSAGE,'$' +GNU: PUSHA + PUSH DS ES + MOV AX,CS + MOV DS,AX + MOV DI,CS:PEKARN + MOV SI,OFFSET CS:MESS + MOVE ES,0B800H +STRUMPA: + LODSB + CMP AL,'$' + JE FERTICH + CMP AL,13 + JE SCHLUKA + CMP AL,10 + JE DUNK + STOSB + INC DI + JMP STRUMPA +SCHLUKA: + MOV AX,DI + NIL DX + MOV CX,160 + DIV CX + mov bp,ax + MUL CX + mov di,ax + + MOV Dx,Bp + mov dh,dl + add dh,2 + MOV DL,0 + XOR BX,BX + MOV AH,02H + INT 10H + + JMP STRUMPA +DUNK: + ADD DI,160 + JMP STRUMPA +FERTICH: + MOV CS:PEKARN,DI + POP ES DS + POPA + ENDM +\ +SetLores macro + mov dx,3d4h + mov ax,0c009h + out dx,ax + endm + +SetHires macro + mov dx,3d4h + mov ax,4009h + out dx,ax + endm +SetVga macro + ;sequencer! + mov dx,3c4h ;mcga + mov ax,0604h ;0e04h + out dx,ax ;chain 4 + ;CRTC! + mov dx,3d4h + mov ax,0c11h + out dx,ax ;unprotect 0-7 in crtc! + mov ax,5404h + out dx,ax ;Start Hor Retrc. + mov ax,0b06h + out dx,ax + mov ax,3e07h + out dx,ax + mov ax,4009h + out dx,ax + mov ax,590fh + out dx,ax + mov ax,0ea10h + out dx,ax + mov ax,8c11h + out dx,ax + mov ax,0df12h + out dx,ax + mov ax,0014h + out dx,ax + mov ax,0e715h + out dx,ax + mov ax,0416h + out dx,ax + mov ax,0e317h + out dx,ax + + ;Grapic controler + mov dx,3ceh + mov ax,0005h ;4005h + out dx,ax ;mode reg. + ;attribute + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,20h+10h + out dx,al + mov al,25h ;61h + out dx,al ; mode contr +endm + +cleargfx macro +LOCAL TRULLE + mov dx,3c4h + mov ax,0f02h + out dx,ax + mova es,0a000h + mov cx,32760 ;vem vet, det kanske blir exception om den ”verskrider + xor ax,ax + mov di,ax +TRULLE: NOP + stosw + NOP + LOOP TRULLE ;TRULLSON ASS¸! +endm + +movpal macro sseg,source,dseg,dest + mov si,source + mov di,dest + push ds + move ds,sseg + move es,dseg + mov cx,16*3 + rep movsb + pop ds +endm + +checkquit macro +; in al,60h +; cmp al,cs:firstscan +; mov ax,1 +; int 16h +; cmp al,01 +; je choosern_init +if demover + cmp cs:laddaden,true + je space2 +ELSE + cmp cs:laddaden,true + je skip_the_intro_bra_att_hoppa_till_da +endif +endm +FILLMUSICBUF MACRO + LOCAL FILLA +PUSHA +PUSH ES DS + MOV CX,100 +FILLA: PUSH CX + MOVE ES,0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] + POP CX + LOOP FILLA +POP DS ES +POPA +ENDM + +.286p +jumps +wait_sync macro times +local lo,ko,sko + + mov cx,times + +lo: push cx + synca +IF NOFILLIT + MOVE ES,0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + pop cx +; in al,60h +; cmp al,cs:firstscan + mov ax,1 + move es,0 + pushf + call dword ptr es:[keyhandler*4] +if demover + cmp al,57 + jne sko + mov cs:laddaden,true +sko: +endif + cmp al,57 + je skip_the_intro_bra_att_hoppa_till_da +; je ko + loop lo +ko: +endm + +wait_music macro times +local lo,ko,sko,TRO + +lo: + MOVE ES,0 + MOV AX,22 + PUSHF + CALL DWORD PTR ES:[66H*4] + cmp ax,times + ja ko +PUSH AX +IF NOFILLIT + MOVE ES,0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + mov ax,1 + move es,0 + pushf + call dword ptr es:[keyhandler*4] +POP BP +if demover + CMP AL,01 + JE SPYAN_STEWART + cmp al,57 + jne sko + mov cs:laddaden,true + JMP KO +ELSE + cmp al,57 + jne sko + mov cs:laddaden,true + JMP KO +endif + JMP TRO +sko: + MOV AL,3 +TRO: + cmp al,1 + je SKO + + cmp al,57 + jne lo +if demover +; mov cs:laddaden,true + jmp lo ;space2 +else + jmp LO ;skip_the_intro_bra_att_hoppa_till_da +endif +ko: +endm + +wait_sync_spec macro times +local lo,ko,sko + + mov cx,times +lo: push cx + synca +IF NOFILLIT + MOVE ES,0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + pop cx +; in al,60h +; cmp al,cs:firstscan + mov ax,1 + move es,0 + pushf + call dword ptr es:[keyhandler*4] +if demover + cmp al,57 + jne sko + mov cs:laddaden,true +sko: +endif + cmp al,57 +; je skip_the_intro_bra_att_hoppa_till_da + je ko + loop lo +ko: +endm +wait_sync_spec2 macro times +local lo,ko,sko + + mov cx,times +lo: push cx + synca +IF NOFILLIT + MOVE ES,0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + pop cx +; in al,60h +; cmp al,cs:firstscan + mov ax,1 + move es,0 + pushf + call dword ptr es:[keyhandler*4] +if demover + cmp al,57 + jne sko + mov cs:laddaden,true +sko: +endif +; cmp al,57 +; je skip_the_intro_bra_att_hoppa_till_da +; je ko + loop lo +ko: +endm + +wait_sync2 macro times +local lo,ko,moooo + + mov cx,times + mov cs:menunext,false + +lo: push cx + synca +IF NOFILLIT + MOVE ES,0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + pop cx + + mov ax,1 + move es,0 + pushf + call dword ptr es:[keyhandler*4] + + cmp al,01 + je moooo + cmp al,3bh ;f1 + je f1t + cmp al,3ch ;f2 + je f2t +if finmenu + cmp al,3dh ;f3 + je f3t + cmp al,3eh ;f4 + je f4t +endif + cmp al,3fh ;f5 + je f5t +if finmenu + cmp al,28 ;enter + je moooo +else + cmp al,28 ;enter + je ko +endif + cmp al,57 + je moooo + loop lo + jmp moooo +f5t: + mov cs:menunext,true + MOV CS:INFO_TEXT,OFFSET CS:OPTIONS_INFO + jmp moooo +ko: + xor banpek,10b + MOV TEXTLISTA[0],OFFSET HITEXT1 + JZ NEDU2 + MOV TEXTLISTA[0],OFFSET HITEXT2 +NEDU2: +moooo: +endm + +fade macro hast,pal1seg,pal1adr,pal2seg,pal2adr + local fada + mov cs:steg,hast + mov cL,cs:steg +; INC CL ;F™R ATT UNDVIKA BAJSET!!! + XOR CH,CH +fada: move ds,data + mov SI,pal2adr + MOV DI,pal1adr + MOVA ES,pal1seg + push ds + mova ds,pal2seg + CALL MAKE_PAL + pop ds + synca + CALL SET_PAL + PUSH ES + MOVE ES,0 +IF NOFILLIT + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + POP ES + LOOP FADA +endm +fadeM macro hast,pal1seg,pal1adr,pal2seg,pal2adr + local fada,slut,nosetv,oldvol + mov cs:steg,hast + mov cL,cs:steg + XOR CH,CH +fada: move ds,data + mov SI,pal2adr + MOV DI,pal1adr + MOVA ES,pal1seg + push ds + mova ds,pal2seg + CALL MAKE_PAL + pop ds + synca + CALL SET_PAL + mov ax,cx + xchg al,ah + xor dx,dx + mov bx,hast + div bx + push cx + mov cx,ax + and ax,-16 + cmp ax,cs:oldvol + je nosetV + mov cs:oldvol,ax + mov al,6 + int 66h +nosetV: pop cx + PUSH ES + MOVE ES,0 +IF NOFILLIT + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + POP ES + LOOP FADA + jmp slut +oldvol dw 0 +slut: +endm + +;*************** +fade1 macro val,steg + + mov al,val + mov bl,steg ;+1 + sub bl,cl + mul bl + mov bl,steg + div bl + mov dx,3c9h + out dx,al +endm +fade1B macro val,steg + + mov al,val + mov bl,steg-1 + sub bl,cl + mul bl + mov bl,steg + div bl + mov dx,3c9h + out dx,al +endm + +fade3 macro sped + local gnuor + mov cx,sped +gnuor: + mov dx,3c8h + mov al,1 + out dx,al + + fade1 52,sped + fade1 52,sped + fade1 62,sped + mov dx,3c8h + mov al,12 + out dx,al + fade1 37,sped + fade1 37,sped + fade1 45,sped + mov dx,3c8h + mov al,14 + out dx,al + fade1 17,sped + fade1 17,sped + fade1 25,sped + synca + + loop gnuor +endm +fade3b macro sped + local gnuor + mov cx,0 +gnuor: + mov dx,3c8h + mov al,1 + out dx,al + + fade1B 52,sped + fade1B 52,sped + fade1B 62,sped + mov dx,3c8h + mov al,12 + out dx,al + fade1B 37,sped + fade1B 37,sped + fade1B 45,sped + mov dx,3c8h + mov al,14 + out dx,al + fade1B 17,sped + fade1B 17,sped + fade1B 25,sped + synca + inc cx + cmp cx,sped + jne gnuor +endm +;************ +fade256 macro hast,pal1seg,pal1adr,pal2seg,pal2adr + local fada + mov cs:steg,hast + mov cL,cs:steg + XOR CH,CH +fada: move ds,data + mov SI,pal2adr + MOV DI,pal1adr + MOVA ES,pal1seg + push ds + mova ds,pal2seg + CALL MAKE_PAL256 + pop ds + synca + CALL SET_PAL256 + PUSH ES +IF NOFILLIT + MOVE ES,0 + MOV AX,8 + PUSHF + CALL DWORD PTR ES:[66H*4] +ENDIF + POP ES + + + LOOP FADA +endm +movepic macro nisse,goran + local taljan + mov ax,0a000h + mov es,ax + mov ds,ax + mov cx,95 ;Bildh”jd + mov di,nisse + mov si,goran +taljan: push cx + mov cx,55 ;Linjebredd + rep movsb + add si,80-55 + add di,80-55 + pop cx + loop taljan + move ds,data +endm +SLACKA MACRO PLATS + MOV CS:FJUMPENS_BROR,PLATS +ENDM +slack macro fjumpen + LOCAL NOTHING_NEW + MOV CX,fjumpen ;CALC CX (HORIZ END) + CMP CX,CS:FJUMPENS_FARSA + JE NOTHING_NEW + SHR CX,2 + DEC CX + MOV DX,3D4H ;UNLOCK + MOV AL,11H + MOV AH,0 + OUT DX,AX + MOV DX,3D4H ;SET HORIZ END + MOV AL,01H + MOV AH,CL ;(DET MAN VILL HA GENOM 4) + OUT DX,AX +NOTHING_NEW: +endm +setscr macro pos + mov cx,pos + mov dx,3d4h + mov al,0dh + mov ah,cl + out dx,ax + mov ah,ch + dec al + out dx,ax +endm +stacken segment para stack 'stack' + dw 1024 dup (0) +stacken ends +;********************************************* D A T A S E G M E N T ******** +data segment para public 'data' +pelle1 db 3*256 dup (0) +pelle2 db 3*256 dup (0) +SKIT DB 'NILSBEDRUP ' +pellevin1 dw offset pelle1 +pellevin2 dw offset pelle2 +buppen_filen dw ? +chksum dw ? +rekord_tabell DB 0,1,11 DUP(0),0,8,1 DUP(0),'QWERTYUIOP',0,0,13,0,'ASDFGHJKL',0,0,0,0,0,'ZXCVBNM',6 dup (0),' ',(128-50-7) dup (0),20 dup (0) +PM_MESS DB 13,10,13,10,'WARNING: Protected mode has been detected!',13,10,13,10 +db 'This is probably because you have a memory manager such as',13,10 +db 'EMM386 or QEMM installed. Please uninstall this memory manager driver!',13,10 +db 'Refer to your manual for further information.',13,10 +db 13,10,'Press ESCape to quit or P to proceed...$' +comment\ +notenoughmess db 'Pinball Fantasies requires at least 555 kbytes (568000) free base memory',13,10 + db "or 520 kbytes (530000) for 'Gravis UltraSound' or 'nosound' drivers.",13,10 + db 'Please look in Your manual how to free up DOS memory!',13,10,'$',0 +\ +notenoughmess label byte +db "You do not have enough free memory to run Pinball Fantasies.",13,10 +db "You need to have at least 530K (542700 bytes) free to run ",13,10 +db "the game if you are using a Gravis Ultrasound sound card or ",13,10 +db "are planning to run the game with no sound at all.",13,10,13,10 + + db "If you want to have sound in the game, you will need at",13,10 + db "least 560K (573440 bytes) free.",13,10,13,10 + + db "Please type CHKDSK or MEM (DOS 4 or higher) at the dos prompt",13,10 + db "to display free memory.",13,10,13,10 + + db 'Please refer to the "troubleshooting" section in your',13,10 + db "instruction manual for guidance on how to free your ",13,10 + db "computers memory.",13,10,0,"$" + +wordstruc struc + THELINE DB ? + CPVAL DW ? + THETEXT DW WORDLEN/2 DUP (?) + THEPAGE DB ? + CHKSUMA DB ? + THEWORD DB ? +ends +extrn ordlista:byte +THEPOST DW ? +lbredd=400 +lhojd=40 +loggasize=lbredd/2*lhojd +savearea1 db loggasize dup (?) +savearea2 db loggasize dup (?) +hi_score_file1 db 'table1.hi',0 +hi_score_file2 db 'table2.hi',0 +hi_score_file3 db 'table3.hi',0 +hi_score_file4 db 'table4.hi',0 +HI_SCORE_LIST LABEL BYTE + db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'TSP',0 ;FEST-LANDET + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ICE',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ANY',0 + db 0,0,0, 0,0,5, 0,0,0, 0,0,0,'J L',0 +HI_SCORE_LIST2 LABEL BYTE + db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 ;HASTIGHETSJˇVLARNA + db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'J L',0 + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ICE',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ANY',0 +HI_SCORE_LIST3 LABEL BYTE + db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 ;MILJARDVISNINGEN + db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'ANY',0 + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'J L',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ICE',0 +HI_SCORE_LIST4 LABEL BYTE + db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 ;STENAR&BEN + db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'ICE',0 + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ANY',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'J L',0 + +;HˇR! +MENU_ITEMS LABEL WORD + DW L_BALLS + DW L_ANGLE + DW L_SCROLLING + DW L_IM + DW L_RESOLUTION + DW L_MODE + DW L_SAVE +LAST_ITEM LABEL WORD +HIGH_MENU=(LAST_ITEM-MENU_ITEMS)/2 + +MENU_ITEMS_UPDATES LABEL WORD + DW L_BALLS_UPDATE + DW L_ANGLE_UPDATE + DW L_SCROLLING_UPDATE + DW L_IM_UPDATE + DW L_RESOLUTION_UPDATE + DW L_MODE_UPDATE + DW DUMRET + +TOGGLAR_STRUCEN STRUC + S_BALLS DB ? + S_ANGLE DB ? + S_SCROLLING DB ? + S_IM DB ? + S_RESOLUTION DB ? + S_MODE DB ? +ENDS +TOGGLAREN DB SIZE TOGGLAR_STRUCEN DUP (0) +TOGGLAR_NAME DB 'PINBALL.CFG',0 + +TEXTEN1 DB 'PLEASE ENTER WORD ',0,50 DUP (0) +TEXTEN2 DB ' ON',0 +TEXTEN3 DB 'LINE ',0,20 DUP(0) +TEXTEN4 DB ' AT PAGE ',0 +TEXTEN5 DB '.',0 +TEMPTEXT DB 10 DUP(0) +reserv db 100 dup(0) +rensa_input db 20 dup (' '),0 +ALIGN 16 +HEXTBL DB "0123456789ABCDEF" + + DB 16 DUP (1) + DB " HI HACKER! PLEASE DON'T CRACK THIS PROGRAM! IT WAS MADE BY" + DB " THE DEMO GROUP TSP. WE NEED THE MONEY TO BE ABLE TO KEEP ON" + DB " CODING GAMES FOR THE PC! THIS PROGRAM ISN'T HARD TO CRACK, SO" + DB " MAKE A DEMO INSTEAD TO PROVE YOUR SKILLS... IF YOU CRACK IT" + DB " WE WILL HATE YOU 4EVER! HAVE A NICE DAY! :-) " + DB 16 DUP (2) + +TEXTLISTA LABEL WORD + DW HITEXT1 ;OBS!!! Higscore vill ligga h„r +;GNU + dw -1 + dw -1 + DW TEXT1 + DW TEXT2 + dw -1 + dw -1 + DW TEXT3 + DW TEXT4 + DW -1 + DW -1 + DW 0 + DW 0 + DW 0 + DW 0 + +comment\ +betatext db 0 + DB 'THIS IS A BETA VERSION',0 + DB 0 + DB 'DO NOT SPREAD',0 + DB 0 + DB 'ONLY FOR',0 + DB 'PETER ENGSTRAND',0 + DB 0 + DB 'HAVE FUN - WE DONT',0 + DB 0 + DB 'PS CHANGE TABLES',0 + DB 'WITH ENTER DS',0 +\ +START_KEK LABEL BYTE ;CHECKSUMMA!!!!! ;-( +text1 db 'PINBALL FANTASIES PC',0 + db 'BY FRONTLINE DESIGN',0 + DB 0 + db 'PROGRAMMING BY:',0 + DB 'DANIEL FORSGREN',0 + DB 'GABRIEL BERGQVIST',0 + db 'JOHAN LUNDMARK',0 + DB 0 +STOP_KEK LABEL BYTE + DB 'PRODUCED BY:',0 + DB 'BARRY SIMPSON',0 + DB 'AND',0 + DB 'STEWART GILRAY',0 +TEXT2 DB 0 + DB 0 + DB 'ORIGINAL AMIGA GAME BY',0 + DB 'DIGITAL ILLUSIONS',0 + DB 0 + DB 'ANDREAS AXELSSON',0 + DB 'MARKUS NYSTROM',0 + DB 'OLOF GUSTAVSSON',0 + DB 'ULF MANDORFF',0 + DB 'FREDRIK LILIEGREN',0 + DB 0 + DB 0 +TEXT4 DB 0 + DB 0 + DB 0 + DB 0 + DB '-WINNERS-',0 + DB '-DO NOT USE-',0 + DB '-DRUGS-',0 + DB 0 + DB 0 + DB 0 + DB 0 + DB 0 +TEXT3 DB 'SELECTOR INSTRUCTIONS',0 + DB 0 + DB 'F1 - PARTYLAND ',0 + DB 'F2 - SPEED DEVILS ',0 + DB 'F3 - BILLION DOLLAR',0 + DB 'F4 - STONES N BONES',0 + DB 'F5 - OPTIONS MENU ',0 + DB 0 + DB 'SPACE TO SKIP',0 + DB 'ESC TO QUIT',0 + DB 0 + DB 0 + +;HˇR! +TRE DB '3',0 +FEM DB '5',0 +NORMAL DB 'NORMAL',0 +ZHIGH DB 'HIGH ',0 +ZLOW DB 'LOW ',0 + +FIRM DB 'HARD ',0 +SMOOTH DB 'MEDIUM',0 +SLIME DB 'SOFT ',0 + +ZARINEN DW FIRM + DW SMOOTH + DW SLIME + +ON DB 'ON ',0 +OFF DB 'OFF',0 +ZCOLOR DB 'COLOR',0 +MONO DB 'MONO ',0 + +PIL DB '>',0 +MENUtext DB 'OPTIONS MENU',0 + DB 0 +FIRSTCHOICE LABEL BYTE +T_BALLS DB ' BALLS: ' ;3, 5 +T_ANGLE DB ' ANGLE: ' ;NORMAL, HIGH +T_SCROLLING DB ' SCROLLING: ' ;BRUTAL, FIRM, *SMOOTH*, SLIMY +T_IM DB ' INGAME MUSIC: ' ;ON, OFF +T_RESOLUTION DB ' RESOLUTION: ' ;NORMAL, HIGH +T_MODE DB ' COLOR MODE: ' ;COLOR, MONOCHROME + DB 0 + DB ' SAVE AND EXIT ' + DB 0 + DB 0 + DB 0 + DB 0 + DB 0 + +HITEXT1 LABEL BYTE +SPCS LABEL BYTE + DB ' ' + DB ' PARTY LAND ' + DB ' 1. - ' + DB ' 2. - ' + DB ' 3. - ' + DB ' 4. - ' + DB ' ' + DB ' SPEED DEVILS ' + DB ' 1. - ' + DB ' 2. - ' + DB ' 3. - ' + DB ' 4. - ' +HITEXT2 DB ' ' + DB ' BILLION DOLLAR ' + DB ' 1. - ' + DB ' 2. - ' + DB ' 3. - ' + DB ' 4. - ' + DB ' ' + DB ' STONES N BONES ' + DB ' 1. - ' + DB ' 2. - ' + DB ' 3. - ' + DB ' 4. - ' + + DB " HI HACKER! READ THE NOTE ABOVE! " + +PROTTXT DB 0,0,'MANUAL PROTECTION',0,0 +WHATS_HAPPENING DB 24*2 DUP (' '),0 ,0,0,0 + DB 24*2 DUP(0) + +WORDTXT DB LINJEN DUP(0) +AFTER_PROT DB 24 DUP (' '),5 DUP (0) + DB 15 DUP (0) +soundcfg db 'Sound.Cfg',0,'$' +drv db '\mAsM\ds20\rEsIpLaY\rEsIpLaY.eXe',13 dup (0),'$' +parms db 20 dup (0) +intromod db 'Intro.Mod',0,'$' +if demover +intromod2 db 'Intro.Mod',0,'$' +else +intromod2 db 'Mod2.Mod',0,'$' +endif + +vikingpaloff dw ? +t21stpaloff dw ? +T21ST_REAL_PAL DW ? +VIKING_REAL_PAL DW ? +intpic2paloff dw ? +demotext2paloff dw ? +fld_logopaloff dw ? +presentpaloff dw ? +blackpal db 256*3 dup(0) +whitepal db 256*3 dup (63) +blackpaloff=offset blackpal +whitepaloff=offset whitepal +egapal db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0 +banpek dw 0 +if demover +VARTABELL DW 0+20 +tabletabell dw new_cov2seg +else +vartabell dw 0,240,240+14*2,240+14*4,240+95+14*4,240+95*2+14*4,240+95*3+14*4 +tabletabell dw table0 + dw fontseg + dw fontseg2 + dw table1 + dw table2 + dw table3 + dw table4 +endif +tablepaloff dw ?,?,?,?,?,?,? +nuvarande db 3*64 dup (0) +RASTATAB label byte +rastas=8 ;7 +Cnt =-(rastas-1)*(rastas-1) +rept 95/rastas+rastas+1 ;trunk fel + gnu=cnt + rept rastas + if (gnu GT -1) + if (gnu LT 95) + db gnu + endif + endif + gnu=gnu+rastas-1 + endm + db -1 +cnt=cnt+rastas +endm + +offret=0 +fontlist label word +rept '-' + dw -1 ;240*80+80*14+4*19 +endm + DW 38*4+80*13+240*80 ;- + DW 36*4+80*13+240*80 ;. + dw 240*80+80*14+4*19 ;\ (=SPACE) +rept 10 ;the siffers!! + dw offret+240*80 + offret=offret+4 +endm + DW 37*4+80*13+240*80 ;: + +rept 'A'-'0'-10-1 ;the mellan bokstefhers!! + dw 39*4+80*13+240*80 +endm +rept 10 ;the bokstefhers!! + dw offret+240*80 + offret=offret+4 +endm + +rept 16 + dw offret+80*13+240*80 + offret=offret+4 +endm +rept 255-'Z' + dw -1 ;240*80+80*14+4*19 +endm +data ends + +IF DEMOVER +fontseg segment para public 'data' +font DB ? +ends + +fontseg2 segment para public 'data' +font2 DB ? +ends +ELSE +fontseg segment para public 'data' +extrn font:byte +ends + +fontseg2 segment para public 'data' +extrn font2:byte +ends +ENDIF + + +intpic2seg segment para public 'data' +extrn intpic2:byte +ends + +presentseg segment para public 'data' +extrn present:byte +ends + + + +fl1seg segment para public 'data' +extrn fl1:byte +ends + +fl2seg segment para public 'data' +extrn fl2:byte +ends + +if demover +new_cov2seg segment para public 'data' +extrn new_cov2:byte +ends + +table0 segment para public 'data' +table_0 db ? +ends + +table1 segment para public 'data' +table_1 db ? +ends + +table2 segment para public 'data' +table_2 db ? +ends + +table3 segment para public 'data' +table_3 db ? +ends + +table4 segment para public 'data' +table_4 db ? +ends + + +else +table0 segment para public 'data' +extrn table_0:byte +ends + +table1 segment para public 'data' +extrn table_1:byte +ends + +table2 segment para public 'data' +extrn table_2:byte +ends + +table3 segment para public 'data' +extrn table_3:byte +ends + +table4 segment para public 'data' +extrn table_4:byte +ends + +endif + +IF DEMOVER +hsl1seg segment para public 'data' +hsl1 DB ? +ends + +hsl2seg segment para public 'data' +hsl2 DB ? +ends +ELSE +hsl1seg segment para public 'data' +extrn hsl1:byte +ends + +hsl2seg segment para public 'data' +extrn hsl2:byte +ends +ENDIF +synca macro + local venta + push es DS + mov ax,40h + mov es,ax + MOV AX,0 + MOV DS,AX +venta: + MOV AX,8 + PUSHF + CALL DWORD PTR DS:[66H*4] + inc cs:slumpen + cmp byte ptr es:[76h],0 + jz venta + mov byte ptr es:[76h],0 + pop DS es +endm + +include c:\source\macros1.asm +include fantasie.mac +include c:\source\macros3.asm + +code segment para public 'code' +extrn unpklbm16:near +extrn unpklbm:near +firstscan db -1 +start: + +assume cs:code +assume ds:data +PUSHA +PUSH DS +;============================================================================== + + PUSHA + PUSH DS ES + + CALL LOAD_TOGGLAREN ;OPTIONS SCREEN SETUP + JNC TOGGLAREN_READY + MOV TOGGLAREN.S_SCROLLING,1 +TOGGLAREN_READY: + + MOV AH,2CH ;GET TIME + INT 21H + MOV CS:SLUMPEN,DX + + POP ES DS + POPA + + mov ax,0 + int keyhandler ;kolla om f”rsta g†ngen . . + cmp ah,false + je notfirstime_SO_NO_PMTEST +;****************************************************************************** +;* Test protected mode * +;****************************************************************************** +if pm_test + SMSW AX + TEST AX,1 + JZ NO_PROTECTED_MODE + JMP _PM +else + jmp NO_PROTECTED_MODE +endif +bannumber db 1 +_PM: push ds +; debugmess 0,0,'pm detected' + pusha + push es ds + BorLand + Hugo PM_Mess + pop ds es + popa + pop ds +;***** check keyb +IN_OCH_UT_IGEN: + IN AL,60H + CMP AL,19H + je no_protected_mode + CMP AL,01 + JNE IN_OCH_UT_IGEN +;************** + MOV AX,4C01H + INT 21H +NO_PROTECTED_MODE: +notfirstime_SO_NO_PMTEST: +;============================================================================== +POP DS +POPA +;****************************************************************************** +; debugmess 0,0,'loading intro' + + + move es,ds + move ds,DATA + mov bx,es + mov cs:minneskillen,bx + + mov ax,12h ;anders + int 10h + call set_mcgab + call set240 + move es,ds + move ds,data + call set_pal ;sl„ck paletten + CALL UNPKPICS + mov bx,cs:minneskillen + + mov es,bx + neg bx +if demover ;ingen ”verr„nning!! + add bx,qsune +else + add bx,dumpningsplats +endif + add bx,1024/16 + mov ax,4a00h + int 21h ;shrink block + + call init_sound + + mov ah,48h + mov bx,0ffffh ;s† mycket minne har ingen!! + int 21h + PUSH BX +; debugval 0,5,bx,'Free mem after intro + SDR load' + mov ah,21 + int 66h + test al,1 ;e de gus eller nosnd??? + POP BX + jne gussan + cmp bx,basememreq + ja enough_mem + jmp not_enough +gussan: + cmp bx,nosoundmemreq + ja enough_mem + jmp not_enough + + +; +;******************** really intro ****************************************** +; +enough_mem: + + move es,ds + move ds,data + jmp minnesaron +minneskillen dw ? +minnesaron: + CALL MAKE_IT_NICE ;THE OPTIONS SCREEN + +;******************** Om f”rsta g†ngen spela mod 1 ****************** + mov ax,0 + int keyhandler ;kolla om f”rsta g†ngen . . + cmp ah,false + je notfirstime_sonofirsttimemoduleplaying + MOV DX,OFFSET introMOD + jmp moduleloaded +notfirstime_sonofirsttimemoduleplaying: + MOV DX,OFFSET introMOD2 +moduleloaded: + MOV AX,18 ;fn 18 + INT 66H ;LOAD MODULE + IF_ERROR 1,outofmemory + IF_ERROR 3,cantfindmod + IF_ERROR 4,errorloadingmod + + + move ds,data + move es,data + mov dx,offset intromod + openfile2 dx + mov buppen_filen,bx + filepoint bx,pos1,pos2 + usel=offset chksum + readfile bx,2,usel + CLC + +;**************************** flyttad pga cp id‚!!! + + CALL READ_HIGHS + mov ax,11 + move es,cs + mov dx,offset dumretf + mov bl,255 + int 66h ;ORDER VBLANK + + mov ax,4 + mov bx,11000 + mov cx,0 ;config's rate + int 66h + IF_ERROR 1,OUTOFMEMORY + IF_ERROR 2,INIT_ERR + + mov ax,12 + move es,cs + mov dx,offset creatretf + mov cx,220+10 + mov bl,255 + int 66h ;ORDER RASTER + + + +if demover +jmp firsttime_init +endif + + mov banpek,00b + mov cs:textpek,2 + mov ax,0 + int keyhandler + cmp bl,3 + jb no_high_bana + mov banpek,10b + mov cs:textpek,4 + MOV TEXTLISTA[0],OFFSET HITEXT2 +no_high_bana: + cmp ah,true + je firsttime_init + mov cx,banpek +if finmenu +else + MOV CS:TEXTPEK,2 +endif + SYNCA + setvga + setlores + call set240 + SYNCA + CALL SET_EGAPAL + jmp choosern_init +firsttime_init: + +;320*240,256 + setscr 0 + wait_music firstpictime +ALL_OVER_AGAIN: + fade 20,data,blackpaloff,data,pellevin1 + wait_music t21sttime + fade 20,data,pellevin1,data,blackpaloff + checkquit + setscr vikingadr + fade256 10,data,whitepaloff,data,pellevin2 + wait_music vikingtime + fade256 20,data,pellevin2,data,blackpaloff + checkquit + + fade256 1,data,blackpaloff,data,blackpaloff + setscr fld_logopos/4*320 + + fade256 10,data,whitepaloff,fl1seg,fld_logopaloff + wait_music fld_logotime + fade256 20,fl1seg,fld_logopaloff,data,blackpaloff + checkquit + + setscr 0 + + mov dx,3c4h + mov ax,0f02h + out dx,ax + move es,0a000h + mov cx,320/4*240/2 + mov di,0 + mov ax,0 +GNUOR: stosw + LOOP GNUOR + + mova es,cs + mov di,offset cs:faded_pal + mov cx,256*3 + xor al,al + rep stosb ;rensa pallen s† att set_pal sl„cker + CALL SET_PAL256 + + fillmusicbuf + + mov ax,0 + mov bx,0 + mov cx,320 + mov bp,10b + mov dx,0 + move es,presentseg + call unpklbm + mov presentpaloff,dx + + fade 8,data,blackpaloff,presentseg,presentpaloff + wait_music presenttime + fade 20,presentseg,presentpaloff,data,blackpaloff + checkquit + + + + + cleargfx + CALL BLANK_OFF + + MOV AX,12H + INT 10H ;********************* 640*480,16 ******************* + CALL BLANK_ON + + +; setvga +; sethires + + FILLMUSICBUF + fade 1,data,blackpaloff,data,blackpaloff + FILLMUSICBUF + + CALL BLANK_OFF + CALL SET_EGAPAL + CALL BLANK_ON + FILLMUSICBUF + + mov ax,0 + mov bx,intpic2pos + mov cx,640 + mov bp,0b + mov dx,0 + move es,intpic2seg + call unpklbm + mov intpic2paloff,dx + FILLMUSICBUF + + fade 20,data,blackpaloff,intpic2seg,intpic2paloff + wait_music fantasietime + fade 20,intpic2seg,intpic2paloff,data,blackpaloff +;************ HˇRIFR¸N + fillmusicbuf + checkquit + jmp trasselsudd +skip_the_intro_bra_att_hoppa_till_da: + fade 1,data,blackpaloff,data,blackpaloff + setvga + sethires + fade 1,data,blackpaloff,data,blackpaloff +trasselsudd: ;kan de bli r”rigare?? + + SYNCA + setvga + setlores + call set240 + SYNCA + CALL SET_EGAPAL + + + +;****************************************************************************** +;* MANUAL SKYDDET * +;****************************************************************************** +JMP SVEN_GURKA + +GetKey: +read_again_my_friend: + move ds,data + mov ax,12h + int keyhandler ;report scancode 0=no key pressed cp! calla is„llet + push ax + synca + pop ax + cmp al,0 + je read_again_my_friend + mov bx,offset rekord_tabell + xlatb +retn + +GetKey2: + move ds,data + mov ax,12h + int keyhandler ;report scancode 0=no key pressed cp! calla is„llet + push ax + synca + pop ax + mov bx,offset rekord_tabell + xlatb +retn + +PRINTA MACRO TEXT,SCR_DEST,COLOR + LOCAL TEXTEN,STARTA + JMP STARTA +TEXTEN DB TEXT,0 +STARTA: PUSH SCR_DEST + PUSH OFFSET TEXTEN + MOV DL,COLOR + POP BX + POP DI + CALL NXTCHAR + ENDM + +PRINTA2 MACRO TEXTOFFS,SCR_DEST,COLOR + PUSH SCR_DEST + LEA AX,TEXTOFFS + PUSH AX + MOV DL,COLOR + POP BX + POP DI + CALL NXTCHAR2 + ENDM + +INPUTA MACRO DATA_DEST,MAXLEN,SCR_DEST,COLOR + PUSH OFFSET DATA_DEST + PUSH SCR_DEST + MOV DH,MAXLEN + MOV DL,COLOR + POP DI + POP SI + CALL DOTHEINPUT + ENDM + +NXTCHAR:MOV AL,CS:[BX] + OR AL,AL + JZ EOTXT + PUSH DI + PUSH BX + PUSH DX + CALL PUTCHAR2 + POP DX + POP BX + POP DI + INC BX + ADD DI,FONTW + JMP NXTCHAR +EOTXT: RETN + +NXTCHAR2: + MOV AL,DS:[BX] + OR AL,AL + JZ EOTXT + PUSH DI + PUSH BX + PUSH DX + CALL PUTCHAR2 + POP DX + POP BX + POP DI + INC BX + ADD DI,FONTW + JMP NXTCHAR2 +BLANK_ON: + PUSHA + FILLMUSICBUF + mov ax,24 + mov bl,255 + INT 66H ;order vblank + POPA + RETN +BLANK_OFF: + PUSHA + FILLMUSICBUF + MOV AX,24 + MOV BL,0 + INT 66H + POPA + RETN + +ANDHAMTNING PROC NEAR +FILLMUSICBUF + PUSHA + MOV CX,20 +KULO: + push es DS CX + mov ax,40h + mov es,ax + MOV AX,0 + MOV DS,AX +ventaTT: MOV AX,8 + PUSHF + CALL DWORD PTR DS:[66H*4] + cmp byte ptr es:[76h],0 +MOPAR: ;EJ KORTA LOOPAR! +REPT 1000 + NOP +ENDM + jz ventaTT + mov byte ptr es:[76h],0 + pop CX DS es + LOOP KULO + POPA + RETN +ANDHAMTNING ENDP + +PUTCHAR2 PROC NEAR ;INPUT:AL=CHAR,DI=SCR_DEST,DL=COLOR + MOV BL,AL + PUSH BX + PUSH DI + MOV AX,DI + NIL DX + MOV BX,320 + DIV BX + MOV DX,AX + PUSH DX ;YPOS P¸ STACKEN + MOV BX,320 + MUL BX + POP DX + POP DI + SUB DI,AX + MOV AX,DI + POP BX +;* buf1 * ;visa sid 0, skriv sid 1 + pusha + MOVE ES,0A000H + MOVE DS,DATA + MOV CS:SIDA,44580 + MOV CS:FONTEN,0 + XCHG AX,AX + XCHG AX,DX + XCHG DX,DX + CALL PUTCHAR + + synca + setscr 44580 + synca + + popa + XCHG AX,AX + XCHG AX,DX + XCHG DX,DX + +;* buf2 * + MOVE ES,0A000H + MOVE DS,DATA + MOV CS:SIDA,0 + MOV CS:FONTEN,0 + CALL PUTCHAR + + synca + setscr 0 + synca + + RETN + +comment\ + SET_ES 0A000H + NIL AH + SHL AX,3 + MOV BP,AX + ADD BP,OFFSET FONTMONO + MOV CX,8 +NXTBYTE:PUSH DI + MOV AL,10000000B +NXTPIXL:MOV AH,DS:[BP] + AND AH,AL + JZ NTPIX + MOV BYTE PTR ES:[DI],DL + JMP PIXPUTREADY +NTPIX: MOV BYTE PTR ES:[DI],0 +PIXPUTREADY: + INC DI + SHR AL,1 + OR AL,AL + JNZ NXTPIXL + POP DI + ADD DI,320 + INC BP + LOOP NXTBYTE + RETN +\ +PUTCHAR2 ENDP + +DOTHEINPUT: + MOV BP,SI + MOV CX,SI + ADD CL,DH + ADC CH,0 +NXTINP: + CALL WINDOWS_PRINT + call GetKey ;INT 16H (n„stan) + CMP AL,13 + JE ENTERT + CMP AL,8 + JE BACKSPACE + CMP AL,32 + JB NXTINP + CMP AL,122 + JA NXTINP + CMP AL,96 + JBE UCASE + SUB AL,32 +UCASE: MOV BYTE PTR DS:[SI],AL + MOV BYTE PTR DS:[SI+1],0 +; PUSHA +; CALL PUTCHAR2 +; POPA +; ADD DI,FONTW + CMP SI,CX + JE NXTINP + INC SI + JMP NXTINP +ENTERT: MOV BYTE PTR DS:[SI],0 + RETN +BACKSPACE: + CMP SI,BP + JE NXTINP + DEC SI + MOV WORD PTR DS:[SI],0 +; SUB DI,FONTW +; PUSHA +; MOV AL,0 ;INTE DU MIN BRUTUS! +; CALL PUTCHAR2 +; POPA + JMP NXTINP + +VAL2DECASC MACRO STRINGEN,VALUE + PUSHA + PUSH OFFSET STRINGEN + PUSH VALUE + POP AX + POP DI + + NIL DX + MOV BX,10000 + DIV BX + PUSH DX + MOV BX,OFFSET HEXTBL + XLATB + MOV DS:[DI],AL + + POP AX + NIL DX + MOV BX,1000 + DIV BX + PUSH DX + MOV BX,OFFSET HEXTBL + XLATB + MOV DS:[DI+1],AL + + POP AX + MOV BL,100 + DIV BL + PUSH AX + MOV BX,OFFSET HEXTBL + XLATB + MOV DS:[DI+2],AL + + POP AX + MOV AL,AH + NIL AH + MOV BL,10 + DIV BL + PUSH AX + MOV BX,OFFSET HEXTBL + XLATB + MOV DS:[DI+3],AL + + POP AX + MOV AL,AH + MOV BX,OFFSET HEXTBL + XLATB + MOV DS:[DI+4],AL + MOV BYTE PTR DS:[DI+5],0 + POPA +ENDM + +ARRLEFT MACRO STRINGEN,CHAREN + LOCAL NOMORE,NASTAC,NOBYTE,MOVSBL + PUSHA + PUSH ES + MOV DH,CHAREN + PUSH OFFSET STRINGEN + POP BX + PUSH BX + MOV SI,BX + NIL CX +NASTAC: LODSB + CMP AL,DH + JNE NOMORE + CMP BYTE PTR DS:[SI],0 ;SI-1 OM DET BLIR FEL + JZ NOMORE + INC CX + JMP NASTAC +NOMORE: + POP DI + JCXZ NOBYTE + MOVE ES,DS + MOV SI,DI + ADD SI,CX +MOVSBL: MOVSB + CMP BYTE PTR DS:[SI-1],0 + JNZ MOVSBL +NOBYTE: POP ES + POPA +ENDM + + +STRADD MACRO DEST,SOURCE + PUSHA + PUSH OFFSET DEST + PUSH OFFSET SOURCE + POP SI + POP DI + STRLEN AL,DI + NIL AH + ADD DI,AX + STRCOPY DI,SI + POPA +ENDM +tudor: + pusha + move es,0b000h + mov si,offset ordlista + mov di,0 + move ds,data + mov cx,2000 +huko: movsb + inc di + loop huko + popa +retn +SVEN_GURKA: +fillmusicbuf +;*************** TILL HIT + mova es,cs + mov di,offset cs:faded_pal + mov cx,256*3 + xor al,al + rep stosb ;rensa pallen s† att set_pal sl„cker + CALL SET_PAL256 +choosern_init: +if demover + CALL BLANK_OFF + setvga + setlores + call set240 + CALL BLANK_ON + +; MOV AX,0EH +; SIMINT 10H ;640*200,16 +endif + + FILLMUSICBUF + cleargfx + +if demover + fade 1,data,blackpaloff,data,blackpaloff +else + SETLORES ;************************ 640*240*16 ********************* + fade 3,data,blackpaloff,data,blackpaloff +; slackA 320 +; slack 1 +endif +if demover +else +;************ checksum!!!! + mov si,offset cs:START_KEK2 + mov al,checktrim2 + mov cx,offset cs:stop_kek2-offset cs:start_kek2 +liiirarn: + add ax,cs:[si] + inc si + loop liiirarn + nil ah + or ax,ax +; jne pinball_fantasies_integretet_ar_krankt +;********************* + + + +;erbjud v„xling mellan 2 st 16-paletter + synca + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,10h+20h + out dx,al + jmp $+2 + inc dl + in al,dx + dec dl + or al,80h + out dx,al +endif + FILLMUSICBUF +IF DEMOVER + JMP JAGARN +ELSE +;setscr 240*80+95*3*80 +;packa upp & spara bilderna R¸TT!! + mov ax,hsl1seg + call packa_upde + mov di,offset savearea1 + call rave_party + mov ax,hsl2seg + call packa_upde + mov di,offset savearea2 + call rave_party + jmp jagarn +packa_upde: + mov cx,640 + mov bx,0 + mov bp,0b + mov dx,0 + mov es,ax + mov bx,0 + mov ax,0 + call unpklbm +ENDIF +retn + +rave_party: + call aronsson_bort + mov bl,0 + mov cx,4 + move es,data + move ds,0a000h +ynkes: + push cx + setrbpl bl + mov si,0 + mov cx,lhojd +lajlas_kusin: + push cx + mov cx,lbredd/8 + rep movsb + add si,640/8-lbredd/8 + pop cx + loop lajlas_kusin + inc bl + pop cx + loop ynkes + move ds,data +retn + +put_the_hslogo1: + pusha + mov bx,cs:textpek + cmp textlista[bx-2],-1 + jne nologga1 + mov si,offset savearea2 + mov bp,0+128/8+4+3 + call perverted_rave_party + add cs:sida,80*10 + +nologga1: + popa +retn +put_the_hslogo2: + pusha + mov bx,cs:textpek + cmp textlista[bx-2],-1 + jne nologga2 + mov si,offset savearea1 + mov bp,44580+128/8+4+3 +pinball_fantasies_integretet_ar_krankt: + call perverted_rave_party + add cs:sida,80*10 + +nologga2: + popa +retn + +perverted_rave_party: + call aronsson_bort ;jas† aronsson f†r inte va med p† rave +;bp = dest, si = s†s + mov bl,1 + mov cx,4 + move es,0a000h +ynke: + push cx + setwbpl bl + mov cx,loggasize + mov di,bp + + mov cx,lhojd +lajlas_syssling: + push cx + mov cx,lbredd/8 + rep movsb + add di,640/8-lbredd/8 + pop cx + loop lajlas_syssling + + shl bl,1 + pop cx + loop ynke +retn + +jagarn: +if demover + slackA 320 + mov cx,1 +else + slackA 130 + SYNCA + mov cx,7 ;Fonten ligger p† slutet!! Inte l„ngre, de funkade ej!! +endif + mov bx,0 + +makefjups: + push cx +; mov cx,320 + mov cx,640 + CMP BX,6 + JB NOCHG + MOV CX,55*8 +NOCHG: + FILLMUSICBUF + mov bp,0b + mov dx,0 + mov ax,tabletabell[bx] + mov es,ax + push bx + mov bx,vartabell[bx] + mov ax,0 + call unpklbm + FILLMUSICBUF + pop bx + mov tablepaloff[bx],dx + add bx,2 + pop cx + loop makefjups +IF DEMOVER +ELSE + call aronsson + call crunchpics + call movelogobar + call copy_pf_loggan +ENDIF +if demover +else + setscr 130/4/2 +; fade 1,tabletabell[0],tablepaloff[0],tabletabell[0],tablepaloff[0] ;S„tt r„tt!! +endif +if demover +; mov al,0 +; mov bx,8 +; call julius + SETSCR 80*28 + SYNCA + fade 40,data,blackpaloff,tabletabell[0],tablepaloff[0] ;S„tt r„tt!! + jmp demoversion +endif + +SPRINTA MACRO THETEXT,THEPOS + LOCAL NXXXXT,ENDOFIT + LEA DI,THEPOS + MOVE ES,DS + LEA SI,THETEXT + NIL CH +NXXXXT: MOV CL,[SI] + JCXZ ENDOFIT + MOV [DI],CL + INC SI + INC DI + JMP SHORT NXXXXT +ENDOFIT: + MOVE ES,0A000H ;CP, OCH INTE N™DVˇNDIGT! +ENDM + +;******************************************************************* +; debugmess 0,0,'yo man!' + fade 3,data,blackpaloff,data,blackpaloff +nuvaranden=offset nuvarande + mov al,16 + mov bx,10 + call julius ;Ceasar s„tter en palett!! + mov al,0 + mov bx,10 + call julius + + movpal tabletabell[6],tablepaloff[6],data,nuvaranden+16*3 + movpal tabletabell[8],tablepaloff[8],data,nuvaranden + + MOV CS:CHANGE16PAL,TRUE + + slacka 130 + + mov cx,4 +loket: + push cx + synca + pop cx + loop loket + + MOV CS:SIDOPEK,130/8 + MOV CS:SIDOBAR,TRUE + wait_sync_spec2 20 + slackA 320 +;************************** HˇR E NYA SKYDDET!!!!!!!!!! *********************** + call aronsson + + MOVE DS,DATA + MOVE ES,DATA +;****************** checksummat ****************** +start_kek2: + mov al,2eh ;Get CMos checksum! + out 70h,al + in al,71h + + + mov bl,al + mov al,2fh + out 70h,al + in al,71h + mov bh,al + mov ax,chksum + XOR BX,10010000B + ROL BX,1 + mov chksum,bx + SUB ax,bx + ADD CS:AVSLUTA_PSEUDO,AX + CMP CS:AVSLUTA_PSEUDO,OFFSET CS:SHOWMENU + MOV CS:AVSLUTA_PSEUDO,OFFSET CS:AVSLUTA + je no_skydd ;l†ter faligt!! „r „nnu farligare!!! + + call getkey2 ;vill du se en stj„rna, se(mikolon) p† mig! (e de erroR flynn??) + + MOVE ES,0A000H + NIL DX + MOV ax,CS:SLUMPEN ;ax=slump + +COMMENT\ + MOV BX,NOOFWORDS + DIV BX + MOV AX,DX +\ + AND AX,63 + + mov bx,size wordstruc + mul bx + mov thepost,ax + + mov si,thepost + mov al,ordlista[si].theword ;word + ror al,1 +;stop_kek2: + + xor al,10100010b + nil ah + VAL2DECASC TEMPTEXT,AX + ARRLEFT TEMPTEXT,'0' + STRADD TEXTEN1,TEMPTEXT + STRADD TEXTEN1,TEXTEN2 + + mov si,thepost + mov al,ordlista[si].theline ;line + ror al,1 + xor al,10100010b + nil ah + VAL2DECASC TEMPTEXT,AX + ARRLEFT TEMPTEXT,'0' + STRADD TEXTEN3,TEMPTEXT + + STRADD TEXTEN3,TEXTEN4 + + MOV SI,THEPOST + mov al,ordlista[si].thepage ;page + ror al,1 + xor al,10100010b + nil ah + VAL2DECASC TEMPTEXT,AX + ARRLEFT TEMPTEXT,'0' + STRADD TEXTEN3,TEMPTEXT + +; STRADD TEXTEN3,TEXTEN5 ;'.'!!! + +; PRINTA2 TEXTEN1,90*320+8,TEXTCOLOR +; PRINTA2 TEXTEN2,100*320+8,TEXTCOLOR + + STRLEN AL,TEXTEN1 + NIL AH + INC AX ;NOLLAN OX¸! + MOV DI,OFFSET WHATS_HAPPENING + DATAMOV DI,TEXTEN1,AX + ADD DI,AX + STRLEN AL,TEXTEN3 + NIL AH + INC AX + DATAMOV DI,TEXTEN3,AX + +; SPRINTA TEXTEN1,PROTTXT+4*24 +; SPRINTA TEXTEN3,PROTTXT+5*24 + + call aronsson + call showtext_prot + +NO_SKYDD: +stop_kek2: +;********************************SLUT P¸ SKYDD********************************* +;****************************************************************************** + mov cs:menubaren_on,true + call aronsson + call rastraclear + mov cs:deccet,menutime*60 + jmp showpics +;****************************************************************************** +;* The Chooser * +;****************************************************************************** +; +choosern: + mov cs:menubaren_on,true + call showtext + cmp cs:menunext,true + jne noshow + mov cs:menunext,false + call showmenu +noshow: + +showpics: + wait_sync_spec 20 + test banpek,10b + jne pics2 + mov al,16 + mov bx,6 + call julius ;Ceasar s„tter en palett!! + mov al,0 + mov bx,8 + call julius + +nuvaranden=offset nuvarande + movpal tabletabell[6],tablepaloff[6],data,nuvaranden+16*3 + movpal tabletabell[8],tablepaloff[8],data,nuvaranden +;*********** set 2 palette modes (on rasterint) ************** + MOV CS:CHANGE16PAL,TRUE + mov bp,0 + call rastra + jmp keyread +pics2: + mov al,16 + mov bx,10 + call julius + mov al,0 + mov bx,12 + call julius + + movpal tabletabell[10],tablepaloff[10],data,nuvaranden+16*3 + movpal tabletabell[12],tablepaloff[12],data,nuvaranden +;*********** set 2 palette modes (on rasterint) ************** + MOV CS:CHANGE16PAL,TRUE + mov bp,55*95*2 + call rastra + + mov cs:deccet,menutime*60 +keyread: + synca + mov ax,1 ;Read key!!! + move es,0 + pushf + call dword ptr es:[keyhandler*4] + cmp al,01 + je quit_ing + + cmp al,3bh ;f1 + je f1 + cmp al,3ch ;f2 + je f2 +if finmenu + cmp al,3dh ;f3 + je f3 + + cmp al,3eh ;f4 + je f4 +endif + + cmp al,3fh ;f5 + je f5 + + cmp al,39h ;space + je space + +;if finmenu +; cmp al,28 ;entera +; je space +;else + cmp al,28 ;entera + je entera +;endif + + dec cs:deccet + jz WAITEND + jmp keyread +entera: + xor banpek,10b +; MOV CS:TEXTPEK,2 + add cs:textpek,2 + mov bx,cs:textpek + cmp word ptr [bx],0 + jnz boxk + mov cs:textpek,offset textlista+2 +boxk: + MOV TEXTLISTA[0],OFFSET HITEXT1 + JZ NEDU + MOV TEXTLISTA[0],OFFSET HITEXT2 +NEDU: + + CALL RASTRACLEAR + mov cs:deccet,menutime*60 + jmp SHOWPICS + +space: +WAITEND: + xor banpek,10b + MOV TEXTLISTA[0],OFFSET HITEXT1 + JNZ NEDU_DUDU + MOV TEXTLISTA[0],OFFSET HITEXT2 +NEDU_DUDU: + + + MOV CS:DECCET,MENUTIME*60 + JMP CHOOSERN +f5: + call showmenu ;jump into menu mode + jmp showpics ;when menu ready, show the pics again! +f1: + mov bl,1 + jmp savebana +f2: + mov bl,2 + jmp savebana +f3: + mov bl,3 + jmp savebana +f4: + mov bl,4 + jmp savebana + +savebana: + mov bh,0 + +if finmenu +else + add bx,banpek +endif + + mov ax,0ffffh + int keyhandler + MOV BX,OFFSET CS:AVSLUTA_PSEUDO-2 + INC BX + INC BX + MOV AX,CS:[BX] + jmp AX +f1t: + mov bl,1 + jmp savebana2 +f2t: + mov bl,2 + jmp savebana2 +f3t: + mov bl,3 + jmp savebana2 +f4t: + mov bl,4 + jmp savebana2 + +savebana2: + + mov bh,0 +if finmenu +else + add bx,banpek +endif + mov ax,0ffffh + int keyhandler + setscr 44580 ;b”r ligga p† rasterint + fade3b 20 + + + call aronsson + call clearall + setscr 0 ;b”r ligga p† rasterint + MOV CS:CHANGE16PAL,true + + pop ax ;retn tabort + MOV BX,OFFSET CS:AVSLUTA_PSEUDO-2 + INC BX + INC BX + MOV AX,CS:[BX] + jmp AX +deccet dw ? +quit_ing: +grynet=offset nuvarande + fadeM 80,data,grynet,data,blackpaloff +SPYAN_STEWART: + cleargfx + CALL BLANK_OFF + MOV CS:CHANGE16PAL,FALSE + mov bx,0 ;Quitta helt † h†llet!! + mov ax,0ffffh + int keyhandler +; mov ax,3 +; int 10h + + ;uninstall fn0 + mov ax,0 + int 66h + + mov ax,3 + int 10h + + MOVE DS,DATA + MOV BX,BUPPEN_FILEN + CLOSEFILE BX + + CALL SAVE_TOGGLAREN + CALL BEFORE_STARTING + +; mov ah,48h +; mov bx,0ffffh +; int 21h + + mov ax,4c00h + int 21h + +avsluta: +if demover +else + fadeM 80,data,grynet,data,blackpaloff +endif + jmp quit +not_enough: + mov bx,0 ;Quitta helt † h†llet!! + mov ax,0ffffh + int keyhandler + + ;uninstall fn0 + mov ax,0 + int 66h ;UNINST MS + + mov ax,3 + int 10h + mov dx,offset notenoughmess + mov ax,900h + int 21h + + MOVE DS,DATA + MOV BX,BUPPEN_FILEN + CLOSEFILE BX + + CALL SAVE_TOGGLAREN + CALL BEFORE_STARTING + +; mov ah,48h +; mov bx,0ffffh +; int 21h ;why? + mov ax,4c00h + int 21h + +julius: + mov si,tablepaloff[bx] + push ds + mov ds,tabletABELL[bx] + MOV CX,16*3 + mov dx,3c8h + ;al „r: 0-15, 16-31 + out dx,al + mov dx,3c9h + repoutsb +; rep outsb + pop ds +retn + +SHIFTPAL MACRO NO,SEGGE,OFFE + LOCAL SHIFFE + MOV CX,NO*3 + MOVA ES,SEGGE + MOVA SI,OFFE +SHIFFE: SHL BYTE PTR ES:[SI],2 + INC SI + LOOP SHIFFE +ENDM +SHIFT_UP_PALETTES: + SHIFTPAL 32,t21st1seg,t21st_REAL_pal + SHIFTPAL 256,viking2seg,viking_REAL_pal + SHIFTPAL 256,fl1seg,fld_logopaloff + SHIFTPAL 256,presentseg,presentpaloff + SHIFTPAL 16,intpic2seg,intpic2paloff +IF DEMOVER + SHIFTPAL 16,new_cov2seg,tablepaloff +ENDIF + RETN + + in al,60h + mov ah,al +feel_key: + push ax + FILLMUSICBUF + pop ax + in al,60h + cmp al,ah + jne fadedown + + jmp feel_key +fadedown: +; fade 40,dtseg,demotext2paloff,data,blackpaloff + +quit: + ;uninstall fn0 + mov ax,0 + int 66h + + MOVE DS,DATA + MOV BX,BUPPEN_FILEN + CLOSEFILE BX + + CALL SAVE_TOGGLAREN + CALL BEFORE_STARTING + +; mov ah,48h +; mov bx,0ffffh +; int 21h + + mov ax,4c00h + int 21h + +SET_MCGAB PROC NEAR + MOV AX,9876 + MOV BL,NUMRET + INT keyhandler + + MOV AX,13H + INT 10H + + MOV DX,3D4H ;UNLOCK + MOV AL,11H + MOV AH,0 + OUT DX,AX + + MOV DX,3C4H ;SET MCGAB (NO CHAIN FOUR, USE 256KB) + MOV AL,04H + OUT DX,AL + INC DX + IN AL,DX + AND AL,11110110B + OUT DX,AL + + MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE + MOV AL,14H + OUT DX,AL + INC DX + IN AL,DX + AND AL,10111111B ;10011111B SVARAR MOT KOMMENTAREN + OUT DX,AL + MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE) + MOV AL,17H + MOV AH,11100011B + OUT DX,AX +NO_1417: + + MOV DX,3CCH + IN AL,DX + MOV DX,3C2H + OR AL,11000000B + OUT DX,AL ;s„tt 240-linjers sk„rmh”jd +; CALL BLANK_ON + RETN +SET_MCGAB ENDP +SET240 PROC NEAR + mov dx,03d4h + mov al,11h + out dx,al + inc dx + in al,dx + and al,7fh + out dx,al + dec dx + cld + MOV SI,OFFSET XPARABL + MOV CX,10 +xvploop: + mov ax,cs:[si] + add si,02h + out dx,ax + jmp $+2 + + loop xvploop + + RETN + + +xparabl db 06h,0Dh ,07h,03eh ,09h,40H+80H,10h,0EAh ,11h,0ch ,12h,0dfh ,14h,00h + db 15h,0eah,016h,06h,17h,0e3h + +SET240 ENDP +steg db 200 + +make_pal proc near + ;ds:si=pal1 + ;es:di=pal2 + ;cl=pos + +;(v1*(steg-pos)+v2*pos)/steg=v ;steg=antal steg † tona p†, pos=pos+1 v1=old v2=new + ;cs:bx=destpal + + mov bx,offset cs:faded_pal +tona_next: + lodsb ;ladda ax me v1 + mov dl,cs:steg + sub dl,cl ;cl e pos + mul dl + mov bp,ax ;save v1*(steg-pos) + mov al,es:[di] ;ladda ax me v2 + inc di + + mul cl + add ax,bp + div cs:steg + mov cs:[bx],al + inc bx + cmp bx,offset cs:faded_pal+nofcolors*3 + jb tona_next + retn +endp + +make_pal1 proc near + ;ds:si=pal1 + ;es:di=pal2 + ;cl=pos +pusha +;(v1*(steg-pos)+v2*pos)/steg=v ;steg=antal steg † tona p†, pos=pos+1 v1=old v2=new + ;cs:bx=destpal + + mov bx,offset cs:faded_pal +tona_next1: + lodsb ;ladda ax me v1 + mov dl,cs:steg + sub dl,cl ;cl e pos + mul dl + mov bp,ax ;save v1*(steg-pos) + mov al,es:[di] ;ladda ax me v2 + inc di + + mul cl + add ax,bp + div cs:steg + mov cs:[bx],al + inc bx + cmp bx,offset cs:faded_pal+3 + jb tona_next1 + popa + retn +endp + +set_pal proc near + push cx + mova ds,cs + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov cx,nofcolors*3 + mov si,offset cs:faded_pal + REPOUTSB +; rep outsb + pop cx + mova ds,data + retn +endp +set_pal1 proc near + push cx + mova ds,cs + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov cx,3 + mov si,offset cs:faded_pal + REPOUTSB +; rep outsb + pop cx + mova ds,data + retn +endp + + +make_pal256 proc near + ;ds:si=pal1 + ;es:di=pal2 + ;cl=pos + +;(v1*(steg-pos)+v2*pos)/steg=v ;steg=antal steg † tona p†, pos=pos+1 v1=old v2=new + ;cs:bx=destpal + + mov bx,offset cs:faded_pal +tona_next256: + lodsb ;ladda ax me v1 + mov dl,cs:steg + sub dl,cl ;cl e pos + mul dl + mov bp,ax ;save v1*(steg-pos) + mov al,es:[di] ;ladda ax me v2 + inc di + + mul cl + add ax,bp + div cs:steg + mov cs:[bx],al + inc bx + cmp bx,offset cs:faded_pal+256*3 + jb tona_next256 + retn +endp +set_pal256 proc near + push cx + mova ds,cs + mov dx,3c8h + mov al,0 + out dx,al + inc dx + mov cx,256*3 + mov si,offset cs:faded_pal + REPOUTSB +; rep outsb + pop cx + mova ds,data + retn +endp +faded_pal db 256*3 dup(0) + + +unpkpics: +;packa upp bilderna + mov ax,0 + mov bx,0+t21stpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,t21st1seg + call unpklbm + MOVE DS,DATA + MOV T21ST_REAL_PAL,DX + mov t21stpaloff,offset pelle1 + push es ds + move es,data + move ds,t21st1seg + mov cx,256*3 + mov si,dx + mov di,offset pelle1 + rep movsb + pop ds es + + mov ax,0 + mov bx,139+t21stpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,t21st2seg + call unpklbm + + MOVE DS,DATA + mov ax,0 + mov bx,0+vikingpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,viking2seg + call unpklbm16 + MOVE DS,DATA + MOV VIKING_REAL_PAL,DX + mov vikingpaloff,offset pelle2 + push es ds + move es,data + move ds,viking2seg + mov cx,256*3 + mov si,dx + mov di,offset pelle2 + rep movsb + pop ds es + + mov ax,0 + mov bx,125+vikingpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,viking1seg ;ETT + call unpklbm ;16 + MOVE DS,DATA + + mov ax,0 + mov bx,fld_logopos ;+20 + mov cx,320 + mov bp,10b + mov dx,0 + move es,fl1seg + call unpklbm16 + MOVE DS,DATA + mov fld_logopaloff,dx + + mov ax,0 + mov bx,fld_logopos+fl1storlek;+20 + mov cx,320 + mov bp,10b + mov dx,0 + move es,fl2seg + call unpklbm + MOVE DS,DATA +retn + +unpkpics2: +;packa upp bilderna + CALL ANDHAMTNING + mov ax,0 + mov bx,0+t21stpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,t21st1seg + call unpklbm + MOVE DS,DATA + CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten! + ;(s†deles f”rhindra att datorn dyker!!!!) + + mov ax,0 + mov bx,139+t21stpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,t21st2seg + call unpklbm + CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten! + ;(s†deles f”rhindra att datorn dyker!!!!) + + MOVE DS,DATA + mov ax,0 + mov bx,0+vikingpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,viking2seg + call unpklbm16 + MOVE DS,DATA + CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten! + ;(s†deles f”rhindra att datorn dyker!!!!) + + mov ax,0 + mov bx,125+vikingpos + mov cx,320 + mov bp,10b + mov dx,0 + move es,viking1seg ;ETT + call unpklbm ;16 + MOVE DS,DATA + CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten! + ;(s†deles f”rhindra att datorn dyker!!!!) + + mov ax,0 + mov bx,fld_logopos ;+20 + mov cx,320 + mov bp,10b + mov dx,0 + move es,fl1seg + call unpklbm16 + MOVE DS,DATA + + CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten! + ;(s†deles f”rhindra att datorn dyker!!!!) + mov ax,0 + mov bx,fld_logopos+fl1storlek;+20 + mov cx,320 + mov bp,10b + mov dx,0 + move es,fl2seg + call unpklbm + MOVE DS,DATA + CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten! + ;(s†deles f”rhindra att datorn dyker!!!!) +retn + +rastra: + move es,0a000h + mov bx,offset rastatab +next_raster: + mov al,[bx] + cmp al,-1 + je next_sync + push ax + call putraster + pop ax + call putraster2 + inc bx + jmp next_raster +next_sync: + inc bx + cmp byte ptr [bx],-1 + je done_raster + synca + jmp next_raster +done_raster: + retn + +rastraclear: + move es,0a000h + mov al,es:[128/8+3] ;d„r „r det svart min v„n!! + mov bx,offset rastatab +next_raster2: + mov al,[bx] + cmp al,-1 + je next_sync2 + push ax + call clearraster + pop ax + call clearraster2 + inc bx + jmp next_raster2 +next_sync2: + inc bx + cmp byte ptr [bx],-1 + je done_raster2 + synca + jmp next_raster2 +done_raster2: + retn + + +putraster: + push ds + move ds,0a000h + push ax + mov cl,55 + mul cl + mov di,80*dist+20 + mov si,240*80+14*4*80 + add si,bp + add si,ax + pop ax + mov cl,80 + mul cl + add di,ax + mov cx,55 + rep movsb + pop ds + retn + +putraster2: + push ds + move ds,0a000h + mov cl,55 + xchg al,ah + mov al,94 + sub al,ah + push ax + mul cl + mov di,80*(240-dist-95)+20 + mov si,240*80+55*95+14*4*80 + add si,bp + add si,ax + pop ax + mov cl,80 + mul cl + add di,ax + mov cx,55 + rep movsb + pop ds + retn + +clearraster: + push ds + move ds,0a000h + mov cl,80 + xchg al,ah + mov al,94 + sub al,ah + mul cl + mov di,80*dist+20 + add di,ax + mov cx,55 + rep stosb + pop ds + retn +clearraster2: + push ds + move ds,0a000h + mov cl,80 + mul cl + mov di,80*(240-dist-95)+20 + add di,ax + mov cx,55 + rep stosb + pop ds + retn + +clearall: + move es,0a000h + mov al,es:[128/8+3] ;d„r „r det svart min v„n!! + mov cx,240 + mov di,128/8+4 +lajban_lasse: + push cx + mov cx,55 + rep stosb + add di,80-55 + pop cx + loop lajban_lasse + mov cx,240 + mov di,44580+128/8+4 +lajban_laban: + push cx + mov cx,55 + rep stosb + add di,80-55 + pop cx + loop lajban_laban + retn +clearalmostall: + move es,0a000h + mov al,es:[128/8+3] ;d„r „r det svart min v„n!! + mov cx,240 + mov di,44580+128/8+4 +lajban_laban_o_lajla: + push cx + mov cx,55 + rep stosb + add di,80-55 + pop cx + loop lajban_laban_o_lajla + retn + +clearalmostall2: + move es,0a000h + mov al,es:[128/8+3] ;d„r „r det svart min v„n!! + mov cx,CHARHEIGHT + mov di,128/8+4+80*2*18-80*4+80*(LINJEN-1)*18 +lajban_laban_o_lajla2: + push cx + mov cx,55 + rep stosb + add di,80-55 + pop cx + loop lajban_laban_o_lajla2 + retn + +clearalmostall3: + move es,0a000h + mov al,es:[128/8+3] ;d„r „r det svart min v„n!! (NEGER) + mov cx,CHARHEIGHT + mov di,128/8+4+44580+80*2*18-80*4+80*(LINJEN-1)*18 +lajban_laban_o_lajla3: + push cx + mov cx,55 + rep stosb + add di,80-55 + pop cx + loop lajban_laban_o_lajla3 + retn + +INIT_SOUND PROC NEAR + OPENFILE SOUNDCFG + JC NOSOUNDCFG +if musikkaos +else + READFILE BX,13,DRV ;get name of selected sound driver +endif + CLOSEFILE BX + + savestack + MOV AX,DS + MOV ES,AX + MOV AX,4B00H ;fn 4b = load and execute exe file + MOV DX,OFFSET DRV + MOV BX,OFFSET PARMS + INT 21H ;LOAD DRIVER + restorestack + MOV DX,OFFSET DRV +; jc drv_not_found + mov ax,04d00h + int 21h + cmp al,7 + je cantfindultrasndstring + RETN + +NOSOUNDCFG: + MOV AX,3 + INT 10H +missmess equ "The sound configuration file 'SOUND.CFG' is missing from the",13,10,"game directory. Please run the SETSOUND program so that the",13,10,"file can be created.",13,10 + SPYMESS MiSSmess + + MOV AX,4C04H ;CP!!! 4??? + INT 21H + + STC + RETN +ENDP + +CHANGE16PAL DB FALSE +Tabort: + mov cs:SidoBar,false + jmp nosido + +creatretf: ;RASTERINT + CMP CS:SIDOBAR,TRUE + JNE NOSIDO + + Mov Bx,Cs:SidoPek + Dec cs:sidopek + Cmp bx,-1 + Je TaBort + SetScr Bx + +NOSIDO: + CMP CS:CHANGE16PAL,TRUE + JNE NOC16 + cli + mov dx,3dah +l7: in al,dx +; test al,1 +; jz l7 +l8:; in al,dx +; test al,1 +; jnz l8 +rept 10 + jmp $+2 +endm + mov dl,0c0h + mov al,14h+20h + out dx,al +rept 10 + jmp $+2 +endm + mov al,0 + out dx,al + sti +COMMENT\ + IN AL,60H + CMP AL,15 + JMP NOCUTTODO + MOV AL,CS:CUTADD + ADD CS:CUTLEN,AL + CMP CS:CUTLEN,20 + JNE NOT20 + NEG CS:CUTADD +NOT20: CMP CS:CUTLEN,-20 + JNE NOT02 + NEG CS:CUTADD +NOT02: + jmp doc17 +doc16: + cmp cs:cutlen,0 + jz nocuttodo +doc17: +linesync macro + local test1,test2 + mov dx,3dah +test1: in al,dx + test al,1 + jnz test1 +test2: in al,dx + test al,1 + jz test2 +endm +cli + linesync + mov dx,3d4h + mov al,13h + mov ah,40 + add ah,CS:cutlen + out dx,ax + linesync + linesync + mov dx,3d4h + mov al,13h + mov ah,40 + out dx,ax + +sti + mov al,0dh + mov ah,CS:cutlen + MOV AH,20 + SUB AH,CS:CUTLEN + out dx,ax +nocuttodo: +\ +NOC16: + retf +CUTLEN DB 0 +CUTADD DB 1 +FJUMPENS_BROR DW 0 +FJUMPENS_FARSA DW 0 +SLUMPEN DW ? +READREG MACRO PORT,INDEX + MOV DX,PORT + MOV AL,INDEX + OUT DX,AL + INC DX + IN AL,DX + ENDM + +WRITEREG MACRO PORT,INDEX + MOV DX,PORT + MOV AH,AL + MOV AL,INDEX + OUT DX,AX + ENDM + +SAVEGFXREGS MACRO + READREG 3C4H,2 ;BITPLANMASK + MOV AH,AL + READREG 3CEH,0 ;SET/RESET + PUSH AX + READREG 3CEH,1 ;ENABLE SET/RESET + MOV AH,AL + READREG 3CEH,4 ;READ MAP SELECT + PUSH AX + READREG 3CEH,5 ;WRITEMODE + MOV AH,AL + READREG 3CEH,8 ;BITMASK + PUSH AX +; MOV DX,3CEH +; MOV AX,0FF08H +; OUT DX,AX ;BITMASK OUTAD + PUSH ES 0A000H + POP ES + MOV ES:[-90*14-1],AL + POP ES + ENDM + +RESTOREGFXREGS MACRO + POP AX + PUSH AX + MOV AL,AH + WRITEREG 3CEH,5 + POP AX + WRITEREG 3CEH,8 + POP AX + PUSH AX + WRITEREG 3CEH,4 + POP AX + MOV AL,AH + WRITEREG 3CEH,1 + POP AX + PUSH AX + WRITEREG 3CEH,0 + POP AX + MOV AL,AH + WRITEREG 3C4H,2 + PUSH ES 0A000H + POP ES + MOV AL,ES:[-90*14-1] + POP ES + ENDM +general_info label byte + db 'F1 - PARTY' + DB ' LAND' + DB 'F2 - SPEED' + DB ' DEVILS' + DB 'F3 - BILLION' + DB ' DOLLAR' + DB 'F4 - STONES' + DB " N'BONES" + DB 'F5 - OPTIONS' + DB 'SPACE - SKIP' +options_info label byte + db ' USE THE ' + DB 'CURSOR KEYS ' + DB 'TO SELECT AN' + DB ' OPTION ' + DB ' ' + DB 'TOGGLE WITH ' + DB ' ENTER OR ' + DB ' SPACEBAR ' + DB ' ' + DB 'ESCAPE QUITS' +loggatime = 60*8 +infotime = 60*8 +pfcounter dw loggatime +menubaren_on db false +info_text dw general_info +info_text_2_USE dw general_info +pftasken dw infot +pftask: dec pfcounter + cmp pfcounter,0 + jg dumret + savegfxregs + jmp pftasken +loggan: + cmp pfcounter,-90 + jg utmeloggan + mov pftasken,offset infot + mov pfcounter,loggatime + jmp endoftask +infot: + cmp pfcounter,-90 + jg doclpf + cmp pfcounter,-90-12*10 + jg prntchars + mov pftasken,offset loggan + mov pfcounter,infotime +endoftask: + restoregfxregs + retn +utmeloggan: + call aronsson + mova es,0a000h + mova ds,es + mov bp,pfcounter + neg bp + sub bp,89 + mov ax,bp + mov si,-14 + imul si + mov si,-90*14 + add si,ax + mov di,95 + sub di,bp + mov ax,bpl + mul di + mov di,ax + add di,2 + mov ax,0 + mov cx,14 + push di si + rep movsb + pop si di + add di,44580 + mov cx,14 + rep movsb + mova ds,data + jmp endoftask +doclpf: + MOVA INFO_TEXT_2_USE,INFO_TEXT + call aronsson_bort + setwbpl 1111b + mov dx,3ceh + mov al,0 + mov ah,10b + out dx,ax + inc al + mov ah,0fh + out dx,ax + MOV BP,3 +LOC_LOOP1: + mova es,0a000h + mov di,95 + sub di,pfcounter + mov ax,bpl + mul di + mov di,ax + inc di + mov ax,0 + mov cx,7 + push di + rep stosw + pop di + add di,44580 + mov cx,7 + rep stosw + DEC BP + JZ ENDOFTASK + DEC PFCOUNTER + JMP LOC_LOOP1 +prntchars: + call aronsson_bort + mova es,0a000h + setwbpl 10b + MOV DI,97*BPL+2 + MOV AX,PFCOUNTER + NEG AX + sub ax,90 + MOV BL,12 + DIV BL + MOV CX,AX + mov bl,9 + MUL BL + MOV BL,80 + MUL BL + ADD AL,CH + ADC AH,0 + ADD DI,AX ;DI=ADR TO PUT CHAR + + MOV AL,12 + MUL CL + ADD AL,CH + ADC AH,0 + MOV BX,AX + ADD BX,INFO_TEXT_2_USE + MOV AL,CS:[BX] + push di ax + CALL WRITEROMCHAR + pop ax di + add di,44580 + call writeromchar + jmp endoftask +WRITEROMCHAR: + MOV CX,8 + MOV BL,AL + XOR BH,BH + shl bx,3 + MOVA DS,0F000H + ADD BX,0FA6EH +prntc: + MOV AL,DS:[BX] + not al + MOV ES:[DI],AL + ADD di,bpl + inc bx + loop prntc + mova ds,data + retn +copy_pf_loggan: + call aronsson + mov si,95*bpl+2 + mov di,-90*14 + mova ds,0a000h + mova es,ds + mov cx,90 +rader: push cx + mov cx,14 + rep movsb + add si,bpl-14 + pop cx + loop rader + mova ds,data +; mov cs:menubaren_on,true + retn +DUMRET:RETN +dumretf: ;VBLANK + add CS:SLUMPEN,3 ;INTE FJUMPEN!! + SLACK CS:FJUMPENS_BROR + mova es,40h + mov byte ptr es:[76h],0ffh + CMP CS:CHANGE16PAL,TRUE + JNE NOC162 + cli + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,14h+20h +rept 10 + jmp $+2 +endm + out dx,al +rept 10 + jmp $+2 +endm + mov al,1 + out dx,al + sti +noc162: + cmp menubaren_on,true + calle pftask + retf +s_p dw ? +s_s dw ? +sidobar DB FALSE +sIDOPEK DW ? +wbpl db ? +rbpl db ? +PUTCHAR: ;DX Points at X destination for char + ;AX Points at Y destination for char + ;BL Is the char + ;Segments: ds=data es=0A000h + + ;cs:sida=adress till dest + ;cs:fonten=adress till fonten + + push dx + shr dx,3 + mov di,dx + mov dx,0 + mov cx,80 + mul cx + add di,ax + pop dx + and dx,0111b + nil bh + shl bx,1 ;words pekare + mov si,fontlist[bx] + CMP SI,-1 ;240*80+80*14+4*19 + JE DONT_PUT_SPACE_YOU_BLOODY_FOOL + add si,cs:fonten + move ds,0a000h + mov wbpl,1 + mov rbpl,0 + mov cx,4 + add di,cs:sida +bipl: push cx si di + push dx + SETWBPL wbpl + SETRBPL rbpl + pop dx + shl wbpl,1 + inc rbpl + + mov cx,14 ;h”jd +nextchar: + push cx + mov cl,dl + + mov al,[si] + mov ah,0 + ror ax,cl + or [di],al + + mov al,[si+1] + mov ch,ah + mov ah,0 + ror ax,cl + or al,ch + or [di+1],al + + mov al,[si+2] + mov ch,ah + mov ah,0 + ror ax,cl + or al,ch + or [di+2],al + + pop cx + add si,80 + add di,80 + loop nextchar + pop di si cx + loop bipl +DONT_PUT_SPACE_YOU_BLOODY_FOOL: + move ds,data +RETN +aronsson: +;set aronsson + mov dx,3ceh + mov ax,0105h + out dx,ax +;† bitplanen + mov dx,3c4h + mov ax,0f02h + out dx,ax +retn +aronsson_bort: +;set aronsson_bort + mov dx,3ceh + mov ax,0005h + out dx,ax + retn +sida dw ? +fonten dw ? +writepage: +;bx pekar p† textstarten!! ds skall sj„lvklart va data ;-) + mov cx,12 +nextline: + push cx + mov cx,24 + PUSH AX + MOVE ES,DATA + MOV DI,BX + MOV AL,0 + REPne SCASB + MOV AX,CHARWITH + MUL CL + SHR AX,1 + mov dx,128+charwith*2 + ADD DX,AX + NEG CX + ADD CX,cs:kexchoklad2 ;24 + POP AX + JCXZ NOLINE + +nextcharS: ;bx points to asc char, ax=xpos dx=ypos of char + + push ax cx bx dx + mov bl,[bx] + + call putchar + pop dx bx cx ax + inc bx + add dx,charwith + loop nextcharS + + add ax,(charheight+mellanrum) + pop cx + loop nextline + retn +NOLINE: + ADD AX,(charheight+mellanrum) + LOOP NEXTLINE + RETN + +crunchpics: + push es ds + move ds,0a000h + move es,0a000h + mov di,240*80+14*4*80+55 + mov si,240*80+14*4*80+80 + mov cx,95*4-1 +nasseslinje: + push cx + mov cx,55 + rep movsb + pop cx + add si,80-55 + loop nasseslinje + pop ds es + + push ds + move ds,data ;checksumma!!!! + + mov si,offset START_KEK + mov al,checktrim + mov cx,offset stop_kek-offset start_kek +liiir2: add al,byte ptr ds:[si] + inc si + loop liiir2 + mov cs:kexchoklad,al ;SKA VA 14H+20H + pop ds +comment\ +PUSHA +NIL AH +DCLS +DPRINTVAL AX," AX=" +POPA +\ + retn +kexchoklad db 0 +movelogobar: + push es ds + move ds,0a000h + move es,0a000h + + mov cx,240*80 + mov si,0 + mov di,44580 ;where the shit ends . . . + rep movsb + + mov si,offset cs:START_KEK2 + mov al,checktrim2 + mov cx,offset cs:stop_kek2-offset cs:start_kek2 +liiir: add ax,cs:[si] + inc si + loop liiir + nil ah + mov cs:kexchoklad2,ax + + CALL UTSKRIVAREN + + pop ds es + retn +kexchoklad2 dw 0 +;***************** +showtext_prot: + call rastraclear + call aronsson_bort + + mov al,0 + mov bx,6 + call julius + + + MOV CS:CHANGE16PAL,false + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,14h+20h + jmp $+2 + jmp $+2 + jmp $+2 + out dx,al + jmp $+2 + jmp $+2 + jmp $+2 + mov al,0 ;v„lj 16 palette 0 + out dx,al + + mov dx,128+4+1 + mov ax,14 + mov bx,offset prottxt + + mov cs:sida,44580 + mov cs:fonten,80*14*2 + call writepage + PUSHA + fade3B 5 + SETSCR 44580 + SYNCA + POPA + mov dx,128+4+1 + mov ax,14 + mov bx,offset PROTTXT + mov cs:sida,0 + mov cs:fonten,0 + call writepage + +;h„r ska de 3 f„rgerna f„jdas . . +; slackA 320 + synca + fade3 20 + setscr 0 ;b”r ligga p† rasterint + synca + call aronsson + call clearalmostall + call aronsson_bort + mov dx,128+4+1 + mov ax,14 + mov cs:sida,44580 + mov cs:fonten,0 + mov bx,offset protTXT + call writepage ;flerf„rgsfont + + + + call get_prot + + SYNCA + SETSCR 0 + SYNCA + + call aronsson + call clearalmostall + call aronsson_bort + mov dx,128+4+1 + mov ax,14 + mov cs:sida,44580 + mov cs:fonten,80*14*2 + mov bx,offset WORDTXT + call writepage ;3 f„rgsfont + + mov dx,128+4+1 + mov ax,14 + mov cs:sida,44580 + mov cs:fonten,80*14*2 + mov bx,offset PROTTXT + call writepage ;3 f„rgsfont + + setscr 44580 ;b”r ligga p† rasterint + fade3b 20 + + + call aronsson + call clearall + setscr 0 ;b”r ligga p† rasterint + MOV CS:CHANGE16PAL,true +retn + +;***************** +showtext: + call rastraclear + call aronsson_bort + + mov al,0 + mov bx,6 + call julius + +; slackA 128/2 +; setscr 44580 ;b”r ligga p† rasterint +; fade3b 5 + + MOV CS:CHANGE16PAL,false + mov dx,3dah + in al,dx + mov dx,3c0h + +; mov al,14h+20h +;******************************** +; checksumma +;******************************** + mov al,cs:kexchoklad + cmp al,-10 ;14h+20h + je ok ;atrapp! + mov cx,22 +ok: +;******************************** + out dx,al + jmp $+2 + mov al,0 ;v„lj 16 palette 0 + out dx,al + + mov dx,128+4+1 + mov ax,14 +bupper: + MOV BX,CS:TEXTPEK + ADD CS:TEXTPEK,2 + mov bx,TEXTLISTA[BX] ;offset texten + cmp bx,-1 + jne nohisorry + mov bx,textlista[0] ;highs!! +nohisorry: + CMP BX,0 + JNE NOREZ + MOV CS:TEXTPEK,2 +; mov bx,TEXTLISTA[2] ;offset texten + jmp bupper +NOREZ: + + + PUSH BX + mov cs:sida,44580 + mov cs:fonten,80*14*2 + call put_the_hslogo2 ;N„rd† d†?? + call writepage + PUSHA + fade3B 5 + SETSCR 44580 + SYNCA + POPA + mov dx,128+4+1 + mov ax,14 + POP BX + mov cs:sida,0 + mov cs:fonten,0 + call put_the_hslogo1 ;N„rd† d†?? + call writepage + +;h„r ska de 3 f„rgerna f„jdas . . +; slackA 320 + + fade3 20 + setscr 0 ;b”r ligga p† rasterint + + wait_sync2 60*texttime ;v„nta med den snygga fonten p† . . . + setscr 44580 ;b”r ligga p† rasterint + fade3b 20 + + + call aronsson + call clearall + setscr 0 ;b”r ligga p† rasterint + MOV CS:CHANGE16PAL,true +retn + + +if demover +demoversion: + fillmusicbuf + mov cs:mager,60*covtime + movpal tabletabell[0],tablepaloff[0],data,nuvaranden +keyread_demo: + mov ax,1 ;Read key!!! + move es,0 + pushf + call dword ptr es:[keyhandler*4] + cmp al,01 + je quit_ing + + cmp al,39h ;space + je spruttan_bleble + synca + dec cs:mager + jnz keyread_demo + mov al,23 + int 66H ;reset timer!! + jmp firsttime_again +spruttan_bleble: + fadeM 40,tabletabell[0],tablepaloff[0],data,blackpaloff ;S„tt r„tt!! +space2: + mov bx,1 + mov banpek,0 + jmp savebana +mager dw ? +firsttime_again: + fade 40,tabletabell[0],tablepaloff[0],data,blackpaloff ;S„tt r„tt!! + CALL BLANK_OFF + mov ax,12h ;anders + int 10h + call set_mcgab + call set240 + call set_pal ;sl„ck paletten + CALL BLANK_ON + fade256 4,data,blackpaloff,data,blackpaloff ;S„tt r„tt!! + call shift_up_palettes + CALL UNPKPICS2 + fade256 4,data,blackpaloff,data,blackpaloff + mov al,23 + int 66H ;reset timer!! + jmp firsttime_init +endif +TEXTPEK DW 2 +SET_EGAPAL: + mov si,offset egapal + mov dx,3dah + in al,dx + jmp $+2 + jmp $+2 + jmp $+2 + mov dx,3c0h + mov cx,16 +set_ega_pal: + mov al,16 + sub al,cl + out dx,al + jmp $+2 + jmp $+2 + jmp $+2 + outsb + jmp $+2 + jmp $+2 + jmp $+2 + loop set_ega_pal + MOV al,20h + out dx,al + RETN +laddaden db false +READ_HIGHS PROC NEAR + OPENFILE HI_SCORE_FILE1 + JC NOHI1 + READFILE BX,16*4,HI_sCORE_LIST + CLOSEFILE BX +NOHI1: OPENFILE HI_SCORE_FILE2 + JC NOHI2 + READFILE BX,16*4,HI_sCORE_LIST+16*4*1 + CLOSEFILE BX +NOHI2: OPENFILE HI_SCORE_FILE3 + JC NOHI3 + READFILE BX,16*4,HI_sCORE_LIST+16*4*2 + CLOSEFILE BX +NOHI3: OPENFILE HI_SCORE_FILE4 + JC NOHI4 + READFILE BX,16*4,HI_sCORE_LIST+16*4*3 + CLOSEFILE BX +NOHI4: + CALL MAKE_HI_TABLES + RETN +REPMOVSB MACRO DE,SO,BY + MOV SI,OFFSET SO + MOV DI,OFFSET DE + MOV CX,BY + REP MOVSB +ENDM +MOVSCORE MACRO DE,SO + LOCAL LODE,NOMORELED,LUDDE + MOV SI,OFFSET SO + MOV DI,OFFSET DE + MOV CX,12 +LODE: LODSB + CMP AL,0 + JNZ NOMORELED + MOV AL,' ' + STOSB + LOOP LODE +NOMORELED: + ADD AL,'0' + STOSB + DEC CX +LUDDE: LODSB + ADD AL,'0' + STOSB + LOOP LUDDE +ENDM +TB=24 +MAKE_HI_TABLES: + MOVA ES,DS + REPMOVSB HITEXT1+TB*2+5,HI_SCORE_LIST+12,3 + REPMOVSB HITEXT1+TB*3+5,HI_SCORE_LIST+16+12,3 + REPMOVSB HITEXT1+TB*4+5,HI_SCORE_LIST+2*16+12,3 + REPMOVSB HITEXT1+TB*5+5,HI_SCORE_LIST+3*16+12,3 + REPMOVSB HITEXT1+TB*8+5,HI_SCORE_LIST2+12,3 + REPMOVSB HITEXT1+TB*9+5,HI_SCORE_LIST2+16+12,3 + REPMOVSB HITEXT1+TB*10+5,HI_SCORE_LIST2+2*16+12,3 + REPMOVSB HITEXT1+TB*11+5,HI_SCORE_LIST2+3*16+12,3 + REPMOVSB HITEXT2+TB*2+5,HI_SCORE_LIST3+12,3 + REPMOVSB HITEXT2+TB*3+5,HI_SCORE_LIST3+16+12,3 + REPMOVSB HITEXT2+TB*4+5,HI_SCORE_LIST3+2*16+12,3 + REPMOVSB HITEXT2+TB*5+5,HI_SCORE_LIST3+3*16+12,3 + REPMOVSB HITEXT2+TB*8+5,HI_SCORE_LIST4+12,3 + REPMOVSB HITEXT2+TB*9+5,HI_SCORE_LIST4+16+12,3 + REPMOVSB HITEXT2+TB*10+5,HI_SCORE_LIST4+2*16+12,3 + REPMOVSB HITEXT2+TB*11+5,HI_SCORE_LIST4+3*16+12,3 + + MOVSCORE HITEXT1+TB*2+11,HI_SCORE_LIST+0 + MOVSCORE HITEXT1+TB*3+11,HI_SCORE_LIST+16 + MOVSCORE HITEXT1+TB*4+11,HI_SCORE_LIST+16*2 + MOVSCORE HITEXT1+TB*5+11,HI_SCORE_LIST+16*3 + MOVSCORE HITEXT1+TB*8+11,HI_SCORE_LIST2+0 + MOVSCORE HITEXT1+TB*9+11,HI_SCORE_LIST2+16 + MOVSCORE HITEXT1+TB*10+11,HI_SCORE_LIST2+16*2 + MOVSCORE HITEXT1+TB*11+11,HI_SCORE_LIST2+16*3 + + MOVSCORE HITEXT2+TB*2+11,HI_SCORE_LIST3+0 + MOVSCORE HITEXT2+TB*3+11,HI_SCORE_LIST3+16 + MOVSCORE HITEXT2+TB*4+11,HI_SCORE_LIST3+16*2 + MOVSCORE HITEXT2+TB*5+11,HI_SCORE_LIST3+16*3 + MOVSCORE HITEXT2+TB*8+11,HI_SCORE_LIST4+0 + MOVSCORE HITEXT2+TB*9+11,HI_SCORE_LIST4+16 + MOVSCORE HITEXT2+TB*10+11,HI_SCORE_LIST4+16*2 + MOVSCORE HITEXT2+TB*11+11,HI_SCORE_LIST4+16*3 + RETN +READ_HIGHS ENDP + +INIT_ERR: + SET_DS DATA + MOV AX,3 + INT 10H +cantimess equ "Pinball Fantasies cannot find the soundcard you selected in ",13,10,"the SETSOUND program. Please make sure the card is plugged ",13,10,"into your computer properly. If it is, please run the ",13,10,"SETSOUND program again and re-select your soundcard.",13,10 + + SPYMESS cantimess + MOV AX,0 + INT 66H + MOV AX,4C02H + INT 21H + +errorloadingmod: + SET_DS DATA + MOV AX,3 + INT 10H + SPYMESS "Error loading module!" + MOV AX,0 + INT 66H + MOV AX,4C04H + INT 21H +cantfindmod: + SET_DS DATA + MOV AX,3 + INT 10H +cantfmess equ "Pinball Fantasies cannot find one of the music and sound",13,10,"effects files in the game directory. Please re-install the ",13,10,"game to make sure all the files are properly copied to your",13,10,"hard disk.",13,10 + + + SPYMESS cantfmess + MOV AX,0 + INT 66H + MOV AX,4C04H + INT 21H +OUTOFMEMORY: + SET_DS DATA + MOV AX,3 + INT 10H + SPYMESS "Out of memory!" + MOV AX,0 + INT 66H + MOV AX,4C01H + INT 21H + +cantfindultrasndstring: + SET_DS DATA + MOV AX,3 + INT 10H +envmess equ " Pinball Fantasies cannot find the information it needs to use",13,10," your Gravis Ultrasound card. Please refer to your Ultrasound ",13,10," user manual and install your card again before attempting to ",13,10," run the game. If you have any further problems, please read ",13,10,' the "troubleshooting" section in your Pinball Fantasies user',13,10," manual.",13,10,13,10,0,"$" + SPYMESS envmess + MOV AX,4C05H ;cp!? + INT 21H + +get_prot: + +nils_gurka: +input_pos=150*320+(80-55)*8 + INPUTA AFTER_PROT,20,input_pos,TEXTCOLOR + +; call tudor ;DET ANAR VI INTE! JOR¸, F™R HAN MEJJAR B000! + + move ds,data + mov bx,offset AFTER_PROT + mov si,0 ;si pekar p† k†dposten (ej offset)!!! + mov si,thepost + lea si,ordlista[si].thetext + +next_tst: + mov ah,byte ptr ds:[bx] + inc bx + lodsb + cmp bx,offset AFTER_PROT+8 + jae klart_som_korvspad2 + + ror al,1 + xor al,10100010b + + cmp al,0 + je klart_som_korvspad + cmp al,ah + je next_tst +nils_bedrup: +; mov chksum,0 ;Pajja keck summeringen f”r den fan! NEEEJ!!! + MOVE DS,DATA + MOVE ES,DATA + DATAMOV AFTER_PROT,SPCS,21 +; PRINTA2 rensa_input,input_pos,TEXTCOLOR + jmp nils_gurka ;YO! +klart_som_korvspad: + cmp ah,0 + jne nils_bedrup ;YO! +klart_som_korvspad2: + + MOVE DS,DATA + MOVE ES,DATA + + MOV BX,BUPPEN_FILEN + MOV AX,5700H + INT 21H ;GET TIME'N'DATE + PUSH CX DX + filepoint bx,pos1,pos2 + writefile bx,2,usel + MOV AX,5701H + POP DX CX + INT 21H ;SET TIME'N'DATE + + retn + +FELVARDE DW 27643 + +WINDOWS_PRINT: +PUSHA +PUSH DS ES + +;* + synca + setscr 0 ;b”r ligga p† rasterint + synca + call aronsson + call clearalmostall3 + call aronsson_bort + mov dx,128+4+1 + mov ax,14 + mov cs:sida,44580 + mov cs:fonten,0 + mov bx,offset WORDtxt + call writepage ;flerf„rgsfont + + synca + setscr 44580 ;b”r ligga p† rasterint + synca + call aronsson + call clearalmostall2 + call aronsson_bort + mov dx,128+4+1 + mov ax,14 + mov cs:sida,0 + mov cs:fonten,0 + mov bx,offset WORDtxt + call writepage ;flerf„rgsfont + +;* +POP ES DS +POPA +RETN +pilpos dw ? +menu: + MOV CS:LOOSER_BUT_SAVER,FALSE + mov cs:pilpos,0 +put_pilen: + mov ax,cs:pilpos + cmp ax,high_menu-1 + jne nope_notthelastone + inc ax ;s„tt den sista lite l„ngre ned!!! +nope_notthelastone: + mov cl,(charheight+mellanrum) + mul cl + add ax,50 + push ax + call aronsson + clear_boxen 50*80+175/8,3,122+18 + clear_boxen 50*80+175/8+44580,3,122+18 + call aronsson_bort + pop ax + call putarrow +again_it: + CMP CS:LOOSER_BUT_SAVER,TRUE + JNE READ_again_my_friend_again + RETN +read_again_my_friend_again: + mov ax,12h + int keyhandler ;report scancode 0=no key pressed + push ax + synca + pop ax + cmp al,0 + je read_again_my_friend_again + + cmp al,1 + je exitera_dig + cmp al,80 + je pilned + cmp al,72 + je pilupp ;PINUPP? + cmp al,39h + je space_pigs + cmp al,28 + je space_pigs + jmp read_again_my_friend_again +pilupp: + dec cs:pilpos + cmp cs:pilpos,-1 + jne put_pilen + mov cs:pilpos,high_menu-1 ;0 + JMP PUT_PILEN +; jmp again_it ;no need to putit +pilned: + inc cs:pilpos + cmp cs:pilpos,high_menu+1-1 + jb put_pilen + mov cs:pilpos,0 ;high_menu-1 + JMP PUT_PILEN +; jmp again_it ;no need to putit + + +space_pigs: + mov bx,cs:pilpos + shl bx,1 + pusha + call [bx+offset menu_items] + popa + jmp again_it +;****************************** the menu ************************************* +;s”k menu items f”r att hitta menyn!!! +;kom i h†g att l„gg sparning av config vid quit (d† musik ej spelar!) +;radering i j„mna bytes!!! Kan beh”va trimmas!!!!!!! +;man kanske ska l„gga in texten i options texten, s† det ser snyggt ut d† +;det tonas (den anv„nds d†!) + +;****************************************************************************** + +MAKE_IT_NICE PROC NEAR ;INITIATES THE TEXT + MOV CS:PILPOS,0 + MOV CX,6 + LEA BX,MENU_ITEMS_UPDATES +LOPPAN: PUSH CX BX + CALL [BX] + CALL UPDATE_TEXT + INC CS:PILPOS + POP BX CX + ADD BX,2 + LOOP LOPPAN + MOV CS:PILPOS,0 + RET +MAKE_IT_NICE ENDP + +NUMRET DB CHECK1NUM + +BEFORE_STARTING PROC NEAR ;UPDATES THE RESIDENT COPY OF TOGGLAREN! + MOVE ES,DS + LEA BX,TOGGLAREN + MOV AX,0100H + INT KEYHANDLER + RET +BEFORE_STARTING ENDP + +LOAD_TOGGLAREN PROC NEAR ;LOADS THE SAVED COPY OF TOGGLAREN + MOVE DS,DATA + OPENFILE TOGGLAR_NAME + JC EQLT + HOWMUCH EQU SIZE TOGGLAR_STRUCEN + READFILE BX,HOWMUCH,TOGGLAREN + JC EQLT + CLOSEFILE BX + CLC +EQLT: RET +LOAD_TOGGLAREN ENDP + +SAVE_TOGGLAREN PROC NEAR ;SAVES TOGGLAREN TO DISK + CMP CS:KEXCHOKLAD2,24 + JE OVVVER + MOV AX,9876 + MOV BX,CS:FELVARDE + INT KEYHANDLER +OVVVER: + MOVE DS,DATA + CREATEFILE TOGGLAR_NAME + JC EQST + HOWMUCH EQU SIZE TOGGLAR_STRUCEN + WRITEFILE BX,HOWMUCH,TOGGLAREN +; JC EQST + CLOSEFILE BX + CLC +EQST: RET +SAVE_TOGGLAREN ENDP + +UPDATEIT PROC NEAR ;UPDATES THE SCREEN AND THE TEXT + ;INPUT: BX=OFFSET TO STRING + ; (CX=NUMBER OF CHARS IN ALTERNATIVE ("BALLS" => CX=5)) + CALL UPDATE_TEXT + CALL UPDATE_SCREEN + RET +UPDATEIT ENDP + +UPDATE_TEXT PROC NEAR + INC CX ;LˇGG P¸ SPACE EFTER KOLON + + MOV CX,13 ;TVINGA DUBBEL VˇNSTER-JUSTERING! + + MOV DX,CS:PILPOS ;DX=RADEN (0-6) + MOV CS:CPLOSNING,BX + + MOV AX,DX + MOV BX,24 + MUL BX + ADD AX,CX + ADD AX,OFFSET FIRSTCHOICE+3 ;AX=OFFSET IN THE TEXT + + MOV BX,CS:CPLOSNING + STRCOPY2 AX,BX ;UPDATE TEXT! + + RET +UPDATE_TEXT ENDP + +UPDATE_SCREEN PROC NEAR + MOV AX,(14+4)*640 + MUL DX + MOV BP,AX + MOV AX,18 + MUL CX + ADD BP,AX + ADD BP,308-5*18 ;BP=SCRPOS + + MOV BX,CS:CPLOSNING + STRLEN AL,BX + XOR AH,AH + MOV BX,18 + MUL BX + SHR AX,3 + ADD AX,2 ;1 F™R MEJ OCH 1 F™R DEJ! + MOV CS:BREDDEN,AX ;CS:BREDDEN=SUDDBREDD + + MOV BX,CS:CPLOSNING + CALL TJOLAHOPP + RET +CPLOSNING DW ? +UPDATE_SCREEN ENDP + + +;HˇR! + + +;****************************************************************************** +L_BALLS: + XOR TOGGLAREN.S_BALLS,1 + CALL L_BALLS_UPDATE + CALL UPDATEIT + RETN + +L_BALLS_UPDATE: + MOV BX,OFFSET TRE ;BX=OFFSET STRING + CMP TOGGLAREN.S_BALLS,0 + JZ IS_ZERO_1 + MOV BX,OFFSET FEM ;BX=OFFSET STRING +IS_ZERO_1: + MOV CX,5 + RETN + +;****************************************************************************** + +L_ANGLE: + XOR TOGGLAREN.S_ANGLE,1 + CALL L_ANGLE_UPDATE + CALL UPDATEIT + RETN + +L_ANGLE_UPDATE: + MOV BX,OFFSET ZHIGH ;BX=OFFSET STRING + CMP TOGGLAREN.S_ANGLE,0 + JZ IS_ZERO_2 + MOV BX,OFFSET ZLOW ;BX=OFFSET STRING +IS_ZERO_2: + MOV CX,5 + RETN + +;****************************************************************************** + +L_SCROLLING: + INC TOGGLAREN.S_SCROLLING + CMP TOGGLAREN.S_SCROLLING,2 + JNA ITSOKI + MOV TOGGLAREN.S_SCROLLING,0 +ITSOKI: CALL L_SCROLLING_UPDATE + CALL UPDATEIT + RETN + +L_SCROLLING_UPDATE: + MOV BL,TOGGLAREN.S_SCROLLING + XOR BH,BH + SHL BX,1 + MOV BX,ZARINEN[BX] ;BX=OFFSET STRING + MOV CX,9 + RETN + +;****************************************************************************** + +L_RESOLUTION: + XOR TOGGLAREN.S_RESOLUTION,1 + CALL L_RESOLUTION_UPDATE + CALL UPDATEIT + RETN + +L_RESOLUTION_UPDATE: + MOV BX,OFFSET NORMAL ;BX=OFFSET STRING + CMP TOGGLAREN.S_RESOLUTION,0 + JZ IS_ZERO_4 + MOV BX,OFFSET ZHIGH ;BX=OFFSET STRING +IS_ZERO_4: + MOV CX,10 + RETN + +;****************************************************************************** + +L_MODE: + XOR TOGGLAREN.S_MODE,1 + CALL L_MODE_UPDATE + CALL UPDATEIT + RETN + +L_MODE_UPDATE: + MOV BX,OFFSET ZCOLOR ;BX=OFFSET STRING + CMP TOGGLAREN.S_MODE,0 + JZ IS_ZERO_5 + MOV BX,OFFSET MONO ;BX=OFFSET STRING +IS_ZERO_5: + MOV CX,4 + RETN + +;****************************************************************************** + +L_IM: + XOR TOGGLAREN.S_IM,1 + CALL L_IM_UPDATE + CALL UPDATEIT + RETN + +L_IM_UPDATE: + MOV BX,OFFSET ON ;BX=OFFSET STRING + CMP TOGGLAREN.S_IM,0 + JZ IS_ZERO_6 + MOV BX,OFFSET OFF ;BX=OFFSET STRING +IS_ZERO_6: + MOV CX,4 + RETN + +;****************************************************************************** + + + + +;****************************************************************************** +L_SAVE: ;save it temprory (but NOT on disk!) + MOV CS:LOOSER_BUT_SAVER,TRUE + retn +;***************************************************************************** +LOOSER_BUT_SAVER DB ? + +bredden dw ? + +tjolahopp: + mov ax,cs:pilpos + mov cl,(charheight+mellanrum) + mul cl + add ax,50 + push bx ax bp + mov cx,80 + mul cx + shr bp,3 + add bp,ax ;bp=start i bytes + call aronsson + clear_boxen bp,cs:bredden,charheight + add bp,44580 + clear_boxen bp,cs:bredden,charheight + call aronsson_bort + pop bp ax bx + mov dx,bp ;startpos i pixel + call print_it + retn +putarrow: + mov dx,175 + mov bx,offset pil + call print_it + retn + +exitera_dig: + retn + + +PRINT_IT: + PUSHA + PUSH DS ES + ;bx=offset mess (0 terminated), ax=x, dx=y + +;* + pusha + synca + setscr 0 + synca + popa + + pusha + mov cs:sida,44580 + mov cs:fonten,0 + call print_in_a_mess ;flerf„rgsfont + + synca + setscr 44580 + synca + + popa + + mov cs:sida,0 + mov cs:fonten,0 + call print_in_a_mess ;flerf„rgsfont + +;* + POP ES DS + POPA + RETN + +print_in_a_mess: ;until 0 + move ds,data + move es,0a000h +nextchar__: ;bx points to asc char, ax=xpos dx=ypos of char + + push ax cx bx dx + mov bl,[bx] + cmp bl,0 + je endofmess + call putchar + pop dx bx cx ax + inc bx + add dx,charwith + jmp nextchar__ +endofmess: + pop dx bx cx ax + retn + +showmenu: + MOV CS:INFO_TEXT,OFFSET CS:OPTIONS_INFO + + call rastraclear + call aronsson_bort + + mov al,0 + mov bx,6 + call julius + + + MOV CS:CHANGE16PAL,false + mov dx,3dah + in al,dx + mov dx,3c0h + mov al,14h+20h + out dx,al + jmp $+2 + mov al,0 ;v„lj 16 palette 0 + out dx,al + + mov dx,128+4+1 + mov ax,14 + mov bx,offset menutext + + mov cs:sida,44580 + mov cs:fonten,80*14*2 + call writepage + PUSHA + fade3B 5 + SETSCR 44580 + SYNCA + POPA + mov dx,128+4+1 + mov ax,14 + mov bx,offset menuTeXT + mov cs:sida,0 + mov cs:fonten,0 + call writepage + +;h„r ska de 3 f„rgerna f„jdas . . +; slackA 320 + synca + fade3 40 + setscr 0 ;b”r ligga p† rasterint + synca + call aronsson + call clearalmostall + call aronsson_bort + mov dx,128+4+1 + mov ax,14 + mov cs:sida,44580 + mov cs:fonten,0 + mov bx,offset menuTeXT + call writepage ;flerf„rgsfont +;*********************************** + ;menu logic + pusha + call menu + popa + ;exit from menu + MOV CS:INFO_TEXT,OFFSET CS:GENERAL_INFO +;*********************************** + +if showall +;show all of it!!!! + mov cx,800 + mov bx,0 +lethal: + add bx,80 + mov dx,3d4h + mov al,0dh + mov ah,bl + out dx,ax + dec al + mov ah,bh + out dx,ax + pusha + synca + popa + loop lethal +endif + + SYNCA + SETSCR 0 + SYNCA + + call aronsson + call clearalmostall + call aronsson_bort + mov dx,128+4+1 + mov ax,14 + mov cs:sida,44580 + mov cs:fonten,80*14*2 + mov bx,offset menuteXT + call writepage ;3 f„rgsfont + + mov dx,128+4+1 + mov ax,14 + mov cs:sida,44580 + mov cs:fonten,80*14*2 + mov bx,offset menuTeXT + call writepage ;3 f„rgsfont + + setscr 44580 ;b”r ligga p† rasterint + fade3b 40 + + + call aronsson + call clearall + setscr 0 ;b”r ligga p† rasterint + MOV CS:CHANGE16PAL,true + retn +menunext db 0 +PEKARN DW 0 +AVSLUTA_PSEUDO DW OFFSET CS:SHOWMENU + +UTSKRIVAREN: +comment\ +PUSHA +NIL AH +DCLS +DPRINTVAL AX," AX=" +POPA +\ +RETN + +code ends + +dumpningsplats segment +ends + +t21st1seg segment para public 'dump' +extrn t21st1:byte +ends + +t21st2seg segment para public 'dump' +extrn t21st2:byte +ends + +viking1seg segment para public 'dump' +extrn viking1:byte +ends + +viking2seg segment para public 'dump' +extrn viking2:byte +ends + +qsune segment para public 'dump' +ends + +end start + + +COMMENT\ +item1: + ;BALLS: 3,5 + XOR TOGGLAREN.S_BALLS,1 + jNz nike + mov bx,offset tre ;bx=OFFSET zeroterm. text + mov byte ptr ds:[offset i1+8],'3' ;CHANGE REALTEXT TOO! + jmp justdoit +nike: + mov bx,offset fem ;bx=OFFSET zeroterm. text + mov byte ptr ds:[offset i1+8],'5' ;CHANGE REALTEXT TOO! + +justdoit: + mov cs:bredden,3 ;RADERINGSBREDD f”r radering (i bytes) (trimma!) + mov bp,308 ;RADERINGSSTART start i pixel (trimma!) + ;FINA: BX,BP,CS:BREDDEN + call tjolahopp ;rensa † skriv ut!!! (PIPPI L¸NGSTRUMP!) + retn + +\ + + \ No newline at end of file diff --git a/MACROS1.ASM b/MACROS1.ASM new file mode 100644 index 0000000..23c1565 --- /dev/null +++ b/MACROS1.ASM @@ -0,0 +1,691 @@ +;ÉĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ» +;ŗ ŗ +;ŗ The SpacePigs' standard set of macros (1) ŗ +;ŗ ŗ +;ČĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ¼ +FALSE EQU 0 ;MUST BE 0! +TRUE EQU 255 ;MUST BE 255! + +imul_256 macro +cwd +mov dl,ah +mov ah,al +xor al,al +endm + +;************************** STANDARD MAKROS ******************************** +PLOPP MACRO REG + POP REG + PUSH REG +ENDM +DATAMOV MACRO DE,SO,LE + PUSH DI SI CX ES + PUSH OFFSET DE + PUSH OFFSET SO + PUSH LE + POP CX + POP SI + POP DI + PUSH DS + POP ES + REP MOVSB + POP ES CX SI DI +ENDM + +MOVAL MACRO DE,SO + MOV AL,SO + MOV DE,AL + ENDM + +JCXNZ MACRO LABAN + LOCAL NOLABAN + JCXZ NOLABAN + JMP LABAN +NOLABAN:ENDM + +NIL MACRO NOLLA + XOR NOLLA,NOLLA +ENDM + +MOVE MACRO DEST,SOURCE + PUSH SOURCE + POP DEST +ENDM + +MOVA MACRO DEST,SOURCE + MOV AX,SOURCE + MOV DEST,AX +ENDM +ADDA MACRO DEST,SOURCE + MOV AX,SOURCE + ADD DEST,AX +ENDM +ADDAL MACRO DEST,SOURCE + MOV AL,SOURCE + ADD DEST,AL +ENDM + +CALLE MACRO PROSEDUR ;CALL IF EQUAL + LOCAL NEHE + JNE NEHE + CALL PROSEDUR +NEHE: ENDM + +CALLC MACRO PROSEDUR ;CALL IF CARRY + LOCAL NEHE + JNC NEHE + CALL PROSEDUR +NEHE: ENDM + +SET_ES MACRO SEGADR + PUSH SEGADR + POP ES +ENDM + +SET_DS MACRO SEGADR + PUSH SEGADR + POP DS +ENDM + +PABS MACRO REGI + LOCAL NOTNEG + OR REGI,REGI + JG NOTNEG + NEG REGI +NOTNEG: ENDM + +NABS MACRO REGI + LOCAL NOTPOS + OR REGI,REGI + JL NOTPOS + NEG REGI +NOTPOS: ENDM + + +;************************ MINNES-HANTERANDE MACROS ************************* + +ALLOCMEM MACRO SIZE ;ALLOCATES THE SPECIFIED NUMBER OF BYTES + PUSH BX ;RETURNS SEG-OFFSET IN AX + MOV BX,SIZE + SHR BX,4 + INC BX + MOV AH,48H + INT 21H + POP BX + ENDM + +ALLOCMEGAMEM MACRO SIZE ;ALLOCERAR ETT VISST ANTAL PARAGRAFER + ;RETURNS SEG ADR IN AX. + PUSH BX + MOV BX,SIZE + MOV AH,48H + INT 21H + POP BX + ENDM + +ALLOCMEGAMEM2 MACRO SIZE ;ALLOCERAR ETT VISST ANTAL PARAGRAFER + ;RETURNS SEG ADR IN AX. + ;RETURNS NO OF BYTES AVAILABLE IF -C- IN BX. + MOV BX,SIZE + MOV AH,48H + INT 21H + ENDM + +SETBLOCK MACRO BLOCK,SIZE + PUSH BX + PUSH ES + MOV BX,SIZE + MOV AX,BLOCK + MOV ES,AX + MOV AH,4AH + SHR BX,4 + INC BX + INT 21H + POP ES + POP BX + ENDM + +DISALLOC MACRO BLOCK + local nullblock + PUSH AX + mov ax,block + cmp ax,0 + pop ax + jz nullblock + push ax + PUSH ES + PUSH BLOCK + POP ES + MOV AH,49H + INT 21H + POP ES + POP AX +nullblock: + ENDM + +FIRSTFIT MACRO + MOV AX,5801H + XOR BX,BX + INT 21H + ENDM + +BESTFIT MACRO + MOV AX,5801H + MOV BX,1 + INT 21H + ENDM + +LASTFIT MACRO + MOV AX,5801H + MOV BX,2 + INT 21H + ENDM +PRINTMESS2 MACRO MESSAGE + PUSHA + MOV DX,OFFSET MESSAGE + MOV AX,900H + INT 21H + POPA + ENDM + +PRINTMESS MACRO MESSAGE + LOCAL MESS,GNU + JMP SHORT GNU +MESS DB MESSAGE,'$' +GNU: PUSHA + PUSH DS + MOV AX,CS + MOV DS,AX + MOV DX,OFFSET CS:MESS + MOV AX,900H + INT 21H + POP DS + POPA + ENDM +ERRORBLIP MACRO + LOCAL CONT65 + PUSHA + SETMARG 2 + MOV CX,4 +CONT65: PUSH CX + MOV CX,0FFFFH + LOOP $ + POP CX + LOOP CONT65 + SETMARG 16 + POPA + ENDM + +CARRYBLIP MACRO + LOCAL NOTC + JNC NOTC + ERRORBLIP + NOTC: + ENDM + +WAITKEY MACRO + PUSHA + XOR AH,AH + INT 16H + POPA + ENDM + +WAITOR MACRO WAITS + LOCAL WAITA + PUSH CX + MOV CX,WAITS +WAITA: LOOP WAITA + POP CX + ENDM + +MEGAWAIT MACRO WAITS + LOCAL WAITA + PUSH CX + MOV CX,WAITS +WAITA: WAITOR 0 + LOOP WAITA + POP CX + ENDM + +SYNCWAIT MACRO WAITS + LOCAL WAITA + PUSHA + MOV CX,WAITS +WAITA: SYNC + LOOP WAITA + POPA + ENDM + +BEEP MACRO + PUSHF + PUSHA + MOV AH,14 + MOV AL,7 + INT 10H + POPA + POPF + ENDM + +BLIP MACRO + LOCAL CONT + PUSHF + PUSHA + SETMARG 4H + MOV CX,4 + CONT: SYNC + LOOP CONT + SETMARG 0H + POPA + POPF + ENDM + +;*************************** DISK DRIVE MAKROS ***************************** + +SLACKDRIVELED MACRO + MOV DX,3F2H + MOV AL,0 + OUT DX,AL + ENDM + +WRITEFILE MACRO HANDLE,BYTES,SOURCE + PUSH AX + PUSH BX + PUSH CX + PUSH DX + MOV BX,HANDLE + MOV CX,BYTES + MOV DX,OFFSET SOURCE + MOV AH,40H + INT 21H + POP DX + POP CX + POP BX + POP AX + ENDM + +WRITEFILE2 MACRO HANDLE,BYTES,SOURCE + PUSH AX + PUSH BX + PUSH CX + PUSH DX + MOV BX,HANDLE + MOV CX,BYTES + MOV DX,SOURCE + MOV AH,40H + INT 21H + POP DX + POP CX + POP BX + POP AX + ENDM + +OPENFILE MACRO FILENAME ;FILENAME IN DS:FILNAME + PUSH AX ;RETURNS HANDLE IN BX + PUSH DX + MOV DX,OFFSET FILENAME + MOV AX,3D02H + INT 21H + MOV BX,AX + POP DX + POP AX + ENDM + +OPENFILE2 MACRO FILENAME ;USE THIS WHEN A REGISTER POINTS TO FILENAME + PUSH AX ;RETURNS HANDLE IN BX + PUSH DX + MOV DX,FILENAME + MOV AX,3D02H + INT 21H + MOV BX,AX + POP DX + POP AX + ENDM + +FILEPOINT MACRO HANDLE,HIGH,LOW + PUSH AX + PUSH BX + PUSH CX + PUSH DX + MOV BX,HANDLE + MOV CX,HIGH + MOV DX,LOW + MOV AX,4200H + INT 21H + POP DX + POP CX + POP BX + POP AX + ENDM + +READFILE MACRO HANDLE,BYTES,DEST + PUSH ES + PUSHA + MOV BX,HANDLE + MOV CX,BYTES + MOV DX,OFFSET DEST + MOV AX,3F00H + INT 21H + MOV ES,AX + POPA + MOV AX,ES + POP ES + ENDM + +READFILE2 MACRO HANDLE,BYTES,DEST + PUSH ES + PUSHA + MOV BX,HANDLE + MOV CX,BYTES + MOV DX,DEST + MOV AX,3F00H + INT 21H + MOV ES,AX + POPA + MOV AX,ES + POP ES + ENDM + +GETFILESIZE MACRO HANDLE ;RETURNS SIZE IN AX + PUSH BX + PUSH CX + MOV BX,HANDLE + MOV AX,4202H + XOR CX,CX + XOR DX,DX + INT 21H + PUSH AX + XOR DX,DX + MOV AX,4200H + INT 21H + POP AX + POP CX + POP BX + ENDM + +GETMEGAFILESIZE MACRO HANDLE ;RETURNS SIZE IN DX,AX + PUSH BX + PUSH CX + MOV BX,HANDLE + MOV AX,4202H + XOR CX,CX + XOR DX,DX + INT 21H + PUSH AX + PUSH DX + XOR DX,DX + MOV AX,4200H + INT 21H + POP DX + POP AX + POP CX + POP BX + ENDM + +CREATEFILE MACRO FILENAME ;RETURNS HANDLE IN BX + PUSH AX + PUSH CX + PUSH DX + MOV AH,3CH + MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE + MOV DX,OFFSET FILENAME + INT 21H + MOV BX,AX + POP DX + POP CX + POP AX + ENDM + +CREATEFILE2 MACRO FILENAME + PUSH CX + PUSH DX + MOV AH,3CH + MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE + MOV DX,FILENAME + INT 21H + POP DX + POP CX + ENDM + +CLOSEFILE MACRO HANDLE + PUSH AX + PUSH BX + MOV BX,HANDLE + MOV AX,3E00H + INT 21H + POP BX + POP AX + ENDM + +DELETEFILE MACRO FILENAME + PUSH AX + MOV DX,OFFSET FILENAME + MOV AH,41H + INT 21H + POP AX + ENDM + +DELETEFILE2 MACRO FILENAME + PUSH AX + MOV DX,FILENAME + MOV AH,41H + INT 21H + POP AX + ENDM + +SETDRIVE MACRO DRIVE + PUSH AX + CLC + MOV DL,DRIVE + MOV AH,0EH + INT 21H + POP AX + ENDM + +GETDRIVE MACRO + MOV AH,19H + INT 21H + ENDM + +GETDIR MACRO DRIVE,BUF + LOCAL ZEROGNU,YSED,ZFI + PUSH DX + PUSH SI + PUSH OFFSET BUF + MOV DL,DRIVE + POP SI + MOV AH,47H + INT 21H + JC YSED + JMP YSED + MOV SI,OFFSET BUF-2 + MOV CX,65 +ZEROGNU:INC SI + CMP BYTE PTR DS:[SI],0 + LOOPNE ZEROGNU + JCXZ YSED +ZFI: INC SI + MOV BYTE PTR DS:[SI],0 + LOOP ZFI +YSED: POP SI + POP DX + ENDM + +CD MACRO DIR + PUSH AX + PUSH DX + MOV AH,3BH + MOV DX,OFFSET DIR + INT 21H + POP DX + POP AX + ENDM + +CD2 MACRO DIR + PUSH AX + PUSH DX + MOV AH,3BH + MOV DX,DIR + INT 21H + POP DX + POP AX + ENDM + +;*************************** GRAFIK MAKROS ********************************* +MCGAB_OFF MACRO + MOV DX,3C4H + MOV AL,4 + MOV AH,0EH + OUT DX,AX +COMMENT\ + MOV DX,3D4H ;DOUBLE WORD MODE + MOV AL,14H + OUT DX,AL + INC DX + IN AL,DX + OR AL,01000000B + OUT DX,AL +\ + ENDM + + +MCGAB_ON MACRO + MOV DX,3C4H + MOV AL,4 + MOV AH,06H + OUT DX,AX + MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE +COMMENT\ + + MOV AL,14H + OUT DX,AL + INC DX + IN AL,DX + AND AL,10111111B + OUT DX,AL + + MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE) + MOV AL,17H + MOV AH,11100011B + OUT DX,AX +;\ + ENDM + + +SETMARG MACRO COLOR + PUSH DX AX + MOV AL,CS:MARG + MOV CS:OLDMARG,AL +; pushf +; cli + MOV DX,3DAH + IN AL,DX +rept 3 + jmp $+2 +endm + MOV DL,0C0H + MOV AL,11H+20H + OUT DX,AL +rept 3 + jmp $+2 +endm + MOV AL,COLOR + MOV CS:MARG,AL + OUT DX,AL +; popf + POP AX DX + ENDM + +RESTOREMARG MACRO + PUSHA + MOV CL,CS:OLDMARG + SETMARG CL + POPA + ENDM + +VIDEOMODE MACRO VM + PUSH AX + MOV AH,0 + MOV AL,VM + INT 10H + POP AX + ENDM + +SYNC MACRO + LOCAL SYNC1,SYNC2 + push es + mov dx,40h + mov es,dx + mov dx,es:[63h] + add dl,6 + pop es +sync1: IN AL,DX + TEST AL,8 + JNZ SYNC1 +SYNC2: IN AL,DX + TEST AL,8 + JZ SYNC2 + ENDM + +SETWRITE MACRO MASK + MOV DX,3C4H ;FIXA KANAL + MOV AH,MASK + MOV AL,2 ;TILL BITPLANS- + OUT DX,AX ;MASKEN + ENDM + + +SETREAD MACRO PLN + MOV DX,3CEH + MOV AH,PLN + MOV AL,4 + OUT DX,AX + ENDM + +SETMCGAB MACRO MEMORY_LINELEN,LINELEN_IN_SIGHT + MOV AX,12H + INT 10H + MOV AX,13H + INT 10H + MOV BX,MEMORY_LINELEN ;CALC BX (SET LINE LENGTH) + SHR BX,3 + MOV CX,LINELEN_IN_SIGHT ;CALC CX (HORIZ END) + SHR CX,2 + DEC CX + MOV DX,3D4H ;SET HORIZ END + MOV AL,01H + MOV AH,CL ;(DET MAN VILL HA GENOM 4) + OUT DX,AX + MOV DX,3D4H ;SET LINE LENGTH (I MINNESUPPBYGGNADEN) + MOV AL,13H + MOV AH,BL + OUT DX,AX + + MOV DX,3C4H ;SET MCGAB (NO CHAIN FOUR, USE 256KB) + MOV AL,04H + OUT DX,AL + INC DX + IN AL,DX + AND AL,11110110B + OUT DX,AL + + MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE + MOV AL,14H + OUT DX,AL + INC DX + IN AL,DX + AND AL,11111111B ;10111111B ;10011111B SVARAR MOT KOMMENTAREN + OUT DX,AL + + MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE) + MOV AL,17H + MOV AH,11100011B + OUT DX,AX + ENDM + +;****************************** ™VRIGA MACROS ********************************* +SETMASK MACRO MASK ;INTERRUPT MASKEN! + MOV AL,MASK + OUT 21H,AL + ENDM + + \ No newline at end of file diff --git a/MACROS3.ASM b/MACROS3.ASM new file mode 100644 index 0000000..67c793a --- /dev/null +++ b/MACROS3.ASM @@ -0,0 +1,310 @@ +;ÉĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ» +;ŗ ŗ +;ŗ F.L.D. Macros (3) ŗ +;ŗ ŗ +;ŗ Debug Macros ŗ +;ŗ ŗ +;ČĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶĶ¼ + +CODE SEGMENT PARA PUBLIC 'CODE' +THE_X DW 0 +THE_Y DW 0 +ENDS + +debugval macro x,y,value,message + LOCAL MESS,GNU,gnet,done + JMP SHORT GNU +MESS DB MESSAGE,0 +GNU: PUSHA + PUSH es + push value + push ds + mov ax,cs + mov ds,ax + mov ax,0b000h + mov es,ax + mov si,offset cs:mess + mov ax,y + mov bx,160 + mul bx + add ax,x + add ax,x + mov di,ax + mov ah,07h +gnet: + lodsb + or al,al + jz done + stosw + jmp gnet +done: + pop ds + + pop ax + xor dx,dx + mov bx,10000 + div bx + mov ah,7 + add al,'0' + stosw + mov ax,dx + + xor dx,dx + mov bx,1000 + div bx + mov ah,7 + add al,'0' + stosw + mov ax,dx + + xor dx,dx + mov bx,100 + div bx + mov ah,7 + add al,'0' + stosw + mov ax,dx + + xor dx,dx + mov bx,10 + div bx + mov ah,7 + add al,'0' + stosw + mov ax,dx + + mov ah,7 + add al,'0' + stosw + + pop es + popa + endm +debugbcd macro x,y,value,message + LOCAL MESS,GNU,gnet,done,skriv + JMP SHORT GNU +MESS DB MESSAGE,0 +GNU: PUSHA + PUSH es ds + mov ax,cs + mov ds,ax + mov ax,0b000h + mov es,ax + mov si,offset cs:mess + mov ax,y + mov bx,160 + mul bx + add ax,x + add ax,x + mov di,ax + mov ah,07h +gnet: + lodsb + or al,al + jz done + stosw + jmp gnet +done: + pop ds + + mov si,offset value + mov cx,12 + mov ah,7 +skriv: lodsb + add al,'0' + stosw + loop skriv + pop es + popa + endm + +debugmess macro x,y,message + LOCAL MESS,GNU,gnet,done + JMP SHORT GNU +MESS DB MESSAGE,0 +GNU: PUSHA + PUSH DS es + mov ax,cs + mov ds,ax + mov ax,0b000h + mov es,ax + mov ax,y + mov bx,160 + mul bx + add ax,x + add ax,x + mov di,ax + mov si,offset cs:mess + mov ah,07h +gnet: + lodsb + or al,al + jz done + stosw + jmp gnet +done: + POP es DS + POPA + endm +debugclear macro + pusha + push es + mov ax,0b000h + mov es,ax + xor ax,ax + xor di,di + mov cx,80*25 + rep stosw + pop es + popa + endm + +DPRINT MACRO MESSAGE + LOCAL VRRR,MARKER1,MARKER2,OKKKO + JMP VRRR +MARKER1 DB MESSAGE +MARKER2 LABEL BYTE +VRRR: PUSHA + MOV SI,CS:THE_X + MOV DI,CS:THE_Y + DEBUGMESS SI,DI,MESSAGE + MOV AX,OFFSET MARKER2 + SUB AX,OFFSET MARKER1 + ADD CS:THE_X,AX + CMP CS:THE_X,79 + JNA OKKKO + SUB CS:THE_X,80 + INC CS:THE_Y + CMP CS:THE_Y,23 + JNAE OKKKO + DCLS +OKKKO: POPA +ENDM + +DPRINTVAL MACRO VALUE,MESSAGE + LOCAL VRRR,MARKER1,MARKER2,OKKKO + PUSHA + PUSH VALUE + PUSH CS:THE_X + PUSH CS:THE_Y + POP DI + POP BP + POP AX + DEBUGVAL BP,DI,AX,MESSAGE + JMP VRRR +MARKER1 DB MESSAGE +MARKER2 LABEL BYTE +VRRR: MOV AX,OFFSET MARKER2 + SUB AX,OFFSET MARKER1 + ADD AX,5 + ADD CS:THE_X,AX + CMP CS:THE_X,79 + JNA OKKKO + SUB CS:THE_X,80 + INC CS:THE_Y + CMP CS:THE_Y,23 + JNAE OKKKO + DCLS +OKKKO: POPA +ENDM + +DCLS MACRO + DEBUGCLEAR + MOV CS:THE_X,0 + MOV CS:THE_Y,0 +ENDM + +DEBUG_SAVE MACRO REGISTER + PUSHF + PUSHA + PUSH DS + PUSH ES + PUSH REGISTER + MOVE DS,DATA + POP URBL1 + MOV AH,3CH + MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE + MOV DX,OFFSET FILENM + INT 21H + MOV BX,AX + ;BX=HANDLE + MOV CX,2 + MOV DX,OFFSET URBL1 + MOV AH,40H + INT 21H + ;BX=HANDLE + MOV AX,3E00H + INT 21H + POP ES + POP DS + POPA + POPF +ENDM + +DEBUG_SAVE2 MACRO UFFE + PUSHF + PUSHA + PUSH DS + PUSH ES + PUSH OFFSET UFFE + POP URBL2 + MOV AX,DATA + MOV DS,AX + MOV AH,3CH + MOV CX,0000H ;CH=0, CL=FILE ATTRIBUTE BYTE + MOV DX,OFFSET FILENM2 + INT 21H + MOV BX,AX + ;BX=HANDLE + MOV CX,2 + MOV DX,OFFSET URBL2 + MOV AH,40H + INT 21H + ;BX=HANDLE + MOV AX,3E00H + INT 21H + POP ES + POP DS + POPA + POPF +ENDM + +DDUMP MACRO SEG,ADR + LOCAL THENEXT + DCLS + PUSHA + PUSH DS + PUSH ES + PUSH SEG + PUSH OFFSET ADR + POP SI + POP DS + MOVE ES,0B000H + NIL DI + MOV CX,80*24 + MOV AH,7 +THENEXT:LODSB + STOSW + LOOP THENEXT + POP ES + POP DS + POPA +ENDM + +DHEXDUMP MACRO SEG,ADR + LOCAL NEXTLINE,NEXTROW + DCLS + PUSHA + PUSH DS + PUSH ES + MOV CX, +NEXTROW: + +NEXTLINE: + + POP ES + POP DS + POPA +ENDM + + \ No newline at end of file diff --git a/PLAND.ASM b/PLAND.ASM new file mode 100644 index 0000000..35d0f17 --- /dev/null +++ b/PLAND.ASM @@ -0,0 +1,6101 @@ +;****************************************************************************** +;** ** +;** P I N B A L L F A N T A S I E S ** +;** TABLE1: PARTY LAND ** +;** ** +;****************************************************************************** + +;REACHED THE SKY SKALL F™LJAS AV N¸N TEXT + +INCLUDELIB PLAND + +flipgfxfilesize=1748 +FIRSTMASK_GFXADR=BPL*(SPLH+BANH) +GFXADR_FOR_FLIP_ANIM_DATA=FIRSTMASK_GFXADR+BPL*40 +springsourceadr=GFXADR_FOR_FLIP_ANIM_DATA-3*23 ;3*23 ˇR F™R FJˇDERNS GFX +springdestadr=(splh+556)*bpl+304/4 + +DATAFLIP SEGMENT PARA PUBLIC 'DATA' +MAXDIFS1=114+5 +MAXDIFS2=114+5 +MAXDIFS3=137+5 +maxdifs=137 +if create_flip_data + LEFTFLIPTAB DW 42*(2*MAXDIFS1) DUP (1) + RIGHTFLIPTAB DW 42*(2*MAXDIFS2) DUP (1) + LEFTFLIP2TAB DW 28*(2*MAXDIFS3) DUP (1) + TEMPTAB DW 2*MAXDIFS DUP (1) +else + extrn leftfliptab,rightfliptab,leftflip2tab +endif +DATAFLIP ENDS + +DATA SEGMENT PARA PUBLIC 'DATA' + ASSUME CS:CODE,DS:DATA +MODUL DB 'TABLE1.MOD',0,'$' +if create_flip_data + flipdatafil_L DB 'flipdata.1L',0 + flipdatafil_R DB 'flipdata.1R',0 + flipdatafil_L2 DB 'flipdata.1L2',0 + flipgfxfil DB 'flipgfx.1',0 + flipSTRUCfil DB 'flipSTRU.1',0 +endif +hi_score_file db 'table1.hi',0 +hi_score_list db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'TSP',0 + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ICE',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ANY',0 + db 0,0,0, 0,0,5, 0,0,0, 0,0,0,'J L',0 + + +;****************************************************************************** +;******************************** DEFINES ************************************* +;****************************************************************************** + +INHIBIT_REVERSE_TIME=120 +TOTCENT=16 + +;******************** SYSTEM ********************** +MAX_NO_OF_LIGHTS_FLASHING=15 +MAX_NO_OF_WAIT_SYNCS=50 +NOOFTASKS=50 +RGB_BUFFER_LEN=1000 + +;******************** FLIPPER & BALL ********************** +BALLH=16 +BANH=576 +STARTX=310-BALLH/2 +STARTY=543-BALLH/2 + +LEFTFLIPX=80-1 +LEFTFLIPY=509+1 +LEFTFLIP2X=16 +LEFTFLIP2Y=227 +RIGHTFLIPX=80+80+1 +RIGHTFLIPY=509+1 +F3TOP=144+80 +F3HEIGHT=58 ;CP! GISSAT VˇRDE!!! + +;******************** FLASHING ********************** +MATRIXCOLS=60F2H +matrixhi=60h +matrixlo=0F2h +BIT2COL DB 0,0,0,0,9,2,42,0 ;flipper f„rgerna + +DROPSPEED=7 +HITSPEED=3 +SNACKSPEED=8 +ARROWSPEED=12 +QUICK_ARROWSPEED=2 ;? +PUKESPEED=2 ;? +WHOLEPUKESPEED=2 ;? +ROCKETSPEED=2 ;? +TRAINSPEED=14 ;! +TRAINSPEEDFAST=2 ;? +EYESPEED=7 ;? +TUNNELSPEED=8 ;? +BALOONSPEED=9 ;? +BALOONSPEEDFAST=2 ;? +MADSPEED=2 ;? +MADONSPEED=2 ;? +WHEELSPEED=8 ;? + +QUICKFLASH_TIME=2*60 ;? + +PARTY_ON_SPEED=3 ;? +SHOOT_AGAIN_SPEED=3 ;? + + +;******************** GAME TIMING ******************** +_5X_TIME=10*60 ;! +DB_TIME=10*60 ;! +TUNNEL_TIME=12*60 ;10! +SKILL_SHOT_TIME=5*60 ;? +PARTY_P_TIME=5*60 ;? +PARTY_R_TIME=5*60 ;? +PARTY_T_TIME=10*60 ;! +MEGA_LAUGH_TIME=30*60 ;! +;HAPPY_HOUR_TIME=30*60 ;! + +;******************** HOLES ********************** +SNACKX=10-7 ;! +SNACKY=260-7 ;! +SNACKXS=0*TT/NN ;! +SNACKYS=-3000*TT/NN ;! +DRAGONX=264-7 ;! +DRAGONY=317-7 ;! +DRAGONXS=-690*TT/NN ;! +DRAGONYS=+1890*TT/NN ;! +DROPX=22-7 ;! +DROPY=54-7 ;! +DROPXS=0*TT/NN ;! +DROPYS=0*TT/NN ;! + + +;****************************************************************************** +;****************************** GENERAL VARS ********************************** +;****************************************************************************** + +if create_flip_Data +FlipLInfo DB FlipperL,222 + DW 80,510,4,53,0,142,400,576,95,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,LEFTFLIPTAB,LEFTFLIPTAB,maxdifs1*4 + DW FLIPLEFT + + DB FlipperR,222 + DW 160,510,4,53,143,320,400,576,204,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,RIGHTFLIPTAB,RIGHTFLIPTAB,maxdifs2*4 + DW FLIPRIGHT + + DB FlipperL,222 + DW 16,227,3,51,0,160,0,399,27,234,-1,(51*6*3) + DW 0,0,0,13,13*ADJUST,-8*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,LEFTFLIP2TAB,LEFTFLIP2TAB,maxdifs3*4 + DW FLIPLEFT2 + + DB 0,0 +else + extrn fliplinfo:flipstruc +endif +NO_OF_RAMPS EQU 4 +RAMPTABLE DW 0,10*tt/nn + DW 2,14*tt/nn + DW -2,14*tt/nn + DW -4,16*tt/nn + DW 0,0 +RAMPTABLe_hi DW 0,10 + DW 2,14 + DW -2,14 + DW -4,16 + DW 0,0 + +SNACKSYNCER DB ? ;SYNC ICE,SODA,POP LIGHTS +SNACKFLASHERS LABEL BYTE ;STATUS OF LIGHTS + ICEFLASHING DB ? + SODAFLASHING DB ? + POPFLASHING DB ? +SNACKCOUNTER DB ? ;WHICH IS NEXT SNACK? +D1DISABLED DB ? ;UNDVIK MEGAHIT+HIT & DUBBELHIT +D2DISABLED DB ? ;UNDVIK MEGAHIT+HIT & DUBBELHIT +D3DISABLED DB ? ;UNDVIK MEGAHIT+HIT & DUBBELHIT +ARCADEON DB ? +SYNCS_BEFORE_XRUT DW ? +XRUT_OFFSET DW ? +SLUMPCOUNTER DB ? ;USED BY ARCADE +TOUCHERDISABLED DB ? +SNACKDISABLED DB ? +POPCOUNTER DB ? +MBFLASHING DB ? +HBFLASHING DB ? +DBFLASHING DB ? +_5XFLASHING DB ? +ARROWSYNCER DB ? ;SYNC MB,HB,DB LIGHTS +SKYRIDECOUNTER DW ? +PUKECOUNTER DW ? +_5MFLASHING DB ? +BALLFLASHING DB ? +JPFLASHING_NORMAL DB ? +JPFLASHING_TIME DB ? +PUKESYNCER DB ? +TRAINSYNCER DB ? +DRAGONWAITER DW ? +TUNNELDOWNCOUNTER DW ? +SKILLSHOTDOWNCOUNTER DW ? +TUNNELWAITER DW ? +CYCLONECOUNTER DW ? ;HEXADECIMAL +cyclonecounterBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +CYCLONESCOREBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +BALOONCOUNTER DB ? +INH_REV DB ? +INH_LOOP DB ? +HAPPY_PENDING DB ? +MEGA_PENDING DB ? +XXBALLE DB ? +XBALLS DB ? +PUKEFORBIDDEN DB ? +PARTYFLASH DB FALSE +MUSICOK DB ? +SNURR_READY DB ? +DRAGON DB ? +HANGSAVER DW ? +OKEJHEJ DB ? +HANGSAVER2 DW ? +CRAL DB ? +CPVARIABEL DB FALSE + +SKILL_SCORE DB ?,?,?, ?,?,?, ?,?,?, ?,?,? +SKILL_SCORE2 DB ?,?,?, ?,?,?, ?,?,?, ?,?,? +HAPPY_HOUR_TOTAL DB ?,?,?, ?,?,?, ?,?,?, ?,?,? +MEGA_LAUGH_TOTAL DB ?,?,?, ?,?,?, ?,?,?, ?,?,? + +JACKVALUE DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;JACKPOT CURRENT +JACKRAISE DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 ;JACKPOT STEP +JACKINIT DB 0,0,0, 0,1,0, 0,0,0, 0,0,0 ;JACKPOT START + +ETTA DB 0,0,0, 0,0,0, 0,0,0, 0,0,1 ;1 +FEMMA DB 0,0,0, 0,0,0, 0,0,0, 0,0,5 ;5 +TREA DB 0,0,0, 0,0,0, 0,0,0, 0,0,3 ;3 +FEMHUNDRATUSEN DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 +HUNDRATUSEN DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;100,000 +BCDMILLION DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 ;1,000,000 +BCD5MILLION DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 ;5,000,000 +BCD7510 DB 0,0,0, 0,0,0, 0,0,7, 5,1,0 ;7,510 +BCD750 DB 0,0,0, 0,0,0, 0,0,0, 7,5,0 ;750 +BCD20070 DB 0,0,0, 0,0,0, 0,2,0, 0,7,0 ;20,070 +BCD1000 DB 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 +BCD50030 DB 0,0,0, 0,0,0, 0,5,0, 0,3,0 ;50,030 +BCD50000 DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 ;50,000 +BCD5000 DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 +BCD250000 DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 +BCD500000 DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 +BCD750000 DB 0,0,0, 0,0,0, 7,5,0, 0,0,0 ;750,000 +BONUS_X DB ? +TEMPBONUSBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? + + +PLAYER_STRUC STRUC + P_PUKE DB 4 DUP(?) ;I ORDNINGEN SOM DE KOMMER I + P_MAD DB 3 DUP(?) ; LIGHTSTATUSLISTAN!!!!!!! + P_CRAZY DB 5 DUP(?) + P_PARTY DB 5 DUP(?) + P_SIFFRORNA DB 12 DUP(?) + P_BONUSSIFFRORNA DB 12 DUP(?) + P_SKILL_SCORE DB 12 DUP(?) + P_SKILL_SCORE2 DB 12 DUP(?) + P_HAPPY_HOUR_TOTAL DB 12 DUP(?) + P_MEGA_LAUGH_TOTAL DB 12 DUP(?) + P_CYCLONECOUNTERBCD DB 12 DUP(?) + P_CYCLONESCOREBCD DB 12 DUP(?) + P_CYCLONECOUNTER DW ? +ENDS + +PLAYER_AREA DB SIZE PLAYER_STRUC * NO_OF_PLAYERS DUP(?) + +INHIBIT_REVERSE_COUNTER DW ? +REVERSE_DOWN_COUNTER DW ? +ANY_LOOP_DOWN_COUNTER DW ? +DROP_TIME DW ? +HAPPY_HOUR DB ? +MEGA_LAUGH DB ? +HOLDBONUSFLAG DB ? + + +ARCADESLUMP LABEL BYTE + DB 10 DUP(0*2) ;XB + DB 10 DUP(1*2) ;CRAZY LETTER + DB 11 DUP(2*2) ;5M + DB 11 DUP(3*2) ;1M + DB 11 DUP(4*2) ;500K + DB 11 DUP(5*2) ;NO SCORE + DB 10 DUP(0*2) ;XB + DB 10 DUP(1*2) ;CRAZY LETTER + DB 11 DUP(2*2) ;5M + DB 11 DUP(3*2) ;1M + DB 11 DUP(4*2) ;500K + DB 11 DUP(5*2) ;NO SCORE + +ARCADEEFFECTS LABEL WORD + DW SPINXB_RUT + DW SPINCL_RUT + DW SPIN5M_RUT + DW SPIN1M_RUT + DW SPIN500K_RUT + DW SPINNS_RUT + +SPINXB DW 0 + DB 100 ;CP? (FLERA) + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;100,000 + DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 + DW sidelaneTS + XBALL_TIME=160 ;CPW! + +SPIN5M DW SJINGLE15B + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 ;5,000,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW fivemillionTS + +SPIN1M DW SJINGLE13B + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 ;1,000,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW millionTS + +SPIN500K DW SJINGLE22 + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW femhundraTS + +SPINNS DW 0 + DB 100 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DW nothingTS + NOSCORE_TIME=45 ;CPW! + + +CRAZY_ADVANCE_LIST DB ?,41,38,34,31,28,-1 + + +;****************************************************************************** +;********************************* EFFECTS ************************************ +;****************************************************************************** + +EFFECT_STRUC STRUC + THEJINGLE DW ? + TSCORE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + TBONUS DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + DOTMATRIX DW ? +ENDS + +LOSTBALL DW S_LOSTBALL + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW ball_lostTS +if demover +MINUTE5 DW S_GAMEOVER2 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW minute5TS +endif + +MYSTERY DW S_MYSTERY ;ARCADE HALL + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW mysteryTS + MYSTERY_TIME=260 ;CPW! + +PARTYSCORE1 DW SJINGLE26B ;PARTY P + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW party_pTS + +PARTYSCORE2 DW SJINGLE26 ;PARTY A + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW party_aTS + +PARTYSCORE3 DW SJINGLE26B ;PARTY R + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW party_rTS + +PARTYSCORE4 DW SJINGLE26B ;PARTY T + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW party_tTS + +PARTYSCORE5 DW SJINGLE26 ;PARTY Y + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW party_yTS + +TSCORE1 DW SJINGLE13 ;TUNNEL 1ST TIME + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 ;1,000,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW millionTS + TSCORE1_TIME=130 ;CPW! + +TSCORE2 DW SJINGLE14 ;TUNNEL 2ND TIME + DB 0,0,0, 0,0,3, 0,0,0, 0,0,0 ;3,000,000 + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DW THREEmillionTS ;CP! + TSCORE2_TIME=130 ;CPW! + +TSCORE3 DW SJINGLE15 ;TUNNEL 3RD TIME + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 ;5,000,000 + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 + DW fivemillionTS + TSCORE3_TIME=130 ;CPW! + +DSCORE DW SJINGLE22 ;DRAGON'S HEAD + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,3,0 ;10,030 + DW DSCORETS + +HSCORE DW SJINGLE29 ;NO DUCKS + DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 ;50,000 + DB 0,0,0, 0,0,0, 0,0,0, 0,4,0 ;40 ;CP? + DW noducksTS + +RSCORE1 DW SJINGLE22 ;REVERSE 1ST TIME + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DW RSCORE1TS + +RSCORE2 DW SJINGLE22 ;REVERSE 2ND TIME + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DW RSCORE2TS + +RSCORE3 DW SJINGLE22 ;REVERSE 3RD TIME + DB 0,0,0, 0,0,0, 7,5,0, 0,0,0 ;750,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DW RSCORE3TS + +MILLION5 DW SJINGLE15 ;DRAGON'S HEAD ONLY + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 ;5,000,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DW fivemillionTS + MILLION5_TIME=160 ;CPW! + +ALLDUCKS DW SJINGLE1 ;ALL DUCKS ARE DOWN + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW snackTS + +SCORE1 DW SJINGLE19 ;ICE + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW iceTS + +SCORE2 DW SJINGLE20 ;SODA + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 + DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 ;50,000 + DW sodaTS + +SCORE3 DW SJINGLE21 ;POP + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 ;1,000,000 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;100,000 + DW popTS + +MILLION DW SJINGLE13 ;LATE SKYRIDE ONLY + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 ;1,000,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DW millionTS + +GETBONUS DW 0 ;GET BONUS MULTIPLYER + DB 30 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW 0 + +M2 DW SJINGLE3 ;MULTIPEL BONUS X2 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 + DW bonusx2TS + +M4 DW SJINGLE3 ;MULTIPEL BONUS X4 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 + DW bonusx4TS + +M6 DW SJINGLE3 ;MULTIPEL BONUS X6 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 + DW bonusx6TS + +M8 DW SJINGLE3 ;MULTIPEL BONUS X8 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 + DW bonusx8TS + +HOLDBONUS DW SJINGLE5 ;REVERSE: HOLD BONUS + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW bonusheldTS + +DOUBLEBONUS DW SJINGLE6 ;REVERSE: DOUBLE BONUS + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DW DOUBLEBTS + +EXTRABALL1 DW SJINGLE17 ;DRAGON'S HEAD: BALL + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 + DW extraballTS + EXTRABALL1_TIME=320 ;CPW! ;GNU + +EXTRABALL2 DW SJINGLE17 ;SL XB UTF™R DENNA! + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DB 0,0,0, 0,0,0, 0,0,5, 0,0,0 ;5,000 + DW extraball2TS + +ADVANCE3 DW SJINGLE7 ;CRAZY LETTER SPOTTED + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW crazyletterTS + +ADVANCE3B DW SJINGLE7B ;CRAZY LETTER SPOTTED + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW crazyletterTS + +THELOOP1 DW SJINGLE2 ;LOOP 1ST TIME + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;100,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DW loopTS + +THELOOP2 DW SJINGLE2 ;LOOP 2ND TIME + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW loop2TS + +THELOOP3 DW 0 ;LOOP 3RD TIME + DB 0 + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 + DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 ;50,000 + DW loopTS + +RIDE1 DW SJINGLE25 ;SKYRIDE 1ST TIME + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;100,000 + DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 ;10,000 + DW ride1TS + +RIDE2 DW SJINGLE25 ;SKYRIDE 2ND TIME + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 ;250,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW ride2TS + +RIDE3 DW SJINGLE25 ;SKYRIDE 3RD TIME + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 + DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 ;50,000 + DW ride3TS + +CYCLCOUNT DW SJINGLE16 ;CYCLONEN OM EJ 5X + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;100,000 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 ;25,000 + DW cycloneTS + +CYCLCOUNT2 DW SJINGLE16 ;CYCLONEN OM 5X + DB 0,0,0, 0,0,2, 5,0,0, 0,0,0 ;2,500,000 + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 ;500,000 + DW cycloneTS ;CP? + +HIDDEN DW 0 ;HIDDEN ENTRANCE + DB 20 + DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 ;50,000 + DB 0,0,0, 0,0,0, 0,2,0, 0,0,0 ;20,000 + DW hiddenTS + +SKILLCYCLONE DW SJINGLE26 ;SKILL EFFECT ;CP? PRIO=15? + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DW skillcycloneTS + +SKILLTUNNEL DW SJINGLE26B ;SKILL EFFECT + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DW skilltunnelTS + +BYGELSETB DW 0 ;RˇNNA SLUT + DB 1 + DB 0,0,0, 0,0,0, 0,1,0, 0,4,0 ;10,040 + DB 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 + DW 0 + +HAPPYHOUR DW SJINGLE12 ;HAPPY HOUR! (PARTY) + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW happyhourTS + +EOHAPPYHOUR DW SJINGLE27 ;END OF HAPPY HOUR ("HAPPY") + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 ;1,000,000 + DW 0 + +CRAZYSCORE DW SJINGLE11 ;MEGA LAUGH! (CRAZY) + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW megalaughTS + +EOMEGALAUGH DW SJINGLE28 ;END OF MEGA LAUGH ("CRAZY") + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;0 + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 ;5,000,000 + DW 0 + + +;****************************************************************************** +;**************************** SOUND STRUCTURES ******************************** +;****************************************************************************** + +;SAMPLE,PERIOD,EFFECT,CHANNEL +SBASE EQU 14H+2 +SBRICKNER DB (SBASE+0),18,0,3 +SBRICKUPP DB 17H,23,0,3 +SBUMPER1 DB (SBASE+2),25,0,3 +SBUMPER2 DB (SBASE+2),23,0,3 +SBUMPER3 DB (SBASE+2),21,0,3 +SFLIPPUPP DB (SBASE+3),22,0,3 +SRINNER DB (SBASE+4+2),18,0,3 +SNEWBALL DB (SBASE+4+2),18,0,3 +SKICKER DB (SBASE+5+2),18,0,3 +SFJADER DB 1eh,18,0,3 ;(sbase+6) +SGROP DB (SBASE+1),23,0,3 + +EBASE EQU 7H +SBYGEL1 DB (EBASE+0),10,0,3 +SBYGEL2 DB (EBASE+0),12,0,3 +SBYGEL3 DB (EBASE+0),8,0,3 +SBYGEL4 DB (EBASE+0),17,0,3 +SBYGEL5 DB (EBASE+0),8,0,3 +S_TOUCH1 DB (EBASE+0),14,0,3 +S_TOUCH2 DB (EBASE+0),10,0,3 +S_SCORELJUD DB (EBASE+0),18,0,3 +S_ADDPLAYER2 DB (EBASE+0),18,0,3 + +;*********************************************************************** +;JINGLE,NOOFPTNS (0=4EVER),PRIORITY + +emptyjingle equ 62 +springjingle equ 0 +mainjingle equ 1 +lastmainpos equ 5 +S_MULTILJUD DB 39,1,255 ;255? +S_Empty DB 62,0,1 +S_Spring DB 0,0,1 +S_Main DB 1,0,1 +S_NoHigh DB 8,0,1 +S_Danger DB 49,1,255 +S_Tilt DB 48,1,255 +S_GameOver DB 7,0,255 ; ? 1 +IF DEMOVER +S_GameOver2 DB 13,0,255 +ELSE +S_GameOver2 DB 13,0,1 +ENDIF +S_LostBall DB 6,1,255 ;200 +S_AddPlayer DB 55,0,1 +S_Lock DB 0,1,90 ;Bonus Locked +S_Mystery DB 30,1,100 +S_EndFig DB 60,1,255 ;60,0,1 +S_Knacket DB 58,1,255 ;230 +S_BEATEN DB 58,1,200 + +;*********************************************************************** + +SJingle1 DB 50,1,20 ;Ducks +SJingle2 DB 42,1,30 ;Loop +SJingle3 DB 34,1,32 ;X2X4X6X8 +SJingle4 DB 24,3,200 ;Jackpot +SJingle5 DB 20,1,31 ;Hold Bonus +SJingle6 DB 21,1,33 ;Double Bonus +SJingle7 DB 22,1,131 ;MAD +SJingle7B DB 22,1,90 ;MAD (ARCADE) +SJingle8 DB 23,1,31 ;PUKE1 +SJingle9 DB 38,1,32 ;PUKE2 +SJingle10 DB 57,1,33 ;PUKE3 +SJingle11 DB 25,0,151 ;Mega Laugh (150) +SJingle12 DB 43,0,151 ;Happy Hour (150) +SJingle13 DB 35,1,100 ;1 Million +SJingle13B DB 35,1,90 ;1 Million (ARCADE) +SJingle14 DB 36,1,140 ;3 Million +SJingle15 DB 47,1,150 ;5 Million +SJingle15B DB 47,1,90 ;5 Million (ARCADE) +SJingle16 DB 37,1,20 ;Cyclone +SJingle17 DB 31,1,190 ;Extra Ball +SJingle19 DB 51,1,33 ;ICE +SJingle20 DB 53,1,32 ;Soda +SJingle21 DB 52,1,31 ;POP +SJingle22 DB 41,1,30 ;Ballonger/250/500/750 +SJingle25 DB 61,1,20 ;Skyride +SJingle26 DB 56,1,35 ;Spell PARTY +SJingle26B DB 56,1,150 ;Spell PARTY +SJingle27 DB 40,1,152 ;70 ;Happy Hour End +SJingle28 DB 29,1,152 ;70 ;Mega Laugh End +SJingle29 DB 49,1,5 ;Nothing + + +;****************************************************************************** +;***************************** DETECTION AREAS ******************************** +;****************************************************************************** + +BumperLista_L LABEL WORD + DW 211,252,235,276 + DW Bumper1 + DW 268,263,292,287 + DW Bumper2 + DW 185,283,209,307 + DW Bumper3 + DW -1,-1,-1,-1 + DW -1 + +Bumper2Lista_L LABEL WORD + DW 50,415,80,470 + DW Kicker + DW 219,415,249,470 + DW Kicker + DW -1,-1,-1,-1 + DW -1 + +bumper1 dw sbumper1 + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 +bumper2 dw sbumper2 + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 +bumper3 dw sbumper3 + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 +kicker dw skicker + db 0,0,0, 0,0,0, 0,0,0, 5,0,0 ;500 + +ZonLista_L LABEL WORD + DW 130,196,146,204 + DW TOUCHER +; DW 145,274,170,330 +; DW DropSetA + DW 147,277,156,293 + DW DROPA1 + DW 152,293,163,311 + DW DROPA2 + DW 158,311,168,329 + DW DROPA3 + DW 0 + +AreaLista_L LABEL WORD + DW 90,15,130,40 + DW Bygel11 + DW 200,15,240,40 + DW Bygel9 + DW 160,35,182,55 + DW GropC ;HIDDEN ENTRANCE + DW 47,122,67,146 + DW GropD ;THE TUNNEL + DW 120,165,150,185 + DW GropB ;ARCADE HALL + DW 220,280,260,300 + DW Bygel14 + DW 280,300,320,345 ;Game On + DW Close1 + DW 260,312,268,321 + DW GropE + DW 25,435,35,445 + DW Bygel3 + DW 263,435,273,445 + DW Bygel4 + DW 5,455,15,465 + DW Bygel1 + DW 284,455,294,465 + DW Bygel2 + DW 305,455,320,512+28 + DW Bygel12 + DW 305+3,512+28,320,576 ;Spring Valid + DW Bygel28 + DW 0 + +AreaLista_U LABEL WORD + DW 132,40,238,51 ;SKY + DW Close2 + DW 167,6,201,40 ;SKY + DW Close2 + DW 132,5,160,50 ;STˇNG SKYRIDE-GATEN + DW Close2 + DW 40,40,75,100 + DW Bygel10 + DW 132,58,148,63 + DW Bygel5 + DW 222,58,238,63 + DW Bygel8 + DW 162,64,178,69 + DW Bygel6 + DW 192,64,208,69 + DW Bygel7 + DW 40,80,75,120 + DW Open2 + DW 175,100,200,130 + DW Bygel4b + DW 260,130,280,150 + DW Bygel13 + DW 3,245,22,270 + DW GropA + DW 0 + +AREALISTA_L_T LABEL WORD + DW 120,165,150,185 + DW GropB ;ARCADE HALL + DW 160,35,182,55 + DW GropC_T ;HIDDEN ENTRANCE (TILT) + DW 47,122,67,146 + DW GropD_T ;THE TUNNEL (TILT) + DW 0 + +AREALISTA_U_T LABEL WORD + DW 0 + +LEVEL1LISTA LABEL WORD ;AREOR SOM ANGER HOPP TILL LEVEL 1 FR¸N LEVEL 2 + DW 10,100,40,200 + DW 300,140,320,160 + DW 275,165,300,220 + DW 60,185,100,220 + DW 195,175,215,200 + DW 300,240,320,340 ;AFTER SPRING + DW 20,240,50,400 ;CP? + DW 300,400,320,500 ;SPRING LANE LOW + DW 260,450,277,470 + DW 0,450,50,470 + DW -1 + +LEVEL2LISTA LABEL WORD ;AREOR SOM ANGER HOPP TILL LEVEL 2 FR¸N LEVEL 1 +; DW 10,40,30,70 ;DR¸P SON + DW 215,160,235,190 + DW 50,165,85,185 + DW 300,210,320,240 + DW 3,245,22,270 ;SNACK-H¸LET + DW 300,360,320,400 ;SPRING LANE HIGH + DW -1 + + +;****************************************************************************** +;************************ DEMO MODE LIGHT FLASHING **************************** +;****************************************************************************** + +FLASHLIST LABEL WORD + T1=10 ;PARTY + T2=T1*6 + DW 0,T1*0,T2,T2,42 + DW 0,T1*1,T2,T2,43 + DW 0,T1*2,T2,T2,44 + DW 0,T1*3,T2,T2,45 + DW 0,T1*4,T2,T2,46 + + T1=9 ;CRAZY + T2=T1*6-T1/2 + DW 0,T1*0,T2,T2,41 + DW 0,T1*1,T2,T2,38 + DW 0,T1*2,T2,T2,34 + DW 0,T1*3,T2,T2,31 + DW 0,T1*4,T2,T2,28 + + T2=11 ;X2,X4,X6,X8 + DW 0,0,T2,T2,47 + DW 0,0,T2,T2,49 + DW 0,T2,T2,T2,48 + DW 0,T2,T2,T2,50 + + T2=17 ;XB + DW 0,0,T2,T2,39 + DW 0,0,T2,T2,40 + + T2=8 ;250K + DW 0,0,T2,T2,26 + + T2=10 ;HIT + DW 0,0,T2,T2,16 + DW 0,0,T2,T2,24 + DW 0,T2,T2,T2,18 + + T1=5 ;1ST,2ND,3RD + T2=26 + DW 0,T1*0,T2,T2,22 + DW 0,T1*1,T2,T2,13 + DW 0,T1*2,T2,T2,15 + + T2=8 ;1M + DW 0,T2/2,T2,T2,14 + + T2=10 ;MAD + DW 0,0,T2,T2,6 + DW 0,0,T2,T2,9 + DW 0,T2,T2,T2,8 + + T2=7 ;PUKE + DW 0,0,T2,T2,1 + DW 0,0,T2,T2,5 + DW 0,T2,T2,T2,2 + DW 0,T2,T2,T2,4 + + DW -1 + + +;****************************************************************************** +;**************************** LIGHT PALETTE DATA ****************************** +;****************************************************************************** + +NOOFLIGHTS=56 + +LON1 DB 128 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON2 DB 130 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON3 DB 132 + DB 1 + DB 95,0,0 +LON4 DB 133 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON5 DB 135 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON6 DB 137 + DB 3 + DB 0,83,70 + DB 45,64,8 + DB 33,45,14 +LON7 DB 140 + DB 2 + DB 95,64,64 + DB 85,45,45 +LON8 DB 142 + DB 3 + DB 27,64,95 + DB 20,52,77 + DB 8,33,64 +LON9 DB 145 + DB 3 + DB 0,83,70 + DB 45,64,8 + DB 33,45,64 +LON10 DB 148 + DB 3 + DB 95,95,95 + DB 77,77,77 + DB 64,64,64 +LON11 DB 153 + DB 3 + DB 95,95,95 + DB 77,77,77 + DB 64,64,64 +LON12 DB 158 + DB 3 + DB 95,95,95 + DB 77,77,77 + DB 64,64,64 +LON13 DB 156 + DB 2 + DB 95,70,27 + DB 77,52,8 +LON14 DB 161 + DB 3 + DB 95,95,95 + DB 77,77,77 + DB 64,64,64 +LON15 DB 164 + DB 3 + DB 0,95,14 + DB 46,64,8 + DB 33,45,14 +LON16 DB 167 + DB 2 + DB 95,0,83 + DB 64,0,0 +LON17 DB 169 + DB 5 + DB 95,64,64 + DB 95,0,0 + DB 64,0,0 + DB 95,95,95 + DB 64,64,64 +LON18 DB 174 + DB 2 + DB 95,0,83 + DB 64,0,0 +LON19 DB 176 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON20 DB 178 + DB 7 + DB 95,95,95 + DB 64,64,64 + DB 27,64,95 + DB 8,39,70 + DB 95,70,27 + DB 77,52,8 + DB 64,39,0 +LON21 DB 185 + DB 5 + DB 95,95,95 + DB 95,70,27 + DB 77,52,8 + DB 64,39,0 + DB 52,14,14 +LON22 DB 151 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON23 DB 195 + DB 9 + DB 8,39,70 + DB 83,45,45 + DB 95,64,64 + DB 45,64,8 + DB 33,45,14 + DB 95,95,95 + DB 95,70,27 + DB 77,52,8 + DB 64,39,0 +LON24 DB 204 + DB 2 + DB 95,0,83 + DB 64,0,0 +LON25 DB 206 + DB 3 + DB 0,95,14 + DB 45,64,8 + DB 33,45,14 +LON26 DB 209 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON27 DB 211 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON28 DB 213 + DB 2 + DB 95,0,83 + DB 64,0,0 +LON29 DB 215 + DB 3 + DB 95,95,95 + DB 77,77,77 + DB 64,64,64 +LON30 DB 218 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON31 DB 220 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON32 DB 222 + DB 3 + DB 0,95,14 + DB 45,64,8 + DB 33,45,14 +LON33 DB 225 + DB 3 + DB 95,95,95 + DB 77,77,77 + DB 64,64,64 +LON34 DB 228 + DB 2 + DB 95,70,27 + DB 77,52,8 +LON35 DB 230 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON36 DB 232 + DB 3 + DB 95,95,95 + DB 77,77,77 + DB 64,64,64 +LON37 DB 235 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON38 DB 237 + DB 3 + DB 0,95,14 + DB 45,64,8 + DB 33,45,14 +LON39 DB 240 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON40 DB 240 + DB 2 + DB 95,0,0 + DB 64,0,0 +LON41 DB 244 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON42 DB 246 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON43 DB 248 + DB 2 + DB 95,0,83 + DB 64,0,0 +LON44 DB 250 + DB 3 + DB 0,95,14 + DB 45,64,8 + DB 33,45,14 +LON45 DB 253 + DB 2 + DB 95,0,83 + DB 64,0,0 +LON46 DB 112 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON47 DB 114 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON48 DB 116 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON49 DB 118 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON50 DB 120 + DB 2 + DB 27,64,95 + DB 8,39,70 +LON51 DB 190 + DB 5 + DB 95,0,0 + DB 95,95,95 + DB 64,0,0 + DB 64,64,64 + DB 89,55,55 +LON52 DB 122 + DB 5 + DB 95,95,95 + DB 83,45,45 + DB 95,0,0 + DB 64,0,0 + DB 39,14,14 +LON53 DB 107 + DB 5 + DB 95,95,95 + DB 83,45,45 + DB 95,0,0 + DB 64,0,0 + DB 39,14,14 +LON54 DB 102 + DB 5 + DB 95,95,95 + DB 83,45,45 + DB 95,0,0 + DB 64,0,0 + DB 39,14,14 +LON55 DB 255 + DB 1 + DB 58,20,20 +LON56 DB 111 + DB 1 + DB 58,20,20 + +MATRIXON DB MATRIXLO ;(MATRIXCOL LOW BYTE) + DB 1 + DB 95,70,27 + +LONEND DB 0 + +LONINDEX LABEL WORD + DW OFFSET LON1 + DW OFFSET LON2 + DW OFFSET LON3 + DW OFFSET LON4 + DW OFFSET LON5 + DW OFFSET LON6 + DW OFFSET LON7 + DW OFFSET LON8 + DW OFFSET LON9 + DW OFFSET LON10 + DW OFFSET LON11 + DW OFFSET LON12 + DW OFFSET LON13 + DW OFFSET LON14 + DW OFFSET LON15 + DW OFFSET LON16 + DW OFFSET LON17 + DW OFFSET LON18 + DW OFFSET LON19 + DW OFFSET LON20 + DW OFFSET LON21 + DW OFFSET LON22 + DW OFFSET LON23 + DW OFFSET LON24 + DW OFFSET LON25 + DW OFFSET LON26 + DW OFFSET LON27 + DW OFFSET LON28 + DW OFFSET LON29 + DW OFFSET LON30 + DW OFFSET LON31 + DW OFFSET LON32 + DW OFFSET LON33 + DW OFFSET LON34 + DW OFFSET LON35 + DW OFFSET LON36 + DW OFFSET LON37 + DW OFFSET LON38 + DW OFFSET LON39 + DW OFFSET LON39 ;INTE CP. „ndrad till lon39 + DW OFFSET LON41 + DW OFFSET LON42 + DW OFFSET LON43 + DW OFFSET LON44 + DW OFFSET LON45 + DW OFFSET LON46 + DW OFFSET LON47 + DW OFFSET LON48 + DW OFFSET LON49 + DW OFFSET LON50 + DW OFFSET LON51 + DW OFFSET LON52 + DW OFFSET LON53 + DW OFFSET LON54 + DW OFFSET LON55 + DW OFFSET LON56 + +MATRIXOFF DB MATRIXLO + DB 3 + DB 3 DUP(33*64/100) + +;****************************************************************************** +;************************* GATES & BYGLARS DATA AREOR ************************* +;****************************************************************************** + +GATE1OPEN_DATA DB 18*2 DUP (0) +GATE1CLOSED_DATA DB 18*2 DUP (?) + +EXTRN D1UP_DATA:BYTE +EXTRN D1DOWN_DATA:BYTE +EXTRN D2UP_DATA:BYTE +EXTRN D2DOWN_DATA:BYTE +EXTRN D3UP_DATA:BYTE +EXTRN D3DOWN_DATA:BYTE + +;****************************************************************************** +;****************************** DOT MATRIX ************************************ +;****************************************************************************** + +CLEARIT MACRO +ASSUME DS:DATA + DW _CLEAR4 +ENDM + +CLEARIT2 MACRO +ASSUME DS:DATA + DW _CLEAR2 +ENDM + +CLEARIT3 MACRO +ASSUME DS:DATA + DW _CLEAR3 +ENDM + +CLEARIT4 MACRO +ASSUME DS:DATA + DW _CLEAR4 +ENDM + +;************************************ TSAR ************************************ + +;********************************************************* +;******* OBS!!! KOM IH¸G ATT ASSUMERA ANIMATIONER TILL DATA2 OCH +;******* SCROLLAR TILL DATA !!!!! +ASSUME DS:DATA2 + +BEATENSCROLL DB 21 DUP (1),'YOU HAVE BEATEN THE HIGHSCORE',21 DUP(1),255 +EXTRABALLTEXT DB 'EXTRA BALL',0 + +Beaten_bh_TS LABEL WORD ;I BALL LOST SEKVENSEN + DW _DOBEATEN,? + CLEARIT + DW _JINGLE,S_BEATEN + DW _LASTJINGLE,EMPTYJINGLE + DW _SCROLL,BEATENSCROLL + DW _FLASHON,10 + DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 + DW _WAITJINGLE,? + CLEARIT + DW _FLASHOFF,? + DW _JMP,No_Bonus2TS + +BeatenTS LABEL WORD ;I SPELET + DW _DOBEATEN,? + CLEARIT + DW _JINGLE,S_BEATEN + DW _LASTJINGLE,3 + DW _SCROLL,BEATENSCROLL + DW _FLASHON,10 + DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 + DW _WAITJINGLE,? + CLEARIT + DW _FLASHOFF,? + DW 0 + +extraballTS DW _CLEAR4 + dw _animation,_extraball + DW _CLEAR4 + dw 0 + +extraball2TS DW _CLEAR4 + dw _animation,_extraball + dw _CLEAR4 + DW _FLASHON,10 + DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 + DW _WAITJINGLE,? + DW _CLEAR4 + DW _FLASHOFF,? + DW 0 + +millionTS LABEL WORD + DW _CLEAR4 + assume ds:data + DW _FLASHON,1 + dw _number,offset ETTA + assume ds:data2 + dw _wait,40 + DW _FLASHOFF,? + DW _CLEAR4 + dw _animation,_million + DW _WAIT,10 + DW _CLEAR4 + DW 0 +;***************************************** +ThreeMillionTS LABEL WORD + DW _CLEAR4 + assume ds:data + DW _FLASHON,1 + dw _number,offset TREA + assume ds:data2 + dw _wait,90 + DW _FLASHOFF,? + DW _CLEAR4 + dw _animation,_millionFAST + DW _WAIT,45 + DW _CLEAR4 + DW 0 +;***************************************** +party_onTS LABEL BYTE ;Turn on party on . . . + CLEARIT + DW _FLASHON,PARTY_ON_SPEED + DW _PARTYONN,1 + DW _PRINT13,PARTY_ON_TEXT,SW*4/4 ;+16*3/4 ;CP! + DW _PARTYON,1 + DW 0 + +party_offTS LABEL WORD ;Turn it off + CLEARIT + DW _PARTYOFF,1 + DW _FLASHOFF,1 + DW 0 + +;***************************************** + ASSUME DS:DATA2 +fivemillionTS DW _CLEAR4 + assume ds:data + DW _FLASHON,1 + dw _number,offset FEMMA + assume ds:data2 + dw _wait,55 + DW _FLASHOFF,? + DW _CLEAR4 + dw _animation,_millionFAST + DW _WAIT,35 + DW _CLEAR4 + DW 0 +;***************************************** +clearTS DW _CLEAR4 + dw 0 + +tomTS DW _CLEAR4 + dw _wait,32767 + dw 0 + +cycloneTS DW _CLEAR4 + assume ds:data + DW _FLASHON,1 + dw _number,offset cyclonecounterBCD + assume ds:data2 + dw _wait,40 + DW _FLASHOFF,? + DW _CLEAR4 + dw _animation,_cyclone + DW _CLEAR4 + dw 0 + +happyhourTS LABEL WORD + DW _EOSNURR,? + ASSUME DS:DATA2 + DW _CLEAR4 + DW _ANIMATION,_HAPPY + DW _CLEAR4 + ASSUME DS:DATA + DW _SCROLL,ALL_TARGA_ + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + DW _COUNTDOWN,2,5,HAPPY_HOUR_TOTAL ;(THE FINAL?) + CLEARIT +happy_endingTS LABEL WORD + ASSUME DS:DATA + DW _JBCDZ,HAPPY_HOUR_TOTAL,no_happyTS + DW _RULLGARDIN_UPP,HHTOTAL_text,1 + DW _WAIT,60 ;cpw! + CLEARIT + DW _FLASHON,1 + DW _PRINT13_NUMBER,happy_hour_total,SW*4/4+16*2/4 ;CP! RUTCENT + DW _WAIT,80 ;cpw! + DW _FLASHOFF,1 + DW _TSEND,? + CLEARIT + DW 0 + +no_happyTS LABEL WORD + ASSUME DS:DATA + DW _PRINT13,NO_HAPPY_TEXT,SW*4/4 + DW _WAIT,80 ;CPW! + DW _TSEND,? + CLEARIT + DW 0 + + +megalaughTS LABEL WORD + DW _EOSNURR,? + ASSUME DS:DATA2 + DW _CLEAR4 + DW _ANIMATION,MEGAL + DW _CLEAR4 + ASSUME DS:DATA + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + DW _COUNTDOWN,2,5,MEGA_LAUGH_TOTAL ;(THE FINAL?) + CLEARIT +mega_endingTS LABEL WORD + ASSUME DS:DATA + DW _JBCDZ,MEGA_LAUGH_TOTAL,no_megaTS + dw _scroll,MLtotal_TEXT + DW _WAIT,60 ;CPW! + CLEARIT + DW _FLASHON,1 + DW _PRINT13_NUMBER,mega_laugh_total,SW*4/4+16*2/4 ;CP! RUTCENT + DW _WAIT,80 ;CPW! + DW _FLASHOFF,1 + DW _TSEND,? + CLEARIT + DW 0 + +no_megaTS LABEL WORD + ASSUME DS:DATA + DW _PRINT13,NO_MEGA_TEXT,SW*4/4 + DW _WAIT,80 ;CPW! + DW _TSEND,? + CLEARIT + DW 0 + + assume ds:data2 +party_pTS DW _CLEAR4 + dw _animation,_party_p + DW _CLEAR4 + dw 0 +party_aTS DW _CLEAR4 + dw _animation,_party_a + DW _CLEAR4 + dw 0 +party_rTS DW _CLEAR4 + dw _animation,_party_r + DW _CLEAR4 + dw 0 +party_tTS DW _CLEAR4 + dw _animation,_party_t + DW _CLEAR4 + dw 0 +party_yTS DW _CLEAR4 + dw _animation,_party_y + DW _CLEAR4 + dw 0 + +mysteryTS LABEL WORD ;NOTE:DECCOR MUST BE SET. (WAITJINGLE2) + ASSUME DS:DATA2 + DW _CLEAR4 + DW _ANIMATION,_MYSTERY + DW _WAITJINGLE2,? + DW _EOSNURR,? + DW _CLEAR4 + DW 0 ;DOTRUT,OFFSET CS:NODOT + +LMSPEED=7 +loop2TS LABEL WORD + ASSUME DS:DATA2 + DW _CLEAR4 + DW _ANIMATION,_LOOP + DW _WAIT,20 + DW _CLEAR4 + ASSUME DS:DATA + DW _FLASHON,LMSPEED + DW _PRINT8,_ONEMOREFORMAD,SW*2*5/4+16*3/4 + ASSUME DS:DATA2 + DW _WAIT,LMSPEED*4*2-LMSPEED + DW _CLEAR4 + DW _FLASHOFF,? + DW 0 + +loopTS LABEL WORD + ASSUME DS:DATA2 + DW _CLEAR4 + DW _ANIMATION,_LOOP + DW _WAIT,20 + DW _CLEAR4 + ASSUME DS:DATA + DW _FLASHON,LMSPEED + DW _PRINT5,_TWOMOREFORMAD,SW*2*6/4+16*3/4 + DW _WAIT,LMSPEED*4*2-LMSPEED + CLEARIT + DW _FLASHOFF,? + DW 0 + +bonusx2TS LABEL WORD + ASSUME DS:DATA2 + DW _CLEAR4 + DW _ANIMATION,_BONUSX2 + DW _CLEAR4 + DW 0 +bonusx4TS DW _CLEAR4 + DW _ANIMATION,_BONUSX4 + DW _CLEAR4 + DW 0 +bonusx6TS DW _CLEAR4 + DW _ANIMATION,_BONUSX6 + DW _CLEAR4 + DW 0 +bonusx8TS DW _CLEAR4 + DW _ANIMATION,_BONUSX8 + DW _CLEAR4 + DW 0 +jackpotTS DW _CLEAR4 + DW _ANIMATION,_JACKPOT + DW _CLEAR4 + DW 0 + +jackpot_special_hh_TS LABEL WORD + DW _CLEAR4 + dw _animation,_jackpot + DW _CLEAR4 + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + dw _countdown2,2,5,happy_hour_total ;(the final?) + DW _CLEAR4 + dw _jmp,happy_endingTS + dw 0 +jackpot_special_ml_TS LABEL WORD + DW _CLEAR4 + dw _animation,_jackpot + DW _CLEAR4 + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + dw _countdown2,2,5,MEGA_LAUGH_TOTAL ;(the final?) + DW _CLEAR4 + dw _jmp,mega_endingTS + dw 0 + + +ball_lostTS LABEL WORD + CLEARIT + + DW _PRINT13,GETTING_SICK_TEXT,SW*2/4*2+8 + DW _WAIT,80 ;CPW! + CLEARIT + + DW _JBCDZ,BONUSSIFFRORNA,no_bonusTS + DW _PRINT5,show_bonus_TEXT,SW*1*2/4+16*7/4 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + DW _JINGLE,S_MULTILJUD + + DW _JBONUSX1,NoBonusXTS + CLEARIT ;CP! CLEARIT ˇR ON™DIGT BRUTAL! TUFFT!!! (reds. anm.) + DW _BONUS_X_CALCS,? + DW _PRINT5,BONUS_X_TEXT,SW*1*2/4+16*7/4-4*2 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + DW _JINGLE,S_MULTILJUD +NoBonusXTS LABEL WORD + +no_bonusTS LABEL WORD + DW _JBCDZ,CYCLONECOUNTERBCD,no_cyclonesTS + CLEARIT + DW _CALC_CYCLO ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5_NUMBER,CYCLONECOUNTERBCD,SW*1*2/4-16*10/4 + DW _PRINT5_number,HUNDRATUSEN,SW*1*2/4+16*8/4 + DW _PRINT5,show_CYCLONES_TEXT,SW*1*2/4-16*1/4 + DW _PRINT8_NUMBER_CENT,CYCLONESCOREBCD,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + DW _JINGLE,S_MULTILJUD + CLEARIT + +no_cyclonesTS LABEL WORD + DW _JBCDZ,HAPPY_HOUR_TOTAL,no_happy_stewartTS + CLEARIT + DW _CALC_HAPPY ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5,show_HAPPY_TEXT,SW*1*2/4 + DW _PRINT8_NUMBER_CENT,HAPPY_HOUR_TOTAL,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + DW _JINGLE,S_MULTILJUD + CLEARIT + +no_happy_stewartTS LABEL WORD + DW _JBCDZ,MEGA_LAUGH_TOTAL,no_MEGA_LAUGHTS + CLEARIT + DW _CALC_MEGA ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5,show_MEGA_TEXT,SW*1*2/4 + DW _PRINT8_NUMBER_CENT,MEGA_LAUGH_TOTAL,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + DW _JINGLE,S_MULTILJUD + CLEARIT + +no_MEGA_LAUGHTS LABEL WORD + DW _JBCDZ,BONUSSIFFRORNA,no_bonus2TS + DW _PRINT5,show_totalbonus_TEXT,SW*1*2/4+16*4/4 + + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + + DW _WAIT,60 ;CPW! + CLEARIT + DW _PRINT8_NUMBER,BONUSSIFFRORNA,7*2*SW/4-16*4/4 + DW _FLORPA + DW _WAIT,25 ;CPW! + dw _beaten_matrix +no_bonus2TS LABEL WORD + DW _KOLLA_XXBALL +if demover + DW _DEMOVER_CHANGE_PLAYER +else + dw _waitifmulti,2*60 ;cpgnu? (visa score lite l„ngre) + DW _MATRIXLGT,0 + clearit + DW _CHANGE_PLAYER +endif + CLEARIT + dw _wait,32000 + DW 0 + +SORRYNOBONUSTEXT DB ' SORRY ',94,' NO BONUS ',0 + +shoot_again_onTS LABEL BYTE ;Turn on shoot again . . . + CLEARIT + DW _FLASHON,SHOOT_AGAIN_SPEED + DW _SHOOT_AGAIN_ONN,1 + DW _PRINT13,SHOOT_AGAIN_TEXT,SW*2/4*2 ;+16*3/4 ;CP! + DW _NEW_BALL2 + DW _PARTYON,1 ;CP? + DW 0 + + +out_of_ballsTS LABEL WORD ;ˇr Stewarts fortfarande borta kanske? + CLEARIT + dw _matrixlgt,1 + dw _knacket,? + dw _wait,120 + +check_xxballTS LABEL WORD + DW _check_xxballs ;utf”r ev xxballs, hoppar sedan till after_xxballs! + +after_xxballTS LABEL WORD + clearit + dw _check_high,? + DW _MATRIXLGT,0 + DW _2_DEMO_MODE + + +AfterDemoModeTS Label Word + DW _MATRIXLGT,0 + dw _wait,20 + dw _setloop,2,? + DW _INIT_SCORE,? + DW _JMP,UrbanOverTS + +Once_MoreTS LABEL WORD + DW _INIT_SCORE,? + +GameOverTS LABEL WORD + SHOWTIME=80 + DW _WAIT,SHOWTIME + +UrbanOverTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,GAME_OVER_TEXT,SW*2*2/4 + DW _WAIT,30 + DW _FLASHOFF,? + CLEARIT + DW _SHOW_SCORE,OFFSET GAMEOVERTS + dw _loop_,2,offset once_morets + DW _WAIT,SHOWTIME + CLEARIT + DW _WAIT,20 + DW _JMP,ShowHighsTS + DW 0 +GAME_OVER_TEXT DB ' GAME OVER',0 +;TUBORG! + +DRSPEED=13 +DSCORETS LABEL WORD + CLEARIT + DW _FLASHON,DRSPEED + DW _PRINT13_NUMBER_CENT,BCD250000,2*2*SW/4+TOTCENT + DW _WAIT,DRSPEED*2*3-DRSPEED + CLEARIT + DW _FLASHOFF,? + DW 0 + +RSCORE1TS LABEL WORD + CLEARIT + DW _FLASHON,DRSPEED + DW _PRINT13_NUMBER_CENT,BCD250000,2*2*SW/4+TOTCENT + DW _WAIT,DRSPEED*2*3-DRSPEED + CLEARIT + DW _FLASHOFF,? + DW 0 + +RSCORE2TS LABEL WORD + CLEARIT + DW _FLASHON,DRSPEED + DW _PRINT13_NUMBER_CENT,BCD500000,2*2*SW/4+TOTCENT + DW _WAIT,DRSPEED*2*3-DRSPEED + CLEARIT + DW _FLASHOFF,? + DW 0 + +RSCORE3TS LABEL WORD + CLEARIT + DW _FLASHON,DRSPEED + DW _PRINT13_NUMBER_CENT,BCD750000,2*2*SW/4+TOTCENT + DW _WAIT,DRSPEED*2*3-DRSPEED + CLEARIT + DW _FLASHOFF,? + DW 0 + +snackTS LABEL WORD + ASSUME DS:DATA + dw _scroll,snacktext + clearit + dw 0 + +iceTS LABEL WORD + clearit + DW _FLASHON,1 + dw _print13,icetext,sw*2*2/4+16*3/4+2 + DW _WAIT,140 + clearit + DW _FLASHOFF,? + dw 0 + +sodaTS LABEL WORD + clearit + DW _FLASHON,1 + dw _print13,sodatext,sw*2*2/4+16*3/4+2 + DW _WAIT,140 + clearit + DW _FLASHOFF,? + dw 0 + +popTS LABEL WORD + clearit + DW _FLASHON,1 + dw _print13,poptext,sw*2*2/4+16*2/4-2 + DW _WAIT,140 + clearit + DW _FLASHOFF,? + dw 0 + +noducksTS LABEL WORD + clearit + DW _FLASHON,6 + dw _print13,nosnacktext,sw*2*2/4 + DW _WAIT,100-6*2 + clearit + DW _FLASHOFF,? + dw 0 + +showithi macro + DW _PRINT13,ALLTIME_TEXT,SW*2/4*2+16/4/2 + dw _wait,40 + + CLEARIT + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_1,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*0),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*0+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_2,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*1),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*1+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_3,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*2),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*2+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_4,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*3),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*3+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + DW _FLASHOFF,1 +endm + + +ShowInfoTS LABEL WORD + CLEARIT + clearit + DW _rullgardin_ned,PLAY_TEXT,1 + dw _wait,40*3 + DW _MATRIXLGT,0 + CLEARIT + DW _PRINT13,JACK_TEXT,SW*4/4 + dw _print13_number,jackvalue,SW*4/4+8*16/4 + DW _FLASHON,1 + dw _wait,40*3 + DW _FLASHOFF,1 + CLEARIT + dw _rullgardin_upp,BONUS_TEXT,1 + dw _wait,40*3 + CLEARIT + showithi + CLEARIT + + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + + DW 0 + +ShowHighsTS LABEL WORD +;TEXTER + CLEARIT + DW _FLASHON,1 + DW _PRINT13,PF_TEXT,SW*2/4*2-2 + dw _wait,120 + DW _CLEAR2 + DW _FLASHOFF,1 + dw _rullgardin_upp,TRS_TEXT,1 + dw _wait,90 + CLEARIT + DW _FLASHON,1 + DW _PRINT13,PL_TEXT,SW*2/4*2 + dw _wait,90 + DW _CLEAR3 + DW _FLASHOFF,1 +;SCROLLA + DW _SCROLL,SCROLL_TEXT1 +;VISA HIGHSCORE + showithi + +;DI UPP ¸ NED! + CLEARIT +; dw _rullgardin_NED,DIGITAL_TEXT,16 +; dw _rullgardin_upp,DIGITAL_TEXT,-13 +; dw _wait,40 +; CLEARIT + dw _rullgardin_NED,fld_TEXT,16 + dw _rullgardin_upp,fld_TEXT,-13 + dw _wait,40 +;SCROLLA SISTA + DW _SCROLL,SCROLL_TEXT2 + CLEARIT + DW _JMP,ShowHighsTS + dw 0 + + +ShowPlayersTS label word + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + dw 0 +first_no_of_playersTS LABEL WORD + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + DW _PRINT13,NOLLA,SW*2*2/4+16*19/4 +no_of_playersTS label word + dw _print5,no_of_players_text,sw*2*10/4+16*1/4 + DW _WAIT_GAME_ON,? + dw 0 + +hiddenTS LABEL WORD + DW _SCROLL,HIDDENTEXT + DW _TSEND,? + DW _WAIT,1 + DW 0 + +ride1TS dw _scroll,ride1text + dw 0 +ride2TS dw _scroll,ride2text + dw 0 +ride3TS dw _scroll,ride3text + dw 0 + +skillcycloneTS LABEL WORD + clearit + DW _FLASHON,1 + dw _print13,skillcycloneTEXT,sw*2*2/4 + dw _wait,40 + CLEARIT + DW _FLASHOFF,? + DW _FLASHON,10 + DW _PRINT13_NUMBER_CENT,SKILL_SCORE2,2*2*SW/4+TOTCENT + DW _WAIT,10*2*3-10 + CLEARIT + DW _FLASHOFF,? + DW 0 + +skilltunnelTS LABEL WORD + clearit + DW _FLASHON,1 + dw _print13,skilltunnelTEXT,sw*2*2/4 + dw _wait,40 + CLEARIT + DW _FLASHOFF,? + DW _FLASHON,10 + DW _PRINT13_NUMBER_CENT,SKILL_SCORE,2*2*SW/4+TOTCENT + DW _WAIT,10*2*3-10 + CLEARIT + DW _FLASHOFF,? + dw 0 + +sidelaneTS dw _scroll,SIDELANETEXT + dw 0 + +crazyletterTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,CRAZYLETTERTEXT,SW*2*2/4 + DW _WAIT,50 + DW _WAITJINGLE,? + CLEARIT + DW _FLASHOFF,? + DW 0 + +nothingTS LABEL WORD + CLEARIT + DW _FLASHON,15 + dw _print13,nothingtext,sw*2*2/4+16*6/4 + DW _WAIT,15*3 + CLEARIT + DW _FLASHOFF,? + DW 0 + +femhundraTS LABEL WORD + CLEARIT + DW _FLASHON,DRSPEED + DW _PRINT13_NUMBER,OFFSET FEMHUNDRATUSEN,SW*2/4*2+16*1/4 + DW _WAIT,DRSPEED*2*3-DRSPEED + CLEARIT + DW _FLASHOFF,? + DW 0 + +bonusheldTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,BONUSHELDTEXT,SW*2/4*2+2 + DW _WAIT,110 + CLEARIT + DW _FLASHOFF,? + DW 0 + +DoubleBTS LABEL WORD + CLEARIT + DW _FLASHON,1 + dw _print13,DOUBLEBONUSTEXT,sw*2/4*2+2+2 + DW _WAIT,100 + CLEARIT + DW _FLASHOFF,? + DW 0 + +tiltTS LABEL WORD + DW _EOSNURR,? + CLEARIT + DW _PRINT13,TILT_TEXT,sw*2/4*2+16*0/4 + DW _WAIT,32767 + DW 0 +TILT_TEXT DB ' TILT TILT TILT',0 +last_text db ' ',0 +flashlast db ' ',0 +slutsiffra db '0',0 +startext db '*',0 +last_pos dw 0 + +NO_MEGA_TEXT LABEL BYTE +NO_HAPPY_TEXT DB 'TIME OUT ',94,' NO BONUS',0 + +if demover +MINUTE5TS LABEL WORD + CLEARIT + dw _scroll,MINUTE5TEXT + DW _FLASHON,1 + dw _print13_number,offset SIFFRORNA,SW*4/4+16*2/4 + DW _WAIT,100 + DW _FLASHOFF,1 + dw _scroll,MINUTE5TEXTB + DW _FADE,256 + DW _WAIT,100 + DW QUIT,? + dw 0 +MINUTE5TEXT DB 21 DUP (1) + DB "WELL DONE PLAYER 1 - YOU HAVE ACHEIVED THE MEGA SCORE OF" + DB 21 DUP (1),255 +MINUTE5TEXTB DB 21 DUP (1) + DB "LOOK OUT FOR PINBALL FANTASIES PC - FULL GAME AVAILABLE SOON" + DB 21 DUP (1),255 +endif +;*********************************************************** + +SNACKTEXT DB 21 DUP (1) + DB 'GO GET A SNACK DUDE' + DB 21 DUP (1),255 + +ICETEXT DB 'COLD ICECREAM',0 + +SODATEXT DB 'SODA WITH ICE',0 + +POPTEXT DB 'EAT SOME POPCORNS',0 + + +NOSNACKTEXT dB 'HIT SOME DUCKS FIRST',0 + +GETTING_SICK_TEXT DB 'GETTING SICK HUH',0 + +PARTY_ON_TEXT DB ' PARTY ON PLAYER ',0 +all_targa_ db 21 DUP (1),'ALL TARGETS SCORE 1000000',21 DUP(1),255 ;CP! +hhtotal_text db ' HAPPY HOUR TOTAL',0 +ZEROQ DB '0'+7,0 +mltotal_text db 21 DUP (1),' MEGA LAUGH TOTAL ',255 +SHOOT_AGAIN_TEXT DB 'SHOOT AGAIN PLAYER ',0 +NO_OF_PLAYERS_TEXT DB 'PLAYERS X',0 +NOLLA DB '7',0 +show_bonus_TEXT DB 'BONUS',0 +show_totalbonus_TEXT DB 'TOTAL*BONUS',0 +BONUS_X_TEXT DB 'BONUS*X*?',0 +show_CYCLONES_TEXT DB ' CYCLONES X',0 +SHOW_HAPPY_TEXT DB ' HAPPY HOUR TOTAL',0 +SHOW_MEGA_TEXT DB ' MEGA LAUGH TOTAL',0 + +HIDDENTEXT DB 21 DUP (1) + DB 'YOU FOUND THE HIDDEN ENTRANCE ',94,' GO FOR THE CYCLONE' ;CP? + DB 21 DUP (1),255 + +RIDE1TEXT DB 21 DUP (1) + DB 'DO THE SKYRIDE MAN ' + DB 21 DUP (1),255 + +RIDE2TEXT DB 21 DUP (1) + DB 'GO FOR IT AGAIN FELLOW' + DB 21 DUP (1),255 + +RIDE3TEXT DB 21 DUP (1) + DB 'REACHED THE SKY' + DB 21 DUP (1),255 + +SKILLCYCLONETEXT DB ' CYCLONE SKILL SHOT',0 + +SKILLTUNNELTEXT db ' TUNNEL SKILL SHOT',0 + +CRAZYLETTERTEXT DB 'CRAZY LETTER SPOTTED',0 + +SIDELANETEXT DB 21 DUP (1) + DB 'SIDE LANE EXTRA BALL IS LIT' + DB 21 DUP (1),255 + +nothingtext DB 'NO SCORE',0 + +femhundratext DB 21 DUP (1) + db 'FEMHUNDRATUSEN' + DB 21 DUP (1),255 + +bonusheldtext db 'B O N U S H E L D',0 +DOUBLEBONUStext db 'X9 DOUBLE BONUS X9',0 ;9=2 + + +fivetext DB 21 DUP (1) + db '5' + DB 21 DUP (1),255 +_onemoreformad db 1+65-10,' MORE FOR MAD',0 +_twomoreformad db 2+65-10,' MORE FOR MAD',0 + +PF_TEXT DB ' PINBALL FANTASIES',0 +TRS_TEXT DB ' THE REAL SIMULATOR',0 +PL_TEXT DB ' PARTY LAND',0 +SCROLL_TEXT1 DB 21 DUP (' '),'ADD PLAYERS WITH F1 TO F8 OR ENTER ',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' '),255 +ALLTIME_TEXT DB 'ALL TIME HIGHSCORES',0 +fld_TEXT DB ' FRONTLINE DESIGN',0 +SCROLL_TEXT2 DB 21 DUP (' '),'FLIP WITH LEFT AND RIGHT ALT SHIFT OR CTRL KEYS',21 DUP (' ') + DB 'PUSH TABLE WITH SPACE',21 DUP (' ') + DB 'CONTROL SPRING WITH DOWN ARROW KEY',' ESC EXITS',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS ',21 DUP (' ') + DB 255 +COMMENT\ +PF_TEXT DB ' PINBALL FANTASIES',0 +TRS_TEXT DB ' THE REAL SIMULATOR',0 +PL_TEXT DB ' PARTY LAND',0 +SCROLL_TEXT1 DB 21 DUP (' '),'ADD PLAYERS WITH F1 TO F8 OR ENTER',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' '),255 +ALLTIME_TEXT DB ' ALL TIMES HIGHSCORE',0 +SCROLL_TEXT2 DB 21 DUP (' '),'FLIP WITH LEFT AND RIGHT ALT SHIFT OR CTRL KEYS',21 DUP (' ') + DB 'PUSH TABLE WITH SPACE',21 DUP (' ') + DB 'CONTROL SPRING WITH DOWN ARROW KEY OR MOUSE',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' ') + DB 'P PAUSES GAME AND M TOGGLES INGAME MUSIC ON AND OFF',21 DUP (' ') + DB 'ESC EXITS AND SAVES NEW HIGHSCORES',21 DUP (' '),255 +\ +DIGITAL_TEXT DB ' DIGITAL ILLUSIONS',0 + +JACK_TEXT DB 'JACKPOT IS',0 +BONUS_TEXT DB ' YOU HAVE XX BONUS',0 ;10 +PLAY_TEXT DB ' PLAYER 8 BALL 8 ',0 ;8,18 + +INFO_TEXT DB 21 DUP (' ') + db '' + DB 21 DUP (1),255 +IF DEMOVER +playerstext db 5+'7',' MIN DEMO',0 ;8=1 (L™S EKVATIONEN!) +ELSE +playerstext db 'PLAYER 8',0 ;8=1 (L™S EKVATIONEN!) +ENDIF +BALLSTEXT DB 'BALL 8',0 ;8=1 +hajjskar db 'HIGHSCORE PL X ',92,' ',93,0 +stjaernor db '********************',0 +;****************************************************************************** + +DATA ENDS + + +;*************************** Animations ************************************** +DATA2 SEGMENT PARA PUBLIC 'DATA' +;*********************ANIMATIONS MALL************************* + dw 1*4 ;loop pos + dw 15 ;number of loops + dw 5*4-4 ;length of anim (5 frames * 4 bytes!) +_happy dw happy_1,1;<---start! + dw happy_2,2;<-, loop! + dw happy_3,2; I + dw happy_4,2; I + dw happy_5,2;__I +;************************************************************** + + dw 1*2 ;loop pos + dw 1 ;number of loops + dw 19*4 ;length of anim (5 frames * 4 bytes!) +_cyclone dw cyclo00,speed +dw cyclo01,speed +dw cyclo02, speed +dw cyclo03, speed +dw cyclo04, speed +dw cyclo05 ,speed +dw cyclo06 ,speed +dw cyclo07 ,speed +dw cyclo08 ,speed +dw cyclo09 ,speed +dw cyclo10 ,speed +dw cyclo11 ,speed +dw cyclo12 ,speed +dw cyclo13 ,speed +dw cyclo14 ,speed +dw cyclo15 ,speed +dw cyclo16 ,speed +dw cyclo17 ,speed +dw cyclo18 ,40 + + dw 0 + dw 20 + dw 4*3-4 +_party_party dw party_1,1 + dw party_2,1 + dw party_3,2 + + dw 0 + dw 20 + dw 4*3-4 +_party_p dw party_1,1 + dw party_4,1 + dw party_5,2 + + dw 0 + dw 20 + dw 4*3-4 +_party_a dw party_1,1 + dw party_6,1 + dw party_7,2 + + dw 0 + dw 20 + dw 4*3-4 +_party_r dw party_1,1 + dw party_8,1 + dw party_9,2 + + dw 0 + dw 20 + dw 4*3-4 +_party_t dw party_1,1 + dw party_10,1 + dw party_11,2 + + dw 0 + dw 20 + dw 4*3-4 +_party_y dw party_1,1 + dw party_12,1 + dw party_13,2 + + dw 0 + dw 1 +megallen dw 4*28 +megal DW MEGAL00,4 +dw megal01,4 +dw megal02,4 +dw megal03 ,4 +dw megal04 ,4 +dw megal05 ,4 +dw megal06 ,4 +dw megal07 ,4 +dw megal08 ,4 +dw megal09 ,4 +dw megal10 ,4 +dw megal11 ,4 +dw megal12 ,4 +dw megal13 ,4 +dw megal14 ,4 +dw megal15 ,4 +dw megal16 ,4 +dw megal17 ,4 +dw megal18 ,4 +dw megal19 ,4 +dw megal20 ,4 +dw megal21 ,4 +dw megal22 ,4 +dw megal23 ,4 +dw megal24 ,4 +dw megal25 ,4 +dw megal26 ,4 +dw megal27,50 + +;***************************** +dw 1 +dw 32*4 +speed=7 +_mystery dw a_12_00,speed +dw a_12_01,speed +dw a_12_02,speed +dw a_12_03 ,speed +dw a_12_04 ,speed +dw a_12_05 ,speed +dw a_12_06 ,speed +dw a_12_07 ,speed +dw a_12_08 ,speed +dw a_12_09 ,speed +dw a_12_10 ,speed +dw a_12_11 ,speed +dw a_12_12 ,speed +dw a_12_13 ,speed +dw a_12_14 ,speed +dw a_12_15 ,speed +dw a_12_16 ,speed +dw a_12_17 ,speed +dw a_12_18 ,speed +dw a_12_19 ,speed +dw a_12_20 ,speed +dw a_12_21 ,speed +dw a_12_22 ,speed +dw a_12_23 ,speed +dw a_12_24 ,speed +dw a_12_25 ,speed +dw a_12_26 ,speed +dw a_12_27 ,speed +dw a_12_28 ,speed +dw a_12_29 ,speed +dw a_12_30 ,speed +dw a_12_31 ,speed +;************************* + +;***************************** +dw 1 +dw 16*4 +speed=3 +_million dw a_09_00,speed +dw a_09_01,speed +dw a_09_02,speed +dw a_09_03 ,speed +dw a_09_04 ,speed +dw a_09_05 ,speed +dw a_09_06 ,speed +dw a_09_07 ,speed +dw a_09_08 ,speed +dw a_09_09 ,speed +dw a_09_10 ,speed +dw a_09_11 ,speed +dw a_09_12 ,speed +dw a_09_13 ,speed +dw a_09_14 ,speed +dw a_09_15 ,40 +;************************* +dw 1 +dw 16*4 +speed=1 +_millionFAST dw a_09_00,speed +dw a_09_01,speed +dw a_09_02,speed +dw a_09_03 ,speed +dw a_09_04 ,speed +dw a_09_05 ,speed +dw a_09_06 ,speed +dw a_09_07 ,speed +dw a_09_08 ,speed +dw a_09_09 ,speed +dw a_09_10 ,speed +dw a_09_11 ,speed +dw a_09_12 ,speed +dw a_09_13 ,speed +dw a_09_14 ,speed +dw a_09_15 ,40 +;************************* +;***************************** +dw 2*4 ;loop pos (word) +dw 5 ;nof loops +dw 18*4 ;length +speed=4 +_jackpot dw a_15_00,speed +dw a_15_01,speed +dw a_15_02,speed +dw a_15_03 ,speed +dw a_15_04 ,speed +dw a_15_05 ,speed +dw a_15_06 ,speed +dw a_15_07 ,speed +dw a_15_08 ,speed +dw a_15_09 ,speed +dw a_15_10 ,speed +dw a_15_11 ,speed +dw a_15_12 ,speed +dw a_15_13 ,speed +dw a_15_14 ,speed +dw a_15_15 ,speed +dw a_15_16 ,speed +dw a_15_17 ,speed +dw a_15_18 ,speed +;************************* + +;***************************** +dw 1 +dw 8*4 +speed=2 +_bonusx2 dw a_03_00,speed +dw a_03_01,speed +dw a_03_02,speed +dw a_03_03 ,speed +dw a_03_04 ,speed +dw a_03_05 ,speed +dw a_03_06 ,speed +dw a_03_07 ,40 +;************************* +;***************************** +dw 1 +dw 8*4 +speed=2 +_bonusx4 dw a_04_00,speed +dw a_04_01,speed +dw a_04_02,speed +dw a_04_03 ,speed +dw a_04_04 ,speed +dw a_04_05 ,speed +dw a_04_06 ,speed +dw a_04_07 ,40 + +;************************* +;***************************** +dw 1 +dw 8*4 +speed=2 +_bonusx6 dw a_05_00,speed +dw a_05_01,speed +dw a_05_02,speed +dw a_05_03 ,speed +dw a_05_04 ,speed +dw a_05_05 ,speed +dw a_05_06 ,speed +dw a_05_07 ,40 +;************************* +;***************************** +dw 1 +dw 8*4 +speed=2 +_bonusx8 dw a_06_00,speed +dw a_06_01,speed +dw a_06_02,speed +dw a_06_03 ,speed +dw a_06_04 ,speed +dw a_06_05 ,speed +dw a_06_06 ,speed +dw a_06_07 ,40 +;************************* +;***************************** +dw 1 +dw 22*4 +speed=4 +_extraball dw a_01_00,speed +dw a_01_01,speed +dw a_01_02,speed +dw a_01_03 ,speed +dw a_01_04 ,speed +dw a_01_05 ,speed +dw a_01_06 ,speed +dw a_01_07 ,speed +dw a_01_08 ,speed +dw a_01_09 ,speed +dw a_01_10 ,speed +dw a_01_11 ,speed +dw a_01_12 ,speed +dw a_01_13 ,speed +dw a_01_14 ,speed +dw a_01_15 ,speed +dw a_01_16 ,speed +dw a_01_17 ,speed +dw a_01_18 ,speed +dw a_01_19 ,speed +dw a_01_20 ,speed +dw a_01_21 ,170 +;************************* + +;***************************** +dw 1 +dw 35*4 +_loop dw a_08_00,3 +dw a_08_01,3 +dw a_08_02,3 +dw a_08_03 ,3 +dw a_08_04 ,3 +dw a_08_05 ,3 +dw a_08_06 ,3 +dw a_08_07 ,3 +dw a_08_08 ,3 +dw a_08_09 ,3 +dw a_08_10 ,3 +dw a_08_11 ,3 +dw a_08_12 ,3 +dw a_08_13 ,3 +dw a_08_14 ,3 +dw a_08_15 ,3 +dw a_08_16 ,3 +dw a_08_17 ,3 +dw a_08_18 ,3 +dw a_08_19 ,3 +dw a_08_20 ,3 +dw a_08_21 ,3 +dw a_08_22 ,3 +dw a_08_23 ,3 +dw a_08_24 ,3 +dw a_08_25 ,3 +dw a_08_26 ,3 +dw a_08_27 ,3 +dw a_08_28 ,3 +dw a_08_29 ,3 +dw a_08_30 ,3 +dw a_08_31 ,3 +dw a_08_32 ,3 +dw a_08_33 ,3 +dw a_08_34 ,30 + +;************************* + + + +extrn MEGAL00,megal01,megal02 ,megal03 ,megal04 ,megal05 ,megal06 ,megal07 ,megal08 ,megal09 ,megal10,megal11 ,megal12 ,megal13 ,megal14 ,megal15 ,megal16 ,megal17 ,megal18 ,megal19 ,megal20 ,megal21 ,megal22 ,megal23 ,megal24 ,megal25 ,megal26 ,megal27:byte +extrn a_09_00,a_09_01,a_09_02 ,a_09_03 ,a_09_04 ,a_09_05 ,a_09_06 ,a_09_07 ,a_09_08 ,a_09_09 ,a_09_10,a_09_11 ,a_09_12 ,a_09_13 ,a_09_14 ,a_09_15 +extrn a_03_00,a_03_01,a_03_02 ,a_03_03 ,a_03_04 ,a_03_05 ,a_03_06 ,a_03_07 +extrn a_04_00,a_04_01,a_04_02 ,a_04_03 ,a_04_04 ,a_04_05 ,a_04_06 ,a_04_07 +extrn a_05_00,a_05_01,a_05_02 ,a_05_03 ,a_05_04 ,a_05_05 ,a_05_06 ,a_05_07 +extrn a_06_00,a_06_01,a_06_02 ,a_06_03 ,a_06_04 ,a_06_05 ,a_06_06 ,a_06_07 +extrn party_1,party_2 ,party_3 ,party_4 ,party_5 ,party_6 ,party_7 ,party_8 ,party_9 ,party_10,party_11 ,party_12 ,party_13 ,party_14 +extrn cyclo00,cyclo01,cyclo02 ,cyclo03 ,cyclo04 ,cyclo05 ,cyclo06 ,cyclo07 ,cyclo08 ,cyclo09 ,cyclo10,cyclo11 ,cyclo12 ,cyclo13 ,cyclo14 ,cyclo15 ,cyclo16,cyclo17,cyclo18,cyclo19,cyclo20 +extrn a_12_00,a_12_01,a_12_02,a_12_03 ,a_12_04 ,a_12_05 ,a_12_06 ,a_12_07 ,a_12_08 ,a_12_09 ,a_12_10 ,a_12_11 ,a_12_12 ,a_12_13 ,a_12_14 ,a_12_15 ,a_12_16 ,a_12_17 ,a_12_18 ,a_12_19 ,a_12_20 ,a_12_21 ,a_12_22 ,a_12_23 ,a_12_24 ,a_12_25 ,a_12_26 ,a_12_27 ,a_12_28 ,a_12_29 ,a_12_30 ,a_12_31 ,a_12_32 ,a_12_33 ,a_12_34 ,a_12_35 +extrn a_08_00,a_08_01,a_08_02,a_08_03 ,a_08_04 ,a_08_05 ,a_08_06 ,a_08_07 ,a_08_08 ,a_08_09 ,a_08_10 ,a_08_11 ,a_08_12 ,a_08_13 ,a_08_14 ,a_08_15 ,a_08_16 ,a_08_17 ,a_08_18 ,a_08_19 ,a_08_20 ,a_08_21 ,a_08_22 ,a_08_23 ,a_08_24 ,a_08_25 ,a_08_26 ,a_08_27 ,a_08_28 ,a_08_29 ,a_08_30 ,a_08_31 ,a_08_32 ,a_08_33 ,a_08_34 +extrn a_01_00,a_01_01,a_01_02,a_01_03 ,a_01_04 ,a_01_05 ,a_01_06 ,a_01_07 ,a_01_08 ,a_01_09 ,a_01_10 ,a_01_11 ,a_01_12 ,a_01_13 ,a_01_14 ,a_01_15 ,a_01_16 ,a_01_17 ,a_01_18 ,a_01_19 ,a_01_20 ,a_01_21 ,a_01_22 +extrn a_15_00,a_15_01,a_15_02,a_15_03 ,a_15_04 ,a_15_05 ,a_15_06 ,a_15_07 ,a_15_08 ,a_15_09 ,a_15_10 ,a_15_11 ,a_15_12 ,a_15_13 ,a_15_14 ,a_15_15 ,a_15_16 ,a_15_17 ,a_15_18 +extrn happy_1,happy_2 ,happy_3 ,happy_4 ,happy_5 +;megal11? +DATA2 ENDS + +;****************************************************************************** + + + + + + +;****************************************************************************** +;** ** +;** C O D E ** +;** ** +;****************************************************************************** + +CODE SEGMENT PARA PUBLIC 'CODE' + ASSUME CS:CODE,DS:DATA + + +;*********************************** INITS ************************************ + +JUST_ONE_TIME_RESET_TABLE: + CALL CREATEGATE1 + CALL SLACK_LIGHTS + RETN + + +WHEN_NEW_GAME_RESET_TABLE: + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + MOVEBCD JACKVALUE,JACKINIT + CALL RESET_VARS2 + CALL RESET_VARS + CALL UPDATE_P_STRUC_4_ALL_PLAYERS + MOV XBALLS,0 + MOV XxballE,FALSE + MOV MUSICOK,FALSE + + ;cleara slutsiffrorna (di alla!) (F”r knacket allts†!!!) + push es + move es,ds + MOV di,offset last_text + mov al,' ' + mov cx,8*2 + rep stosb + MOV di,offset flashlast + mov al,' ' + mov cx,8*2 + rep stosb + pop es + RETN + + +; CALL INIT_JACK +RESET_VARS2: + NIL AX + MOVE ES,DS + + MOV DI,OFFSET SIFFRORNA + MOV CX,6 + REP STOSW + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,6 + REP STOSW + + MOV CYCLONECOUNTER,0 + MOV DI,OFFSET CYCLONECOUNTERBCD + MOV CX,6 + REP STOSW + MOV DI,OFFSET CYCLONESCOREBCD + MOV CX,6 + REP STOSW + + MOV DI,OFFSET SKILL_SCORE + MOV CX,6 + REP STOSW + MOV DI,OFFSET SKILL_SCORE2 + MOV CX,6 + REP STOSW + + ;cleara slutsiffrorna (di alla!) (F”r knacket allts†!!!) + push es + move es,ds + MOV di,offset last_text + mov al,' ' + mov cx,8*2 + rep stosb + pop es +; MOV XXBALLE,FALSE + RETN + + + +WHEN_NEW_BALL_RESET_TABLE: + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + CALL RESET_VARS + CALL P_STRUC_2_VARS + RETN + +RESET_VARS: + MOVE ES,DS + NIL AX + MOV BONUS_TEXT[11],'8' +; MOV play_TEXT[18],'8' ;cpp +; MOV play_TEXT[8],'8' ;cpp + MOV DI,OFFSET HAPPY_HOUR_TOTAL + MOV CX,6 + REP STOSW + MOV DI,OFFSET MEGA_LAUGH_TOTAL + MOV CX,6 + REP STOSW + + MOV BALLHIGH,FALSE + + MOV SNACKSYNCER,0 ;SYNCER VARS + MOV ARROWSYNCER,0 + MOV PUKESYNCER,0 + MOV TRAINSYNCER,0 + MOV SNACKCOUNTER,0 + + MOV ICEFLASHING,FALSE ;FLASHING VARS + MOV SODAFLASHING,FALSE + MOV POPFLASHING,FALSE + MOV ARCADEON,FALSE + MOV MBFLASHING,FALSE + MOV BONUSMULTIPEL,1 + MOV HBFLASHING,FALSE + MOV DBFLASHING,FALSE + MOV _5XFLASHING,FALSE + MOV _5MFLASHING,FALSE + MOV BALLFLASHING,FALSE + MOV JPFLASHING_NORMAL,FALSE + MOV JPFLASHING_TIME,FALSE + + MOV D1DISABLED,FALSE ;DISABLE VARS + MOV D2DISABLED,FALSE + MOV D3DISABLED,FALSE + MOV TOUCHERDISABLED,FALSE + MOV SNACKDISABLED,FALSE + MOV INH_REV,FALSE + MOV INH_LOOP,FALSE + MOV INHIBIT_REVERSE_COUNTER,0 + MOV PUKEFORBIDDEN,FALSE + MOV DRAGON,FALSE + + MOV TUNNELDOWNCOUNTER,0 ;SYNC COUNTERS + MOV ANY_LOOP_DOWN_COUNTER,0 + MOV REVERSE_DOWN_COUNTER,0 + + MOV POPCOUNTER,0 ;FEATURE COUNTERS + MOV SKYRIDECOUNTER,0 + MOV PUKECOUNTER,0 + MOV BALOONCOUNTER,0 + + MOV HAPPY_HOUR,FALSE ;MODE FLAGS + MOV MEGA_LAUGH,FALSE + MOV HOLDBONUSFLAG,FALSE + + MOV EOTS,TRUE + + MOV CRAZY_ADVANCE_LIST[0],0 + + CALL RESETFLASHLIST + CALL SLACK_LIGHTS + + LIGHTON 52 + LIGHTON 53 + LIGHTON 54 + LIGHTFLASH 14,TUNNELSPEED ;1M (TUNNEL) + LIGHTFLASH 26,BALOONSPEED ;250K (REVERSE) + + CALL DOLIGHTS ;FLUSH THE BUFFERT + + CALL RESTORED1 ;RESTORE DUCK TARGETS + CALL RESTORED2 + CALL RESTORED3 + + MOV BONUS_X,1 +;HˇR VAR DEN! ; mov paRTYFLASh,false + + RETN + +;****************************************************************************** + + + +DEMO_MUSIC PROC NEAR + CMP no_demomusic,TRUE + JE OOPS_HIGH ;CP! + CMP HIGHSCORE,TRUE + JE OOPS_HIGH ;CP! + PLAYJINGLE S_NOHIGH + MOV AL,S_NOHIGH[2] + MOV LASTPRIORITY,AL + MOV LASTJINGLE,9 ;9=NOHIGH ;SVEN + MOV JINGLEJUMPCNT,1 +OOPS_HIGH: + mov no_demomusic,false + RETN +DEMO_MUSIC ENDP + +GAME_MUSIC PROC NEAR +; ADDTASK TYSTAVOICE + PLAYJINGLE S_ADDPLAYER ;S_SPRING + MOV AL,S_SPRING+2 + MOV LASTPRIORITY,AL + MOV LASTJINGLE,0 + RETN +TYSTAVOICE: +; WAITSYNCS 10 ;CPW! +; SOUNDEFFECT 1eH,1 ;TYSTA STˇMMA 4 +; SUICIDE +GAME_MUSIC ENDP + +;******************************** LOOSE BALL ********************************** +LOOSE_BALL PROC NEAR + MOV LOOSING,TRUE + MOV SCREENFORCE2,576-SH_LO+SPLH ;CP? + CMP HI_RES,TRUE + JNE NOTHIRES14 + MOV SCREENFORCE2,576-SH_HI+SPLH ;CP? +NOTHIRES14: + SETBALLPOS DROPX,DROPY,DROPXS,DROPYS,FALSE ;INTE CP. + MOV ALLOWFLIP,FALSE ;KILL FLIPPERS! + + MOV SPECIALMODE,FALSE + MOV HAPPY_HOUR,FALSE + MOV MEGA_LAUGH,FALSE + + CMP SCORECHANGED,FALSE + JNE NOT_ITS_PARTY_ON + + MOV CURRENT_PRIORITY,0 + MOV BX,OFFSET party_onTS + CALL DO_MATRIX + PLAYJINGLE S_SPRING ;FIAT DUO + MOV MUSICOK,TRUE + ADDTASK PARTY_ON_TASK1 + RETN + +PARTY_ON_TASK1: ;WAIT FOR PARTY ON + WAITSYNCS 30 + MOV PARTYFLASH,TRUE + CALL NEW_BALL + RETN ;PGA NEWBALL + + +NOT_ITS_PARTY_ON: +if demover + cmp fiveminutes,true + je endofsession +endif + MOV CURRENT_PRIORITY,0 + EFFECT LOSTBALL + MOV CURRENT_PRIORITY,0 + MOV LASTJINGLE,62 +; MOV LASTLOOPVAL,0 + ADDTASK SOUNDRINNER + RETN + +SOUNDRINNER: + WAITSYNCS 5 + SOUNDEFFECT SRINNER,0 + SUICIDE + +if demover +endofsession: + effect minute5 + retn +endif + +_FLORPA: + MOV CS:LB6CNT,0 ;RESET F™RDR™JNINGS-RˇKNAREN + MOV ADDORPEK,OFFSET ADDOR ;STARTA MED SISTA NUFFRAN + MOV BONUSPEK,OFFSET BONUSSIFFRORNA+11 + + MOV SI,OFFSET BONUSSIFFRORNA ;SPARA BONUSSIFFRORNA + MOV DI,OFFSET TEMPSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW + + MOV DOTRUT,OFFSET DO_FLORPA + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_5 + MOV BX,0 +_NEXTp_5: + MOV NEXT_A,BX + RETN +PLIPPA_SCORE: + mov si,offset siffrorna + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN + +LB6CNT DW ? +DO_FLORPA: + INC CS:LB6CNT + CMP CS:LB6CNT,4 ;CPW! + JE LB6CNTOK + MOV SI,75 + RETN +LB6CNTOK: + MOV CS:LB6CNT,0 + +DO_IT_AGAIN_AND_DO_IT_NOW: + MOV BX,BONUSPEK + MOV AL,[BX] + OR AL,AL ;IS DIGIT ZERO? + JZ DIGIT_IS_ZERO + DEC BYTE PTR [BX] ;RˇKNA NED BONUSEN + JNZ NO_WAITS_TODAY + + IFZEROBCD BONUSSIFFRORNA + JNC NO_WAITS_TODAY + + MOV CS:LB6CNT,-10 ;CPW! +NO_WAITS_TODAY: + + MOV SI,ADDORPEK ;RˇKNA UPP POˇNGEN + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + + SOUNDEFFECT S_SCORELJUD,0 + + JMP STEP_DONE + +DIGIT_IS_ZERO: + ;FLER SIFFROR? + INC ADDORPEK ;NEXT DIGIT IN POˇNGEN + CMP ADDORPEK,OFFSET ADDOR+12 + JE NO_MORE_NUFFROR + DEC BONUSPEK ;NEXT DIGIT IN BONUS + JMP DO_IT_AGAIN_AND_DO_IT_NOW + +STEP_DONE: + ;SHOW BONUSSIFFRORNA & SIFFRORNA + MOV SI_siffror,OFFSET BONUSSIFFRORNA + MOV DI_siffror,7*2*SW/4-16*4/4 ;10 RADER NED, 8 (12-4) TECKEN IN P¸ RADEN!! + MOV TABORT_DIOVRE_FNT,0 + MOV PRINTTASK,OFFSET PRINT8_task + CALL PLIPPA_SCORE + MOV SI,75 ;AVINSTALLERA EJ! + RETN + +NO_MORE_NUFFROR: + mov clear_box_start,7*2*SW/4 + mov clear_box_bredd,16*(12-1)/4-16*4/4 + mov clear_box_hojd,10 + CALL clear_box2 + MOV SI,0 ;AVINSTALLERA! + RETN + +;******************************* +_DEMOVER_CHANGE_PLAYER: + PUSH BX + CMP HOLDBONUSFLAG,TRUE + JNE NOT_HB_TRUEDV + MOV SI,OFFSET TEMPSIFFRORNA ;HOLD THE BONUS! + MOV DI,OFFSET BONUSSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW +NOT_HB_TRUEDV: +; MOV AL,1 +; ADD AL,'7' ;SEPEKOMPENSERING +; MOV BALLSTEXT[5],AL + + INC BALLSTEXT[5] ;CP! DEMOVER + CMP BALLSTEXT[5],'7'+10 + JB NOIH + MOV BALLSTEXT[5],'7' + CMP BALLSTEXT[4],'7'+1 + JNE DOMOV + INC BALLSTEXT[4] + JMP NOIH +DOMOV: MOV BALLSTEXT[4],'7'+1 ;CP! DEMOVER +NOIH: + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! +; CALL NEW_BALL + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + JMP HU_ +;******************************* +disa dw ? +playerQ db ? +hi_pos dw ? +_check_high: + MOV SISA,1 + mov al,players + mov cs:playerQ,0 + MOV CS:DISA,0 + MOV DOTRUT,offset SPINTSEL_IN_HIGH + JMP NORMAL_END + +spintsel_in_high: + + LEA SI,PLAYER_AREA.P_SIFFRORNA + + MOV CX,4 + + add si,cs:disa + add cs:disa,size player_struc + + mov di,offset hi_score_list + + inc cs:playerQ + mov al,cs:playerQ + cmp al,players + jna check_list + mov first_high,false + cmp highscore,true + je no_sad_jingle + + mov current_priority,0 + mov jinglejumpcnt,1 + PLAYJINGLE S_GameOver + mov current_priority,0 + mov no_demomusic,true +no_sad_jingle: + mov highscore,false + mov si,0 + retn ;f„rdig! + +check_list: + push cx + mov cx,12 + mov bx,0 +check_num: + mov al,[di+bx] + cmp [si+bx],al + jb not_beaten + ja beaten + inc bx + loop check_num +not_beaten: + mov bp,false + jmp poppera +beaten: + pop cx + mov cs:hi_pos,cx +;play the happy highscore jingle . . . +;But only the first time!! + cmp first_high,true + je noplay_of_this + mov first_high,true + mov current_priority,0 + mov jinglejumpcnt,1 + mov highscore,true + playjingle_PENETRATE S_GameOver2 ;(HiScore jingle) +noplay_of_this: + mov sisa,1 + mov bp,true + jmp done_hi_check + +poppera: + pop cx + add di,12+3+1 ;12 nuffror, 3 bokst„ver + loop check_list + +done_hi_check: + mov si,1 + cmp bp,true + jne dont_getit +;***************** +;Print 'highscore pl x ( )' and install key-reader TS + + mov al,cs:playerQ + mov hajjskar[13],al + add hajjskar[13],'7' + + mov dotrut,offset get_it_from_keyboard + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +;***************** + mov si,1 + retn + +dont_getit: + retn + +get_it_from_keyboard: +;************ insert in list + push es + move es,ds + mov cx,cs:hi_pos + + mov si,offset hi_score_list+(12+3+1)*3-1 + mov di,offset hi_score_list+(12+3+1)*4-1 + dec cx + jcxz pos4 + + mov ax,12+3+1 + mul cx + mov cx,ax + + std + rep movsb + +pos4: sub di,(12+3+1)-1 + cld + lea si,player_area.p_siffrorna + MOV CX,SIZE PLAYER_STRUC + MOV AL,CS:PLAYERQ + dec al + NIL AH + MUL CX + ADD SI,AX + mov cx,12 + rep movsb ;mov in new hiscore + pop es +;di pekar d„r namnet ska petas in!! + mov cs:nof_chars_to_read,3 + mov cs:place_hi,di + mov scan_code,-1 ;l„s ev. tidigare tangenttryck! + mov dotrut,offset read_keyboardet + mov si,1 + retn +;***************** +place_hi dw ? +nof_chars_to_read dw ? + +read_keyboardet: + push es + mov al,scan_code + cmp al,-1 + je kvar_svar ;ej tryckt! + mov scan_code,-1 + mov bx,offset alfa_keys + xlat + cmp al,0 + je kvar_svar ;felaktigt tecken! + move es,ds + mov di,cs:place_hi + stosb + push ax + mov cs:place_hi,di + mov ax,3 + sub ax,cs:nof_chars_to_read + mov di,offset hajjskar+16 + add di,ax + pop ax + stosb ;skriv te sk„rm texten . . + dec cs:nof_chars_to_read + jnz kvar_svar + mov sisa,60 ;cpw! + mov dotrut,offset wait_a_little + pop es + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + + ;cleara namnet! + push es + move es,ds + mov al,' ' + mov cx,3 + mov di,offset hajjskar+16 + rep stosb ;skriv te sk„rm texten . . + pop es + jmp dont_write_play +kvar_svar: + pop es + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT +dont_write_play: + mov si,sisa + retn + +wait_a_little: + dec si + cmp si,30 ;cpw! + jne dont_blame_me + push si + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset stjaernor + MOVE DI,sw*2*2/4 + call PRINT_TEXT + pop si +dont_blame_me: + cmp si,2 + jnbe retta_oooo + mov dotrut,offset spintsel_in_high + mov si,1 +retta_oooo: + retn +_loop_: + dec cs:looper + JZ NOJUMPER_tomorrow + add bx,4 + mov bx,[bx] + MOV NEXT_A,BX + jmp [bx] + +looper dw ? +_setloop: +NOJUMPER_tomorrow: +;reinstall loop val + mov ax,[bx+2] + mov cs:looper,ax + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp print_end + + + +SHOWER DB ? +player_adr dw ? +_INIT_SCORE: + mov cs:player_adr,0 + sub cs:player_adr,size player_struc +if demover +else + MOV PLAYERSTEXT[7],0+'7' +endif +;cpp MOV PLAY_TEXT[8],0+'7' + MOV AL,PLAYERS + MOV CS:SHOWER,AL + inc CS:SHOWER + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end +_SHOW_SCORE: +IF DEMOVER +ELSE + INC PLAYERSTEXT[7] +ENDIF +;cpp INC PLAY_TEXT[8] + add cs:player_adr,size player_struc + DEC CS:SHOWER + JZ NOJUMPER + + + MOV SISA,1 + mov dotrut,offset ShowIt + + cmp CS:SHOWER,1 + je normal_end + + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + RETN + +NOJUMPER: + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end + +ShowIt: + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset PLAYERSTEXT + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +; mov si,offset siffrorna + + mov bx,cs:player_adr + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN + +_knacket: + mov dotrut,offset knackrut1 + mov sisa,1 + MOV PLAYER,1 ;F™R CHECK_XXBALL + jmp normal_end + + +;tid mellan knack samt antal knack . . . + knacktid_HI=11 ;CPW! + nof_banks_HI=22 ;CPW! + knacktid_LO=9 ;CPW! + nof_banks_LO=23 ;CPW! + +knackrut1: + PLAYJINGLE_PENETRATE S_endfig + MOV LASTJINGLE,62 ;TYST EFTER FULLGJORD PENETRERING + mov dotrut,offset knackrut2 +;g”r text me sista nuffrerna!! + mov cl,players + nil ch + mov di,offset last_text + mov ah,' ' + mov bx,10 ;n„st sista! + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + push es + move es,data + mov bx,0 +make_last: + mov al,ds:[si] + add si,size player_struc + add al,'7' + stosw + mov word ptr offset [flashlast+bx],ax ;kopiera texten f”r senare blink + + add bx,2 + loop make_last + + pop es + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset last_text + MOVE DI,sw*2/4 + call PRINT_TEXT + + MOV SI,NOF_BANKS_LO + MOV SISA,NOF_BANKS_LO + CMP HI_RES,TRUE + JNE NOTHIRES32 + MOV SI,NOF_BANKS_HI + MOV SISA,NOF_BANKS_HI +NOTHIRES32: + + MOV CS:TIMGLAS,KNACKTID_LO + CMP HI_RES,TRUE + JNE NOTHIRES30 + MOV CS:TIMGLAS,KNACKTID_HI +NOTHIRES30: + retn +timglas dw ? +knackrut2: + dec cs:timglas + jz no_ret + ret +no_ret: + push si + MOV CS:TIMGLAS,KNACKTID_LO + CMP HI_RES,TRUE + JNE NOTHIRES31 + MOV CS:TIMGLAS,KNACKTID_HI +NOTHIRES31: + mov ax,last_pos + ;ax=linje adress, ett steg=32 pixel=> 1 steg= 8 adr.(mcgab) + ;(1 char=8*2 pix, 1 steg=2 char) + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOVE DI,sw*2*8/4 + add di,ax + MOV AX,offset startext + call PRINT_TEXT + mov si,1 + + ;knacka(????) fram en ny slutsiffra! + mov ax,slump_countern + mov dx,0 + mov cx,10 + div cx + ;resten i de„ks e mellan n†ll † NIO!!! + CMP LAST_POS,DX + JNE NOT_THE_SAME + INC DX + CMP DX,10 + JB NOW_ITS_OK + MOV DX,0 +NOW_ITS_OK: +NOT_THE_SAME: + mov last_pos,dx +; inc last_pos +; cmp last_pos,10 +; jnae over_iii +; mov last_pos,0 +over_iii: + mov ax,last_pos + add ax,'7' + mov slutsiffra[0],al + sub ax,'7' + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX_PRINT,offset slutsiffra + MOVE DI_PRINT,sw*2*8/4 + add di_print,ax + MOV PRINTTASK,OFFSET PRINT_TEXT + pop si + dec si + cmp si,0 + jne retta_nuda + +;kolla om siffrorna st„mmer f”r n†en . . . + mov cl,players + nil ch + mov si,offset last_text + mov bx,last_pos + add bx,'7' + + mov di,offset flashlast + + move es,data + mov cs:alla_glada,false +READ_NUFFROR: + lodsw + cmp al,bl + jne gladgnu_tu + mov cs:alla_glada,true + add di,2 + loop READ_NUFFROR + jmp ture_sventton_kravdes_har +gladgnu_tu: + mov ax,'**' + stosw + loop READ_NUFFROR +ture_sventton_kravdes_har: + cmp cs:alla_glada,true + je gladgnu + mov si,0 + jmp retta_nuda ;-( ingen glad )-: +alla_glada db ? +;Om javisst, spela glad gnu † flasha! +gladgnu: + MOV MATRIX_SPEED,3 + MOV MATRIX_CNT,3 + MOV MATRIX_ONOFF,TRUE + MOV MATRIX_IS_FLASHING,TRUE + + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset flashlast + MOVE DI,sw*2/4 + call PRINT_TEXT + +;URBAN WAS HERE MAY 68 + mov current_priority,0 + PLAYJINGLE S_Knacket + MOV JINGLEJUMPCNT,1 + mov current_priority,0 + mov lastjingle,55 + mov si,0 +retta_nuda: + retn + + + + +_CHECK_XXBALLS: ;OBS! TV¸ ING¸NGAR TILL DENNA RUTIN + ;INPUT: LAST_TEXT, LAST_POS, PLAYER, PLAYERS + ;OUTPUT: FT_PEKARE, PLAYER +TESTNEXTPL: + PUSH BX + + MOV BL,PLAYER + NIL BH + SHL BX,1 + ADD BX,OFFSET LAST_TEXT-2 ;bx pekar p† spelare n's slutsiffra + + MOV AL,[BX] + MOV WORD PTR [BX],'XX' ;DESTROY HIM MY ROBOTS! + SUB AL,'7' + NIL AH + + POP BX + + CMP LAST_POS,AX + JE THIS_ONE ;HAN SKA F¸ XXBALL!!! + + INC PLAYER ;INGEN XXBALL F™R HONOM! + MOV AL,PLAYER + CMP AL,PLAYERS + JNA TESTNEXTPL + + MOV BX,OFFSET after_xxballTS + MOV NEXT_A,BX + JMP [BX] + +THIS_ONE: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING +IF DEMOVER +ELSE + MOV PLAYERSTEXT[7],AL +ENDIF + MOV XXBALLE,TRUE + MOV MUSICOK,TRUE + MOV BX,OFFSET shoOt_AGAIN_Onts + MOV NEXT_A,BX + JMP [BX] + +;********************************* + +_KOLLA_XXBALL: + CMP XXBALLE,FALSE + JE HU_ + PUSH BX + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + POP BX + + CMP LIGHTSTATUS[51],TRUE ;LAUGH AGAIN? + JE LET_HIM_SHOOT_AGAIN2 ;MEGA-HOPP + + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER2 + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED2 + +HIGHEST_PLAYER2: + MOV BX,OFFSET AFTER_XXBALLTS + MOV NEXT_A,BX + JMP [BX] + +PLAYER_CHANGED2: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING +IF DEMOVER +ELSE + MOV PLAYERSTEXT[7],AL +ENDIF +;cpp MOV PLAY_TEXT[8],AL + + MOV BX,OFFSET CHECK_XXBALLTS + MOV NEXT_A,BX + JMP [BX] + +;********** + + +_CHANGE_PLAYER: + PUSH BX + CMP HOLDBONUSFLAG,TRUE + JNE NOT_HB_TRUE + MOV SI,OFFSET TEMPSIFFRORNA ;HOLD THE BONUS! + MOV DI,OFFSET BONUSSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW +NOT_HB_TRUE: + + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + + POP BX + CMP LIGHTSTATUS[51],TRUE ;LAUGH AGAIN? + JE LET_HIM_SHOOT_AGAIN + PUSH BX + + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER + + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED + +HIGHEST_PLAYER: + INC BALLS[11] + MOV AL,NO_OF_BALLS + CMP BALLS[11],AL + JA NO_MORE_BALLS + MOV PLAYER,1 ;NEXT PLAYER IS FIRST PLAYER! + MOV AL,BALLS[11] + ADD AL,'7' ;SEPEKOMPENSERING + MOV BALLSTEXT[5],AL +;cpp MOV play_TEXT[18],AL + +PLAYER_CHANGED: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING +IF DEMOVER +ELSE + MOV PLAYERSTEXT[7],AL +ENDIF +;cpp MOV play_TEXT[8],AL + + CALL P_STRUC_2_VARS ;NEXT PLAYER! + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + +HU_: ADD BX,2 ;TASKSYTEM, HOPPA TILL NˇSTA/AVSLUT + CMP WORD PTR [BX],0 + JNE _NEXTp_7 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_7: + MOV NEXT_A,BX + JMP [BX] + +LET_HIM_SHOOT_AGAIN2: ;2 ING¸NGAR! +LET_HIM_SHOOT_AGAIN: ;2 ING¸NGAR! + DEC XBALLS + MOV BX,OFFSET shoot_again_onTS + MOV NEXT_A,BX + JMP [BX] + +_NEW_BALL2: + PUSH BX + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + JMP HU_ + + +NO_MORE_BALLS: + CALL VARS_2_P_STRUC ;STORE LAST PLAYER'S SCORE TOO! + POP BX + MOV BX,OFFSET out_of_ballsTS + MOV NEXT_A,BX + JMP [BX] + RETN + + +_2_DEMO_MODE: + ADDTASK TO_DEMO_FROM_GAME + JMP HU_ + +zeroscore: + push es + move es,ds + mov cx,12/2 + mov ax,0 + mov di,offset siffrorna + rep stosw + pop es + retn + +TO_DEMO_FROM_GAME: + MOV PLAYERS_CP,TRUE + CALL GO_DEMO_MODE ;TO DEMO FROM GAME + MOV SCREENFORCE,BANH-(SH_LO-SPLH) + CMP HI_RES,TRUE + JNE NOTHIRES15 + MOV SCREENFORCE,BANH-(SH_HI-SPLH) +NOTHIRES15: + MOV CARMEN,-1 + call zeroscore + CALL SLACK_LIGHTS + MOV ADDPLAYERS,TRUE + LIGHTON 52 + LIGHTON 53 + LIGHTON 54 + SUICIDE + +LOOSE_BALL ENDP + + + +;******************************** NEW_BALL ************************************ + +NEW_BALL_TASK: + WAITSYNCS 30 + CALL NEW_BALL + RETN ;PGA NEWBALL + +NEW_BALL PROC NEAR ;ENDA SˇTTET ATT F¸ UT EN BOLL P¸ BANAN! + MOV LOOSING,FALSE + MOV BALL_DOWN,FALSE + MOV I_UTSKJUT,TRUE + + CALL WHEN_NEW_BALL_RESET + CALL WHEN_NEW_BALL_RESET_TABLE + + CMP XBALLS,0 + JZ NOLAUGHAGAINAGAIN + LIGHTON 51 +NOLAUGHAGAINAGAIN: + + MOV HOLDSTILL,TRUE + SETBALLPOS STARTX-5-15,STARTY-5,0,0,FALSE + MOV SCREENFORCE2,-1 ;500 + + CMP ADDPLAYERS,TRUE + JE NOSP + CMP MUSICOK,TRUE + JE MUSIC_ALREADY_OK + PLAYJINGLE S_SPRING + MOV MUSICOK,FALSE +MUSIC_ALREADY_OK: +NOSP: + MOV LASTJINGLE,0 + MOV SCORECHANGED,FALSE + + CMP ADDPLAYERS,TRUE + JE ITS_FROM_DEMO + CALL NEW_BALL_PART_TWO + RETN + +ITS_FROM_DEMO: + ADDTASK SNART_NEW_BALL + RETN + +NEW_BALL_PART_TWO: + ADDTASK SOUNDNEWBALL + ADDTASK SETBALL + ADDTASK SOUNDBRICKUPP + + MOV ALLOWFLIP,TRUE + MOV TILTFLAG,FALSE + MOV TILTCOUNTER,0 + MOV SCORECHANGED,FALSE + RETN + +SOUNDBRICKUPP: + WAITSYNCS 5 + SOUNDEFFECT SBRICKUPP,0 + SUICIDE + +SOUNDNEWBALL: + WAITSYNCS 50 + SOUNDEFFECT SNEWBALL,0 + SUICIDE + +SETBALL: + WAITSYNCS 80 + SETBALLPOS STARTX-5,STARTY-5,10,0,FALSE + MOV HOLDSTILL,FALSE + MOV SCREENFORCE2,-1 + SUICIDE +;FIAT UNO +NEW_BALL ENDP + + + +P_STRUC_2_VARS PROC NEAR ;INPUT:PLAYER + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA + + UPDATE_LIGHT 1,PLAYER_AREA[BX+0].P_PUKE ;P + UPDATE_LIGHT 2,PLAYER_AREA[BX+1].P_PUKE ;E + UPDATE_LIGHT 4,PLAYER_AREA[BX+2].P_PUKE ;U + UPDATE_LIGHT 5,PLAYER_AREA[BX+3].P_PUKE ;K + + UPDATE_LIGHT 6,PLAYER_AREA[BX+0].P_MAD ;M + UPDATE_LIGHT 8,PLAYER_AREA[BX+1].P_MAD ;A + UPDATE_LIGHT 9,PLAYER_AREA[BX+2].P_MAD ;D + + UPDATE_LIGHT 41,PLAYER_AREA[BX+0].P_CRAZY ;Y + UPDATE_LIGHT 38,PLAYER_AREA[BX+1].P_CRAZY ;Z + UPDATE_LIGHT 34,PLAYER_AREA[BX+2].P_CRAZY ;A + UPDATE_LIGHT 31,PLAYER_AREA[BX+3].P_CRAZY ;R + UPDATE_LIGHT 28,PLAYER_AREA[BX+4].P_CRAZY ;C + + UPDATE_LIGHT 42,PLAYER_AREA[BX+0].P_PARTY ;P + UPDATE_LIGHT 43,PLAYER_AREA[BX+1].P_PARTY ;A + UPDATE_LIGHT 44,PLAYER_AREA[BX+2].P_PARTY ;R + UPDATE_LIGHT 45,PLAYER_AREA[BX+3].P_PARTY ;T + UPDATE_LIGHT 46,PLAYER_AREA[BX+4].P_PARTY ;Y + + CALL DOLIGHTS ;FLUSH THE BUFFERT + + MOVE CYCLONECOUNTER,PLAYER_AREA[BX].P_CYCLONECOUNTER + + MOV CX,12/2 + MOVE ES,DS + + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + MOV DI,OFFSET SIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_BONUSSIFFRORNA + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_SKILL_SCORE + MOV DI,OFFSET SKILL_SCORE + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_SKILL_SCORE2 + MOV DI,OFFSET SKILL_SCORE2 + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_CYCLONECOUNTERBCD + MOV DI,OFFSET CYCLONECOUNTERBCD + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_CYCLONESCOREBCD + MOV DI,OFFSET CYCLONESCOREBCD + MOV CX,12/2 + REP MOVSW + + RETN +P_STRUC_2_VARS ENDP + + +VARS_2_P_STRUC PROC NEAR + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA + +VARS_2_P_STRUC_2: ;USED BY WHEN_NEW_GAME_RESET! + UPDATE_PSTRUC PLAYER_AREA[BX+0].P_PUKE,1 ;P + UPDATE_PSTRUC PLAYER_AREA[BX+1].P_PUKE,2 ;E + UPDATE_PSTRUC PLAYER_AREA[BX+2].P_PUKE,4 ;U + UPDATE_PSTRUC PLAYER_AREA[BX+3].P_PUKE,5 ;K + + UPDATE_PSTRUC PLAYER_AREA[BX+0].P_MAD,6 ;M + UPDATE_PSTRUC PLAYER_AREA[BX+1].P_MAD,8 ;A + UPDATE_PSTRUC PLAYER_AREA[BX+2].P_MAD,9 ;D + + UPDATE_PSTRUC PLAYER_AREA[BX+0].P_CRAZY,41 ;Y + UPDATE_PSTRUC PLAYER_AREA[BX+1].P_CRAZY,38 ;Z + UPDATE_PSTRUC PLAYER_AREA[BX+2].P_CRAZY,34 ;A + UPDATE_PSTRUC PLAYER_AREA[BX+3].P_CRAZY,31 ;R + UPDATE_PSTRUC PLAYER_AREA[BX+4].P_CRAZY,28 ;C + + UPDATE_PSTRUC PLAYER_AREA[BX+0].P_PARTY,42 ;P + UPDATE_PSTRUC PLAYER_AREA[BX+1].P_PARTY,43 ;A + UPDATE_PSTRUC PLAYER_AREA[BX+2].P_PARTY,44 ;R + UPDATE_PSTRUC PLAYER_AREA[BX+3].P_PARTY,45 ;T + UPDATE_PSTRUC PLAYER_AREA[BX+4].P_PARTY,46 ;Y + + CALL DOLIGHTS ;FLUSH THE BUFFERT + + MOVE PLAYER_AREA[BX].P_CYCLONECOUNTER,CYCLONECOUNTER + + MOV CX,12/2 + MOVE ES,DS + + LEA DI,PLAYER_AREA[BX].P_SIFFRORNA + MOV SI,OFFSET SIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_BONUSSIFFRORNA + MOV SI,OFFSET BONUSSIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_SKILL_SCORE + MOV SI,OFFSET SKILL_SCORE + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_SKILL_SCORE2 + MOV SI,OFFSET SKILL_SCORE2 + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_CYCLONECOUNTERBCD + MOV SI,OFFSET CYCLONECOUNTERBCD + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_CYCLONESCOREBCD + MOV SI,OFFSET CYCLONESCOREBCD + MOV CX,12/2 + REP MOVSW + + RETN +VARS_2_P_STRUC ENDP + + + +;******************************** TILT TILT TILT ****************************** +HE_TILTED PROC NEAR + MOV ALLOWFLIP,FALSE + PLAYJINGLE S_TILT + MOV LASTJINGLE,62 + MOV BX,OFFSET tiltTS + CALL DO_MATRIX + CALL RESETFLASHLIST + CALL SLACK_LIGHTS + MOV EOTS,TRUE + RETN +HE_TILTED ENDP + +HE_ALMOST_TILTED PROC NEAR + PLAYJINGLE S_DANGER + RETN +ENDP + + +;********************************* CHECK SHIFTKEYS **************************** + +CHECK_SHIFTKEYS PROC NEAR + CMP PUKEFORBIDDEN,TRUE + JE NOPUKING + CMP SHIFTPRESSED,TRUE + JNE NO_SHIFT + MOV SHIFTPRESSED,FALSE + MOV DL,LIGHTSTATUS[5] ;K + CMP LIGHTSTATUS[2],TRUE ;E ;E -> K + JNE KILL_K + LIGHTON 5 ;K + JMP K_READY +KILL_K: LIGHTOFF 5 ;K +K_READY: + CMP LIGHTSTATUS[1],TRUE ;P ;P -> E + JNE KILL_E + LIGHTON 2 ;E + JMP E_READY +KILL_E: LIGHTOFF 2 ;E +E_READY: + CMP LIGHTSTATUS[4],TRUE ;U ;U -> P + JNE KILL_P + LIGHTON 1 ;P + JMP P_READY +KILL_P: LIGHTOFF 1 ;P +P_READY: + CMP DL,TRUE ;K ;K -> U + JNE KILL_U + LIGHTON 4 ;U + JMP U_READY +KILL_U: LIGHTOFF 4 ;U +U_READY: +NOPUKING: +NO_SHIFT: + RETN +CHECK_SHIFTKEYS ENDP + + + +;******************************** GATES ROUTINES ****************************** + +CREATE_MASK_DATA PROC NEAR ;FN: OPENS OR CLOSES GATES + ;INPUT: DS:SI=SOURCE, ES:DI=DEST + ; DX=WIDTH, CX=HEIGHT +NEXTLINE2: + PUSH CX + MOV CX,DX + PUSH SI + REP MOVSB + POP SI + ADD SI,40 + POP CX + LOOP NEXTLINE2 + RETN +CREATE_MASK_DATA ENDP + + +CREATEGATE1: + ASSUME DS:MASK2_2 + MOV SI,OFFSET MASK22+15*40+112/8 ;DI + MOVE DS,MASK2_2 + ASSUME DS:DATA + MOV DI,OFFSET GATE1CLOSED_DATA ;SI + MOVE ES,DATA + MOV DX,2 ;DX=WIDTH + MOV CX,18 ;CX=HEIGHT + CALL CREATE_MASK_DATA + MOVE DS,DATA + RETN +KRG1_SPARAMINNE: + ASSUME DS:MASK2_2 + MOV DI,OFFSET MASK22+15*40+112/8 ;DI + MOVE ES,MASK2_2 + ASSUME DS:DATA + MOV DX,2 ;DX=WIDTH + MOV CX,18 ;CX=HEIGHT + CALL MOVE_MASK_DATA + MOVE DS,DATA + RETN +KILLGATE1: + MOV SI,OFFSET GATE1OPEN_DATA ;SI + CALL KRG1_SPARAMINNE + RETN +RESTOREGATE1: + MOV SI,OFFSET GATE1CLOSED_DATA ;SI + CALL KRG1_SPARAMINNE + RETN + +KRD1_SPARAMINNE: + ASSUME DS:MASK1_2 + MOV DI,OFFSET MASK12+277*40+144/8 ;DI + MOVE ES,MASK1_2 + ASSUME DS:DATA + MOV DX,2 ;DX=WIDTH + MOV CX,15 ;CX=HEIGHT + CALL MOVE_MASK_DATA + MOVE DS,DATA + RETN +KILLD1: + MOV SI,OFFSET D1DOWN_DATA ;SI + CALL KRD1_SPARAMINNE + RETN +RESTORED1: + MOV SI,OFFSET D1UP_DATA ;SI + CALL KRD1_SPARAMINNE + RETN + +KRD2_SPARAMINNE: + ASSUME DS:MASK1_2 + MOV DI,OFFSET MASK12+295*40+152/8 ;DI + MOVE ES,MASK1_2 + ASSUME DS:DATA + MOV DX,2 ;DX=WIDTH + MOV CX,15 ;CX=HEIGHT + CALL MOVE_MASK_DATA + MOVE DS,DATA + RETN +KILLD2: + MOV SI,OFFSET D2DOWN_DATA ;SI + CALL KRD2_SPARAMINNE + RETN +RESTORED2: + MOV SI,OFFSET D2UP_DATA ;SI + CALL KRD2_SPARAMINNE + RETN + +KRD3_SPARAMINNE: + ASSUME DS:MASK1_2 + MOV DI,OFFSET MASK12+313*40+160/8 ;DI + MOVE ES,MASK1_2 + ASSUME DS:DATA + MOV DX,1 ;DX=WIDTH + MOV CX,15 ;CX=HEIGHT + CALL MOVE_MASK_DATA + MOVE DS,DATA + RETN +KILLD3: + MOV SI,OFFSET D3DOWN_DATA ;SI + CALL KRD3_SPARAMINNE + RETN +RESTORED3: + MOV SI,OFFSET D3UP_DATA ;SI + CALL KRD3_SPARAMINNE + RETN + + + +;****************************** DROP ZONE TASK ******************************** + +START_DROP_TIMED: ;THIS IS A TASK! + CMP SPECIALMODE,TRUE + JE SNABBHOPP + MOV AX,DROP_TIME + WAITSYNCS AX +SNABBHOPP: + CALL START_DROP + SUICIDE + +START_DROP PROC NEAR ;THIS IS A PROC! + SETBALLPOS DROPX,DROPY,0,0,FALSE + ADDTASK RULLGARDIN + ADDTASK DROPTASK1 + MOVE SCROLLPOS,START_RASTER + RETN +START_DROP ENDP +SCROLLSPEED=5 +SCROLLEND=0 +DROPTASK1: + WAITSYNCS 30 ;30 -> MAX 1.5 SKˇRM RULLGARDIN + LIGHTFLASH 3,DROPSPEED + LIGHTFLASH 56,DROPSPEED + ADDTASK DROPTASK2 + SUICIDE +DROPTASK2: + WAITSYNCS DROPSPEED*4-1 + MOV SCREENFORCE,-1 + MOV BP,SLUMP_COUNTERN + AND BP,127 ;GE DROPPET ETT SLUMPARTAT UTSKJUT + ADD BP,DROPYS + SETBALLPOS DROPX,DROPY,DROPXS,BP,TRUE + SOUNDEFFECT SNEWBALL,0 + ENDFLASH 3 + ENDFLASH 56 + SUICIDE + +RULLGARDIN: ;DETTA ˇR EN TASK-RUTIN! + ADDTASK RULLGARDINSLAV + MOVE SCROLLPOS,START_RASTER + SUICIDE +RULLGARDINSLAV: + SUB SCROLLPOS,SCROLLSPEED + CMP SCROLLPOS,SCROLLEND + JNL SPNOK2 + MOVE SCREENFORCE,SCROLLEND + SUICIDE +SPNOK2: MOVE SCREENFORCE,SCROLLPOS + RETN + + + +;************************* SUPER MODES CHECKS ********************************* + +CHECK_PARTY_COMPLETE PROC NEAR ;FN: CHECK PARTY LIGHTS. + ;OUTPUT: -C- IF TIME FOR HAPPY HOUR + CMP WORD PTR [OFFSET LIGHTSTATUS+42],0FFFFH + JNE NHAPPY + CMP WORD PTR [OFFSET LIGHTSTATUS+44],0FFFFH + JNE NHAPPY + CMP LIGHTSTATUS[46],TRUE + JNE NHAPPY + STC + RETN +NHAPPY: CLC + RETN +CHECK_PARTY_COMPLETE ENDP + +CHECK_PARTY PROC NEAR + CALL CHECK_PARTY_COMPLETE + JNC NO_HAPPY_HOUR + CMP SPECIALMODE,TRUE + JNE OK_2_BE_HAPPY + MOV HAPPY_PENDING,TRUE + JMP NO_HAPPY_HOUR + +OK_2_BE_HAPPY: ;NOTE: CALL TO THIS POINT! + ;* * * H A P P Y H O U R * * * + + EFFECT HAPPYHOUR + MOV LASTJINGLE,43 ;SJINGLE12 + LIGHTOFF 42 ;P + LIGHTOFF 43 ;A + LIGHTOFF 44 ;R + LIGHTOFF 45 ;T + LIGHTOFF 46 ;Y + CMP JPFLASHING_NORMAL,TRUE + JE DNSTART_FLASH + CMP JPFLASHING_TIME,TRUE + JE DNSTART_FLASH + SYNCEDFLASH 35,TRAINSPEED,TRAINSYNCER ;JP +DNSTART_FLASH: + MOV JPFLASHING_TIME,TRUE + MOV HAPPY_HOUR,TRUE + LIGHTFLASH 32,WHEELSPEED + MOV SPECIALMODE,TRUE + MOV SUPER_INIT,TRUE +NO_HAPPY_HOUR: + RETN +CHECK_PARTY ENDP + + +CHECK_CRAZY PROC NEAR ;INPUT -C- IF CRAZY COMPLETED + JNC NOT_CRAZY_TODAY + CMP SPECIALMODE,TRUE + JNE OK_2_LAUGH + MOV MEGA_PENDING,TRUE + JMP NOT_CRAZY_TODAY + +OK_2_LAUGH: ;NOTE: CALL TO THIS POINT + ; * * * M E G A L A U G H * * * + + EFFECT CRAZYSCORE + MOV LASTJINGLE,25 ;SJINGLE11 + CMP JPFLASHING_NORMAL,TRUE + JE DNSTART_FLASH2 + CMP JPFLASHING_TIME,TRUE + JE DNSTART_FLASH2 + SYNCEDFLASH 35,TRAINSPEED,TRAINSYNCER ;JP +DNSTART_FLASH2: + MOV JPFLASHING_TIME,TRUE + MOV MEGA_LAUGH,TRUE + LIGHTFLASH 37,WHEELSPEED + MOV SPECIALMODE,TRUE + MOV SUPER_INIT,TRUE +NOT_CRAZY_TODAY: + RETN +CHECK_CRAZY ENDP + + +;****************************************************************************** +;***************************** BRICKOR & KNAPPAR ****************************** +;****************************************************************************** + +;************************* ARCADE TOUCHER ********************** +TOUCHER: ;TURNS ARCADE ON + CMP TOUCHERDISABLED,TRUE + JE TDIS + SOUNDEFFECT S_TOUCH2,0 + MOV TOUCHERDISABLED,TRUE + ADDTASK ENABLETOUCHER + CMP ARCADEON,TRUE + JE DONT_YOU_BOTHER + MOV ARCADEON,TRUE + LIGHTFLASH 7,12 ;ARCADE1 + LIGHTFLASH 55,12 ;ARCADE2 +DONT_YOU_BOTHER: +TDIS: RETN +ENABLETOUCHER: + WAITSYNCS 20 + MOV TOUCHERDISABLED,FALSE + SUICIDE + +;************************* DUCK1 ************************* +DROPA1: ;UPPER DUCK + CMP LIGHTSTATUS+52,TRUE + JNE DROPA1ISDOWN + CMP D1DISABLED,TRUE + JE NODROPA1 + MOV D1DISABLED,TRUE ;AVOID MULTIPLE HIT + LIGHTOFF 52 ;D1 (DUCKS) + ADDTASK KILL_THE_D1 ;D™DA BRICKA + CALL DROPSETA + CALL CHECKALLDUCKS + JC DA1_MEGAHIT + ADDTASK TURNINGONDUCK1 + LIGHTFLASH 16,HITSPEED ;H (HIT) + MOV CS:TOD1_CNT,0 +DA1_MEGAHIT: +DROPA1ISDOWN: +NODROPA1: + RETN +TOD1_CNT DB ? +TURNINGONDUCK1: + CMP CS:TOD1_CNT,HITSPEED*4+1 + JNE TOD1_NOTYET + ENDFLASH 16 ;H (HIT) + MOV D1DISABLED,FALSE + MOV BX,SAVESOURCE + MOV DS:[BX],OFFSET DUMRET +TOD1_NOTYET: + INC CS:TOD1_CNT + RETN +KILL_THE_D1: + WAITSYNCS 20 + CALL KILLD1 + SUICIDE + +;************************* DUCK2 ************************* +DROPA2: ;MIDDLE DUCK + CMP LIGHTSTATUS+53,TRUE + JNE DROPA2ISDOWN + CMP D2DISABLED,TRUE + JE NODROPA2 + MOV D2DISABLED,TRUE ;AVOID MULTIPLE HIT + LIGHTOFF 53 ;D2 (DUCKS) + ADDTASK KILL_THE_D2 ;D™DA BRICKA + CALL DROPSETA + CALL CHECKALLDUCKS + JC DA2_MEGAHIT + ADDTASK TURNINGONDUCK2 + MOV CS:TOD2_CNT,0 + LIGHTFLASH 18,HITSPEED ;I (HIT) +DA2_MEGAHIT: +DROPA2ISDOWN: +NODROPA2: + RETN +TOD2_CNT DB ? +TURNINGONDUCK2: + CMP CS:TOD2_CNT,HITSPEED*4+1 + JNE TOD2_NOTYET + ENDFLASH 18 ;I (HIT) + MOV D2DISABLED,FALSE + MOV BX,SAVESOURCE + MOV DS:[BX],OFFSET DUMRET +TOD2_NOTYET: + INC CS:TOD2_CNT + RETN +KILL_THE_D2: + WAITSYNCS 20 + CALL KILLD2 + SUICIDE + + +;************************* DUCK3 ************************* +DROPA3: ;LOWER DUCK + CMP LIGHTSTATUS+54,TRUE + JNE DROPA3ISDOWN + CMP D3DISABLED,TRUE + JE NODROPA3 + MOV D3DISABLED,TRUE ;AVOID MULTIPLE HIT + LIGHTOFF 54 ;D3 (DUCKS) + ADDTASK KILL_THE_D3 ;D™DA BRICKA + CALL DROPSETA + CALL CHECKALLDUCKS + JC DA3_MEGAHIT + ADDTASK TURNINGONDUCK3 + MOV CS:TOD3_CNT,0 + LIGHTFLASH 24,HITSPEED ;T (HIT) +DA3_MEGAHIT: +DROPA3ISDOWN: +NODROPA3: + RETN +TOD3_CNT DB ? +TURNINGONDUCK3: + CMP CS:TOD3_CNT,HITSPEED*4+1 + JNE TOD3_NOTYET + ENDFLASH 24 ;T (HIT) + MOV D3DISABLED,FALSE + MOV BX,SAVESOURCE + MOV DS:[BX],OFFSET DUMRET +TOD3_NOTYET: + INC CS:TOD3_CNT + RETN +KILL_THE_D3: + WAITSYNCS 20 + CALL KILLD3 + SUICIDE + +DROPSETA: + SOUNDEFFECT SBRICKNER,0 + MOV SI,OFFSET BCD7510 + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + CALL ADDHAPPY + ADDBONUS BCD750 + mov scorechanged,true + RETN + +CHECKALLDUCKS: + CMP LIGHTSTATUS+52,FALSE + JNE NOTALLDOWN + CMP LIGHTSTATUS+53,FALSE + JNE NOTALLDOWN + CMP LIGHTSTATUS+54,FALSE + JNE NOTALLDOWN + + ;*** ALL DUCKS IS DOWN *** + EFFECT ALLDUCKS + MOV D1DISABLED,TRUE + MOV D2DISABLED,TRUE + MOV D2DISABLED,TRUE + ENDFLASH 16 + ENDFLASH 18 + ENDFLASH 24 + LIGHTFLASH 16,2 + LIGHTFLASH 18,2 + LIGHTFLASH 24,2 + ADDTASK TURNOFFDUCKS + + ;*** UPDATE SNACKS *** + MOV BL,SNACKCOUNTER + NIL BH + CMP SNACKFLASHERS[BX],TRUE + JE ALLISFLASHING ;OM NˇSTA FLASHAR, S¸ FLASHAR ALLA! + CMP SNACKCOUNTER,1 + JE ITISSODA + JA ITISPOP +ITISICE: + SYNCEDFLASH 23,SNACKSPEED,SNACKSYNCER ;ICE + MOV ICEFLASHING,TRUE + JMP SNACKFLASHOK +ITISSODA: + INVERTEDSYNCEDFLASH 17,SNACKSPEED,SNACKSYNCER ;SODA + MOV SODAFLASHING,TRUE + JMP SNACKFLASHOK +ITISPOP: + SYNCEDFLASH 20,SNACKSPEED,SNACKSYNCER ;POP + MOV POPFLASHING,TRUE + JMP SNACKFLASHOK + +ALLISFLASHING: ;CP? SKALL SNACKCOUNTER VERKLIGEN INCAS? +SNACKFLASHOK: + INC SNACKCOUNTER + CMP SNACKCOUNTER,3 + JNE SNACKCOUNTEROK + MOV SNACKCOUNTER,0 +SNACKCOUNTEROK: +; STARTSCROLL SNACKTEXT ;CP! + STC + RETN +NOTALLDOWN: + CLC + RETN + +TURNOFFDUCKS: + WAITSYNCS 71 ;CPW! + ENDFLASH 16 + ENDFLASH 18 + ENDFLASH 24 + LIGHTON 52 ;D1 (DUCKS) + CALL RESTORED1 ;SˇTT DIT BRICKA D1 + LOFF 16 ;H + LIGHTON 53 ;D2 (DUCKS) + CALL RESTORED2 ;SˇTT DIT BRICKA D2 + LOFF 18 ;I + LIGHTON 54 ;D3 (DUCKS) + CALL RESTORED3 ;SˇTT DIT BRICKA D2 + LOFF 24 ;T + SOUNDEFFECT SBRICKUPP,0 + MOV D1DISABLED,FALSE + MOV D2DISABLED,FALSE + MOV D3DISABLED,FALSE + SUICIDE + +COMMENT\ +USE THIS CODE IF HITS ARE VALID DURING MEGAHIT-FLASHING + CMP LIGHTSTATUS[52],FALSE + JE TON16 + LOFF 16 + JMP L16OK +TON16: LON 16 +L16OK: CMP LIGHTSTATUS[53],FALSE + JE TON18 + LOFF 18 + JMP L18OK +TON18: LON 18 +L18OK: CMP LIGHTSTATUS[54],FALSE + JE TON24 + LOFF 24 + JMP L24OK +TON24: LON 24 +L24OK: +\ + +;****************************************************************************** +;********************************** LOWER ************************************* +;****************************************************************************** + +;**************************** THE REVERSE LOOP! ******************************* + +BYGEL11: ;LEFT OF HOLE + CMP LASTAREA,OFFSET BYGEL9 + JNE NOTREVERSE + CMP INHIBIT_REVERSE_COUNTER,0 + JNZ JUST_FORGET_IT + CMP INH_REV,TRUE ;SHOULD NEVER HAPPEN! + JE NOTREVERSE + + ;*** REVERSE LOOP! *** + CALL JACKADD + CALL ADDMEGALAUGH + CMP ANY_LOOP_DOWN_COUNTER,0 + JZ NO_PARTY_T3 + CALL DO_PARTY_T +NO_PARTY_T3: + + MOV ANY_LOOP_DOWN_COUNTER,PARTY_T_TIME + MOV REVERSE_DOWN_COUNTER,PARTY_P_TIME + INC BALOONCOUNTER + CMP BALOONCOUNTER,1+1 + JB B250K + JE B500K + + ;*** GIVE HIM 750K *** + MOV BALOONCOUNTER,0 + ENDFLASH 19 ;750K + LIGHTFLASH 19,BALOONSPEEDFAST ;750K + LIGHTFLASH 25,BALOONSPEEDFAST ;500K + LIGHTFLASH 26,BALOONSPEEDFAST ;250K + EFFECT RSCORE3 + ADDTASK TURN_OFF_BALOONS + MOV INH_REV,TRUE + JMP BALLONS_READY + +B500K: ;*** GIVE HIM 500K *** + ENDFLASH 25 ;500K + LON 25 ;500K + LIGHTFLASH 19,BALOONSPEED ;750K + EFFECT RSCORE2 + JMP BALLONS_READY + +B250K: ;*** GIVE HIM 250K *** + ENDFLASH 26 ;250K + LON 26 ;250K + LIGHTFLASH 25,BALOONSPEED ;500K + EFFECT RSCORE1 +BALLONS_READY: + + ;*** CHECK MULTIPEL BONUSES *** + CMP MBFLASHING,TRUE + JNE MBNOTFLASHING + MOV MBFLASHING,FALSE + ENDFLASH 29 ;MB + LOFF 29 ;MB + + CMP LIGHTSTATUS[47],TRUE ;X2 + JE NOT_X2 + ;*** MULTIPEL BONUS X2 *** + LIGHTON 47 ;X2 + EFFECT M2 + MOV BONUSMULTIPEL,2 + JMP XX_OK +NOT_X2: + CMP LIGHTSTATUS[49],TRUE ;X4 + JE NOT_X4 + ;*** MULTIPEL BONUS X4 *** + LIGHTON 49 ;X4 + EFFECT M4 + MOV BONUSMULTIPEL,4 + JMP XX_OK +NOT_X4: + CMP LIGHTSTATUS[50],TRUE ;X6 + JE NOT_X6 + ;*** MULTIPEL BONUS X6 *** + LIGHTON 50 ;X6 + EFFECT M6 + MOV BONUSMULTIPEL,6 + JMP XX_OK +NOT_X6: + CMP LIGHTSTATUS[48],TRUE ;X8 + JE NOT_X8 ;SHOULD NEVER HAPPEN! + ;*** MULTIPEL BONUS X8 *** + LIGHTON 48 ;X8 + EFFECT M8 + MOV BONUSMULTIPEL,8 +XX_OK: + ADD BONUS_X,2 + CMP BONUS_X,3 + JNE DNDECBX + DEC BONUS_X +DNDECBX: + inc bonus_text[11] ;”ka fr†n 1 ->2 ->4 ->6 ->8 + cmp bonus_text[11],'8'+1 ;x2 + je noxinc + inc bonus_text[11] +noxinc: +NOT_X8: + +MBNOTFLASHING: + + ;*** CHECK HOLD BONUS *** + CMP HBFLASHING,TRUE + JNE HBNOTFLASHING + MOV HBFLASHING,FALSE + ENDFLASH 33 ;HB + LOFF 33 ;HB + EFFECT HOLDBONUS + MOV HOLDBONUSFLAG,TRUE +HBNOTFLASHING: + + ;*** CHECK DOUBLE BONUS *** + CMP DBFLASHING,TRUE + JNE DBNOTFLASHING + MOV DBFLASHING,FALSE + ENDFLASH 36 ;DB + LOFF 36 ;DB + EFFECT DOUBLEBONUS + MOV SI,OFFSET BONUSSIFFRORNA + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD +DBNOTFLASHING: +NOTREVERSE: + RETN +JUST_FORGET_IT: + MOV INHIBIT_REVERSE_COUNTER,0 + RETN + + +TURN_OFF_BALOONS: + WAITSYNCS 120 ;CPW! + ENDFLASH 19 ;750K + ENDFLASH 25 ;500K + ENDFLASH 26 ;250K + LIGHTFLASH 26,BALOONSPEED ;250K + MOV INH_REV,FALSE + SUICIDE + + +;********************************* THE LOOP! ********************************** + +BYGEL9: ;RIGHT OF HOLE + CMP LASTAREA,OFFSET BYGEL11 + JNE NOTLOOP + CMP INH_LOOP,TRUE + JE NOTLOOP + + ;*** THE LOOP! *** + CALL JACKADD + CALL ADDMEGALAUGH + CMP ANY_LOOP_DOWN_COUNTER,0 + JZ NO_PARTY_T2 + CALL DO_PARTY_T +NO_PARTY_T2: + MOV ANY_LOOP_DOWN_COUNTER,PARTY_T_TIME + + CMP LIGHTSTATUS[6],TRUE ;M + JE NOT_MAD_M + ;*** SPELLED M IN MAD *** + EFFECT THELOOP1 + LIGHTFLASH 6,MADONSPEED ;M + ADDTASK MAD_M_TASK + JMP MAD_OK +MAD_M_TASK: + WAITSYNCS MADONSPEED*6+2 + ENDFLASH 6 ;M + MOV LIGHTSTATUS[6],TRUE ;M + SUICIDE +NOT_MAD_M: + + CMP LIGHTSTATUS[8],TRUE ;A + JE NOT_MAD_A + ;*** SPELLED A IN MAD *** + EFFECT THELOOP2 + LIGHTFLASH 8,MADONSPEED ;A + ADDTASK MAD_A_TASK + JMP MAD_OK +MAD_A_TASK: + WAITSYNCS MADONSPEED*6+2 + ENDFLASH 8 ;A + MOV LIGHTSTATUS[8],TRUE ;A + SUICIDE +NOT_MAD_A: + + ;*** SPELLED D IN MAD *** + MOV LIGHTSTATUS[6],FALSE ;M + MOV LIGHTSTATUS[8],FALSE ;A + LIGHTFLASH 6,MADSPEED ;M + LIGHTFLASH 8,MADSPEED ;A + LIGHTFLASH 9,MADSPEED ;D + ADDTASK TURN_OFF_MAD + MOV INH_LOOP,TRUE + EFFECT THELOOP3 + MOV CPVARIABEL,FALSE + CALL CRAZY_LETTER_SPOTTED + CALL CHECK_CRAZY +MAD_OK: +NOTLOOP: + RETN + +TURN_OFF_MAD: + WAITSYNCS 120 ;CPW! + ENDFLASH 6 ;M + ENDFLASH 8 ;A + ENDFLASH 9 ;D + MOV INH_LOOP,FALSE + SUICIDE +GNUOR DW 0 +CRAZY_LETTER_SPOTTED PROC NEAR ;OUTPUT: -C- IF TIME FOR MEGA LAUGH + ; CRAL=AL FROM EFFECT ADVANCE3 + CALL JACKADD + CMP CPVARIABEL,TRUE + JE DEN_ANDRA + EFFECT ADVANCE3 + JMP DEN_ENA +DEN_ANDRA: + EFFECT ADVANCE3B +DEN_ENA: + MOV CRAL,AL + INC CS:GNUOR + DEBUGVAL 0,15,CS:GNUOR,"DOADVANCE NO:" + MOV SI,OFFSET CRAZY_ADVANCE_LIST + CALL DOADVANCE + JNC NO_MEGA_LAUGH + LIGHTOFF 28 ;C + LIGHTOFF 31 ;R + LIGHTOFF 34 ;A + LIGHTOFF 38 ;Z + LIGHTOFF 41 ;Y + STC + RETN +NO_MEGA_LAUGH: + CLC + RETN +CRAZY_LETTER_SPOTTED ENDP + + +;******************************** HIDDEN ENTRANCE ***************************** + +GROPC: ;HOLE + MOV EOTS,FALSE + EFFECT HIDDEN + CALL JACKADD + LIGHTFLASH 11,6 ;"L1Q"? + MOV _5XFLASHING,TRUE + ADDTASK HIDDENTASK0 + SETBALLPOS DROPX,DROPY,0,0,FALSE + RETN + +GROPC_T: + SETBALLPOS DROPX,DROPY,0,0,FALSE + CALL START_DROP + ENDFLASH 11 ;5X + RETN + +HIDDENTASK0: + WAITTS + ADDTASK HIDDENTASK1 + CALL START_DROP + SUICIDE + +HIDDENTASK1: + WAITSYNCS _5X_TIME-QUICKFLASH_TIME + CMP _5XFLASHING,FALSE + JE TOO_LATE + ENDFLASH 11 ;5X + LIGHTFLASH 11,QUICK_ARROWSPEED + ADDTASK HIDDENTASK2 + SUICIDE +TOO_LATE: + ENDFLASH 11 ;5X + LOFF 11 + SUICIDE + +HIDDENTASK2: + WAITSYNCS QUICKFLASH_TIME + CALL KILL_5X + SUICIDE + +KILL_5X PROC NEAR + ENDFLASH 11 + LOFF 11 + MOV _5XFLASHING,FALSE + RETN +KILL_5X ENDP + + + +;******************************** THE TUNNEL ********************************** + +GROPD: ;TUNNEL + CALL JACKADD + CALL ADDMEGALAUGH + CMP SKILLSHOTDOWNCOUNTER,0 + JA TUNNEL_SKILLSHOT + CMP REVERSE_DOWN_COUNTER,0 + JZ NOT_PARTY_P + CALL PARTY_P +NOT_PARTY_P: +FROM_TUNNEL_SKILLSHOT: + CMP LIGHTSTATUS[12],TRUE ;IF 3M IS LIT: 5M + JNE NOT_TUNNEL_5M + EFFECT TSCORE3 + MOV TUNNELDOWNCOUNTER,TUNNEL_TIME*2 + MOV TUNNELWAITER,TSCORE3_TIME + JMP TSCORE_OK +NOT_TUNNEL_5M: + CMP LIGHTSTATUS[14],TRUE ;IF 1M IS LIT: 3M + JNE NOT_TUNNEL_3M + EFFECT TSCORE2 + MOV TUNNELDOWNCOUNTER,TUNNEL_TIME*2 + ENDFLASH 12 ;3M + LIGHTON 12 ;3M + LIGHTFLASH 10,TUNNELSPEED ;5M + MOV TUNNELWAITER,TSCORE2_TIME + JMP TSCORE_OK +NOT_TUNNEL_3M: + EFFECT TSCORE1 + MOV TUNNELDOWNCOUNTER,TUNNEL_TIME + ENDFLASH 14 ;1M + LIGHTON 14 ;1M + LIGHTFLASH 12,TUNNELSPEED ;3M + MOV TUNNELWAITER,TSCORE1_TIME +TSCORE_OK: + ADDTASK RULLGARDIN + ADDTASK WAIT_FOR_TUNNEL_EFFECT + CMP SPECIALMODE,TRUE + JE SNABBHOPP3 + ADDTASK LOCK_BALL_IN_TUNNEL +SNABBHOPP3: + MOV INH_EFF,FALSE + RETN + +TUNNEL_SKILLSHOT: + CALL JACKADD + MOV SKILLSHOTDOWNCOUNTER,0 + MOV SI,OFFSET BCDMILLION + MOV DI,OFFSET SKILL_SCORE + CALL ADDSCOREBCD ;S_S_S += 1E6 + + MOV SI,OFFSET SKILL_SCORE + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD ;SCORE += S_S + EFFECT SKILLTUNNEL + MOV INH_EFF,TRUE + CALL PARTY_P + JMP FROM_TUNNEL_SKILLSHOT + +WAIT_FOR_TUNNEL_EFFECT: + CMP SPECIALMODE,TRUE + JE SNABBHOPP2 + WAITSYNCS TUNNELWAITER +SNABBHOPP2: + MOV SCREENFORCE,-1 + CALL START_DROP + SUICIDE + +LOCK_BALL_IN_TUNNEL: + WAITSYNCS 2 + SETBALLPOS DROPX,DROPY,0,0,FALSE + SUICIDE + +PARTY_P: + CMP LIGHTSTATUS[42],TRUE ;P IN PARTY + JE QUICK_BACK + EFFECT PARTYSCORE1 + LIGHTON 42 ;P IN PARTY + CALL CHECK_PARTY +QUICK_BACK: + RETN + +GROPD_T: + SETBALLPOS DROPX,DROPY,0,0,FALSE + CALL START_DROP + RETN + +;******************************* ARCADE HALL ********************************** + +GROPB: ;ARCADE + ADD SLUMPCOUNTER,21 + CALL ADDMEGALAUGH + CMP TILTFLAG,TRUE + JE TILT_ARCADE + CMP ARCADEON,TRUE + JNE ARCADEOFF + MOV ARCADEON,FALSE + ENDFLASH 7 ;ARCADE1 + ENDFLASH 55 ;ARCADE2 + LOFF 7 + LOFF 55 + MOV AL,LASTJINGLE + MOV LASTLASTJINGLE,AL + MOV SNURR_READY,FALSE + MOV DECCOR,25 ;CPW! + EFFECT MYSTERY + OR AL,AL + JNZ TSISDONE + MOV SNURR_READY,TRUE + CALL SPINIT + MOV AL,LASTJINGLE + MOV LASTLASTJINGLE,AL + JMP NOTSDONE_MEN_JA_E_LIKA_GLA_FOR_DE +TSISDONE: + MOV LASTJINGLE,62 ;QUIET + MOV CURRENT_PRIORITY,1 + MOV JINGLE_READY_LOGIC,FALSE + MOV JINGLE_READY_ANIM,FALSE + ADDTASK WAIT_FOR_SPIN_TASK +NOTSDONE_MEN_JA_E_LIKA_GLA_FOR_DE: + ADDTASK RULLGARDIN +; MOVE SCREENFORCE,START_RASTER ;LOCK SCREEN + SETBALLPOS DROPX,DROPY,0,0,FALSE ;LOCK BALL IN DR¸P SON + RETN + +ARCADEOFF: +TILT_ARCADE: + CALL START_DROP +GBOK: RETN + +WAIT_FOR_SPIN_TASK: + CMP SPECIALMODE,TRUE + JE REALLY_READY + CMP SNURR_READY,TRUE + JE REALLY_READY + RETN +REALLY_READY: + CMP TILTFLAG,TRUE + JE TILT_SPIN + MOV AL,LASTLASTJINGLE + MOV LASTJINGLE,AL + MOV JINGLEJUMPCNT,1 + MOV CURRENT_PRIORITY,0 ;CP!? + CALL SPINIT + SUICIDE + +SPINIT PROC NEAR + ;*** SPIN! *** + ;POˇNG,BONUS,ANIM,JINGLE,TID,EXTRARUT + MOV BL,SLUMPCOUNTER ;SLUMP + NIL BH + SHR BX,1 + MOV BL,ARCADESLUMP[BX] + MOV SI,BX + ADD SI,OFFSET ARCADEEFFECTS ;EFFECT CHOOSEN + LODSW ;AX=OFFSET X-RUT + ADDTASK AX + RETN +SPINIT ENDP + + +TILT_SPIN: + CALL START_DROP + SUICIDE + +SPINXB_RUT: + LIGHTON 39 ;LEFT XB och RIGHT XB + EFFECT SPINXB + OR AL,AL + JZ NOSPINXB + MOV AL,LASTLASTJINGLE + MOV LASTJINGLE,AL + MOV CURRENT_PRIORITY,0 ;CP!? + MOV DROP_TIME,XBALL_TIME + ADDTASK START_DROP_TIMED + SUICIDE + +SPINCL_RUT: + MOV CPVARIABEL,TRUE + CALL CRAZY_LETTER_SPOTTED + CALL CHECK_CRAZY + CMP CRAL,0 + JZ NOSPINCL + MOV AL,LASTLASTJINGLE + MOV LASTJINGLE,AL + MOV CURRENT_PRIORITY,0 ;CP!? + MOV HANGSAVER,140 ;154,153 + MOV HANGSAVER2,180 + MOV OKEJHEJ,FALSE + ADDTASK START_DROP_WHEN_READY + SUICIDE + +SPIN1M_RUT: + EFFECT SPIN1M + OR AL,AL + JZ NOSPIN1M + MOV AL,LASTLASTJINGLE + MOV LASTJINGLE,AL + MOV CURRENT_PRIORITY,0 ;CP!? + MOV HANGSAVER,120 ;136,124 + MOV HANGSAVER2,150 + MOV OKEJHEJ,FALSE + ADDTASK START_DROP_WHEN_READY + SUICIDE + +SPIN5M_RUT: + EFFECT SPIN5M + OR AL,AL + JZ NOSPIN5M + MOV AL,LASTLASTJINGLE + MOV LASTJINGLE,AL + MOV CURRENT_PRIORITY,0 ;CP!? + MOV HANGSAVER,110 ;121,121,121 + MOV HANGSAVER2,140 + MOV OKEJHEJ,FALSE + ADDTASK START_DROP_WHEN_READY + SUICIDE + +SPIN500K_RUT: + EFFECT SPIN500K + OR AL,AL + JZ NOSPIN500K + MOV AL,LASTLASTJINGLE + MOV LASTJINGLE,AL + MOV CURRENT_PRIORITY,0 ;CP!? JA JˇVLIGT CP! MEN NU HAR FIXAT DET... + MOV HANGSAVER,45 ;53,53 + MOV HANGSAVER2,70 + MOV OKEJHEJ,FALSE + ADDTASK START_DROP_WHEN_READY + SUICIDE + +NOSPINXB: +NOSPINCL: +NOSPIN1M: +NOSPIN5M: +NOSPIN500K: + ;** NO SPIN - JUST DROP ** + MOV DROP_TIME,10 ;CPW! + ADDTASK START_DROP_TIMED + SUICIDE + +SPINNS_RUT: + EFFECT SPINNS + OR AL,AL + JZ NOSPINNS + MOV AL,LASTLASTJINGLE + MOV LASTJINGLE,AL + MOV CURRENT_PRIORITY,0 ;CP!? +NOSPINNS: + MOV DROP_TIME,NOSCORE_TIME + ADDTASK START_DROP_TIMED + SUICIDE + +START_DROP_WHEN_READY: ;THIS REALLY IS A TASKROUTINE! + DEC HANGSAVER2 + JZ HUPP + CMP HANGSAVER,0 + JE BLAHA + DEC HANGSAVER +BLAHA: CMP OKEJHEJ,TRUE + JE HOPP1 + CMP SPECIALMODE,TRUE + JE HUPP + CMP JINGLE_READY_LOGIC,TRUE + JE HOPP1 + RETN ;RETN +HOPP1: MOV OKEJHEJ,TRUE + CMP HANGSAVER,0 + JZ HUPP + RETN ;RETN +HUPP: MOV JINGLE_READY_LOGIC,FALSE + MOV HANGSAVER,65535 ;BIG ENOUGH! + MOV HANGSAVER2,10 ;DOESN'T MATTER! +COMMENT\ + PUSHA + PUSH ES + MOV BX,HANGSAVER + DEBUGVAL 0,22,BX,"HANGSAVER: " + POP ES + POPA +\ + CALL START_DROP + SUICIDE + + + +;****************************** SNACK HOLE ************************************ + +GROPA: ;SNACKS (NOTE: BOTH HIGH & LOW) + CMP SNACKDISABLED,TRUE + JE NOT_NOW_STUPID + MOV SNACKDISABLED,TRUE + ADDSCORE BCD50000 + ADDBONUS BCD5000 + CALL ADDMEGALAUGH + CMP POPFLASHING,TRUE + JNE NOTPOPF + EFFECT SCORE3 + CALL JACKADD + INC POPCOUNTER + JMP SNACKDONE +NOTPOPF: + CMP SODAFLASHING,TRUE + JNE NOTSODAF + EFFECT SCORE2 + CALL JACKADD + JMP SNACKDONE +NOTSODAF: + CMP ICEFLASHING,TRUE + JNE NOTICEF + EFFECT SCORE1 + CALL JACKADD + JMP SNACKDONE +NOTICEF: + EFFECT HSCORE +SNACKDONE: + ENDFLASH 23 ;ICE + LOFF 23 + ENDFLASH 17 ;SODA + LOFF 17 + ENDFLASH 20 ;POP + LOFF 20 + + CMP POPFLASHING,TRUE ;IF POP: HB/DB/P(A)RTY ? + JNE NO_SPECIAL_POP + + CMP LIGHTSTATUS[43],TRUE ;A (PARTY) + JE A_ALREADY_LIT + + ;*** SPELLED A IN PARTY *** + LIGHTON 43 + EFFECT PARTYSCORE2 + CALL CHECK_PARTY +A_ALREADY_LIT: + + CMP POPCOUNTER,1 + JA HIGH_POPCOUNTER + + ;*** HOLD BONUS ACTIVATED *** + CMP HBFLASHING,TRUE ;DON'T THINK THIS COULD HAPPEN... + JE HB_ALLR_FL + MOV HBFLASHING,TRUE + INVERTEDSYNCEDFLASH 33,ARROWSPEED,ARROWSYNCER ;"L2P" +HB_ALLR_FL: + JMP FROM_HB + +HIGH_POPCOUNTER: + ;*** DOUBLE BONUS ACTIVATED *** + CMP DBFLASHING,TRUE + JE DB_ALLR_FL + MOV DBFLASHING,TRUE + ADDTASK TURNING_OFF_DB + SYNCEDFLASH 36,ARROWSPEED,ARROWSYNCER +DB_ALLR_FL: + +FROM_HB: +NO_SPECIAL_POP: + MOV ICEFLASHING,FALSE + MOV SODAFLASHING,FALSE + MOV POPFLASHING,FALSE + ADDTASK SNACK_HOLE_TASK1 +NOT_NOW_STUPID: + RETN + +TURNING_OFF_DB: + WAITSYNCS DB_TIME-QUICKFLASH_TIME + CMP DBFLASHING,TRUE + JNE DNTODB + ENDFLASH 36 + LIGHTFLASH 36,QUICK_ARROWSPEED + ADDTASK TURN_OFF_DB +DNTODB: SUICIDE + +TURN_OFF_DB: + WAITSYNCS QUICKFLASH_TIME + CMP DBFLASHING,TRUE + JNE DNTOQDB + ENDFLASH 36 + MOV DBFLASHING,FALSE +DNTOQDB: + SUICIDE + +SNACK_HOLE_TASK1: + MOV HOLDSTILL,TRUE + SETBALLPOS SNACKX,SNACKY,0,0,TRUE ;PUT BALL IN MIDDLE OF HOLE ;CP! + WAITSYNCS 40 ;CPW! ;(EVEN IF SPECIALMODE=TRUE) + ADDTASK SNACK_HOLE_TASK1B + SUICIDE + +SNACK_HOLE_TASK1B: + MOV HOLDSTILL,TRUE + SETBALLPOS SNACKX,SNACKY,0,0,TRUE ;PUT BALL IN MIDDLE OF HOLE ;CP! + CMP SPECIALMODE,TRUE + JE SNABBHOPP4 + WAITSYNCS 130-40 ;CPW! +SNABBHOPP4: + SOUNDEFFECT SGROP,0 + MOV HOLDSTILL,FALSE + SETBALLPOS SNACKX,SNACKY,SNACKXS,SNACKYS,TRUE + ADDTASK TURN_IT_ON_AGAIN + SUICIDE + +TURN_IT_ON_AGAIN: + WAITSYNCS 60 + MOV SNACKDISABLED,FALSE + SUICIDE + + +;********************************* DUMMY AREA ******************************** + +BYGEL14: ;BEFORE BEGINNING OF REVERSE + MOV INHIBIT_REVERSE_COUNTER,0 + RETN + + +;*********************************** GAME ON ********************************** + +CLOSE1: ;GAME ON + CMP LASTAREA,OFFSET BYGEL12 + JNE NOT_GAME_ON + MOV ADDPLAYERS,FALSE + PLAYJINGLE S_MAIN + MOV LASTJINGLE,1 + MOV BX,OFFSET PARTY_OFFTS + CALL DO_MATRIX + MOV I_UTSKJUT,FALSE ;TILL¸TER INACTIVE-SLINGAN (DOTMATRIX) + MOV PARTYFLASH,FALSE +NOT_GAME_ON: + RETN + + +;********************************* DRAGON'S HEAD ****************************** + +GROPE: ;DRAGON'S HEAD + CMP DRAGON,TRUE + JE DUMRET + MOV DRAGON,TRUE + SETBALLPOS DRAGONX,DRAGONY,0,0,FALSE + MOV HOLDSTILL,TRUE + CALL ADDMEGALAUGH + CALL CHECK_JACKPOT + JC JP_IT_WAS + CALL CHECK_BALL + JC BALL_IT_WAS + CALL CHECK_5M + JC _5M_IT_WAS + + ;*** NO SPECIAL EFFECTS IN DRAGON *** + EFFECT DSCORE + MOV DRAGONWAITER,85 ;CPW! +JP_IT_WAS: +BALL_IT_WAS: +_5M_IT_WAS: + ADDTASK BEFOREFLASH + RETN + +CHECK_5M PROC NEAR ;FN: CHECKS THE EFFECT, IF POSITIVE: RUN IT AND RET -C- + CMP _5MFLASHING,TRUE + JNE NOT_5M_IT_IS + ;*** 5 MILLION *** + EFFECT MILLION5 + ENDFLASH 27 ;5M + LOFF 27 + MOV _5MFLASHING,FALSE + MOV DRAGONWAITER,MILLION5_TIME + CMP SPECIALMODE,TRUE + JNE EJSNABBHOPP7 + MOV DRAGONWAITER,15 ;CPW! +EJSNABBHOPP7: + STC + RETN +NOT_5M_IT_IS: + CLC + RETN +CHECK_5M ENDP + +CHECK_BALL PROC NEAR ;FN: CHECKS THE EFFECT, IF POSITIVE: RUN IT AND RET -C- + CMP BALLFLASHING,TRUE + JNE NOT_BALL_IT_IS + ;*** BALL *** + ENDFLASH 30 ;BALL + LOFF 30 + LIGHTON 51 ;LAUGH AGAIN + INC XBALLS + EFFECT EXTRABALL1 + MOV BALLFLASHING,FALSE + MOV DRAGONWAITER,EXTRABALL1_TIME + CMP SPECIALMODE,TRUE + JNE EJSNABBHOPP6 + MOV DRAGONWAITER,15 ;CPW! +EJSNABBHOPP6: + STC + RETN +NOT_BALL_IT_IS: + CLC + RETN +CHECK_BALL ENDP + +CHECK_JACKPOT PROC NEAR ;FN: CHECKS THE EFFECT, IF POSITIVE: RUN IT AND RET -C- + CMP JPFLASHING_NORMAL,TRUE + JE JACKPOT_NORMAL + CMP JPFLASHING_TIME,TRUE + JNE NOT_JACKPOT +JACKPOT_NORMAL: + ;*** JACKPOT *** + MOV JPFLASHING_NORMAL,FALSE + MOV JPFLASHING_TIME,FALSE + ENDFLASH 35 ;JP + LOFF 35 + PLAYJINGLE SJINGLE4 ;JP + + CMP SPECIALMODE,TRUE + JE SPECIALAREN + MOV BX,OFFSET jackpotTS + JMP BX_OK +SPECIALAREN: + cmp happy_hour,true + je do_happy_jack +;megalaugh jack! + MOV BX,OFFSET jackpot_special_ml_TS + jmp bx_ok +do_happy_jack: + + MOV BX,OFFSET jackpot_special_hh_TS +BX_OK: CALL DO_MATRIX + + + MOV SI,OFFSET JACKVALUE + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + CALL INIT_JACK + + MOV DRAGONWAITER,410 ;CPW! + ;I B™RJAN AV SISTA TAKTEN INNAN 123454321 KOMMER SNEWBALL! + STC + RETN +NOT_JACKPOT: + CLC + RETN +CHECK_JACKPOT ENDP + +INIT_JACK PROC NEAR ;FN: JACKVALUE = JACKINIT + MOVE ES,DS + MOV CX,12/2 + MOV SI,OFFSET JACKINIT + MOV DI,OFFSET JACKVALUE + REP MOVSW + RETN +INIT_JACK ENDP + +JACKADD PROC NEAR ;FN: JACKVALUE += JACKRAISE + MOV SI,OFFSET JACKRAISE + MOV DI,OFFSET JACKVALUE + CALL ADDSCOREBCD + RETN +JACKADD ENDP + + +BEFOREFLASH: + WAITSYNCS DRAGONWAITER + LIGHTFLASH 21,EYESPEED ;EYES + ADDTASK DURINGFLASH + SUICIDE + +DURINGFLASH: + WAITSYNCS EYESPEED*4-1 + ENDFLASH 21 ;EYES + SOUNDEFFECT SNEWBALL,0 + MOV HOLDSTILL,FALSE + SETBALLPOS DRAGONX,DRAGONY,DRAGONXS,DRAGONYS,FALSE + MOV DRAGON,FALSE + SUICIDE + + + + +;********************************** BYGEL 3 *********************************** + +BYGEL3: ;RˇNNA SLUT VˇNSTER + EFFECT BYGELSETB + SOUNDEFFECT SBYGEL2,0 + RETN + + +BYGEL4: ;RˇNNA SLUT H™GER + EFFECT BYGELSETB + SOUNDEFFECT SBYGEL2,0 + RETN + + +;********************************* SL XB (L) ********************************** + +BYGEL1: ;EXTRA BALL LEFT + CMP LIGHTSTATUS[39],TRUE ;XB(L) + JE XB_IT_IS_L + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD50030 + RETN +XB_IT_IS_L: + LIGHTOFF 39 ;XB(L) + LIGHTOFF 40 ;XB(R) + EFFECT EXTRABALL2 + LIGHTON 51 ;LAUGH AGAIN + INC XBALLS + RETN + + +;********************************* SL XB (R) ********************************** + +BYGEL2: ;EXTRA BALL RIGHT + CMP LIGHTSTATUS[39],TRUE ;XB(R) + JE XB_IT_IS_R + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD50030 + RETN +XB_IT_IS_R: + LIGHTOFF 39 ;XB(L) + LIGHTOFF 40 ;XB(R) + EFFECT EXTRABALL2 + LIGHTON 51 ;LAUGH AGAIN + INC XBALLS + RETN + + +;***************************** SPRING INVALID ********************************* + +BYGEL12: ;SPRING INVALID + MOV SKILLSHOTDOWNCOUNTER,SKILL_SHOT_TIME + MOV SPRING_VALID,FALSE + MOV INHIBIT_REVERSE_COUNTER,INHIBIT_REVERSE_TIME + RETN + + +;******************************* SPRING VALID ********************************* + +BYGEL28: ;SPRING VALID + MOV SPRING_VALID,TRUE + RETN + + + +;****************************************************************************** +;*********************************** UPPER ************************************ +;****************************************************************************** + + +;******************************* SKYRIDE ************************************** + +CLOSE2: ;ENTERED SKY RIDE + CMP LASTAREA,OFFSET BYGEL10 + JNE QC2 + CALL ADDMEGALAUGH + CALL RESTOREGATE1 + + CMP ANY_LOOP_DOWN_COUNTER,0 + JZ NO_PARTY_T1 + CALL DO_PARTY_T +NO_PARTY_T1: + MOV ANY_LOOP_DOWN_COUNTER,PARTY_T_TIME + + INC SKYRIDECOUNTER + CMP SKYRIDECOUNTER,3 + JB NOT_ALL_ROCKETS + + ;*** ALL 3 ROCKETS LIT *** + EFFECT RIDE3 + LIGHTFLASH 22,ROCKETSPEED + LIGHTFLASH 13,ROCKETSPEED + LIGHTFLASH 15,ROCKETSPEED + ADDTASK KILL_FLASHING_ROCKETS + MOV SKYRIDECOUNTER,0 + CMP MBFLASHING,TRUE + JE MB_ALLR_FL + CMP LIGHTSTATUS[48],TRUE + JE NO_MORE_MB + MOV MBFLASHING,TRUE + SYNCEDFLASH 29,ARROWSPEED,ARROWSYNCER ;MB + EFFECT GETBONUS + JMP ROCKETS_OK +MB_ALLR_FL: +NO_MORE_MB: + JMP ROCKETS_OK + +NOT_ALL_ROCKETS: + CMP SKYRIDECOUNTER,1 + JNE NOT_1ST_ROCKET + + ;*** 1ST ROCKET *** + LON 22 ;1ST + EFFECT RIDE1 + JMP ROCKETS_OK + +NOT_1ST_ROCKET: + ;*** 2ND ROCKET *** + EFFECT RIDE2 + LON 13 ;2ND + +ROCKETS_OK: +QC2: RETN + +KILL_FLASHING_ROCKETS: + WAITSYNCS 120 ;CPW! + ENDFLASH 22 + ENDFLASH 13 + ENDFLASH 15 + SUICIDE + +DO_PARTY_T PROC NEAR + CMP LIGHTSTATUS[45],TRUE ;T IN PARTY + JE QDPT + LIGHTON 45 ;T IN PARTY + EFFECT PARTYSCORE4 + CALL CHECK_PARTY +QDPT: RETN +DO_PARTY_T ENDP + + +;***************************** BEFORE SKYRIDE ********************************* + +BYGEL10: ;BEFORE SKY RIDE + CALL KILLGATE1 + RETN + + +;********************************** PUKE ************************************** + +;******************** P ******************* +BYGEL5: ;P (PUKE) + SOUNDEFFECT SBYGEL1,0 ;"BYGELSETC" + CMP LIGHTSTATUS[1],FALSE + JNE QB5 + MOV LIGHTSTATUS[1],TRUE + CALL PUKEGROUP + JC PUKETIME + MOV PUKEFORBIDDEN,TRUE + LIGHTFLASH 1,PUKESPEED + ADDTASK PUKEP1 +QB5: RETN +PUKEP1: + WAITSYNCS PUKESPEED*6+1 ;CPW! + ENDFLASH 1 + MOV PUKEFORBIDDEN,FALSE + SUICIDE + +;******************** E ******************* +BYGEL8: ;E (PUKE) + SOUNDEFFECT SBYGEL1,0 ;"BYGELSETC" + CMP LIGHTSTATUS[2],FALSE + JNE QB8 + MOV LIGHTSTATUS[2],TRUE + CALL PUKEGROUP + JC PUKETIME + MOV PUKEFORBIDDEN,TRUE + LIGHTFLASH 2,PUKESPEED + ADDTASK PUKEP2 +QB8: RETN +PUKEP2: + WAITSYNCS PUKESPEED*6+1 ;CPW! + ENDFLASH 2 + MOV PUKEFORBIDDEN,FALSE + SUICIDE + +;******************** U ******************* +BYGEL6: ;U (PUKE) + SOUNDEFFECT SBYGEL1,0 ;"BYGELSETC" + CMP LIGHTSTATUS[4],FALSE + JNE QB6 + MOV LIGHTSTATUS[4],TRUE + CALL PUKEGROUP + JC PUKETIME + LIGHTFLASH 4,PUKESPEED + MOV PUKEFORBIDDEN,TRUE + ADDTASK PUKEP4 +QB6: RETN +PUKEP4: + WAITSYNCS PUKESPEED*6+1 ;CPW! + ENDFLASH 4 + MOV PUKEFORBIDDEN,FALSE + SUICIDE + +;******************** K ******************* +BYGEL7: ;K (PUKE) + SOUNDEFFECT SBYGEL1,0 ;"BYGELSETC" + CMP LIGHTSTATUS[5],FALSE + JNE QB7 + MOV LIGHTSTATUS[5],TRUE + CALL PUKEGROUP + JC PUKETIME + LIGHTFLASH 5,PUKESPEED + MOV PUKEFORBIDDEN,TRUE + ADDTASK PUKEP5 +QB7: RETN +PUKEP5: + WAITSYNCS PUKESPEED*6+1 ;CPW! + ENDFLASH 5 + MOV PUKEFORBIDDEN,FALSE + SUICIDE + +;************* PUKE LETTERS SHARED CODE ************* +PUKEGROUP: ;OUTPUT: -C- IF TIME FOR PUKE + ADDSCORE BCD20070 ;"BYGELSETC" + ADDBONUS BCD1000 + CALL JACKADD + CMP LIGHTSTATUS[1],TRUE + JNE NOTALLPUKE + CMP LIGHTSTATUS[2],TRUE + JNE NOTALLPUKE + CMP LIGHTSTATUS[4],TRUE + JNE NOTALLPUKE + CMP LIGHTSTATUS[5],TRUE + JE LETSPUKE +NOTALLPUKE: + CLC + RETN +LETSPUKE: + STC + RETN + +TURNOFFPUKE: + WAITSYNCS 100 ;CPW! + ENDFLASH 1 ;P + ENDFLASH 2 ;E + ENDFLASH 4 ;U + ENDFLASH 5 ;K + LIGHTOFF 1 + LIGHTOFF 2 + LIGHTOFF 4 + LIGHTOFF 5 + SUICIDE + +PUKETIME: ;THIS IS NOT A TASK ROUTINE! + SYNCEDFLASH 1,WHOLEPUKESPEED,PUKESYNCER ;P + SYNCEDFLASH 5,WHOLEPUKESPEED,PUKESYNCER ;K + INVERTEDSYNCEDFLASH 2,WHOLEPUKESPEED,PUKESYNCER ;E + INVERTEDSYNCEDFLASH 4,WHOLEPUKESPEED,PUKESYNCER ;U + ADDTASK TURNOFFPUKE + + INC PUKECOUNTER + CMP PUKECOUNTER,1 + JNE NOT_5M_ACT + CMP _5MFLASHING,TRUE + JE _5M_ALLR_FL + SYNCEDFLASH 27,TRAINSPEED,TRAINSYNCER ;5M + MOV _5MFLASHING,TRUE +_5M_ALLR_FL: + JMP DRAGON_TRAIN_OK +NOT_5M_ACT: + + CMP PUKECOUNTER,2 + JNE NOT_BALL_ACT + CMP BALLFLASHING,TRUE + JE BALL_ALLR_FL + INVERTEDSYNCEDFLASH 30,TRAINSPEED,TRAINSYNCER ;BALL + MOV BALLFLASHING,TRUE +BALL_ALLR_FL: + JMP DRAGON_TRAIN_OK +NOT_BALL_ACT: + + CMP PUKECOUNTER,3 + JNE NOT_JP_ACT + CMP JPFLASHING_NORMAL,TRUE + JE JP_ALLR_FL + CMP JPFLASHING_TIME,TRUE + JE JPISTIMED + SYNCEDFLASH 35,TRAINSPEED,TRAINSYNCER ;JP +JPISTIMED: + MOV JPFLASHING_NORMAL,TRUE +;2 LAST SECONDS OF HAPPY HOUR + SPELLED COMPLETE PUKE 3RD TIME = BUG! ;CP? +JP_ALLR_FL: +NOT_JP_ACT: + +DRAGON_TRAIN_OK: + CMP LIGHTSTATUS[46],TRUE + JE Y_ALLR_LIT + + ;*** SPELLED Y IN PARTY *** + LIGHTON 46 + EFFECT PARTYSCORE5 + CALL CHECK_PARTY +Y_ALLR_LIT: + RETN + + +;******************************* DUMMY ********************************* +OPEN2: ;BEFORE "BEFORE SKYRIDE" + RETN + +;***************************** SKY RIDE EXIT ******************************** +BYGEL4B: ;SKY RIDE EXIT + RETN + + +;********************************* CYCLONE ************************************ + +BYGEL13: ;CYCLONE BYGEL + CALL ADDMEGALAUGH + CMP SKILLSHOTDOWNCOUNTER,0 + JA CYCLONE_SKILL_SHOT + CMP REVERSE_DOWN_COUNTER,0 + JZ NOT_PARTY_R + CALL PARTY_R +NOT_PARTY_R: +FROM_CYCLONE_SKILLSHOT: + CMP _5XFLASHING,TRUE + JE THE_5X_OPTION +INHIBIT_ONE: + INC CYCLONECOUNTER + mov si,offset etta + mov di,offset cyclonecounterbcd + call addscorebcd + mov si,offset HUNDRATUSEN + mov di,offset CYCLONESCOREBCD + call addscorebcd + CMP CYCLONECOUNTER,1 + JE INHIBIT_ONE + EFFECT CYCLCOUNT + CALL KILL_5X + MOV INH_EFF,FALSE + RETN ;RETN + +THE_5X_OPTION: + ADD CYCLONECOUNTER,5 + mov si,offset femma + mov di,offset cyclonecounterbcd + call addscorebcd + mov si,offset FEMHUNDRATUSEN + mov di,offset CYCLONESCOREBCD + call addscorebcd + EFFECT CYCLCOUNT2 + CALL KILL_5X + CALL KILL_5X + MOV INH_EFF,FALSE + RETN ;RETN + +CYCLONE_SKILL_SHOT: + CALL JACKADD ;CP? INGET JACKADD P¸ CYCL., MEN 2 P¸ SKILLS.! + CALL JACKADD + EFFECT SKILLCYCLONE + MOV SI,OFFSET BCDMILLION + MOV DI,OFFSET SKILL_SCORE2 + CALL ADDSCOREBCD ;S_S_S2 += 1E6 + + MOV SI,OFFSET SKILL_SCORE2 + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD ;SCORE += S_S2 + EFFECT SKILLCYCLONE + MOV INH_EFF,TRUE + CALL PARTY_R + JMP FROM_CYCLONE_SKILLSHOT + +PARTY_R: + CMP LIGHTSTATUS[44],TRUE ;R IN PARTY + JE QUICK_BACK_2 + LIGHTON 44 ;R IN PARTY + EFFECT PARTYSCORE3 + CALL CHECK_PARTY +QUICK_BACK_2: + CALL KILL_5X + RETN ;RETN + + +;****************************************************************************** +UPDATE_COUNTERS PROC NEAR + CMP LOOSING,TRUE + JE COUNTERS_INH + INC SLUMPCOUNTER + CMP SKILLSHOTDOWNCOUNTER,0 ;SKILL SHOT + JZ SKILLZERO + DEC SKILLSHOTDOWNCOUNTER +SKILLZERO: + CMP ANY_LOOP_DOWN_COUNTER,0 ;ANY LOOP + JZ DNDALDC + DEC ANY_LOOP_DOWN_COUNTER +DNDALDC: + CMP REVERSE_DOWN_COUNTER,0 ;REVERSE + JZ DNDRDC + DEC REVERSE_DOWN_COUNTER +DNDRDC: + CMP INHIBIT_REVERSE_COUNTER,0 ;INHIBIT REVERSE + JZ DNDIRC + DEC INHIBIT_REVERSE_COUNTER +DNDIRC: + INC SNACKSYNCER ;SNACK SYNCER + CMP SNACKSYNCER,SNACKSPEED*2 + JNE SNSOK + MOV SNACKSYNCER,0 +SNSOK: + INC ARROWSYNCER ;ARROW SYNCER + CMP ARROWSYNCER,ARROWSPEED*2 + JNE ARRSOK + MOV ARROWSYNCER,0 +ARRSOK: + INC PUKESYNCER ;PUKE SYNCER + CMP PUKESYNCER,WHOLEPUKESPEED*2 + JNE PSOK + MOV PUKESYNCER,0 +PSOK: + INC TRAINSYNCER ;TRAIN SYNCER + CMP TRAINSYNCER,TRAINSPEED*2 + JNE TRSOK + MOV TRAINSYNCER,0 +TRSOK: + CMP TUNNELDOWNCOUNTER,0 ;TRAIN COUNTER + JZ TUNNELZERO + DEC TUNNELDOWNCOUNTER + CMP TUNNELDOWNCOUNTER,TUNNEL_TIME + JNE NOT_D2_3M + ENDFLASH 10 ;5M ;IF 5M -> 3M: KILL 5M & ACT 3M + LOFF 10 ;5M + MOV LIGHTSTATUS[12],FALSE ;3M + LIGHTFLASH 12,TUNNELSPEED ;3M + JMP TUNNEL_FLASH_READY +NOT_D2_3M: + CMP TUNNELDOWNCOUNTER,0 + JNZ NOT_D2_1M + ENDFLASH 12 ;3M ;IF 3M -> 1M: KILL 3M & ACT 1M + LOFF 12 ;3M + MOV LIGHTSTATUS[14],FALSE ;1M + LIGHTFLASH 14,TUNNELSPEED ;1M +NOT_D2_1M: +TUNNELZERO: +TUNNEL_FLASH_READY: +COUNTERS_INH: + RETN +UPDATE_COUNTERS ENDP + +ADDHAPPY PROC NEAR + CMP HAPPY_HOUR,TRUE + JNE NOTHAPPYADDING + MOV SI,OFFSET BCDMILLION + MOV DI,OFFSET HAPPY_HOUR_TOTAL + CALL ADDSCOREBCD + MOV SPECIAL_SCORE_CHANGED,TRUE +NOTHAPPYADDING: + RETN +ADDHAPPY ENDP + +ADDMEGALAUGH PROC NEAR + CMP MEGA_LAUGH,TRUE + JNE NOTMEGAADDING + MOV SI,OFFSET BCD5MILLION + MOV DI,OFFSET MEGA_LAUGH_TOTAL + CALL ADDSCOREBCD + MOV SPECIAL_SCORE_CHANGED,TRUE +NOTMEGAADDING: + RETN +ADDMEGALAUGH ENDP + +BUMPER_WAS_HIT_PROC PROC NEAR ;INPUT: HITPOINTER + CALL ADDHAPPY + UPDAT_INFOBAR + RETN +BUMPER_WAS_HIT_PROC ENDP + + + +;********************************* DOT MATRIX CODE **************************** +_PARTYONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV PARTYFLASH,TRUE + MOV AL,PLAYER + ADD AL,'A'-10 + MOV PARTY_ON_TEXT[18],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END +_SHOOT_AGAIN_ONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV AL,PLAYER + ADD AL,'A'-10 + MOV SHOOT_AGAIN_TEXT[19],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END +_PARTYON: ;BX NOT USED! + MOV PARTYFLASH,TRUE + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET PARTYRUT + JMP NORMAL_END + +_PARTYOFF: ;TURN OFF PARTYON FLASHING (AND BRING BACK SCORE!) +;BUT THIS ROUTINE DOESN'T DO ANYTHING, DOES IT???????? + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + JMP NORMAL_END + +_EOSNURR: + MOV SNURR_READY,TRUE + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + JMP NORMAL_END + +_WAIT_GAME_ON: + MOV DOTRUT,OFFSET GONRUT + MOV SISA,44 + JMP NORMAL_END +GONRUT: + CMP ADDPLAYERS,TRUE + JE INTE_SATT_IGANG + MOV SI,0 + RETN +INTE_SATT_IGANG: + MOV SI,34 ;INTE 0 = INTE IG¸NG !! + RETN + + +_JBCDZ: + IFZEROBCD [BX+2] + JC OVERIT_ + MOV BX,[BX+4] + SUB BX,6 +OVERIT_: + ADD BX,6 + CMP WORD PTR [BX],0 + JNE _NEXTp_4 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_4: + MOV NEXT_A,BX + JMP [BX] + RETN + +_JBONUSX1: + CMP BONUS_X,1 + Ja QJBX1 + ADD BX,2 + MOV BX,[BX] + MOV NEXT_A,BX + JMP [BX] +QJBX1: MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + +_Jmp: + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + JMP [BX] + retn + +_BONUS_X_CALCS: ;FN: MULTIPLIES THE BONUS + ;INPUT: BONUS_X, BONUSSIFFRORNA + ;OUTPUT: BONUSSIFFRORNA, BONUS_X_TEXT[8] + PUSH BX + PUSH ES + MOVEBCD TEMPBONUSBCD,BONUSSIFFRORNA + MOV CL,BONUS_X + DEC CL + JZ NO_X_BONUS + NIL CH +DO_IT_AGAIN: + PUSH CX + MOV SI,OFFSET TEMPBONUSBCD + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POP CX + LOOP DO_IT_AGAIN +NO_X_BONUS: + MOV AL,BONUS_X + ADD AL,'7' + MOV BONUS_X_TEXT[8],AL + POP ES + POP BX + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + + +_CALC_MEGA: + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + PUSHA + MOV SI,OFFSET MEGA_LAUGH_TOTAL ;ML_TOT -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POPA + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3Q + MOV BX,0 +_NEXTp_3Q: + MOV NEXT_A,BX + RETN +_CALC_HAPPY: + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + PUSHA + MOV SI,OFFSET HAPPY_HOUR_TOTAL ;ML_TOT -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POPA + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3E + MOV BX,0 +_NEXTp_3E: + MOV NEXT_A,BX + RETN +_CALC_CYCLO: + PUSH ES + MOVE ES,DS + MOV DI,OFFSET CYCLONESCOREBCD + NIL AX + MOV CX,12/2 ;(12/6=6!!!) + REP STOSW + POP ES + + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + MOV CX,CYCLONECOUNTER +URBANLOOP: + MOV SI,OFFSET HUNDRATUSEN + MOV DI,OFFSET CYCLONESCOREBCD + PUSH CX BX + CALL ADDSCOREBCD + POP BX CX + LOOP URBANLOOP + + MOV SI,OFFSET CYCLONESCOREBCD ;CYCLONES -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3 + MOV BX,0 +_NEXTp_3: + MOV NEXT_A,BX + RETN + + +READ_SPECIAL_MODE_COUNTER PROC NEAR + +;[SEC_ASC] PEKAR P¸ MSD, (0='*') [SEC_ASC+1] PEKAR P¸ LSD +;LˇS AV BARA! + MOVE DS,DATA + + CMP HAPPY_HOUR,TRUE + JNE OK_NOT_HH + + CMP [SEC_ASC],'*' + JNE INTE_NU_INTE_02 + CMP [SEC_ASC+1],'2'+7 + JNE INTE_NU_INTE_02 + + ;*** SNABB FLASHA JP *** + CMP JPFLASHING_NORMAL,TRUE + JE NO_QUICK_FLASH + CMP JPFLASHING_TIME,TRUE + JNE NO_QUICK_FLASH + ENDFLASH 35 ;JP + LIGHTFLASH 35,TRAINSPEEDFAST ;JP +NO_QUICK_FLASH: + +INTE_NU_INTE_02: + + CMP [SEC_ASC],'*' + JNE INTE_NU_INTE_00 + CMP [SEC_ASC+1],'0'+7 + JNE INTE_NU_INTE_00 + + ;*** KILL HAPPY HOUR *** + mov sisa,0 + MOV SPECIALMODE,FALSE + MOV HAPPY_HOUR,FALSE + ENDFLASH 32 ;HH + LOFF 32 ;HH + EFFECT EOHAPPYHOUR + MOV LASTJINGLE,1 + ENDFLASH 35 ;JP + LOFF 35 ;JP + MOV JPFLASHING_TIME,FALSE + CMP JPFLASHING_NORMAL,TRUE + JNE JP_NOT_FLASHING + SYNCEDFLASH 35,TRAINSPEED,TRAINSYNCER ;JP +JP_NOT_FLASHING: + CMP MEGA_PENDING,TRUE + JNE INGET_PENDING + ;PENDING MEGA! + MOV MEGA_PENDING,FALSE + ADDTASK MEGA_START +INGET_PENDING: + +INTE_NU_INTE_00: + JMP HH_READY +OK_NOT_HH: ;******************************************************** + + CMP [SEC_ASC],'*' + JNE INTE_NU_INTE_02M + CMP [SEC_ASC+1],'2'+7 + JNE INTE_NU_INTE_02M + + ;*** SNABB FLASHA JP *** + CMP JPFLASHING_NORMAL,TRUE + JE NO_QUICK_FLASH_M + CMP JPFLASHING_TIME,TRUE + JNE NO_QUICK_FLASH_M + ENDFLASH 35 ;JP + LIGHTFLASH 35,TRAINSPEEDFAST ;JP +NO_QUICK_FLASH_M: + +INTE_NU_INTE_02M: + + CMP [SEC_ASC],'*' + JNE INTE_NU_INTE_00M + CMP [SEC_ASC+1],'0'+7 + JNE INTE_NU_INTE_00M + + ;*** KILL MEGA LAUGH *** + MOV SPECIALMODE,FALSE + MOV MEGA_LAUGH,FALSE + mov sisa,0 + ENDFLASH 37 ;ML + LOFF 37 ;ML + EFFECT EOMEGALAUGH + MOV LASTJINGLE,1 + ENDFLASH 35 ;JP + LOFF 35 ;JP + MOV JPFLASHING_TIME,FALSE + CMP JPFLASHING_NORMAL,TRUE + JNE JP_NOT_FLASHING2 + SYNCEDFLASH 35,TRAINSPEED,TRAINSYNCER ;JP +JP_NOT_FLASHING2: + CMP HAPPY_PENDING,TRUE + JNE INGET_PENDING2 + ;PENDING HAPPY! + MOV HAPPY_PENDING,FALSE + ADDTASK HAPPY_START + +INGET_PENDING2: +INTE_NU_INTE_00M: +HH_READY: + RETN + +HAPPY_START: + WAITSYNCS 400 + CALL OK_2_BE_HAPPY + SUICIDE + +MEGA_START: + WAITSYNCS 400 + CALL OK_2_LAUGH + SUICIDE + +READ_SPECIAL_MODE_COUNTER ENDP + +_TSEND: MOV EOTS,TRUE + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + +_DOBEATEN: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + INC XBALLS + PUSHA + LIGHTON 51 + POPA + JMP NORMAL_END + + +CODE ENDS + +;****************************************************************************** +;************************* O T H E R S E G M E N T S ************************ +;****************************************************************************** + +HIDDEN1 SEGMENT PARA PUBLIC 'DATA' + UNDANSPR DB 16*16 DUP (0) + HIDDA DB 576*2 DUP(0) + EXTRN HID1 +HIDDEN1 ENDS + +HIDDEN2 SEGMENT PARA PUBLIC 'DATA' + HIDDA2 DB 576*2 DUP(0) + EXTRN HID2 +HIDDEN2 ENDS + +MASK1_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK12 +MASK1_2 ENDS + +MASK1_1 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK11 +MASK1_1 ENDS + +MASK2_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK22 +MASK2_2 ENDS + +FLIPLEFT SEGMENT PARA PUBLIC 'DATA' +IF CREATE_FLIP_DATA + EXTRN FLIPL +ELSE + EXTRN FLIPL_1 +ENDIF +FLIPLEFT ENDS + +FLIPLEFT2 SEGMENT PARA PUBLIC 'DATA' +IF CREATE_FLIP_DATA + EXTRN FLIPL2 +ELSE + EXTRN FLIPL2_1 +ENDIF +FLIPLEFT2 ENDS + +FLIPRIGHT SEGMENT PARA PUBLIC 'DATA' +IF CREATE_FLIP_DATA + EXTRN FLIPR +ELSE + EXTRN FLIPR_1 +ENDIF +FLIPRIGHT ENDS + +LASTSEG SEGMENT +LASTSEG ENDS + +STAGE1_1 SEGMENT PARA PUBLIC 'DUMP' + extrn st1 +STAGE1_1 ENDS + +STAGE1_2 SEGMENT PARA PUBLIC 'DUMP' + extrn st2 +STAGE1_2 ENDS + +STAGE1_3 SEGMENT PARA PUBLIC 'DUMP' + extrn st3 +STAGE1_3 ENDS + +STAGE1_4 SEGMENT PARA PUBLIC 'DUMP' + extrn st4 +STAGE1_4 ENDS + +MASK1_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK13 +MASK1_3 ENDS + +MASK2_1 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK21 +MASK2_1 ENDS + +MASK2_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK23 +MASK2_3 ENDS + +FLIPGFXSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN FLIPGFX:BYTE +SISTAGFX LABEL BYTE +FLIPGFXSEG ENDS + +SPRINGSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN SPRING +SPRINGSEG ENDS +;****************************************************************************** + + + \ No newline at end of file diff --git a/SDEV.ASM b/SDEV.ASM new file mode 100644 index 0000000..f0dd8b7 --- /dev/null +++ b/SDEV.ASM @@ -0,0 +1,5196 @@ +;****************************************************************************** +;** ** +;** P I N B A L L F A N T A S I E S ** +;** TABLE: SPEED DEVILS ** +;** ** +;****************************************************************************** + +INCLUDELIB Sdev.LIB + +flipgfxfilesize=168 +FIRSTMASK_GFXADR=BPL*(SPLH+BANH) +GFXADR_FOR_FLIP_ANIM_DATA=FIRSTMASK_GFXADR+BPL*40 +springsourceadr=GFXADR_FOR_FLIP_ANIM_DATA-3*23 ;3*23 ˇR F™R FJˇDERNS GFX +springdestadr=(splh+556)*bpl+304/4 +std_lgt_speed=15 ;som pilarna blinkar i ju . . . +TurboDelay=60*3 +blet=1 ;hur m†nga ggr f”r l„nge mellan looparna + +DATAFLIP SEGMENT PARA PUBLIC 'DATA' +MAXDIFS1=114+5 +MAXDIFS2=114+5 +MAXDIFS3=114+5 +maxdifs=114 +if create_flip_data + LEFTFLIPTAB DW 42*(2*MAXDIFS1) DUP (1) + RIGHTFLIPTAB DW 42*(2*MAXDIFS2) DUP (1) + LEFTFLIP2TAB DW 30*(2*MAXDIFS3) DUP (1) + TEMPTAB DW 2*MAXDIFS DUP (1) +else + extrn leftfliptab,rightfliptab,leftflip2tab +endif +DATAFLIP ENDS + +DATA SEGMENT PARA PUBLIC 'DATA' + ASSUME CS:CODE,DS:DATA +MODUL DB 'TABLE2.MOD',0,'$' +if create_flip_data +flipdatafil_L DB 'flipdata.2L',0 +flipdatafil_R DB 'flipdata.2R',0 +flipdatafil_L2 DB 'flipdata.2L2',0 +flipgfxfil DB 'flipgfx.2',0 +flipSTRUCfil DB 'flipSTRU.2',0 +endif +hi_score_file db 'table2.hi',0 +hi_score_list db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 + db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'J L',0 + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ICE',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ANY',0 + +;****************************************************************************** +;******************************** DEFINITIONS ********************************* +;****************************************************************************** +stones=0 ;true +TOTCENT=16 +CYCLONECOUNTER DW ? ;HEXADECIMAL +cyclonecounterBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +CYCLONESCOREBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +XXBALLE DB ? + +;******************** SYSTEM ********************** +RGB_BUFFER_LEN=1500 +MAX_NO_OF_LIGHTS_FLASHING=64 +MAX_NO_OF_WAIT_SYNCS=50 +NOOFTASKS=20 + +;******************** FLIPPER & BALL ********************** +BALLH=16 +BANH=576 +STARTX=310-BALLH/2+3 +STARTY=543-BALLH/2 + +F3TOP=168 +F3HEIGHT=53 + +;******************** FLASHING ********************** +MATRIXHI=62H +MATRIXLO=80H +MATRIXCOLS=MATRIXHI*256+MATRIXLO +BIT2COL DB 0,0,0,0,31,1,52,0 ;flipper f„rgerna + +PARTY_ON_SPEED=3 ;? +SHOOT_AGAIN_SPEED=3 ;? + +POS_SYNCER DB ? ;LIGHT SYNC + +;******************** GAME TIMING ******************** + +;******************** HOLES ********************** + +;****************************************************************************** +;****************************** GENERAL VARS ********************************** +;****************************************************************************** +if create_flip_data +FlipLInfo DB FlipperL,222 + DW 80,510,4,53,0,142,400,576,95,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,LEFTFLIPTAB,LEFTFLIPTAB,maxdifs1*4 + DW FLIPLEFT + + DB FlipperR,222 + DW 160,510,4,53,143,320,400,576,204,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,RIGHTFLIPTAB,RIGHTFLIPTAB,maxdifs2*4 + DW FLIPRIGHT + + DB FlipperR,222 + DW 144,168,4,53,0,320,100,300,188,198,0,(53*8*3) + DW 0,0,0,14,14*ADJUST,-5*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,LEFTFLIP2TAB,LEFTFLIP2TAB,maxdifs3*4 + DW FLIPLEFT2+(4*(53*8*3))/16 + DB 0,0 +else + extrn fliplinfo:flipstruc +endif +no_of_ramps equ 6 +RAMPTABLE DW 0,10*tt/nn + DW 0,15*tt/nn + DW 0,25*tt/nn + DW -1,10*tt/nn + DW 0,20*tt/nn + DW 12*tt/nn,10*tt/nn + DW 0,0 + +RAMPTABLE_hi DW 0,10 + DW 0,15 + DW 0,25 + DW -1,10 + DW 0,20 + DW 12,10 + DW 0,0 + +PLAYER_STRUC STRUC + P_SIFFRORNA DB 12 DUP(?) + P_BONUSSIFFRORNA DB 12 DUP(?) + p_cyclonecounterBCD db 12 dup(?) + p_cyclonecount dw ? + p_speeden dw ? + p_gearet dw ? + p_nextjump dw ? + p_nextoffroad dw ? + p_pos_light dw ? + p_pos_flash dw ? + p_goallight db ? + p_gear db ? ;Gyllenhammar?? + p_ear db ? + p_aron db ? + p_rapa db ? ;Ja hoppas den e bra . . + p_part1 db ? + p_part2 db ? + p_part3 db ? + p_part4 db ? + p_part5 db ? + p_part1_l db ? + p_part2_l db ? + p_part3_l db ? + p_part4_l db ? + p_part5_l db ? + p_Carparten DW ? + p_hbcount db ? + p_tm_total db 12 dup (?) + p_or_total DB 12 dup (?) +ENDS +PLAYER_AREA DB SIZE PLAYER_STRUC * NO_OF_PLAYERS DUP(0) +;****************************************************************************** +;********************************* EFFECTS ************************************ +;****************************************************************************** + +EFFECT_STRUC STRUC + THEJINGLE DW ? + TSCORE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + TBONUS DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + DOTMATRIX DW ? +ENDS + +Turboeffect dw SJingle21 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw 0 + +jump_at dw 0 + db 35 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw Jump_At_TS + +offroad_at_10 dw 0 + db 35 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw offroad_At_10_TS + +xball_at_20 dw 0 + db 35 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw Xball_At_20_TS + +OffRoad_at dw 0 + db 35 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw OffRoad_At_TS + + +SuperJack dw SJingle3 + db 0,0,0, 0,5,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,1, 0,0,0, 0,0,0 + dw SuperJackTS + +JackPot dw SJingle2 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw JackPotTS + +SuperJack2 dw SJingle3 + db 0,0,0, 0,5,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,1, 0,0,0, 0,0,0 + dw superJack2TS + + +HoldBonus dw S_Lock + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw BonusHeldTS + + +NumberOne dw SJingle18 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw 0 + +XBall dw SJingle4 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW XballTS + +litXBall dw 0 + db 90 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW litXballTS + dw 0 + + +Jump dw SJingle11 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW JumpTS + +lgt_Jump dw SJingle10 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW litJumpTS + +Part1 dw SJingle15 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + dw Part1TS +Part2 dw SJingle15 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + dw Part2TS +Part3 dw SJingle15 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + dw Part3TS +Part4 dw SJingle15 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + dw Part4TS +Part5 dw SJingle15 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + dw Part5TS + +GearChange dw SJingle16 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,2,5, 0,0,0 + dw GearTS + +Speedo dw Sjingle8 ;CP! Olika f”r varje speed!! + db 0,0,0, 0,0,0, 2,5,0, 0,0,0 + db 0,0,0, 0,0,0, 0,2,5, 0,0,0 + DW PedalTS + + +OverTake dw SJingle17 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + dw OverTakeTS + +GoalLit dw SJingle12 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW 0 + +GetGoal dw SJingle7 ;13 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW TurboTS + +LOSTBALL DW 0 ;S_LOSTBALL + DB 255 +; DD 0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW ball_lostTS + + +BygelSetA DW S_Tilt ;sidotrill ned . . + db 0,0,0, 0,0,0, 0,5,0, 0,7,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW 0 + +BygelSetB dw 0 + db 200 ;r”rnedfall . . + db 0,0,0, 0,0,0, 0,1,0, 0,1,0 + db 0,0,0, 0,0,0, 0,0,1, 0,3,0 + DW 0 + +BygelSetC dw 0 + db 200 ;P I T + db 0,0,0, 0,0,0, 0,1,0, 0,2,0 + db 0,0,0, 0,0,0, 0,0,1, 0,1,0 + DW 0 +MBLit dw Sjingle9 ;Multi Bonus Lit + db 0,0,0, 0,0,0, 0,1,0, 0,2,0 + db 0,0,0, 0,0,0, 0,0,1, 0,1,0 + DW 0 + +BygelSetD dw 0 + db 200 ;Ut ur OffRoad . . + db 0,0,0, 0,0,0, 0,1,0, 0,4,0 + db 0,0,0, 0,0,0, 0,0,1, 0,5,0 + DW 0 + +BygelSetE dw 0 + db 200 ;In i offroad . . + db 0,0,0, 0,0,0, 0,1,0, 0,4,0 + db 0,0,0, 0,0,0, 0,0,1, 0,9,0 + DW 0 +DB ? +Million dw Sjingle6 ;In i offroad, full bonus + db 0,0,0, 0,0,1, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + dw MillionTS +DB ? +;Speeds (Loops get higher score for higher speeds) +SScore1 dw 0 + db 30 + db 0,0,0, 0,0,0, 0,2,5, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore2 dw 0 + db 30 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore3 dw 0 + db 30 + db 0,0,0, 0,0,0, 0,7,5, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore4 dw 0 + db 30 + db 0,0,0, 0,0,0, 1,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore5 dw 0 + db 30 + db 0,0,0, 0,0,0, 1,2,5, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore6 dw 0 + db 30 + db 0,0,0, 0,0,0, 1,5,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore7 dw 0 + db 30 + db 0,0,0, 0,0,0, 1,7,5, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore8 dw 0 + db 30 + db 0,0,0, 0,0,0, 2,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore9 dw 0 + db 30 + db 0,0,0, 0,0,0, 2,2,5, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore10 dw 0 + db 30 + db 0,0,0, 0,0,0, 2,5,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore11 dw 0 + db 30 + db 0,0,0, 0,0,0, 2,7,5, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS +SScore12 dw 0 + db 30 + db 0,0,0, 0,0,0, 3,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MilesTS + + +;Multiply Bonus vill ligga t„tt ihop ;-) +M2 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 + DW m2TS + +M3 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 + DW m3TS +M4 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,2, 0,0,0 + DW m4TS +M5 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,3, 0,0,0 + DW m5TS +M6 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,4, 0,0,0 + DW m6TS +M7 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,5, 0,0,0 + DW m7TS +M8 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,6, 0,0,0 + DW m8TS +M9 DW SJingle1 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,7, 0,0,0 + DW m9TS + +if demover +MINUTE5 DW S_GAMEOVER2 +; DD 0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW minute5TS +endif +BONUS_X DB ? +TEMPBONUSBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? + +JACKVALUE DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;JACKPOT CURRENT +JACKRAISE DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;JACKPOT STEP +JACKINIT DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 ;JACKPOT START + +etta db 0,0,0,0,0,0,0,0,0,0,0,1 +HUNDRATUSEN db 0,0,0,0,0,0,1,0,0,0,0,0 +BCDfemmillioner db 0,0,0,0,0,5,0,0,0,0,0,0 +bcd7510 db 0,0,0,0,0,0,0,0,7,5,1,0 +bcd7520 db 0,0,0,0,0,0,0,0,7,5,2,0 +bcd550 db 0,0,0,0,0,0,0,0,0,5,5,0 +bcd570 db 0,0,0,0,0,0,0,0,0,5,7,0 +bcdhundratusen db 0,0,0,0,0,0,1,0,0,0,0,0 +;****************************************************************************** +;**************************** SOUND STRUCTURES ******************************** +;****************************************************************************** + +;SAMPLE,PERIOD,EFFECT,CHANNEL + +sbase Equ 21+1 + +SBrickNer db (sbase+0),18,0,3 +SBrickUpp db (sbase+1),18,0,3 +SBumper db (sbase+2),18,0,3 +SFlippUpp db (sbase+3),22,0,3 +SRinner db (sbase+4),18,0,3 +SNewBall db (sbase+6),18,0,3 +SKicker db (sbase+7),18,0,3 +SFjader db (sbase+8),18,0,3 +SGrop db (sbase+1),18,0,3 + + + +;*********************************************************************** + +ebase Equ 26+1 + +;???????????????????????????????????????????? +S_AddPlayer2 db (ebase+0),20,0,3 +;???????????????????????????????????????????? + +SBygel1 db (ebase+0),10,0,3 +SBygel2 db (ebase+0),12,0,3 +SBygel3 db (ebase+0),8,0,3 +SBygel4 db (ebase+0),17,0,3 +SBygel5 db (ebase+0),8,0,3 +S_Touch1 db (ebase+0),14,0,3 +S_Touch2 db (ebase+0),10,0,3 +S_MultiLjud db (ebase+0),10,0,3 +S_ScoreLjud db (ebase+0),18,0,3 +S_TripCount db (ebase+0),15,0,3 + +;*********************************************************************** +;* Here comes the jingles . . . * +;*********************************************************************** +emptyjingle equ 55 +springjingle equ 0 +mainjingle equ 2 +lastmainpos equ 9 + +S_Empty db 55,0,0 +S_Spring db 0,0,0 +S_Main db 2,0,0 +S_NoHigh db 10,0,0 +S_Danger db 40,1,250 +S_Tilt db 39,1,250 +S_GameOver db 26,0,0 +S_GameOver2 db 61,0,255 ;0 +S_LostBall db 24,1,255 ;200 ??? +S_AddPlayer db 0,0,0 +S_Lock db 27,1,90 ;Bonus Locked +S_Mystery db 0,0,0 +S_EndFig db 50,1,0 +S_Knacket db 51,1,230 +S_BEATEN DB 51,1,249 + +;*********************************************************************** + +SJingle1 db 25,1,60 ;Multi Bonus +SJingle2 db 38,1,190 ;Jackpot +SJingle3 db 41,4,200 ;Super Jackpot +SJingle4 db 28,1,180 ;Extra Ball +SJingle5 db 30,1,100 ;Jackpot Lit +SJingle6 db 44,1,61 ;Million +SJingle7 db 34,0,255 ;Turbo (0) +SJingle8 db 42,1,50 ;Add Speed +SJingle9 db 48,1,60 ;Multi Bonus Lit +SJingle10 db 32,1,40 ;Jump Lit +SJingle11 db 43,1,70 ;Jump +SJingle12 db 45,1,100 ;Goal Lit +SJingle13 db 46,1,200 ;Goal +SJingle15 db 33,1,110 ;Extra Features +SJingle16 db 29,1,80 ;Change Gear +SJingle17 db 37,1,62 ;Overtake +SJingle18 db 49,1,200 ;Number One +SJingle19 db 31,1,100 ;Double Bonus +SJingle20 db 36,1,255 ;Turbo End (0) +SJingle21 db 24,1,30 ;Ramps +SJingle22 db 56,0,254 ;Off Road (0) +SJingle23 db 60,1,255 ;Off Road End (60) + +;****************************************************************************** +;***************************** DETECTION AREAS ******************************** +;****************************************************************************** + +BumperLista_L dw 52,193,76,217 + dw Bumper1 + dw 5,223,28,247 + dw Bumper2 + dw 52,253,67,274 + dw Bumper3 + dw 5,283,28,307 + dw Bumper4 +BumperLista_U dw -1,-1,-1,-1 + dw 0 + +Bumper2Lista_L dw 50,415,80,470 ;Just to add power + dw Kicker1 ;No Scores or effects + dw 219,415,249,470 + dw Kicker2 +Bumper2Lista_U dw -1,-1,-1,-1 + dw 0 + +bumper1 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,3,0 ;1,030 +bumper2 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,3,0 ;1,030 +bumper3 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,3,0 ;1,030 +bumper4 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,3,0 ;1,030 + +kicker1 dw skicker + db 0,0,0, 0,0,0, 0,0,0, 5,1,0 ;510 +kicker2 dw skicker + db 0,0,0, 0,0,0, 0,0,0, 5,1,0 ;510 + + +ZonLista_L label word + + + DW 168,235,183,250,bricka_b + DW 183,246,199,258,bricka_u + DW 199,254,215,266,bricka_r + + DW 261,261,271,278,bricka_n + DW 271,278,278,294,bricka_i + DW 278,294,290,310,bricka_nn + + + dw 0 +comment\ + dw 168,235,215,265 + dw TouchSetA ;B U R + dw 261,261,290,310 + dw TouchSetB ;N I N' + \ +ZonLista_U label word + dw 0 + +AreaLista_L label word + dw 260,35,275,60 ;PITSTOP + dw GropA + + dw 295,50,320,70 ;Game On + dw Close1 + + dw 140,50,170,70 ;Jump + dw Bygel16 + + dw 10,65,40,95 + dw Bygel9 ;OffRoad . . + +; dw 255,85,285,110 ;ing†ng till P I T +; dw Close2 + + dw 140,90,160,110 ;ing†ng under jump + dw Bygel17 + +;P I T + dw 253,124,263,130 + dw Bygel7 + dw 228,132,238,138 + dw Bygel6 + dw 205,140,215,146 + dw Bygel5 +;Utg†ng Offroad + dw 25,310,35,320 + dw Bygel8 + +;H”ger och V„nster R”r + dw 25,435,35,445 + dw Bygel3 + dw 263,435,273,445 + dw Bygel4 +;Sidelanes + dw 5,455,15,465 + dw Bygel1 + dw 284,455,294,465 + dw Bygel2 +;Spring Invalid + dw 300,480,320,500 + dw Open2 + + dw 305,512,320,576 ;Spring Valid + dw Bygel28 + dw 0 + +AreaLista_U label word + dw 145,13,180,35 + dw Bygel10 ;”vre loop + + dw 295,50,320,60 ;nedsl„pp + dw nedslapp + + dw 120,64,150,78 + dw Bygel12 ;Jump + + dw 1,250,20,290 + dw Bygel11 ;nedre loop + + dw 0 + +AREALISTA_L_T LABEL WORD +AREALISTA_U_T LABEL WORD + DW 0 + +level1lista label word + dw 160,40,195,70 +; dw 295,50,320,70 ;nedsl„pp + + + dw 70,140,100,180 + dw 295,200,320,250 + dw 230,210,280,250 + dw 100,270,130,360 + dw 60,320,100,350 + dw 260,450,277,470 + dw 0,450,50,470 + dw -1 + +level2lista label word + dw 70,115,100,140 + dw 295,150,320,200 + dw 245,170,290,200 + dw 60,280,80,320 + dw -1 + + + +;****************************************************************************** +;************************ DEMO MODE LIGHT FLASHING **************************** +;****************************************************************************** + +FLASHLIST LABEL WORD + T1=5 + T2=T1*10 + DW 0,T1*0,T2,T2,42 ;BONUS + DW 0,T1*1,T2,T2,43 + DW 0,T1*2,T2,T2,44 + DW 0,T1*3,T2,T2,45 + DW 0,T1*4,T2,T2,46 + DW 0,T1*5,T2,T2,47 + DW 0,T1*6,T2,T2,48 + DW 0,T1*7,T2,T2,49 + + T2=10 ;BURNIN' + DW 0,0,T2,T2,16 + DW 0,0,T2,T2,18 + DW 0,T2,T2,T2,17 + DW 0,0,T2,T2,19 + DW 0,0,T2,T2,21 + DW 0,T2,T2,T2,20 + + T2=12 ;P I T + DW 0,0,T2,T2,6 + DW 0,0,T2,T2,8 + DW 0,T2,T2,T2,7 + + T2=13 ;G E A R + DW 0,0,T2,T2,22 + DW 0,T2,T2,T2,23 + DW 0,0,T2,T2,24 + DW 0,T2,T2,T2,25 + + T2=10 ;VˇXELL¸DAN + DW 0,0,T2,T2,26 + DW 0,T2,T2,T2,27 + DW 0,0,T2,T2,28 + DW 0,T2,T2,T2,29 + DW 0,0,T2,T2,30 + DW 0,T2,T2,T2,31 + + T2=15 ;TˇNDSTIFT + DW 0,0,T2,T2,55 + + DW -1 + +;****************************************************************************** +;**************************** LIGHT PALETTE DATA ****************************** +;****************************************************************************** + +NOOFLIGHTS=67 + +LON1 DB 253 ;XBALL + DB 3 + DB 77,0,0 + DB 58,0,0 + DB 95,0,0 + +LON2 DB 250 ;HOLDBONUS + DB 3 + DB 77,0,0 + DB 58,0,0 + DB 95,0,0 + +LON3 DB 247 ;SUPER + DB 3 + DB 77,0,0 + DB 58,0,0 + DB 95,0,0 + +LON4 DB 244 ;MB + DB 3 + DB 58,0,0 + DB 77,0,0 + DB 95,0,0 + +LON14 DB 242 ;GET PART 3 + DB 2 + DB 95,77,0 + DB 95,95,52 + +LON6 DB 240 ;P + DB 2 + DB 58,58,58 + DB 95,95,95 +LON7 DB 238 ;I + DB 2 + DB 58,58,58 + DB 95,95,95 +LON8 DB 236 ;T + DB 2 + DB 58,58,58 + DB 95,95,95 +LON9 DB 234 ;GOAL + DB 2 + DB 95,95,95 + DB 58,58,58 + +LON10 DB 232 ;GET PART 5 + DB 2 + DB 95,77,0 + DB 95,95,52 +LON11 DB 230 ;GET PART 1 + DB 2 + DB 95,77,0 + DB 95,95,52 +LON12 DB 228 ;GET PART 4 + DB 2 + DB 95,77,0 + DB 95,95,52 +LON13 DB 226 ;GET PART 2 + DB 2 + DB 95,77,0 + DB 95,95,52 + +LON5 DB 224 ;JUMP + DB 2 + DB 70,70,70 + DB 95,95,95 + +LON15 DB 221 ;JP + DB 3 + DB 77,0,0 + DB 58,0,0 + DB 95,0,0 +LON16 DB 219 ;B + DB 2 + DB 70,70,70 + DB 95,95,95 +LON17 DB 217 ;U + DB 2 + DB 70,70,70 + DB 95,95,95 +LON18 DB 215 ;R + DB 2 + DB 70,70,70 + DB 95,95,95 +LON19 DB 213 ;N + DB 2 + DB 27,64,39 + DB 14,83,72 +LON20 DB 211 ;I + DB 2 + DB 27,64,39 + DB 14,83,72 +LON21 DB 209 ;N' + DB 2 + DB 27,64,39 + DB 14,83,72 +LON22 DB 207 ;G + DB 2 + DB 58,0,0 + DB 95,0,0 +LON23 DB 205 ;E + DB 2 + DB 58,0,0 + DB 95,0,0 +LON24 DB 203 ;A + DB 2 + DB 58,0,0 + DB 95,0,0 +LON25 DB 201 ;R + DB 2 + DB 58,0,0 + DB 95,0,0 +LON26 DB 199 ;VˇXEL 1 + DB 2 + DB 95,89,0 + DB 95,95,52 +LON27 DB 197 ;VˇXEL 2 + DB 2 + DB 95,89,0 + DB 95,95,52 +LON28 DB 195 ;VˇXEL 3 + DB 2 + DB 95,89,0 + DB 95,95,52 +LON29 DB 193 ;VˇXEL 4 + DB 2 + DB 95,89,0 + DB 95,95,52 +LON30 DB 191 ;VˇXEL 5 + DB 2 + DB 95,89,0 + DB 95,95,52 +LON31 DB 189 ;VˇXEL 6 + DB 2 + DB 95,89,0 + DB 95,95,52 + +LON41 DB 188 ;POS 1 + DB 1 + DB 95,95,52 +LON40 DB 187 ;POS 2 + DB 1 + DB 95,95,52 + +LON39 DB 186 ;POS 3 + DB 1 + DB 95,89,0 +LON38 DB 185 ;POS 4 + DB 1 + DB 95,89,0 + +LON37 DB 184 ;POS 5 + DB 1 + DB 95,77,0 +LON36 DB 183 ;POS 6 + DB 1 + DB 95,77,0 + +LON35 DB 182 ;POS 7 + DB 1 + DB 58,58,83 +LON34 DB 181 ;POS 8 + DB 1 + DB 58,58,83 + +LON33 DB 180 ;POS 9 + DB 1 + DB 70,39,64 +LON32 DB 179 ;POS 10 + DB 1 + DB 70,39,64 +LON42 DB 177 ;BONUS X2 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON43 DB 175 ;BONUS X3 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON44 DB 173 ;BONUS X4 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON45 DB 171 ;BONUS X5 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON46 DB 169 ;BONUS X6 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON47 DB 167 ;BONUS X7 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON48 DB 165 ;BONUS X8 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON49 DB 163 ;BONUS X9 + DB 2 + DB 58,0,0 + DB 95,0,0 +LON53 DB 162 ;MOTOR + DB 1 + DB 95,0,0 +LON50 DB 160 ;KJOLAR + DB 2 + DB 58,0,0 + DB 95,0,0 +LON51 DB 158 ;FJˇDRING + DB 2 + DB 58,0,0 + DB 95,0,0 +LON54 DB 156 ;RATT + DB 2 + DB 58,0,0 + DB 95,0,0 +LON52 DB 154 ;SPOJLER VINGE + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON55 DB 153 ;TˇNDSTIFT + DB 1 + DB 95,0,0 + +LON56 DB 152-1 ;speedometer + DB 2 + DB 58,58,58 + DB 95,95,95 +LON57 DB 150-1 ;speedometer + DB 2 + DB 58,58,58 + DB 95,95,95 +LON58 DB 148-1 ;speedometer + DB 2 + DB 58,58,58 + DB 95,95,95 +LON59 DB 146-1 ;speedometer + DB 2 + DB 58,58,58 + DB 95,95,95 +LON60 DB 144-1 ;speedometer + DB 2 + DB 58,58,58 + DB 95,95,95 +LON61 DB 142-1 ;speedometer + DB 2 + DB 58,58,58 + DB 95,95,95 + +LON62 DB 140-1 ;speedometer + DB 2 + DB 95,77,0 + DB 95,95,52 + +LON63 DB 138-1 ;speedometer + DB 2 + DB 95,77,0 + DB 95,95,52 + + +LON64 DB 136-1 ;speedometer + DB 2 + DB 83,58,0 + DB 95,77,0 + +LON65 DB 134-1 ;speedometer + DB 2 + DB 83,58,0 + DB 95,77,0 + + +LON66 DB 132-1 ;speedometer + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON67 DB 130-1 ;speedometer + DB 2 + DB 58,0,0 + DB 95,0,0 + +MATRIXON DB matrixlo ;(MATRIXCOL LOW BYTE) + DB 1 + DB 95,70,27 + +LONEND DB 0 + +LONINDEX LABEL WORD + DW OFFSET LON1 + DW OFFSET LON2 + DW OFFSET LON3 + DW OFFSET LON4 + DW OFFSET LON5 + DW OFFSET LON6 + DW OFFSET LON7 + DW OFFSET LON8 + DW OFFSET LON9 + DW OFFSET LON10 + DW OFFSET LON11 + DW OFFSET LON12 + DW OFFSET LON13 + DW OFFSET LON14 + DW OFFSET LON15 + DW OFFSET LON16 + DW OFFSET LON17 + DW OFFSET LON18 + DW OFFSET LON19 + DW OFFSET LON20 + DW OFFSET LON21 + DW OFFSET LON22 + DW OFFSET LON23 + DW OFFSET LON24 + DW OFFSET LON25 + DW OFFSET LON26 + DW OFFSET LON27 + DW OFFSET LON28 + DW OFFSET LON29 + DW OFFSET LON30 + DW OFFSET LON31 + DW OFFSET LON32 + DW OFFSET LON33 + DW OFFSET LON34 + DW OFFSET LON35 + DW OFFSET LON36 + DW OFFSET LON37 + DW OFFSET LON38 + DW OFFSET LON39 + DW OFFSET LON40 + DW OFFSET LON41 + DW OFFSET LON42 + DW OFFSET LON43 + DW OFFSET LON44 + DW OFFSET LON45 + DW OFFSET LON46 + DW OFFSET LON47 + DW OFFSET LON48 + DW OFFSET LON49 + DW OFFSET LON50 + DW OFFSET LON51 + DW OFFSET LON52 + DW OFFSET LON53 + DW OFFSET LON54 + DW OFFSET LON55 + DW OFFSET LON56 + DW OFFSET LON57 + DW OFFSET LON58 + DW OFFSET LON59 + DW OFFSET LON60 + DW OFFSET LON61 + DW OFFSET LON62 + DW OFFSET LON63 + DW OFFSET LON64 + DW OFFSET LON65 + DW OFFSET LON66 + DW OFFSET LON67 + +MATRIXOFF DB matrixlo + DB 3 + DB 3 DUP(33*64/100) + +;****************************************************************************** +;************************* GATES & BYGLARS DATA AREOR ************************* +;****************************************************************************** +;***************** +SNACKX=263-7 ;? ;CP! CP-METOD ATT H¸LLA FAST BOLLEN! +SNACKY=48-7 ;? +SNACKXS=-420*6*TT/NN ;? +SNACKYS=160*6*TT/NN ;? +;***************** +b_flashin db ? +u_flashin db ? +r_flashin db ? +n_flashin db ? +i_flashin db ? +nn_flashin db ? + +flash7down dw ? +flash6down dw ? +flash5down dw ? +flash_pit_down dw ? +jackdown dw ? +mb_pa_lager db ? +mb_gjorda db ? +pos_light dw ? +pos_flash dw ? +loop_h dw ? +loop_l dw ? +loop_h_ dw ? +loop_l_ dw ? +jump_ dw ? +gearet dw ? +gear_down dw ? +speeden dw ? +PartList dw part1,11 + dw part2,13 + dw part3,14 ;cp!! 5?? + dw part4,12 + dw part5,10 +CarParten dw ? +NextOffRoad dw 40 ;? +NextJump dw 30 ;? +MilesCount equ cyclonecounter ;dw ? +OffRoadMode db ? +TurboMode db ? +SnackDisabled db ? +HOLDBONUSFLAG DB ? +holdbonuscount db ? +NISSAN DB 0 +PARTYFLASH DB FALSE +MUSICOK DB ? + +;****************************************************************************** +;****************************** DOT MATRIX ************************************ +;****************************************************************************** +clearit macro +assume ds:data2 + dw _CLEAR1 +assume ds:data +endm + +;********************************************************* +;******* OBS!!! KOM IH¸G ATT ASSUMERA ANIMATIONER TILL DATA2 OCH +;******* SCROLLAR TILL DATA !!!!! +ASSUME DS:DATA2 + +BEATENSCROLL DB 21 DUP (1),'YOU HAVE BEATEN THE HIGHSCORE',21 DUP(1),255 +EXTRABALLTEXT DB 'EXTRA BALL',0 + +Beaten_bh_TS LABEL WORD ;I BALL LOST SEKVENSEN + DW _WAIT,1 + DW _DOBEATEN,? + DW _WAIT,1 + CLEARIT + DW _JINGLE,S_BEATEN + DW _LASTJINGLE,EMPTYJINGLE + DW _SCROLL,BEATENSCROLL + DW _FLASHON,10 + DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 + DW _SETDECCOR,90 + DW _WAITJINGLE2,? + CLEARIT + DW _FLASHOFF,? + DW _JMP,No_Bonus2TS + +BeatenTS LABEL WORD ;I SPELET + DW _WAIT,1 + DW _DOBEATEN,? + DW _WAIT,1 + CLEARIT + DW _JINGLE,S_BEATEN + DW _LASTJINGLE,3 + DW _SCROLL,BEATENSCROLL + DW _FLASHON,10 + DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 + DW _WAIT,10*2*10 + CLEARIT + DW _FLASHOFF,? + DW 0 + + +BCD50000000 DB 0,0,0, 0,5,0, 0,0,0, 0,0,0 +supertext db 'SUPER',0 + +SuperJackTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,SUPERTEXT,SW*4/4+7*4 + DW _WAIT,100 + DW _FLASHOFF,? + CLEARIT + ASSUME DS:DATA2 + DW _ANIMATION,_JACKPOT + CLEARIT + DW _FLASHON,1 + DW _PRINT13_NUMBER_CENT,BCD50000000,2*2*SW/4+TOTCENT + DW _WAIT,100 + CLEARIT + DW _FLASHOFF,? + dw _return_of_the_evil_supermode,? + dw 0 + +SuperJack2TS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,SUPERTEXT,SW*4/4+7*4 + DW _WAIT,100 + DW _FLASHOFF,? + CLEARIT + ASSUME DS:DATA2 + DW _ANIMATION,_JACKPOT + CLEARIT + DW _FLASHON,1 + DW _PRINT13_NUMBER_CENT,BCD50000000,2*2*SW/4+TOTCENT + DW _WAIT,100 + CLEARIT + DW _FLASHOFF,? + dw _turnonturbo + dw 0 + +JackPotTS label word + dw _CLEAR4 + dw _animation,_jackpot + dw _CLEAR4 + dw _return_of_the_evil_supermode,? + dw 0 + +OverTakeTS label word + dw _CLEAR4 + dw _animation,_overtake + dw _CLEAR4 + dw 0 + +millionTS label word + dw _CLEAR4 + dw _animation,_million + dw _CLEAR4 + dw 0 + +xballTS label word + dw _CLEAR4 + dw _animation,_xballa + DW _WAIT,30 ;CPW! + dw _CLEAR3 + dw 0 +GEARTS label word + dw _CLEAR4 + dw _animation,_gear + dw _CLEAR4 + dw 0 + + +m2TS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m2 + dw _CLEAR4 + dw 0 +m3TS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m3 + dw _CLEAR4 + dw 0 +m4TS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m4 + dw _CLEAR4 + dw 0 +m5tS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m5 + dw _CLEAR4 + dw 0 +m6TS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m6 + dw _CLEAR4 + dw 0 +m7TS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m7 + dw _CLEAR4 + dw 0 +m8TS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m8 + dw _CLEAR4 + dw 0 +m9TS label word + dw _CLEAR4 + dw _animation,_multi + dw _animation,_m9 + dw _CLEAR4 + dw 0 + + +;***************************************** +party_onTS LABEL BYTE ;Turn on party on . . . + CLEARIT + DW _FLASHON,PARTY_ON_SPEED + DW _PARTYONN,1 + DW _PRINT13,PARTY_ON_TEXT,SW*4/4 ;+16*3/4 ;CP! + DW _PARTYON,1 + DW 0 + +party_offTS LABEL WORD ;Turn it off + CLEARIT + DW _PARTYOFF,1 + DW _FLASHOFF,1 + DW 0 + +;***************************************** + ASSUME DS:DATA2 +clearTS dw _CLEAR4 + dw 0 + +tomTS dw _CLEAR4 + dw _wait,32767 + dw 0 + +assume ds:data + +OffRoadTS LABEL WORD + clearIT + dw _scroll,go_for_some_text + clearIT + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + dw _countdown,2,5,OR_total ;(the final?) + clearIT +OffRoad_endingTS Label Word + DW _JBCDZ,OR_TOTAL,no_orTS + dw _rullgardin_upp,or_total_text,1 + + dw _wait,60 ;CPW! + + clearIT + DW _FLASHON,1 + DW _PRINT13_NUMBER,OR_total,SW*4/4+16*2/4 ;CP! RUTCENT + dw _wait,80 ;CPW! + DW _FLASHOFF,1 + clearIT + dw _TurnOffSpecialMode,? + dw 0 +no_orTS DW _PRINT13,NO_or_TEXT,SW*4/4 + dw _wait,80 ;CPW! + CLEARIT + dw _TurnOffSpecialMode,? + DW 0 +go_for_some_text db 21 dup (' '),'GO FOR SOME OFFROAD',21 dup (' '),255 +OR_total_Text db ' OFFROAD TOTAL ',0 + ASSUME DS:DATA +no_or_text db ' NO BONUS',0 +or_total db ?,?,?,?,?,?,?,?,?,?,?,? + +;********************************************************** +BACK_2_TURBOTS LABEL WORD + CLEARIT + DW _COUNTDOWNCONTINUE,?,?,TM_TOTAL + DW _JMP,AFTER_TMCDTS + DW 0 + +TurboTS LABEL WORD + clearIT + dw _rullgardin_upp,go_for_NISSE_text,1 + dw _wait,40 + ClearIT + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + dw _countdown,2,5,tm_total ;(the final?) +AFTER_TMCDTS LABEL WORD + clearIT +TurboMode_endingTS Label Word + DW _JBCDZ,TM_TOTAL,no_tmTS + dw _rullgardin_upp,tm_total_text,1 + + dw _wait,60 ;CPW! + + clearIT + DW _FLASHON,1 + DW _PRINT13_NUMBER,tm_total,SW*4/4+16*2/4 ;CP! RUTCENT + dw _wait,80 ;CPW! + DW _FLASHOFF,1 + clearIT + dw _TurnOffSpecialMode,? + dw 0 +no_tmTS DW _PRINT13,NO_tm_TEXT,SW*4/4 + dw _wait,80 ;CPW! + CLEARIT + dw _TurnOffSpecialMode,? + DW 0 + +go_for_nisse_text db ' TURBO MODE ',0 +tm_total_Text db ' TURBO MODE TOTAL ',0 +no_tm_text db ' NO BONUS',0 +tm_total db ?,?,?,?,?,?,?,?,?,?,?,? + +;*********************** NYA BALL LOST ******************* + +ASSUME DS:DATA +show_cyclones_text db ' MILES X ',0 +show_or_text db ' OFFROAD TOTAL',0 +show_mega_text db ' TURBOMODE TOTAL',0 + + + +ball_lostTS LABEL WORD + CLEARIT + + DW _PRINT13,GETTING_SICK_TEXT,SW*2/4*2 + DW _JINGLE,S_LOSTBALL + DW _LASTJINGLE,55 + DW _SETDECCOR,70 + DW _WAITJINGLE2,? + DW _JINGLE,S_Empty + CLEARIT + + DW _JBCDZ,BONUSSIFFRORNA,no_bonusTS + DW _PRINT5,show_bonus_TEXT,SW*1*2/4+16*7/4 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + + DW _JBONUSX1,NoBonusXTS + CLEARIT ;CP! CLEARIT ˇR ON™DIGT BRUTAL! + DW _BONUS_X_CALCS,? + DW _PRINT5,BONUS_X_TEXT,SW*1*2/4+16*7/4-4*2 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 +NoBonusXTS LABEL WORD + +no_bonusTS LABEL WORD + DW _JBCDZ,CYCLONECOUNTERBCD,no_cyclonesTS + CLEARIT + DW _CALC_CYCLO ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5_NUMBER,CYCLONECOUNTERBCD,SW*1*2/4-16*9/4 + DW _PRINT5_number,HUNDRATUSEN,SW*1*2/4+13*8/4 + DW _PRINT5,show_CYCLONES_TEXT,SW*1*2/4-16*1/4 + DW _PRINT8_NUMBER_CENT,CYCLONESCOREBCD,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT +no_cyclonesTS LABEL WORD + DW _JBCDZ,OR_TOTAL,no_happy_stewartTS + CLEARIT + DW _CALC_HAPPY ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5,show_or_TEXT,SW*1*2/4+16/4/2 + DW _PRINT8_NUMBER_CENT,or_TOTAL,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT + +no_happy_stewartTS LABEL WORD + DW _JBCDZ,tm_TOTAL,no_MEGA_LAUGHTS + CLEARIT + DW _CALC_MEGA ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5,show_MEGA_TEXT,SW*1*2/4+16/4/2 + DW _PRINT8_NUMBER_CENT,tm_TOTAL,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT + +no_MEGA_LAUGHTS LABEL WORD + DW _JBCDZ,BONUSSIFFRORNA,no_bonus2TS + DW _PRINT5,show_totalbonus_TEXT,SW*1*2/4+16*4/4 + + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + + DW _WAIT,60 ;CPW! + CLEARIT + DW _PRINT8_NUMBER,BONUSSIFFRORNA,7*2*SW/4-16*4/4 + DW _FLORPA + DW _WAIT,25 ;CPW! + dw _beaten_matrix +no_bonus2TS LABEL WORD + DW _KOLLA_XXBALL + dw _waitifmulti,2*60 ;cpgnu? (visa poeng lite lengre) + DW _MATRIXLGT,0 + clearit + + DW _CHANGE_PLAYER + CLEARIT + dw _wait,32000 + DW 0 +SORRYNOBONUSTEXT DB ' SORRY ',94,' NO BONUS ',0 + +shoot_again_onTS LABEL BYTE ;Turn on shoot again . . . + CLEARIT + DW _FLASHON,SHOOT_AGAIN_SPEED + DW _SHOOT_AGAIN_ONN,1 + DW _PRINT13,SHOOT_AGAIN_TEXT,SW*4/4 ;+16*3/4 ;CP! + DW _NEW_BALL2 + DW _PARTYON,1 ;CP? + DW 0 + + +out_of_ballsTS LABEL WORD ;ˇr Stewarts fortfarande borta kanske? + CLEARIT + dw _matrixlgt,1 + dw _knacket,? + DW _SETDECCOR,75 + DW _WAITJINGLE2,? + +check_xxballTS LABEL WORD + DW _check_xxballs ;utf”r ev xxballs, hoppar sedan till after_xxballs! + +after_xxballTS LABEL WORD + + clearit + dw _check_high,? + DW _MATRIXLGT,0 + DW _2_DEMO_MODE + dw _wait,20000 + +AfterDemoModeTS Label Word + DW _MATRIXLGT,0 + dw _wait,20 + dw _setloop,2,? + DW _INIT_SCORE,? + DW _JMP,UrbanOverTS + +Once_MoreTS LABEL WORD + DW _INIT_SCORE,? + +GameOverTS LABEL WORD + SHOWTIME=80 + DW _WAIT,SHOWTIME + +UrbanOverTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,GAME_OVER_TEXT,SW*2*2/4 + DW _WAIT,30 + DW _FLASHOFF,? + CLEARIT + DW _SHOW_SCORE,OFFSET GAMEOVERTS + dw _loop_,2,offset once_morets + DW _WAIT,SHOWTIME + CLEARIT + DW _WAIT,20 + DW _JMP,ShowHighsTS + DW 0 +GAME_OVER_TEXT DB ' GAME OVER',0 +;TUBORG! + +;********************** SLUT P¸ BALL LOST ******************* +ASSUME DS:DATA + +showithi macro + DW _PRINT13,ALLTIME_TEXT,SW*2/4*2+16/4/2 + dw _wait,60 + + DW _CLEAR2 + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_1,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*0),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*0+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + DW _CLEAR3 + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_2,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*1),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*1+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + DW _CLEAR2 + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_3,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*2),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*2+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + DW _CLEAR3 + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_4,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*3),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*3+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + DW _CLEAR2 + DW _FLASHOFF,1 +endm + + +ShowInfoTS LABEL WORD + CLEARIT + clearit + DW _rullgardin_ned,PLAY_TEXT,1 + dw _wait,40*3 + DW _MATRIXLGT,0 + CLEARIT + DW _PRINT13,JACK_TEXT,SW*4/4 + dw _print13_number,jackvalue,SW*4/4+8*16/4 + DW _FLASHON,1 + dw _wait,40*3 + DW _FLASHOFF,1 + CLEARIT + dw _rullgardin_upp,BONUS_TEXT,1 + dw _wait,40*3 + CLEARIT + showithi + CLEARIT + + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + + DW 0 + +ShowHighsTS LABEL WORD +;TEXTER + CLEARIT + DW _FLASHON,1 + DW _PRINT13,PF_TEXT,SW*2/4*2-2 + dw _wait,120 + DW _CLEAR2 + DW _FLASHOFF,1 + dw _rullgardin_upp,TRS_TEXT,1 + dw _wait,90 + CLEARIT + DW _FLASHON,1 + DW _PRINT13,PL_TEXT,SW*2/4*2 + dw _wait,90 + DW _CLEAR3 + DW _FLASHOFF,1 +;SCROLLA + DW _SCROLL,SCROLL_TEXT1 +;VISA HIGHSCORE + showithi +;DI UPP ¸ NED! + CLEARIT +; dw _rullgardin_NED,DIGITAL_TEXT,16 +; dw _rullgardin_upp,DIGITAL_TEXT,-13 +; dw _wait,40 +; CLEARIT + dw _rullgardin_NED,fld_TEXT,16 + dw _rullgardin_upp,fld_TEXT,-13 + dw _wait,40 +;SCROLLA SISTA + DW _SCROLL,SCROLL_TEXT2 + CLEARIT + DW _JMP,ShowHighsTS + dw 0 + +ShowPlayersTS label word + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + dw 0 + +first_no_of_playersTS LABEL WORD + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + DW _PRINT13,NOLLA,SW*2*2/4+16*19/4 +no_of_playersTS label word + dw _print5,no_of_players_text,sw*2*10/4+16*1/4 + DW _WAIT_GAME_ON,? + dw 0 +mileswait=40 +MilesTS label word + clearit +; DW _SCROLL,miles_text + dw _rullgardin_upp,miles_text,1 + dw _wait,mileswait-16 + DW _CLEAR2 +; clearit + dw 0 +PedalTS label word + clearit + DW _SCROLL,Pedal_text + dw 0 +Part1TS label word + clearit + DW _SCROLL,PART1_text + dw 0 +Part2TS label word + clearit + DW _SCROLL,PART2_text + dw 0 +Part3TS label word + clearit + DW _SCROLL,PART3_text + dw 0 +Part4TS label word + clearit + DW _SCROLL,PART4_text + dw 0 +Part5TS label word + clearit + DW _SCROLL,PART5_text + dw 0 + +Jump_At_TS label word + clearit +; DW _SCROLL,miles_text + dw _rullgardin_upp,miles_text,1 + dw _wait,mileswait + clearit + dw _flashon,10 + dw _print11,jump_at_text,sw*2*3/4+4 + DW _WAIT,160 + dw _flashoff,1 + clearit + dw 0 + +offroad_At_10_TS label word + clearit +; DW _SCROLL,miles_text + dw _rullgardin_upp,miles_text,1 + dw _wait,mileswait + clearit + dw _flashon,10 + dw _print11,or_at_10_text,sw*2*3/4+4 + DW _WAIT,160 + dw _flashoff,1 + clearit + dw 0 + +Xball_At_20_TS label word + clearit + dw _rullgardin_upp,miles_text,1 + dw _wait,mileswait + clearit +; DW _SCROLL,miles_text + dw _flashon,10 + dw _print11,xb_at_20_text,sw*2*3/4+4 + DW _WAIT,160 + dw _flashoff,1 + clearit + dw 0 + +OffRoad_At_TS label word + clearit +; DW _SCROLL,miles_text + dw _rullgardin_upp,miles_text,1 + dw _wait,mileswait + clearit + dw _flashon,10 + dw _print11,OffRoad_at_text,sw*2*3/4+4 + DW _WAIT,160 + dw _flashoff,1 + clearit + dw 0 + +LitJumpTS label word + clearit + dw _print11,lit_jump_text,sw*2*3/4+4 + DW _WAIT,160 + DW _CLEAR2 + dw 0 +LitXBallTS label word + clearit + dw _print11,lit_XBALL_text,sw*2*3/4 + DW _WAIT,160 + clearit + dw 0 +BonusHeldTS label word + clearit + DW _PRINT13,BonusHeld_Text,SW*2/4*2 + DW _WAIT,90 + DW _CLEAR2 + dw 0 + +jump_at_text db 'XXX LITES THE JUMP',0 +offroad_at_text db 'XXX LITES OFF ROAD',0 +xb_at_20_text db '7'+2,'7 LITES EXTRA BALL',0 +or_at_10_text db ' ','7'+1,'7 LITES OFF ROAD',0 +BonusHeld_text db ' B O N U S H E L D ',0 +lit_jump_text db ' GO FOR THE JUMP ',0 +LIT_XBALL_TEXT DB ' GET THE EXTRA BALL ',0 +;miles_text db 21 dup (' '),'xXXX MILES',21 dup (' '),255 +miles_text db ' XXX MILES ',0 +pedal_text db 21 dup (' '),'PRESS THE PEDAL TO THE METAL',21 dup (' '),255 +PART1_text db 21 dup (' '),'YOU HAVE THE SPOILER KIT',21 dup (' '),255 +PART2_text db 21 dup (' '),'YOU HAVE THE TURBO CHARGER',21 dup (' '),255 +PART3_text db 21 dup (' '),'YOU HAVE THE HI',94,'SPEED WING',21 dup (' '),255 +PART4_text db 21 dup (' '),'YOU HAVE THE SPORTS BUMPERS',21 dup (' '),255 +PART5_text db 21 dup (' '),'YOU HAVE THE POWER STEERING',21 dup (' '),255 +jmp_t=3 + +JumpTS label word + clearit + DW _PRINT13,JUMP1,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP2,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP3,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP4,SW*2/4*2 + DW _WAIT,JMP_T*2 + DW _PRINT13,JUMP5,SW*2/4*2 + DW _WAIT,JMP_T*2 + DW _PRINT13,JUMP6,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP7,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP8,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP9,SW*2/4*2 + DW _WAIT,JMP_T*2 + DW _PRINT13,JUMP10,SW*2/4*2 + DW _WAIT,JMP_T*2 + DW _PRINT13,JUMP11,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP12,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP13,SW*2/4*2 + DW _WAIT,JMP_T + DW _PRINT13,JUMP14,SW*2/4*2 + DW _WAIT,JMP_T + DW _FLASHON,15 + dw _wait,15*3-1 + dw _flashoff,? + + DW _clear3 + DW 0 + +JUMP1 DB ' J ',0 +JUMP2 DB ' U ',0 +JUMP3 DB ' M ',0 +JUMP4 DB ' P ',0 +JUMP5 DB ' ^ ',0 +JUMP6 DB ' J ',0 +JUMP7 DB ' U ',0 +JUMP8 DB ' M ',0 +JUMP9 DB ' P ',0 +JUMP10 DB ' ^ ',0 +JUMP11 DB ' J ',0 +JUMP12 DB ' U ',0 +JUMP13 DB ' M ',0 +JUMP14 DB ' P',0 + +tiltTS LABEL WORD + CLEARIT + dw _lastjingle,55 + DW _PRINT13,TILT_TEXT,sw*2/4*2+16*0/4 + DW _WAIT,32767 + DW 0 +TILT_TEXT DB ' TILT TILT TILT',0 +last_text db ' ',0 +flashlast db ' ',0 +slutsiffra db '0',0 +startext db '*',0 +last_pos dw 0 + +if demover +MINUTE5TS LABEL WORD + CLEARIT + dw _scroll,MINUTE5TEXT + DW _FLASHON,1 + dw _print13_number,offset SIFFRORNA,SW*4/4+16*2/4 + DW _WAIT,100 + DW _FLASHOFF,1 + dw _scroll,MINUTE5TEXTB + DW _FADE,256 + DW _WAIT,100 + DW QUIT,? + dw 0 +MINUTE5TEXT DB 21 DUP (1) + DB "WELL DONE PLAYER 1 - YOU HAVE ACHEIVED THE MEGA SCORE OF" + DB 21 DUP (1),255 +MINUTE5TEXTB DB 21 DUP (1) + DB "LOOK OUT FOR PINBALL FANTASIES PC - FULL GAME AVAILABLE SOON" + DB 21 DUP (1),255 +endif +;*********************************************************** +GETTING_SICK_TEXT DB 'SLIDING OFF THE ROAD',0 + +PARTY_ON_TEXT DB ' PARTY ON PLAYER ',0 +ZEROQ DB '0'+7,0 +SHOOT_AGAIN_TEXT DB 'SHOOT AGAIN PLAYER ',0 + +NO_OF_PLAYERS_TEXT DB 'PLAYERS X',0 +NOLLA DB '7',0 +show_bonus_TEXT DB 'BONUS',0 +show_totalbonus_TEXT DB 'TOTAL*BONUS',0 +BONUS_X_TEXT DB 'BONUS*X*?',0 + + +fld_TEXT DB ' FRONTLINE DESIGN',0 + +PF_TEXT DB ' PINBALL FANTASIES',0 +TRS_TEXT DB ' THE REAL SIMULATOR',0 +PL_TEXT DB ' SPEED DEVILS',0 +SCROLL_TEXT1 DB 21 DUP (' '),'ADD PLAYERS WITH F1 TO F8 OR ENTER',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' '),255 +ALLTIME_TEXT DB 'ALL TIME HIGHSCORES',0 +SCROLL_TEXT2 DB 21 DUP (' '),'FLIP WITH LEFT AND RIGHT ALT SHIFT OR CTRL KEYS',21 DUP (' ') + DB 'PUSH TABLE WITH SPACE',21 DUP (' ') + DB 'CONTROL SPRING WITH DOWN ARROW KEY OR MOUSE',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' ') + DB 'P PAUSES GAME AND M TOGGLES INGAME MUSIC ON AND OFF',21 DUP (' ') + DB 'ESC EXITS AND SAVES NEW HIGHSCORES',21 DUP (' '),255 +DIGITAL_TEXT DB ' DIGITAL ILLUSIONS',0 + +JACK_TEXT DB 'JACKPOT IS',0 +BONUS_TEXT DB ' YOU HAVE XX BONUS',0 ;10 +PLAY_TEXT DB ' PLAYER 8 BALL 8 ',0 ;8,18 + +INFO_TEXT DB 21 DUP (' ') + db '' + DB 21 DUP (1),255 + +playerstext db 'PLAYER 8',0 ;8=1 (L™S EKVATIONEN!) +BALLSTEXT DB 'BALL 8',0 ;8=1 + +hajjskar db 'HIGHSCORE PL X ',92,' ',93,0 +stjaernor db '********************',0 + +;****************************************************************************** + +DATA ENDS +;*************************** Animations ************************************** +DATA2 SEGMENT PARA PUBLIC 'DATA' +;*********************ANIMATIONS MALL************************* +comment\ + dw 1*4 ;loop pos + dw 15 ;number of loops + dw 5*4-4 ;length of anim (5 frames * 4 bytes!) +_happy dw happy_1,1;<---start! + dw happy_2,2;<-, loop! + dw happy_3,2; I + dw happy_4,2; I + dw happy_5,2;__I +\ +multispeed=3 + dw 1 + dw 4*8 +_multi dw a_02_00,multispeed + dw a_02_01,multispeed + dw a_02_02,multispeed + dw a_02_03,multispeed + dw a_02_04,multispeed + dw a_02_05,multispeed + dw a_02_06,multispeed + dw a_02_07,50 + +multispeed=3 + dw 1 + dw 4*7 +_m2 dw a_03_00,multispeed + dw a_03_01,multispeed + dw a_03_02,multispeed + dw a_03_03,multispeed + dw a_03_04,multispeed + dw a_03_05,multispeed + dw a_03_06,50 +multispeed=3 + dw 1 + dw 4*7 +_m3 dw a_04_00,multispeed + dw a_04_01,multispeed + dw a_04_02,multispeed + dw a_04_03,multispeed + dw a_04_04,multispeed + dw a_04_05,multispeed + dw a_04_06,50 +multispeed=3 + dw 1 + dw 4*7 +_m4 dw a_05_00,multispeed + dw a_05_01,multispeed + dw a_05_02,multispeed + dw a_05_03,multispeed + dw a_05_04,multispeed + dw a_05_05,multispeed + dw a_05_06,50 +multispeed=3 + dw 1 + dw 4*7 +_m5 dw a_06_00,multispeed + dw a_06_01,multispeed + dw a_06_02,multispeed + dw a_06_03,multispeed + dw a_06_04,multispeed + dw a_06_05,multispeed + dw a_06_06,50 +multispeed=3 + dw 1 + dw 4*7 +_m6 dw a_07_00,multispeed + dw a_07_01,multispeed + dw a_07_02,multispeed + dw a_07_03,multispeed + dw a_07_04,multispeed + dw a_07_05,multispeed + dw a_07_06,50 +multispeed=3 + dw 1 + dw 4*7 +_m7 dw a_08_00,multispeed + dw a_08_01,multispeed + dw a_08_02,multispeed + dw a_08_03,multispeed + dw a_08_04,multispeed + dw a_08_05,multispeed + dw a_08_06,50 +multispeed=3 + dw 1 + dw 4*7 +_m8 dw a_09_00,multispeed + dw a_09_01,multispeed + dw a_09_02,multispeed + dw a_09_03,multispeed + dw a_09_04,multispeed + dw a_09_05,multispeed + dw a_09_06,50 +multispeed=3 + dw 1 + dw 4*7 +_m9 dw a_10_00,multispeed + dw a_10_01,multispeed + dw a_10_02,multispeed + dw a_10_03,multispeed + dw a_10_04,multispeed + dw a_10_05,multispeed + dw a_10_06,50 + +millionspeed=2 + dw 1 + dw 4*16 +_million dw a_01_00,millionspeed + dw a_01_01,millionspeed + dw a_01_02,millionspeed + dw a_01_03,millionspeed + dw a_01_04,millionspeed + dw a_01_05,millionspeed + dw a_01_06,millionspeed + dw a_01_07,millionspeed + dw a_01_08,millionspeed + dw a_01_09,millionspeed + dw a_01_10,millionspeed + dw a_01_11,millionspeed + dw a_01_12,millionspeed + dw a_01_13,millionspeed + dw a_01_14,millionspeed + dw a_01_15,50 + +overtakespeed=3 + + dw 23*4 ;loop pos + dw 4 ;number of loops + dw 33*4-4 ;length of anim +_overtake dw a_15_00,overtakespeed + dw a_15_01,overtakespeed + dw a_15_02,overtakespeed + dw a_15_03,overtakespeed + dw a_15_04,overtakespeed + dw a_15_05,overtakespeed + dw a_15_06,overtakespeed + dw a_15_07,overtakespeed + dw a_15_08,overtakespeed + dw a_15_09,overtakespeed + dw a_15_10,overtakespeed + dw a_15_11,overtakespeed + dw a_15_12,overtakespeed + dw a_15_13,overtakespeed + dw a_15_14,overtakespeed + dw a_15_15,overtakespeed + dw a_15_16,overtakespeed + dw a_15_17,overtakespeed + dw a_15_18,overtakespeed + dw a_15_19,overtakespeed + dw a_15_20,overtakespeed + dw a_15_21,overtakespeed + dw a_15_22,overtakespeed + dw a_15_23,overtakespeed + dw a_15_24,overtakespeed + dw a_15_25,overtakespeed + dw a_15_26,overtakespeed + dw a_15_27,overtakespeed + dw a_15_28,overtakespeed + dw a_15_29,overtakespeed + dw a_15_30,overtakespeed + dw a_15_31,overtakespeed + dw a_15_32,overtakespeed + + +xballspeed=3 + + dw 1 ;loop pos (1=none) +; dw 4 ;number of loops (Only if loop enabled) + dw 27*4 ;length of anim (-1*4 if loop enabled) +_xballa dw a_12_00,xballspeed + dw a_12_01,xballspeed + dw a_12_02,xballspeed + dw a_12_03,xballspeed + dw a_12_04,xballspeed + dw a_12_05,xballspeed + dw a_12_06,xballspeed + dw a_12_07,xballspeed + dw a_12_08,xballspeed + dw a_12_09,xballspeed + dw a_12_10,xballspeed + dw a_12_11,xballspeed + dw a_12_12,xballspeed + dw a_12_13,xballspeed + dw a_12_14,xballspeed + dw a_12_15,xballspeed + dw a_12_16,xballspeed + dw a_12_17,xballspeed + dw a_12_18,xballspeed + dw a_12_19,xballspeed + dw a_12_20,xballspeed + dw a_12_21,xballspeed + dw a_12_22,xballspeed + dw a_12_23,xballspeed + dw a_12_24,xballspeed + dw a_12_25,xballspeed + dw a_12_26,50 + + +jackpotspeed=3 + + dw 1 ;loop pos (1=none) +; dw 4 ;number of loops (Only if loop enabled) + dw 26*4 ;length of anim (-1*4 if loop enabled) +_jackpot dw a_11_00,jackpotspeed + dw a_11_01,jackpotspeed + dw a_11_02,jackpotspeed + dw a_11_03,jackpotspeed + dw a_11_04,jackpotspeed + dw a_11_05,jackpotspeed + dw a_11_06,jackpotspeed + dw a_11_07,jackpotspeed + dw a_11_08,jackpotspeed + dw a_11_09,jackpotspeed + dw a_11_10,jackpotspeed + dw a_11_11,jackpotspeed + dw a_11_12,jackpotspeed + dw a_11_13,jackpotspeed + dw a_11_14,jackpotspeed + dw a_11_15,jackpotspeed + dw a_11_16,jackpotspeed + dw a_11_17,jackpotspeed + dw a_11_18,jackpotspeed + dw a_11_19,jackpotspeed + dw a_11_20,jackpotspeed + dw a_11_21,jackpotspeed + dw a_11_22,jackpotspeed + dw a_11_23,jackpotspeed + dw a_11_24,jackpotspeed + dw a_11_25,50 + +gearspeeds=3 + + dw 0*4 ;loop pos (1=none) + dw 4 ;number of loops (Only if loop enabled) + dw 6*4-4 ;length of anim (-1*4 if loop enabled) +_gear dw a_14_00,gearspeeds + dw a_14_01,gearspeeds + dw a_14_02,gearspeeds + dw a_14_03,gearspeeds + dw a_14_04,gearspeeds + dw a_14_05,gearspeeds + +;**************************************************************** +extrn a_01_00,a_01_01,a_01_02 ,a_01_03 ,a_01_04 ,a_01_05 ,a_01_06 ,a_01_07 ,a_01_08 ,a_01_09 ,a_01_10 ,a_01_11 ,a_01_12 ,a_01_13 ,a_01_14 ,a_01_15 +extrn a_02_00,a_02_01,a_02_02 ,a_02_03 ,a_02_04 ,a_02_05 ,a_02_06 ,a_02_07 +extrn a_03_00,a_03_01,a_03_02 ,a_03_03 ,a_03_04 ,a_03_05 ,a_03_06 +extrn a_04_00,a_04_01,a_04_02 ,a_04_03 ,a_04_04 ,a_04_05 ,a_04_06 +extrn a_05_00,a_05_01,a_05_02 ,a_05_03 ,a_05_04 ,a_05_05 ,a_05_06 +extrn a_06_00,a_06_01,a_06_02 ,a_06_03 ,a_06_04 ,a_06_05 ,a_06_06 +extrn a_07_00,a_07_01,a_07_02 ,a_07_03 ,a_07_04 ,a_07_05 ,a_07_06 +extrn a_08_00,a_08_01,a_08_02 ,a_08_03 ,a_08_04 ,a_08_05 ,a_08_06 +extrn a_09_00,a_09_01,a_09_02 ,a_09_03 ,a_09_04 ,a_09_05 ,a_09_06 +extrn a_10_00,a_10_01,a_10_02 ,a_10_03 ,a_10_04 ,a_10_05 ,a_10_06 +extrn a_11_00,a_11_01,a_11_02 ,a_11_03 ,a_11_04 ,a_11_05 ,a_11_06 ,a_11_07 ,a_11_08 ,a_11_09 ,a_11_10 ,a_11_11 ,a_11_12 ,a_11_13 ,a_11_14 ,a_11_15 ,a_11_16 ,a_11_17 ,a_11_18 ,a_11_19 ,a_11_20 ,a_11_21 ,a_11_22 ,a_11_23 ,a_11_24 ,a_11_25 +extrn a_12_00,a_12_01,a_12_02 ,a_12_03 ,a_12_04 ,a_12_05 ,a_12_06 ,a_12_07 ,a_12_08 ,a_12_09 ,a_12_10 ,a_12_11 ,a_12_12 ,a_12_13 ,a_12_14 ,a_12_15 ,a_12_16 ,a_12_17 ,a_12_18 ,a_12_19 ,a_12_20 ,a_12_21 ,a_12_22 ,a_12_23 ,a_12_24 ,a_12_25 ,a_12_26 +extrn a_14_00,a_14_01,a_14_02 ,a_14_03 ,a_14_04 ,a_14_05 +extrn a_15_00,a_15_01,a_15_02 ,a_15_03 ,a_15_04 ,a_15_05 ,a_15_06 ,a_15_07 ,a_15_08 ,a_15_09 ,a_15_10 ,a_15_11 ,a_15_12 ,a_15_13 ,a_15_14 ,a_15_15 ,a_15_16 ,a_15_17 ,a_15_18 ,a_15_19 ,a_15_20 ,a_15_21 ,a_15_22 ,a_15_23 ,a_15_24 ,a_15_25 ,a_15_26 ,a_15_27 ,a_15_28 ,a_15_29 ,a_15_30 ,a_15_31 ,a_15_32 +comment\ +extrn a_01_00,a_01_01,a_01_02 ,a_01_03 ,a_01_04 ,a_01_05 ,a_01_06 ,a_01_07 ,a_01_08 ,a_01_09 ,a_01_10 ,a_01_11 ,a_01_12 ,a_01_13 ,a_01_14 ,a_01_15 ,a_01_16 ,a_01_17 ,a_01_18 ,a_01_19 ,a_01_20 ,a_01_21 ,a_01_22 +extrn a_03_00,a_03_01,a_03_02 ,a_03_03 ,a_03_04 ,a_03_05 ,a_03_06 ,a_03_07 +extrn a_04_00,a_04_01,a_04_02 ,a_04_03 ,a_04_04 ,a_04_05 ,a_04_06 ,a_04_07 +extrn a_05_00,a_05_01,a_05_02 ,a_05_03 ,a_05_04 ,a_05_05 ,a_05_06 ,a_05_07 +extrn a_06_00,a_06_01,a_06_02 ,a_06_03 ,a_06_04 ,a_06_05 ,a_06_06 ,a_06_07 +extrn a_08_00,a_08_01,a_08_02 ,a_08_03 ,a_08_04 ,a_08_05 ,a_08_06 ,a_08_07 ,a_08_08 ,a_08_09 ,a_08_10 ,a_08_11 ,a_08_12 ,a_08_13 ,a_08_14 ,a_08_15 ,a_08_16 ,a_08_17 ,a_08_18 ,a_08_19 ,a_08_20 ,a_08_21 ,a_08_22 ,a_08_23 ,a_08_24 ,a_08_25 ,a_08_26 ,a_08_27 ,a_08_28 ,a_08_29 ,a_08_30 ,a_08_31 ,a_08_32 ,a_08_33 ,a_08_34 +extrn a_09_00,a_09_01,a_09_02 ,a_09_03 ,a_09_04 ,a_09_05 ,a_09_06 ,a_09_07 ,a_09_08 ,a_09_09 ,a_09_10 ,a_09_11 ,a_09_12 ,a_09_13 ,a_09_14 ,a_09_15 +extrn a_12_00,a_12_01,a_12_02 ,a_12_03 ,a_12_04 ,a_12_05 ,a_12_06 ,a_12_07 ,a_12_08 ,a_12_09 ,a_12_10 ,a_12_11 ,a_12_12 ,a_12_13 ,a_12_14 ,a_12_15 ,a_12_16 ,a_12_17 ,a_12_18 ,a_12_19 ,a_12_20 ,a_12_21 ,a_12_22 ,a_12_23 ,a_12_24 ,a_12_25 ,a_12_26 +extrn a_15_00,a_15_01,a_15_02 ,a_15_03 ,a_15_04 ,a_15_05 ,a_15_06 ,a_15_07 ,a_15_08 ,a_15_09 ,a_15_10 ,a_15_11 ,a_15_12 ,a_15_13 ,a_15_14 ,a_15_15 ,a_15_16 ,a_15_17 ,a_15_18 +\ +DATA2 ENDS + +;****************************************************************************** + + +;****************************************************************************** +;** ** +;** C O D E ** +;** ** +;****************************************************************************** + +CODE SEGMENT PARA PUBLIC 'CODE' + ASSUME CS:CODE,DS:DATA + + +;*********************************** INITS ************************************ + +JUST_ONE_TIME_RESET_TABLE: + CALL SLACK_LIGHTS + RETN + + +WHEN_NEW_GAME_RESET_TABLE: + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + CALL INIT_jack + CALL RESET_VARS + CALL UPDATE_P_STRUC_4_ALL_PLAYERS + MOV XxballE,FALSE + MOV MUSICOK,FALSE + + ;cleara slutsiffrorna (di alla!) (F”r knacket allts†!!!) + push es + move es,ds + MOV di,offset last_text + mov al,' ' + mov cx,8*2 + rep stosb + MOV di,offset flashlast + mov al,' ' + mov cx,8*2 + rep stosb + pop es + RETN + + +WHEN_NEW_BALL_RESET_TABLE: + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + CALL RESET_VARS + CALL P_STRUC_2_VARS + RETN + +;************************ variables reset (allways!!) ********************* +RESET_VARS: + NIL AX + MOVE ES,DS + MOV BONUS_TEXT[11],'8' + MOV play_TEXT[18],'8' + MOV play_TEXT[8],'8' + MOV DI,OFFSET SIFFRORNA + MOV CX,6 + REP STOSW + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,6 + REP STOSW + MOV DI,OFFSET or_total + MOV CX,6 + REP STOSW + MOV DI,OFFSET tm_total + MOV CX,6 + REP STOSW + + MOV POS_SYNCER,0 ;SYNCER VARS + mov carparten,0 + mov b_flashin,false + mov u_flashin,false + mov r_flashin,false + mov n_flashin,false + mov i_flashin,false + mov nn_flashin,false + mov flash7down,0 + mov flash6down,0 + mov flash5down,0 + mov gear_down,0 + mov flash_pit_down,0 + mov mb_pa_lager,0 + mov mb_gjorda,0 + mov loop_l,0 + mov loop_h,0 + mov loop_l_,false + mov loop_h_,false + mov jump_,false + MOV BALLHIGH,FALSE + MOV HOLDBONUSFLAG,FALSE + mov holdbonuscount,0 + MOV BONUS_X,1 + + mov ax,0 + MOV DI,OFFSET cyclonecounterbcd + MOV CX,6 + REP STOSW + mov cyclonecounter,0 + + mov nextjump,30 + mov nextoffroad,40 + mov speeden,0 + mov gearet,0 + mov pos_flash,0 + mov pos_light,0 + + mov specialmode,false + mov turbomode,false + mov offroadmode,false +;HˇR VAR DEN! ; MOV PARTYFLASH,false + + retn +;****************************************************************************** + + + +DEMO_MUSIC PROC NEAR + CMP HIGHSCORE,TRUE +; JE OOPS_HIGH ;CP! + PLAYJINGLE S_NOHIGH + MOV AL,S_NOHIGH[2] + MOV LASTPRIORITY,AL + MOV LASTJINGLE,9 ;9=NOHIGH + RETN +DEMO_MUSIC ENDP + +GAME_MUSIC PROC NEAR + PLAYJINGLE S_SPRING + MOV AL,S_SPRING+2 + MOV LASTPRIORITY,AL + MOV LASTJINGLE,0 + RETN +GAME_MUSIC ENDP + +;******************************** LOOSE BALL ********************************** +LOOSE_BALL PROC NEAR + MOV LOOSING,TRUE + MOV SCREENFORCE2,576-SH_LO+SPLH ;CP? + CMP HI_RES,TRUE + JNE NOTHIRES16 + MOV SCREENFORCE2,576-SH_HI+SPLH ;CP? +NOTHIRES16: + SETBALLPOS 280,560,0,0,FALSE + MOV HOLDSTILL,TRUE + MOV ALLOWFLIP,FALSE ;KILL FLIPPERS! + + MOV SPECIALMODE,FALSE + + MOV CURRENT_PRIORITY,0 + EFFECT LOSTBALL + ADDTASK SOUNDRINNER + RETN + +SOUNDRINNER: + WAITSYNCS 5 + SOUNDEFFECT SRINNER,0 + SUICIDE + +INIT_JACK PROC NEAR ;FN: JACKVALUE = JACKINIT + MOVE ES,DS + MOV CX,12/2 + MOV SI,OFFSET JACKINIT + MOV DI,OFFSET JACKVALUE + REP MOVSW + RETN +INIT_JACK ENDP + +JACKADD PROC NEAR ;FN: JACKVALUE += JACKRAISE + MOV SI,OFFSET JACKRAISE + MOV DI,OFFSET JACKVALUE + CALL ADDSCOREBCD + RETN +JACKADD ENDP + +_FLORPA: + MOV CS:LB6CNT,0 ;RESET F™RDR™JNINGS-RˇKNAREN + MOV ADDORPEK,OFFSET ADDOR ;STARTA MED SISTA NUFFRAN + MOV BONUSPEK,OFFSET BONUSSIFFRORNA+11 + + MOV SI,OFFSET BONUSSIFFRORNA ;SPARA BONUSSIFFRORNA + MOV DI,OFFSET TEMPSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW + + MOV DOTRUT,OFFSET DO_FLORPA + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_5 + MOV BX,0 +_NEXTp_5: + MOV NEXT_A,BX + RETN +PLIPPA_SCORE: + mov si,offset siffrorna + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN + +LB6CNT DW ? +DO_FLORPA: + INC CS:LB6CNT + CMP CS:LB6CNT,4 ;CPW! + JE LB6CNTOK + MOV SI,75 + RETN +LB6CNTOK: + MOV CS:LB6CNT,0 + +DO_IT_AGAIN_AND_DO_IT_NOW: + MOV BX,BONUSPEK + MOV AL,[BX] + OR AL,AL ;IS DIGIT ZERO? + JZ DIGIT_IS_ZERO + DEC BYTE PTR [BX] ;RˇKNA NED BONUSEN + JNZ NO_WAITS_TODAY + + IFZEROBCD BONUSSIFFRORNA + JNC NO_WAITS_TODAY + + MOV CS:LB6CNT,-10 ;CPW! +NO_WAITS_TODAY: + + MOV SI,ADDORPEK ;RˇKNA UPP POˇNGEN + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + + SOUNDEFFECT S_SCORELJUD,0 + + JMP STEP_DONE + +DIGIT_IS_ZERO: + ;FLER SIFFROR? + INC ADDORPEK ;NEXT DIGIT IN POˇNGEN + CMP ADDORPEK,OFFSET ADDOR+12 + JE NO_MORE_NUFFROR + DEC BONUSPEK ;NEXT DIGIT IN BONUS + JMP DO_IT_AGAIN_AND_DO_IT_NOW + +STEP_DONE: + ;SHOW BONUSSIFFRORNA & SIFFRORNA + MOV SI_siffror,OFFSET BONUSSIFFRORNA + MOV DI_siffror,7*2*SW/4-16*4/4 ;10 RADER NED, 8 (12-4) TECKEN IN P¸ RADEN!! + MOV TABORT_DIOVRE_FNT,0 + MOV PRINTTASK,OFFSET PRINT8_task + CALL PLIPPA_SCORE + MOV SI,75 ;AVINSTALLERA EJ! + RETN + +NO_MORE_NUFFROR: + mov clear_box_start,7*2*SW/4 + mov clear_box_bredd,16*(12-1)/4-16*4/4 + mov clear_box_hojd,10 + CALL clear_box2 + MOV SI,0 ;AVINSTALLERA! + RETN + +;******************************* ARNESSON + + +;******************************* +disa dw ? +playerQ db ? +hi_pos dw ? +_check_high: + MOV SISA,1 + mov al,players + mov cs:playerQ,0 + MOV CS:DISA,0 + MOV DOTRUT,offset SPINTSEL_IN_HIGH + JMP NORMAL_END + +spintsel_in_high: + + LEA SI,PLAYER_AREA.P_SIFFRORNA + + MOV CX,4 + + add si,cs:disa + add cs:disa,size player_struc + + mov di,offset hi_score_list + + inc cs:playerQ + mov al,cs:playerQ + cmp al,players + jna check_list + mov first_high,false + cmp highscore,true + je no_sad_jingle + + mov current_priority,0 + mov jinglejumpcnt,1 + PLAYJINGLE S_GameOver + mov current_priority,0 + mov no_demomusic,true +no_sad_jingle: + mov highscore,false + mov si,0 + retn ;f„rdig! + +check_list: + push cx + mov cx,12 + mov bx,0 +check_num: + mov al,[di+bx] + cmp [si+bx],al + jb not_beaten + ja beaten + inc bx + loop check_num +not_beaten: + mov bp,false + jmp poppera +beaten: + pop cx + mov cs:hi_pos,cx +;play the happy highscore jingle . . . +;But only the first time!! + cmp first_high,true + je noplay_of_this + mov first_high,true + mov current_priority,0 + mov jinglejumpcnt,1 + mov highscore,true + playjingle_PENETRATE S_GameOver2 ;(HiScore jingle) +noplay_of_this: + mov sisa,1 + mov bp,true + jmp done_hi_check + +poppera: + pop cx + add di,12+3+1 ;12 nuffror, 3 bokst„ver + loop check_list + +done_hi_check: + mov si,1 + cmp bp,true + jne dont_getit +;***************** +;Print 'highscore pl x ( )' and install key-reader TS + + mov al,cs:playerQ + mov hajjskar[13],al + add hajjskar[13],'7' + + mov dotrut,offset get_it_from_keyboard + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +;***************** + mov si,1 + retn + +dont_getit: + retn + +get_it_from_keyboard: +;************ insert in list + push es + move es,ds + mov cx,cs:hi_pos + + mov si,offset hi_score_list+(12+3+1)*3-1 + mov di,offset hi_score_list+(12+3+1)*4-1 + dec cx + jcxz pos4 + + mov ax,12+3+1 + mul cx + mov cx,ax + + std + rep movsb + +pos4: sub di,(12+3+1)-1 + cld + lea si,player_area.p_siffrorna + MOV CX,SIZE PLAYER_STRUC + MOV AL,CS:PLAYERQ + dec al + NIL AH + MUL CX + ADD SI,AX + mov cx,12 + rep movsb ;mov in new hiscore + pop es +;di pekar d„r namnet ska petas in!! + mov cs:nof_chars_to_read,3 + mov cs:place_hi,di + mov scan_code,-1 ;l„s ev. tidigare tangenttryck! + mov dotrut,offset read_keyboardet + mov si,1 + retn +;***************** +place_hi dw ? +nof_chars_to_read dw ? + +read_keyboardet: + push es + mov al,scan_code + cmp al,-1 + je feltecken_du ;ej tryckt! + mov scan_code,-1 + mov bx,offset alfa_keys + xlat + cmp al,0 + je feltecken_du ;felaktigt tecken! + move es,ds + mov di,cs:place_hi + stosb + push ax + mov cs:place_hi,di + mov ax,3 + sub ax,cs:nof_chars_to_read + mov di,offset hajjskar+16 + add di,ax + pop ax + stosb ;skriv te sk„rm texten . . + dec cs:nof_chars_to_read + jnz kvar_svar + mov sisa,60 ;cpw! + mov dotrut,offset wait_a_little + pop es + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + + ;cleara namnet! + push es + move es,ds + mov al,' ' + mov cx,3 + mov di,offset hajjskar+16 + rep stosb ;skriv te sk„rm texten . . + pop es + jmp dont_write_play +kvar_svar: + pop es + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +dont_write_play: + mov si,sisa + retn +feltecken_du: + pop es + mov si,sisa + retn + +wait_a_little: + dec si + cmp si,30 ;cpw! + jne dont_blame_me + push si + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset stjaernor + MOVE DI,sw*2*2/4 + call PRINT_TEXT + pop si +dont_blame_me: + cmp si,2 + jnbe retta_oooo + mov dotrut,offset spintsel_in_high + mov si,1 +retta_oooo: + retn +_loop_: + dec cs:looper + JZ NOJUMPER_tomorrow + add bx,4 + mov bx,[bx] + MOV NEXT_A,BX + jmp [bx] + +looper dw ? +_setloop: +NOJUMPER_tomorrow: +;reinstall loop val + mov ax,[bx+2] + mov cs:looper,ax + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp print_end + +_turnonturbo: + endflash 9 + lightoff 9 + call getthegoalyoufool + mov bx,offset turboTS + mov next_A,bx + jmp [bx] + +_return_of_the_evil_supermode: + CMP INHIBIT_COUNT_DOWN,TRUE + JNE INGA_KONSTIGHETER + MOV INHIBIT_COUNT_DOWN,FALSE + MOV BX,OFFSET BACK_2_TURBOTS + MOV NEXT_A,BX + MOV TURBOMODE,TRUE +READY_2_CALL: + JMP [BX] +INGA_KONSTIGHETER: + JMP NORMAL_END + + + + +SHOWER DB ? +player_adr dw ? +_INIT_SCORE: + mov cs:player_adr,0 + sub cs:player_adr,size player_struc + MOV PLAYERSTEXT[7],0+'7' + MOV PLAY_TEXT[8],0+'7' + MOV AL,PLAYERS + MOV CS:SHOWER,AL + inc CS:SHOWER + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end +_SHOW_SCORE: + INC PLAYERSTEXT[7] + INC PLAY_TEXT[8] + add cs:player_adr,size player_struc + DEC CS:SHOWER + JZ NOJUMPER + + + MOV SISA,1 + mov dotrut,offset ShowIt + + cmp CS:SHOWER,1 + je normal_end + + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + RETN + +NOJUMPER: + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end + +ShowIt: + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset PLAYERSTEXT + MOVE DI,sw*2*2/4 + call PRINT_TEXT +; mov si,offset siffrorna + + mov bx,cs:player_adr + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN + +_TurnOffSpecialMode: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + mov specialmode,false + mov current_priority,0 + jmp Normal_End + +_knacket: + MOVE CS:KNACKTIDEN,KNACKTID_LO + CMP HI_RES,TRUE + JNE NOTHIRES34 + MOVE CS:KNACKTIDEN,KNACKTID_HI +NOTHIRES34: + mov dotrut,offset knackrut1 + mov sisa,1 + MOV PLAYER,1 ;F™R CHECK_XXBALL + jmp normal_end + + +;tid mellan knack samt antal knack . . . + knacktid_HI=13 ;CPW! + knacktid_LO=11 ;CPW! + nof_banks=18 ;CPW! + knack_d_tid=5 ;CPW! + +knackrut1: + PLAYJINGLE_PENETRATE S_endfig + MOV LASTJINGLE,55 ;TYST EFTER FULLGJORD PENETRERING + mov dotrut,offset knackrut2 +;g”r text me sista nuffrerna!! + mov cl,players + nil ch + mov di,offset last_text + mov ah,' ' + mov bx,10 ;n„st sista! + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + push es + move es,data + mov bx,0 +make_last: + mov al,ds:[si] + add si,size player_struc + add al,'7' + stosw + mov word ptr offset [flashlast+bx],ax ;kopiera texten f”r senare blink + + add bx,2 + loop make_last + + pop es + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset last_text + MOVE DI,sw*2/4 + call PRINT_TEXT + + MOV SI,NOF_BANKS + MOV SISA,NOF_BANKS + + MOVE CS:TIMGLAS,KNACKTID_LO + MOVE CS:KNACKTIDEN,KNACKTID_LO + CMP HI_RES,TRUE + JNE NOTHIRES33 + MOVE CS:TIMGLAS,KNACKTID_HI + MOVE CS:KNACKTIDEN,KNACKTID_HI +NOTHIRES33: + retn + +TIMGLAS DW ? +KNACKTIDEN DW KNACKTID_LO + +knackrut2: + dec cs:timglas + jz no_ret + ret +no_ret: + push si + move cs:timglas,cs:knacktiden + mov ax,last_pos + ;ax=linje adress, ett steg=32 pixel=> 1 steg= 8 adr.(mcgab) + ;(1 char=8*2 pix, 1 steg=2 char) + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOVE DI,sw*2*8/4 + add di,ax + MOV AX,offset startext + call PRINT_TEXT + mov si,1 + + ;knacka(????) fram en ny slutsiffra! + mov ax,slump_countern + mov dx,0 + mov cx,10 + div cx + ;resten i de„ks e mellan n†ll † ti† + +if stones + inc last_pos + cmp last_pos,10 + jnae over_iii + mov last_pos,0 + sub cs:knacktiden,knack_d_tid +over_iii: + +else + mov last_pos,dx +endif + mov ax,last_pos + add ax,'7' + mov slutsiffra[0],al + sub ax,'7' + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX_PRINT,offset slutsiffra + MOVE DI_PRINT,sw*2*8/4 + add di_print,ax + MOV PRINTTASK,OFFSET PRINT_TEXT + pop si + dec si + cmp si,0 + jne retta_nuda + +;kolla om siffrorna st„mmer f”r n†en . . . + + mov cl,players + nil ch + mov si,offset last_text + mov bx,last_pos + add bx,'7' + + mov di,offset flashlast + + move es,data + mov cs:alla_glada,false +READ_NUFFROR: + lodsw + cmp al,bl + jne gladgnu_tu + mov cs:alla_glada,true + add di,2 + loop READ_NUFFROR + jmp ture_sventton_kravdes_har +gladgnu_tu: + mov ax,'**' + stosw + loop READ_NUFFROR +ture_sventton_kravdes_har: + cmp cs:alla_glada,true + je gladgnu + mov si,0 + jmp retta_nuda ;-( ingen glad )-: + +;Om javisst, spela glad gnu † flasha! +gladgnu: + MOV MATRIX_SPEED,3 + MOV MATRIX_CNT,3 + MOV MATRIX_ONOFF,TRUE + MOV MATRIX_IS_FLASHING,TRUE + + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset flashlast + MOVE DI,sw*2/4 + call PRINT_TEXT + + + mov current_priority,0 + PLAYJINGLE S_Knacket + MOV JINGLEJUMPCNT,1 + mov current_priority,0 + mov lastjingle,55 + mov si,0 +retta_nuda: + retn + +alla_glada db ? + + +_CHECK_XXBALLS: ;OBS! TV¸ ING¸NGAR TILL DENNA RUTIN + ;INPUT: LAST_TEXT, LAST_POS, PLAYER, PLAYERS + ;OUTPUT: FT_PEKARE, PLAYER +TESTNEXTPL: + PUSH BX + + MOV BL,PLAYER + NIL BH + SHL BX,1 + ADD BX,OFFSET LAST_TEXT-2 ;bx pekar p† spelare n's slutsiffra + + MOV AL,[BX] + MOV WORD PTR [BX],'XX' ;DESTROY HIM MY ROBOTS! + SUB AL,'7' + NIL AH + + POP BX + + CMP LAST_POS,AX + JE THIS_ONE ;HAN SKA F¸ XXBALL!!! + + INC PLAYER ;INGEN XXBALL F™R HONOM! + MOV AL,PLAYER + CMP AL,PLAYERS + JNA TESTNEXTPL + + MOV BX,OFFSET after_xxballTS + MOV NEXT_A,BX + JMP [BX] + +THIS_ONE: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + + MOV XXBALLE,TRUE + MOV BX,OFFSET shoOt_AGAIN_Onts + MOV NEXT_A,BX + JMP [BX] + +;********************************* + +_KOLLA_XXBALL: + CMP XXBALLE,FALSE + JE HU_ + PUSH BX + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + POP BX + + CMP LIGHTSTATUS[55],TRUE ;LAUGH AGAIN? + JE LET_HIM_SHOOT_AGAIN ;MEGA-HOPP + + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER2 + + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED2 + +HIGHEST_PLAYER2: + MOV BX,OFFSET AFTER_XXBALLTS + MOV NEXT_A,BX + JMP [BX] + +PLAYER_CHANGED2: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + + MOV BX,OFFSET CHECK_XXBALLTS + MOV NEXT_A,BX + JMP [BX] + +;********** + + +_CHANGE_PLAYER: + PUSH BX + CMP HOLDBONUSFLAG,TRUE + JNE NOT_HB_TRUE + MOV SI,OFFSET TEMPSIFFRORNA ;HOLD THE BONUS! + MOV DI,OFFSET BONUSSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW +NOT_HB_TRUE: + + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + + POP BX + CMP LIGHTSTATUS[55],TRUE ;LAUGH AGAIN? + JE LET_HIM_SHOOT_AGAIN + PUSH BX + + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER + + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED + +HIGHEST_PLAYER: + INC BALLS[11] + MOV AL,NO_OF_BALLS + CMP BALLS[11],AL + JA NO_MORE_BALLS + MOV PLAYER,1 ;NEXT PLAYER IS FIRST PLAYER! + MOV AL,BALLS[11] + ADD AL,'7' ;SEPEKOMPENSERING + MOV BALLSTEXT[5],AL + MOV play_TEXT[18],AL + +PLAYER_CHANGED: + + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + MOV play_TEXT[8],AL + + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + +HU_: ADD BX,2 ;TASKSYTEM, HOPPA TILL NˇSTA/AVSLUT + CMP WORD PTR [BX],0 + JNE _NEXTp_7 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_7: + MOV NEXT_A,BX + JMP [BX] + +LET_HIM_SHOOT_AGAIN: ;2 ING¸NGAR! + MOV BX,OFFSET shoot_again_onTS + MOV NODOTCOUNT,0 + UPDAT_SCORE +; MOV NEXT_A,BX ;CP? + JMP [BX] + +_NEW_BALL2: + PUSH BX + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + JMP HU_ + + +NO_MORE_BALLS: + CALL VARS_2_P_STRUC ;STORE LAST PLAYER'S SCORE TOO! + POP BX + MOV BX,OFFSET out_of_ballsTS + MOV NEXT_A,BX + JMP [BX] + RETN + + +_2_DEMO_MODE: + ADDTASK TO_DEMO_FROM_GAME + JMP HU_ +zeroscore: + push es + move es,ds + mov cx,12/2 + mov ax,0 + mov di,offset siffrorna + rep stosw + pop es + retn + +TO_DEMO_FROM_GAME: + MOV PLAYERS_CP,TRUE + CALL GO_DEMO_MODE ;TO DEMO FROM GAME + MOV SCREENFORCE,BANH-(SH_LO-SPLH) + CMP HI_RES,TRUE + JNE NOTHIRES17 + MOV SCREENFORCE,BANH-(SH_HI-SPLH) +NOTHIRES17: + MOV CARMEN,-1 + call zeroscore + CALL SLACK_LIGHTS + MOV ADDPLAYERS,TRUE + SUICIDE + + +LOOSE_BALL ENDP + + + +;******************************** NEW_BALL ************************************ + +NEW_BALL_TASK: + WAITSYNCS 60 + CALL NEW_BALL + RETN ;PGA NEWBALL + +NEW_BALL PROC NEAR ;ENDA SˇTTET ATT F¸ UT EN BOLL P¸ BANAN! + MOV LOOSING,FALSE + MOV BALL_DOWN,FALSE + MOV I_UTSKJUT,TRUE + + CALL WHEN_NEW_BALL_RESET + CALL WHEN_NEW_BALL_RESET_TABLE + + MOV HOLDSTILL,TRUE + SETBALLPOS STARTX-5-15,STARTY-5,0,0,FALSE + MOV SCREENFORCE2,-1 ;500 + + CMP ADDPLAYERS,TRUE + JE NOSP + CMP MUSICOK,TRUE + JE MUSIC_ALREADY_OK + PLAYJINGLE S_SPRING + MOV MUSICOK,FALSE +MUSIC_ALREADY_OK: +NOSP: + MOV LASTJINGLE,0 + MOV SCORECHANGED,FALSE + + CMP ADDPLAYERS,TRUE + JE ITS_FROM_DEMO + CALL NEW_BALL_PART_TWO + RETN + +ITS_FROM_DEMO: + ADDTASK SNART_NEW_BALL + RETN + +NEW_BALL_PART_TWO: + ADDTASK SOUNDNEWBALL + ADDTASK SETBALL + ADDTASK SOUNDBRICKUPP + + MOV ALLOWFLIP,TRUE + MOV TILTFLAG,FALSE + MOV TILTCOUNTER,0 + MOV SCORECHANGED,FALSE + RETN + +SOUNDBRICKUPP: + WAITSYNCS 5 + SOUNDEFFECT SBRICKUPP,0 + SUICIDE + +SOUNDNEWBALL: + WAITSYNCS 50 + SOUNDEFFECT SNEWBALL,0 + SUICIDE + +SETBALL: + WAITSYNCS 80 + SETBALLPOS STARTX-5,STARTY-5,10,0,FALSE + MOV HOLDSTILL,FALSE + MOV SCREENFORCE2,-1 + SUICIDE +;FIAT UNO +NEW_BALL ENDP + +MOTA_BORT_INACTIVE_SLINGAN: + ;OBS! AVINSTALLERA DENNA GENOM "MOV I_UTSKJUT,FALSE" + MOV NODOTCOUNT,0 + CMP I_UTSKJUT,FALSE + JE TA_BORT_MEJ + RETN +TA_BORT_MEJ: + SUICIDE + + +P_STRUC_2_VARS PROC NEAR ;INPUT: PLAYER + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA + + MOV CX,12/2 + MOVE ES,DS + + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + MOV DI,OFFSET SIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_BONUSSIFFRORNA + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_cyclonecounterBCD + MOV DI,OFFSET cyclonecounterBCD + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_or_total + MOV DI,OFFSET or_total + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_tm_total + MOV DI,OFFSET tm_total + MOV CX,12/2 + REP MOVSW + + move cyclonecounter,PLAYER_AREA[BX].P_cyclonecount + + move nextjump,player_area[bx].p_nextjump + move nextoffroad,player_area[bx].p_nextoffroad + move speeden,player_area[bx].p_speeden + move gearet,player_area[bx].p_gearet + + move pos_flash,player_area[bx].p_pos_flash + move pos_light,player_area[bx].p_pos_light + + moval holdbonuscount,player_area[bx].p_hbcount + + moval lightstatus[22],player_area[bx].p_gear + moval lightstatus[23],player_area[bx].p_ear + moval lightstatus[24],player_area[bx].p_aron + moval lightstatus[25],player_area[bx].p_rapa + moval lightstatus[50],player_area[bx].p_part1_l + moval lightstatus[51],player_area[bx].p_part2_l + moval lightstatus[52],player_area[bx].p_part3_l + moval lightstatus[53],player_area[bx].p_part4_l + moval lightstatus[54],player_area[bx].p_part5_l + + moval lightstatus[10],player_area[bx].p_part1 + moval lightstatus[11],player_area[bx].p_part2 + moval lightstatus[12],player_area[bx].p_part3 + moval lightstatus[13],player_area[bx].p_part4 + moval lightstatus[14],player_area[bx].p_part5 + move carparten,player_area[bx].p_carparten + + mov al,player_area[bx].p_goallight + mov lightstatus[9],al + + call update_my_lights + RETN + +P_STRUC_2_VARS ENDP + +update_my_lights: + mov cx,gearet + cmp gearet,0 + je kopplingenpaj + mov al,26 +automatlada: + push ax cx + lighton al + pop cx ax + inc al + loop automatlada +kopplingenpaj: +;********************* + nof_light=4 + start_light=22 + set_lights +;********************** + + nil di + mov al,50 + mov cx,5 +nxt_flash: + cmp lightstatus[50+di],true + jne noflash_now + push ax bx di + test al,1 + jne syncor_pynkor + syncedflash al,pos_speed,pos_syncer + jmp ocktor_kompostor +syncor_pynkor: + invertedsyncedflash al,pos_speed,pos_syncer +ocktor_kompostor: + pop di bx ax +noflash_now: + inc al + inc di + loop nxt_flash + + + nil di + mov al,10 + mov cx,5 +nxt_flash2: + cmp lightstatus[10+di],true + jne noflash_now2 + push ax bx di + lightflash al,std_lgt_speed + pop di bx ax +noflash_now2: + inc al + inc di + loop nxt_flash2 +;***************************************** + cmp lightstatus[9],true + jne not_goal_left + push bx + lon 9 + pop bx +not_goal_left: +;****************************************************************************** +;S„tt di t„nda i position . . . + MOVE DS,DATA + MOVE ES,DATA + + mov di,0 + mov cx,POS_LIGHT + cmp cx,0 + je noturesventon +ture: + mov lightstatus[32+di],TRUE + inc di + loop ture +noturesventon: + + nof_light=10 + start_light=32 + set_lights + +;¸ s„tt di som blinkar . . . + mov cx,pos_flash + sub cx,pos_light + cmp cx,0 + je noneflashin + mov dx,pos_light ;den siste som e stadig . . + add dx,32 ;f”rsta i serien +litenlajla: + pusha + test dl,1 + jne inverted_fjong + syncedflash dl,pos_speed,pos_syncer + jmp back_fjong +inverted_fjong: + invertedsyncedflash dl,pos_speed,pos_syncer +back_fjong: + popa + inc dx + loop litenlajla +noneflashin: +;****************************************************************************** +;S„tt di t„nda i speedometern . . . + mov di,0 + mov cx,SPEEDEN + cmp cx,0 + je noture02 + + cmp cx,12 + jb overall + mov cx,12 +overall: +ture02: + mov lightstatus[56+di],TRUE + inc di + loop ture02 + + nof_light=12 + start_light=56 + set_lights +noture02: +;****************************************************************************** + retn + +VARS_2_P_STRUC PROC NEAR ;INPUT: PLAYER + ;2 ENTRIES TO THIS RUT + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA +VARS_2_P_STRUC_2: ;USED BY WHEN_NEW_GAME_RESET! + MOV CX,12/2 + MOVE ES,DS + + LEA DI,PLAYER_AREA[BX].P_SIFFRORNA + MOV SI,OFFSET SIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_BONUSSIFFRORNA + MOV SI,OFFSET BONUSSIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA dI,PLAYER_AREA[BX].P_cyclonecounterBCD + MOV sI,OFFSET cyclonecounterBCD + MOV CX,12/2 + REP MOVSW + + move PLAYER_AREA[BX].P_cyclonecount,cyclonecounter + + move player_area[bx].p_nextjump,nextjump + move player_area[bx].p_nextoffroad,nextoffroad + move player_area[bx].p_speeden,speeden + move player_area[bx].p_gearet,gearet + move player_area[bx].p_pos_flash,pos_flash + move player_area[bx].p_pos_light,pos_light + mov al,lightstatus[9] + mov player_area[bx].p_goallight,al + + moval player_area[bx].p_gear,lightstatus[22] + moval player_area[bx].p_ear,lightstatus[23] + moval player_area[bx].p_aron,lightstatus[24] + moval player_area[bx].p_rapa,lightstatus[25] + + moval player_area[bx].p_part1,lightstatus[10] + moval player_area[bx].p_part2,lightstatus[11] + moval player_area[bx].p_part3,lightstatus[12] + moval player_area[bx].p_part4,lightstatus[13] + moval player_area[bx].p_part5,lightstatus[14] + + moval player_area[bx].p_part1_l,lightstatus[50] + moval player_area[bx].p_part2_l,lightstatus[51] + moval player_area[bx].p_part3_l,lightstatus[52] + moval player_area[bx].p_part4_l,lightstatus[53] + moval player_area[bx].p_part5_l,lightstatus[54] + + moval player_area[bx].p_hbcount,holdbonuscount + + move player_area[bx].p_carparten,carparten + RETN +VARS_2_P_STRUC ENDP + + + +;******************************** TILT TILT TILT ****************************** +HE_TILTED PROC NEAR + MOV ALLOWFLIP,FALSE + MOV LASTJINGLE,62 + PLAYJINGLE S_TILT + MOV BX,OFFSET tiltTS + CALL DO_MATRIX + CALL RESETFLASHLIST + CALL SLACK_LIGHTS + RETN +HE_TILTED ENDP + +HE_ALMOST_TILTED PROC NEAR + PLAYJINGLE S_DANGER + RETN +ENDP + +;********************************* CHECK SHIFTKEYS **************************** + +CHECK_SHIFTKEYS PROC NEAR + CMP SHIFTPRESSED,TRUE + JNE NO_SHIFT + MOV SHIFTPRESSED,FALSE +;**************************************** +;* 3 light rol * +;**************************************** + ;bur + start_light=16 + shift_light + mov b_flashin,false + mov u_flashin,false + mov r_flashin,false + ;nin + start_light=19 + shift_light + mov n_flashin,false + mov i_flashin,false + mov nn_flashin,false + + cmp flash_pit_down,0 + jne no_allpit + + mov flash6down,0 + mov flash7down,0 + mov flash5down,0 + start_light=6 + shift_light +no_allpit: +;**************************************** +NO_SHIFT: + RETN +CHECK_SHIFTKEYS ENDP + + + +;******************************** GATES ROUTINES ****************************** + + +;************************* SUPER MODES CHECKS ********************************* + + + +;****************************************************************************** +;***************************** BRICKOR & KNAPPAR ****************************** +;****************************************************************************** +;B U R N I N' ;cpw! +b_light=16 +u_light=17 +r_light=18 +n_light=19 +i_light=20 +nn_light=21 +touch_speed=1 ;hur snabb flash d† den blitt t„ffad +touch_time=10 ;hur l„nge flash (flash => stadig) +bur_time=40 ;hur l„nge B U R +nin_time=40 ;hur l„nge N I N +gear_time=45 ;must be > than bur & nin time +gear_flash=2 + +nedslapp: + mov y_hast,0 +; cmp y_hast,-1 ;y_hast positiv = p†v„g ned!! +; jl nope_ko + mov ballhigh,false ;sl„pp ned!! cp. +nope_ko: + retn + +bricka_b: + + cmp b_flashin,true + je slut_b + mov b_flashin,true + mov lightstatus[b_light],true ;t„nd logik!! + call bur_group + jc lit_A ;alla i B U R t„nda => t„nd A (g e A r) +; beep + lightflash b_light,touch_speed ;flasha litet tag + addtask end_b ;task som st„nger av flash +slut_b: retn +end_b: + WAITSYNCS 10 ;touch_time +; beep + ENDFLASH b_light ;lys stadigt (fr†n flash) + cmp b_flashin,true + jne b_suicide + lon b_light + mov b_flashin,false +b_suicide: + SUICIDE + +bricka_u: + cmp u_flashin,true + je slut_u + mov u_flashin,true + mov lightstatus[u_light],true ;t„nd logik!! + + call bur_group + jc lit_A ;alla i B U R t„nda => t„nd A (g e A r) + + lightflash u_light,touch_speed ;flasha litet tag + addtask end_u ;task som st„nger av flash +slut_u: retn +end_u: + WAITSYNCS touch_time + ENDFLASH u_light ;lys stadigt (fr†n flash) + cmp u_flashin,true + jne u_suicide + lon u_light + mov u_flashin,false +u_suicide: + SUICIDE + +bricka_r: + cmp r_flashin,true + je slut_r + mov r_flashin,true + mov lightstatus[r_light],true ;t„nd logik!! + + call bur_group + jc lit_A ;alla i B U R t„nda => t„nd A (g e A r) + + lightflash r_light,touch_speed ;flasha litet tag + addtask end_rr ;task som st„nger av flash +slut_rr: retn +end_rr: + WAITSYNCS touch_time + ENDFLASH r_light ;lys stadigt (fr†n flash) + cmp r_flashin,true + jne r_suicide + lon r_light + mov r_flashin,false +r_suicide: + SUICIDE +;**************************** + +bricka_n: + cmp n_flashin,true + je slut_n + mov n_flashin,true + mov lightstatus[n_light],true ;t„nd logik!! + call nin_group + jc lit_R ;alla i N I N t„nda => t„nd R (g e a R) + + lightflash n_light,touch_speed ;flasha litet tag + addtask end_n ;task som st„nger av flash +slut_n: retn +end_n: + WAITSYNCS touch_time + ENDFLASH n_light ;lys stadigt (fr†n flash) + cmp n_flashin,true + jne n_suicide + lon n_light + mov n_flashin,false +n_suicide: + SUICIDE + +bricka_i: + cmp i_flashin,true + je slut_i + mov i_flashin,true + mov lightstatus[i_light],true ;t„nd logik!! + call nin_group + jc lit_R ;alla i N I N t„nda => t„nd R (g e a R) + + lightflash i_light,touch_speed ;flasha litet tag + addtask end_i ;task som st„nger av flash +slut_i: retn +end_i: + WAITSYNCS touch_time + ENDFLASH i_light ;lys stadigt (fr†n flash) + cmp i_flashin,true + jne i_suicide + lon i_light + mov i_flashin,false +i_suicide: + SUICIDE + +bricka_nn: + cmp nn_flashin,true + je slut_nn + mov nn_flashin,true + mov lightstatus[nn_light],true ;t„nd logik!! + call nin_group + jc lit_R ;alla i N I N t„nda => t„nd R (g e a R) + + lightflash nn_light,touch_speed ;flasha litet tag + addtask end_nn ;task som st„nger av flash +slut_nn: retn +end_nn: + WAITSYNCS touch_time + ENDFLASH nn_light ;lys stadigt (fr†n flash) + cmp nn_flashin,true + jne nn_suicide + lon nn_light + mov nn_flashin,false +nn_suicide: + SUICIDE + +;**************************** +lit_A: + mov b_flashin,true + mov u_flashin,true + mov r_flashin,true + lightflash b_light,touch_speed ;flasha litet tag + lightflash u_light,touch_speed ;flasha litet tag + lightflash r_light,touch_speed ;flasha litet tag + mov lightstatus[24],true ;t„nd logik!! + addtask end_A ;task som st„nger av flash + call check_gear ;for wear?? + jc slut_A + lightflash 24,touch_speed ;flasha litet tag +slut_A: retn +end_A: + WAITSYNCS bur_time + ENDFLASH 24 ;lys stadigt (fr†n flash) + LON 24 + mov lightstatus[b_light],false + mov lightstatus[u_light],false + mov lightstatus[r_light],false + endflash b_light + endflash u_light + endflash r_light + loff b_light + loff u_light + loff r_light + mov b_flashin,false + mov u_flashin,false + mov r_flashin,false + SUICIDE + +;**************************** +lit_R: + mov n_flashin,true + mov i_flashin,true + mov nn_flashin,true + lightflash n_light,touch_speed ;flasha litet tag + lightflash i_light,touch_speed ;flasha litet tag + lightflash nn_light,touch_speed ;flasha litet tag + mov lightstatus[25],true ;t„nd logik!! + addtask end_R ;task som st„nger av flash + call check_gear ;for wear?? + jc slut_r + lightflash 25,touch_speed ;flasha litet tag +slut_R: retn +end_R: + WAITSYNCS nin_time + ENDFLASH 25 ;lys stadigt (fr†n flash) + LON 25 + mov lightstatus[n_light],false + mov lightstatus[i_light],false + mov lightstatus[nn_light],false + endflash n_light + endflash i_light + endflash nn_light + loff n_light + loff i_light + loff nn_light + mov n_flashin,false + mov i_flashin,false + mov nn_flashin,false + SUICIDE + + +bur_group: + + call addoffroad + +;h„r addas score, jack, bonus + kollar om hela B U R e t„nt!! + ADDSCORE BCD7510 + ADDBONUS BCD550 + + SOUNDEFFECT S_touch1,0 ;cp? + + CMP LIGHTSTATUS[16],TRUE + JNE NOTALLBUR + CMP LIGHTSTATUS[17],TRUE + JNE NOTALLBUR + CMP LIGHTSTATUS[18],TRUE + JNE NOTALLBUR +LETSBUR: + CALL JACKADD + STC + RETN +NOTALLBUR: + CLC + RETN +nin_group: + + call addoffroad + +;h„r addas score, jack, bonus + kollar om hela B U R e t„nt!! + ADDSCORE BCD7520 + ADDBONUS BCD570 + SOUNDEFFECT S_touch1,0 ;cp? + + CMP LIGHTSTATUS[19],TRUE + JNE NOTALLBUR + CMP LIGHTSTATUS[20],TRUE + JNE NOTALLBUR + CMP LIGHTSTATUS[21],TRUE + JNE NOTALLnin +LETSnin: + CALL JACKADD + STC + RETN +NOTALLnin: + CLC + RETN +check_gear: + cmp lightstatus[22],true + jne no_gear + cmp lightstatus[23],true + jne no_gear + cmp lightstatus[24],true + jne no_gear + cmp lightstatus[25],true + jne no_gear +shift_up_man: + call increase_position + CALL INC_GEAR + mov lightstatus[22],false + mov lightstatus[23],false + mov lightstatus[24],false + mov lightstatus[25],false + lightflash 22,gear_flash + lightflash 23,gear_flash + lightflash 24,gear_flash + lightflash 25,gear_flash + addtask stop_gear +; beep + effect gearchange + stc + retn +no_gear: + clc + retn +stop_gear: + waitsyncs gear_time + endflash 22 + endflash 23 + endflash 24 + endflash 25 + loff 24 + loff 25 + loff 22 + loff 23 + suicide +GEAR_BASE=26 +GEARKASSE_SPEED=1 +gearkasse_time=30 +Inc_Gear: + mov bx,gearet + cmp gearet,5 + je no_shift_gear_kasse + inc gearet + add bx,gear_base + LightON bl,gearkasse_speed + retn +no_shift_gear_kasse: + mov gear_down,gearkasse_time + lightflash 26,GEARKASSE_SPEED + lightflash 27,GEARKASSE_SPEED + lightflash 28,GEARKASSE_SPEED + lightflash 29,GEARKASSE_SPEED + lightflash 30,GEARKASSE_SPEED + lightflash 31,GEARKASSE_SPEED + + RETN +gearkasse: + mov gearet,0 + endflash 26 + lightoff 26 + endflash 27 + lightoff 27 + endflash 28 + lightoff 28 + endflash 29 + lightoff 29 + endflash 30 + lightoff 30 + endflash 31 + lightoff 31 +;t„nd holdbonus d† hela gear e plockat + cmp lightstatus[2],true + je nohold ;inte tat den f”st†ss, dumhuve + syncedflash 2,pos_speed,pos_syncer + mov holdbonuscount,0 + mov lightstatus[2],true +nohold: + retn + +position_base=32 +pos_speed=std_lgt_speed +goal_speed=std_lgt_speed +increase_position: + mov bx,pos_flash + cmp bx,10 ;last pos + je all_pos_flashin + mov ax,bx + add ax,position_base + push ax + syncedflash al,pos_speed,pos_syncer + pop ax + inc ax + invertedsyncedflash al,pos_speed,pos_syncer + add pos_flash,2 + retn +all_pos_flashin: + effect NumberOne ;-) Meal??? + + retn + +get_position: + mov bx,pos_light + cmp pos_flash,bx + jbe not_possible + inc pos_light + mov ax,bx + add ax,position_base + push ax + endflash al + pop ax + lighton al + effect OverTake + + cmp Pos_Light,10 + je all_lit + + retn +not_possible: + retn +all_lit: + invertedsyncedflash 9,pos_speed,pos_syncer ;Goal Light + lighton 9 + + syncedflash 15,pos_speed,pos_syncer ;JackPot Light + lighton 15 + + mov jackdown,20*60 ;Jack tiden ... + + effect GoalLit + retn +jack_slack: + lightoff 15 + endflash 15 + retn +;****************************************************************************** +;********************************** LOWER ************************************* +;****************************************************************************** +GetTheGoalYouFool: + + lightoff 41 + lightoff 40 + lightoff 39 + lightoff 38 + lightoff 37 + lightoff 36 + lightoff 35 + lightoff 34 + lightoff 33 + lightoff 32 + mov pos_light,0 + mov pos_flash,0 + cmp specialmode,true + jne OnlyTurbo + ;OffRoad mode is currently on!! Wait 'til it's off! + addtask Goliat + retn +OnlyTurbo: + call TurboModeInit + retn +Goliat: + cmp loosing,true + je killhimnow + cmp specialmode,true + je no_goliat + + call TurboModeInit +killhimnow: + suicide +no_goliat: + retn +TurboModeInit: + effect getgoal + mov specialmode,true + mov turbomode,true + retn + +;************* +DoTheOffRoad: + cmp specialmode,true + jne OnlyOffroad + ;Turbo mode is currently on!! Wait 'til it's off! + addtask Goliat2 + retn +OnlyOffRoad: + call OffRoadModeInit + retn +Goliat2: + cmp loosing,true + je killhimnowandagain + + cmp specialmode,true + je no_goliat2 + ;Goal + call OffRoadModeInit +killhimnowandagain: + suicide +no_goliat2: + retn +OffRoadModeInit: + mov current_priority,0 + playjingle sjingle22 + mov specialmode,true + mov bx,offset OffRoadTS + call do_matrix + mov offroadmode,true + retn + +;************* +GropA: ;PITSTOP + cmp lightstatus[3],true ;Super Jackpot +; mov lastjingle,2 + jne nosuperjack + endflash 3 + lightoff 3 + cmp lightstatus[9],true ;Goal lit? + jne brakke + effect superjack2 ;f”rst super sen turbomode + jmp hmmmm_waitalittlelongerwhenmegascore +brakke: + mov inhibit_count_down,true + MOV CURRENT_PRIORITY,0 + effectbrack superjack ;br„ck turbomode + +nosuperjack: + + cmp lightstatus[9],true ;Goal lit? (but NOT super!) + jne NoGoal_now_sucker + endflash 9 + lightoff 9 + call getthegoalyoufool +NoGoal_now_sucker: + cmp lightstatus[2],true + jne noholdbonusifimsorryforthisfuckinlonglabelorwhatdoyoumeanbythat + effect holdbonus + endflash 2 + lightoff 2 + MOV HOLDBONUSFLAG,TRUE + +noholdbonusifimsorryforthisfuckinlonglabelorwhatdoyoumeanbythat: + CMP SNACKDISABLED,TRUE + JE NOT_NOW_STUPID + ADDTASK SNACK_HOLE_TASK1 +NOT_NOW_STUPID: + RETN +hmmmm_waitalittlelongerwhenmegascore: + CMP SNACKDISABLED,TRUE + JE NOT_NOW_STUPID + ADDTASK SNACK_HOLE_TASK2 + jmp not_now_stupid + +;************* from snack logic ************* + +SNACK_HOLE_TASK1: + MOV HOLDSTILL,TRUE + SETBALLPOS SNACKX,SNACKY,0,0,FALSE ;PUT BALL IN MIDDLE OF HOLE ;CP! + WAITSYNCS 20 ;CPW! ;(EVEN IF SPECIALMODE=TRUE) + ADDTASK SNACK_HOLE_TASK1B + SUICIDE + +SNACK_HOLE_TASK2: + MOV HOLDSTILL,TRUE + SETBALLPOS SNACKX,SNACKY,0,0,FALSE ;PUT BALL IN MIDDLE OF HOLE ;CP! + WAITSYNCS 150 ;CPW! ;(EVEN IF SPECIALMODE=TRUE) + ADDTASK SNACK_HOLE_TASK1B + SUICIDE + +SNACK_HOLE_TASK1B: + MOV HOLDSTILL,TRUE + SETBALLPOS SNACKX,SNACKY,0,0,FALSE ;PUT BALL IN MIDDLE OF HOLE ;CP! + CMP SPECIALMODE,TRUE + JE SNABBHOPP4 + WAITSYNCS 100-40 ;CPW! +SNABBHOPP4: + SOUNDEFFECT SGROP,0 + MOV HOLDSTILL,FALSE + SETBALLPOS SNACKX,SNACKY,SNACKXS,SNACKYS,FALSE + ADDTASK TURN_IT_ON_AGAIN + SUICIDE + +TURN_IT_ON_AGAIN: + WAITSYNCS 60 + MOV SNACKDISABLED,FALSE + SUICIDE + +;******************************************** + +part_test: + test_lgts 50,5 + jnc rett_na + lightoff 50 + lightoff 51 + lightoff 52 + lightoff 53 + lightoff 54 + + endflash 50 + endflash 51 + endflash 52 + endflash 53 + endflash 54 + + lightflash 50,1 + lightflash 51,1 + lightflash 52,1 + lightflash 53,1 + lightflash 54,1 + + addtask endflasha_carparts + + mov CarParten,0 ;F”rste parten ju . . . +rett_na: + retn + +endflasha_carparts: + waitsyncs 60*2 + endflash 50 + endflash 51 + endflash 52 + endflash 53 + endflash 54 + suicide + +bygel9: ;OffRoad bygeln + cmp TurboMode,true + jne NoTurboModeNownownow + effect TurboEffect + call addTurboMode +NoTurboModeNownownow: + + effect BygelSetE + cmp lightstatus[11],true + jne no_part_1 + lightoff 11 + endflash 11 + effect Part1 + mov lightstatus[50],true + invertedsyncedflash 50,pos_speed,pos_syncer +; lightflash 50,std_lgt_speed ;Motorn??? + call part_test +no_part_1: + cmp lightstatus[12],true + jne no_part_4 + lightoff 12 + endflash 12 + effect Part4 + mov lightstatus[51],true +; lightflash 51,std_lgt_speed ;Motorn??? + syncedflash 51,pos_speed,pos_syncer + call part_test +no_part_4: + + cmp lightstatus[4],true ;Multiply Bonus?? + je do_mb +back_test_it: + mov lightstatus[23],true + CALL JACKADD + call check_gear + jc no_b9 + lightflash 23,touch_speed + addtask stop_e +no_b9: retn +stop_E: + waitsyncs touch_time + endflash 23 + lon 23 + suicide +do_mb: + inc bonus_text[11] + inc mb_gjorda + inc bonus_x + dec mb_pa_lager + jnz slack_inte + lightoff 4 + endflash 4 +slack_inte: + nil bx + mov dx,offset M2 ;f”rsta MB effekten + mb_base=42 ;(f”rsta) +next_lght: + cmp lightstatus[mb_base+bx],false + je not_next_lght + add bx,1 + add dx,size effect_struc + cmp bx,7 ;nof bonus lgts-1 + jne next_lght +not_next_lght: + + push bx + mov si,dx + call doeffect + pop bx + + mov lightstatus[mb_base+bx],true + add bl,mb_base + call dolon + jmp back_test_it + +Bygel16: + cmp LastArea,offset cs:Bygel12 + je Jump_man + cmp LastArea,offset cs:Bygel17 + jne no_b16 +;Get the bonus part?? + cmp lightstatus[14],true + jne no_part_3 + lightoff 14 + endflash 14 + effect Part3 + mov lightstatus[52],true + invertedsyncedflash 52,pos_speed,pos_syncer + call part_test +no_part_3: + cmp lightstatus[10],true + jne no_part_5 + lightoff 10 + endflash 10 + effect Part5 + mov lightstatus[54],true + syncedflash 54,pos_speed,pos_syncer + call part_test +no_part_5: + + + +;Get the x-ball?? + cmp lightstatus[1],true + jne noxballs + effect xball + lightoff 1 + endflash 1 + lighton 55 ;T„ndstift +noxballs: + retn +Jump_Man: +; inc holdbonuscount +; cmp holdbonuscount,10 +; jne nohold +; cmp lightstatus[2],true +; je nohold ;inte tat den f”st†ss, dumhuve +; syncedflash 2,pos_speed,pos_syncer +; mov holdbonuscount,0 +; mov lightstatus[2],true +;nohold: + cmp TurboMode,true + jne NoTurboModeNownow + effect TurboEffect + call addTurboMode +NoTurboModeNownow: + call jackadd + cmp lightstatus[15],true ;JP lampan + jne No_JP_lgt + mov si,offset jackvalue + mov di,offset siffrorna + call addscorebcd + call init_jack + cmp turbomode,true + jne nobraccer + MOV CURRENT_PRIORITY,0 + effectbrack JackPot + mov inhibit_count_down,true + jmp knakelibrak +nobraccer: + effect jackpot +knakelibrak: + lightoff 15 + endflash 15 + lighton 3 ;Super JackPot + syncedflash 3,pos_speed,pos_syncer + addtask turnoff_super +No_JP_lgt: + cmp lightstatus[5],true ;Jump lampan + jne No_Jump_lgt + effect Jump + lightoff 5 + endflash 5 +No_Jump_lgt: + cmp lightstatus[13],true + jne no_part_2 + lightoff 13 + endflash 13 + effect Part2 + mov lightstatus[53],true + syncedflash 53,pos_speed,pos_syncer + call part_test +no_part_2: + mov jump_,true + call speedometer + mov lightstatus[22],true + CALL JACKADD + call check_gear + jc no_b16 + lightflash 22,touch_speed + addtask stop_g +no_b16: + retn +turnoff_super: + waitsyncs 20*60 + endflash 3 + lightoff 3 + suicide + +Bygel17: ;F”re under Jump . . Hmmmm . . + retn +bygel12: ;JUMP bygeln + retn +stop_g: + waitsyncs touch_time + endflash 22 + lon 22 + suicide + +; P I T +pit_time=20 +pit_speed=1 +;************************************* +bygel7: + cmp flash7down,0 + jne no_flash7 + mov lightstatus[8],true + call pit_group + jc no_flash7 + mov flash7down,pit_time + lightflash 8,pit_speed +no_flash7: + retn + +Flash7end: + endflash 8 + lon 8 + start_light=6 + nof_light=3 + set_lights + retn +;***************************** +bygel6: + cmp flash6down,0 + jne no_flash6 + lon 7 + mov lightstatus[7],true + call pit_group + jc no_flash6 + mov flash6down,pit_time + lightflash 7,pit_speed +no_flash6: + retn + +Flash6end: + endflash 7 + lon 7 + start_light=6 + nof_light=3 + set_lights + retn +;***************************** +bygel5: + cmp flash5down,0 + jne no_flash5 + lon 6 + mov lightstatus[6],true + call pit_group + jc no_flash5 + mov flash5down,pit_time + lightflash 6,pit_speed +no_flash5: + retn + +Flash5end: + endflash 6 + lon 6 + start_light=6 + nof_light=3 + set_lights + retn +;***************************** + +Pit_Group: + call addoffroad + + SOUNDEFFECT S_touch1,0 ;cp!!! + effect BygelSetC + test_lgts 6,3 ;6=first lgt, 3=#lgts + jc enable_bonus + clc + retn +pit_time_all=pit_time*2 +pit_all_speed=2 +mb_speed=10 +enable_bonus: + cmp flash_pit_down,0 ;All PIT already megaflashin ??? + je do_enable_mb_lgt + clc + retn + +do_enable_mb_lgt: + effect MBLit + mov al,mb_gjorda + add al,mb_pa_lager + cmp al,8 + jb no_millon_but_bonus + effect Million + jmp ret_urk +no_millon_but_bonus: + inc mb_pa_lager + cmp mb_pa_lager,1 + jne dont_startflash + mov lightstatus[4],true + lightflash 4,mb_speed +dont_startflash: +ret_urk: + lightflash 6,pit_all_speed + lightflash 7,pit_all_speed + lightflash 8,pit_all_speed + mov flash_pit_down,pit_time_all + stc + retn +turn_pit_off: + endflash 6 + endflash 7 + endflash 8 + lightoff 6 + lightoff 7 + lightoff 8 + start_light=6 + nof_light=3 + set_lights + retn + +Bygel1: ;Sido nedfall +Bygel2: + effect BygelSetA + retn + +Bygel3: ;R”r nedfall +Bygel4: + SOUNDEFFECT SBygel2,0 + effect BygelSetB + retn +Bygel8: + effect BygelSetD + retn +;*********************************** GAME ON ********************************** + +CLOSE1: ;GAME ON + CMP LASTAREA,OFFSET nedslapp + JNE NOT_GAME_ON + MOV ADDPLAYERS,FALSE + PLAYJINGLE S_MAIN + MOV LASTJINGLE,1 + MOV BX,OFFSET PARTY_OFFTS + CALL DO_MATRIX + MOV I_UTSKJUT,FALSE ;TILL¸TER INACTIVE-SLINGAN (DOTMATRIX) + MOV PARTYFLASH,FALSE + +;JOHAN SˇGER ATT DETTA ˇR EXTRA SˇKERT (DUBBEL SˇKERHET) + mov spring_valid,false ;CP... + +NOT_GAME_ON: + RETN + + + +;***************************** SPRING INVALID ********************************* + +open2: ;SPRING INVALID + MOV SPRING_VALID,FALSE + RETN + + +;******************************* SPRING VALID ********************************* + +BYGEL28: ;SPRING VALID + MOV SPRING_VALID,TRUE + RETN + + + +;****************************************************************************** +;*********************************** UPPER ************************************ +;****************************************************************************** +speedometer: + cmp loop_l_,true + jne no_speedup + cmp loop_h_,true + jne no_speedup + cmp Jump_,true + jne no_speedup + effect speedo + mov loop_l_,false + mov loop_h_,false + mov Jump_,false +speedometer_base=56 + mov ax,speeden + add ax,56 + test al,1 + jz no_bonus_part + push ax + call CarPart + pop ax +no_bonus_part: + cmp al,67 ;cp!!?? + jae slack_speedometer + inc speeden + lighton al + retn +slack_speedometer: ;Nja, den skulle ju f† lysa s† glatt . . + inc speeden + lon 67 +no_speedup: + retn +part_speed=std_lgt_speed +CarPart: + cmp CarParten,5 + je all_parts_lit + mov bx,CarParten ;Inte CarPort allts† . . + inc CarParten + shl bx,2 ;Effekt+lnr + add bx,offset PartList + mov ax,[bx] +;fel st„lle?? +; push bx +; effect ax +; pop bx + + mov ax,[bx+2] + push ax + + syncedflash al,pos_speed,pos_syncer + + pop ax + lighton al +all_parts_lit: + retn + +betweenloops_time=blet*6*60+30 +Bygel10: +; mov loop_l_,true ;Only when million! + mov loop_h,betweenloops_time + cmp loop_l,0 + je not_2_loops_in_5_secs_1 + mov loop_l,0 + call two_in_5 +not_2_loops_in_5_secs_1: + call loop_group + retn +Bygel11: +; mov loop_h_,true ;Only when million! + mov loop_l,betweenloops_time + cmp loop_h,0 + je not_2_loops_in_5_secs_2 + mov loop_h,0 + call two_in_5 +not_2_loops_in_5_secs_2: + call loop_group + retn + +two_in_5: + ;Reset Loop Counters AXL SAY DON'T! +; mov loop_h,0 +; mov loop_l,0 +;overtake?? + call get_position +;million! + effect Million + mov loop_l_,true + mov loop_h_,true + retn + +loop_group: + CALL JACKADD + mov cx,size effect_struc+1 + mov ax,speeden + cmp ax,11 + jna no_kris_lelle_van + mov ax,11 +no_kris_lelle_van: + mul cx + add ax,offset SScore1 + mov si,ax + CALL DOEFFECT + cmp TurboMode,true + jne NoTurboModeNow + effect TurboEffect + call addTurboMode +NoTurboModeNow: +Again_Mile: + inc MilesCount + mov si,offset etta + mov di,offset cyclonecounterbcd + call addscorebcd + Cmp MilesCount,1 + je Again_Mile + + cmp MilesCount,20 + ja NoAtAll + cmp Milescount,10 + jbe NoXBall + effect xball_at_20 + ;skriv ut xball at 20 + cmp MilesCount,20 + jne noxball + lightflash 1,std_lgt_speed ;cp! + lighton 1 + effect litxball +NoXBall: + cmp MilesCount,10 + je dotheoffice + ja NoOffRoad + effect offroad_at_10 + jmp NoOffRoad +dotheoffice: + call DoTheOffroad +NoOffRoad: +NoAtAll: + mov ax,MilesCount + cmp ax,NextJump + jne NoNextJump + add NextJump,20 + cmp lightstatus[5],true + je already_lit_the_jump_light + lighton 5 +Jump_Speed=std_lgt_speed + lightflash 5,Jump_Speed + effect lgt_Jump +already_lit_the_jump_light: + jmp did_jump +NoNextJump: + mov cx,nextjump + sub cx,ax + cmp cx,10 + jnb did_jump +;***************************** lites the jump + mov ax,nextjump + mov di,2 + mov cx,3 +loopen_lejf: + push cx + mov dx,0 + mov cx,10 + div cx + cmp dx,0 + jne nozero + cmp di,0 + jne nozero + mov dx,'*'-'7' +nozero: + add dx,'7' + mov jump_at_text[di],dl + pop cx + dec di + loop loopen_lejf +;***************************** + effect jump_at +did_jump: + mov ax,MilesCount + + mov cx,NextOffRoad + sub cx,ax + cmp cx,10 + jnbe NoNextOff + cmp ax,NextOffRoad + jne NoOffNowOr + add NextOffRoad,20 + call DoTheOffroad +NoOffNowOr: +;***************************** lites the off road + mov ax,NextOffRoad + mov di,2 + mov cx,3 +loopen_lejfAron: + push cx + mov dx,0 + mov cx,10 + div cx + cmp dx,0 + jne nozerohelge + cmp di,0 + jne nozerohelge + mov dx,'*'-'7' +nozerohelge: + add dx,'7' + mov offroad_at_text[di],dl + pop cx + dec di + loop loopen_lejfAron +;***************************** + effect OffRoad_At + +NoNextOff: + +NotStandardSeries: + ;move miles to the scrolltext + mov bx,5+offset miles_text + mov ax,cyclonecounter + call put_in_text + retn + +;***************************** +;Input: Ax= NextR„knare Bx=offset till texten +Put_In_Text: + PUSH BX + mov di,2 + mov cx,3 +loopen_leffe: + push cx + NIL DX + MOV CX,10 + DIV CX + add dx,'7' + mov [bx][di],dl + pop cx + dec di + loop loopen_leffe + POP BX + +LOOPEN_BERTIL: + CMP BYTE PTR [BX],'7' + JNZ AVBRYT_BRUTALT + MOV BYTE PTR [BX],'*' + INC BX + LOOP LOOPEN_BERTIL +AVBRYT_BRUTALT: + RETN +;***************************** + +comment\ + mov cx,4 + nil bx + mov dx,true +first_null equ dx + nil first_null +lurken: + mov al,cyclonecounterbcd[8+bx] + add al,'0' + + cmp al,'0' + jne setit_orc + cmp first_null,true + je dont_check_it_now + mov al,' ' + jmp dont_check_it_now +setit_orc: + mov first_null,true +dont_check_it_now: + add al,'7'-'0' +; mov miles_text[21+bx],al + mov miles_text[5+bx],al + inc bx + loop lurken + + retn +\ + + +;****************************************************************************** +UPDATE_COUNTERS PROC NEAR + INC POS_SYNCER ;SNACK SYNCER + CMP POS_SYNCER,POS_SPEED*2 + JNE SNSOK + MOV POS_SYNCER,0 +SNSOK: + DOWNCOUNT flash7down,flash7end + DOWNCOUNT flash6down,flash6end + DOWNCOUNT flash5down,flash5end + DOWNCOUNT flash_pit_down,turn_pit_off + DOWNCOUNT LOOP_H,DUMRET + DOWNCOUNT LOOP_L,DUMRET + DOWNCOUNT GEAR_DOWN,GEARKASSE + downcount jackdown,jack_slack + RETN +UPDATE_COUNTERS ENDP + +ADDOffRoad PROC NEAR + CMP OffRoadMode,TRUE + JNE NOTOFFICEADDING + MOV SI,OFFSET BCDHUNDRATUSEN + MOV DI,OFFSET OR_TOTAL + CALL ADDSCOREBCD + MOV SPECIAL_SCORE_CHANGED,TRUE +NOTOFFICEADDING: + RETN +ADDOffRoad ENDP + +ADDTurboMode PROC NEAR + CMP TurboMode,TRUE + JNE NOTkluOFFICEADDING + MOV SI,OFFSET BCDfemmillioner + MOV DI,OFFSET tm_TOTAL + CALL ADDSCOREBCD + MOV SPECIAL_SCORE_CHANGED,TRUE +NOTkluOFFICEADDING: + RETN +ADDTurboMode ENDP + +BUMPER_WAS_HIT_PROC PROC NEAR ;INPUT: HITPOINTER + call addoffroad + UPDAT_INFOBAR + RETN +BUMPER_WAS_HIT_PROC ENDP + + + +;********************************* DOT MATRIX CODE **************************** +_PARTYONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV AL,PLAYER + ADD AL,'A'-10 + MOV PARTY_ON_TEXT[18],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + +_SHOOT_AGAIN_ONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV AL,PLAYER + ADD AL,'A'-10 + MOV SHOOT_AGAIN_TEXT[19],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + +_beep: ;2 vars!!! + beep + jmp normal_end + +_PARTYON: ;BX NOT USED! + MOV PARTYFLASH,TRUE + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET PARTYRUT + JMP NORMAL_END + +_PARTYOFF: ;TURN OFF PARTYON FLASHING (AND BRING BACK SCORE!) + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + JMP NORMAL_END + +_WAIT_GAME_ON: + MOV DOTRUT,OFFSET GONRUT + MOV SISA,44 + JMP NORMAL_END +GONRUT: + CMP ADDPLAYERS,TRUE + JE INTE_SATT_IGANG + MOV SI,0 + RETN +INTE_SATT_IGANG: + MOV SI,34 ;INTE 0 = INTE IG¸NG !! + RETN + + +_JBCDZ: + IFZEROBCD [BX+2] + JC OVERIT_ + MOV BX,[BX+4] + SUB BX,6 +OVERIT_: + ADD BX,6 + CMP WORD PTR [BX],0 + JNE _NEXTp_4 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_4: + MOV NEXT_A,BX + JMP [BX] + RETN +_BONUS_X_CALCS: ;FN: MULTIPLIES THE BONUS + ;INPUT: BONUS_X, BONUSSIFFRORNA + ;OUTPUT: BONUSSIFFRORNA + PUSH BX + PUSH ES + MOVEBCD TEMPBONUSBCD,BONUSSIFFRORNA + MOV CL,BONUS_X + DEC CL + JZ NO_X_BONUS + NIL CH +DO_IT_AGAIN: + PUSH CX + MOV SI,OFFSET TEMPBONUSBCD + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POP CX + LOOP DO_IT_AGAIN +NO_X_BONUS: + MOV AL,BONUS_X + ADD AL,'7' + MOV BONUS_X_TEXT[8],AL + POP ES + POP BX + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + + +_JBONUSX1: + CMP BONUS_X,1 + JNE QJBX1 + ADD BX,2 + MOV BX,[BX] + MOV NEXT_A,BX + JMP [BX] +QJBX1: MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + +_Jmp: + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + JMP [BX] + retn + + +_CALC_HAPPY: + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + PUSHA + MOV SI,OFFSET OR_TOTAL ;ML_TOT -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POPA + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3E + MOV BX,0 +_NEXTp_3E: + MOV NEXT_A,BX + RETN + +_CALC_mega: + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + PUSHA + MOV SI,OFFSET tm_TOTAL ;ML_TOT -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POPA + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3Eh + MOV BX,0 +_NEXTp_3Eh: + MOV NEXT_A,BX + RETN + + + +_CALC_CYCLO: + PUSH ES + MOVE ES,DS + MOV DI,OFFSET CYCLONESCOREBCD + NIL AX + MOV CX,12/2 ;(12/6=6!!!) + REP STOSW + POP ES + + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + MOV CX,CYCLONECOUNTER +URBANLOOP: + MOV SI,OFFSET HUNDRATUSEN + MOV DI,OFFSET CYCLONESCOREBCD + PUSH CX BX + CALL ADDSCOREBCD + POP BX CX + LOOP URBANLOOP + + MOV SI,OFFSET CYCLONESCOREBCD ;CYCLONES -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3gg + MOV BX,0 +_NEXTp_3gg: + MOV NEXT_A,BX + RETN + +READ_SPECIAL_MODE_COUNTER PROC NEAR + +;[SEC_ASC] PEKAR P¸ MSD, (0='*') [SEC_ASC+1] PEKAR P¸ LSD +;LˇS AV BARA! + MOVE DS,DATA + cmp [sec_asc],'*' + jne no_end + cmp [sec_asc+1],'0'+7 ;??? + jne no_end + cmp turbomode,true + jne noturboend + playjingle_penetrate Sjingle20 + mov lastjingle,3 +noturboend: + cmp OffRoadmode,true + jne nooffrend + playjingle_penetrate Sjingle23 + mov lastjingle,3 +nooffrend: +; mov specialmode,false + mov offroadmode,false + mov turbomode,false ;mega cp!! + mov current_priority,0 + mov lastjingle,3 + mov jinglejumpcnt,1 +no_end: + RETN +READ_SPECIAL_MODE_COUNTER ENDP + +_DOBEATEN: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + PUSHA + LIGHTON 55 + POPA + JMP NORMAL_END + + +CODE ENDS + +;****************************************************************************** +;************************* O T H E R S E G M E N T S ************************ +;****************************************************************************** + +HIDDEN1 SEGMENT PARA PUBLIC 'DATA' + UNDANSPR DB 16*16 DUP (0) + HIDDA DB 576*2 DUP(0) + EXTRN HID1 +HIDDEN1 ENDS + +HIDDEN2 SEGMENT PARA PUBLIC 'DATA' + HIDDA2 DB 576*2 DUP(0) + EXTRN HID2 +HIDDEN2 ENDS + +MASK1_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK12 +MASK1_2 ENDS + +MASK1_1 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK11 +MASK1_1 ENDS + +MASK2_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK22 +MASK2_2 ENDS + +FLIPLEFT SEGMENT PARA PUBLIC 'DATA' +if create_flip_data + EXTRN FLIPL +else + extrn flipl_1 +endif +FLIPLEFT ENDS + +FLIPLEFT2 SEGMENT PARA PUBLIC 'DATA' +if create_flip_data + EXTRN FLIPL2 +else + extrn flipr2_1 +endif +FLIPLEFT2 ENDS + +FLIPRIGHT SEGMENT PARA PUBLIC 'DATA' +if create_flip_data + EXTRN FLIPR +else + extrn flipR_1 +endif +FLIPRIGHT ENDS + +LASTSEG SEGMENT +LASTSEG ENDS + +STAGE1_1 SEGMENT PARA PUBLIC 'DUMP' + extrn st1 +STAGE1_1 ENDS + +STAGE1_2 SEGMENT PARA PUBLIC 'DUMP' + extrn st2 +STAGE1_2 ENDS + +STAGE1_3 SEGMENT PARA PUBLIC 'DUMP' + extrn st3 +STAGE1_3 ENDS + +STAGE1_4 SEGMENT PARA PUBLIC 'DUMP' + extrn st4 +STAGE1_4 ENDS + +MASK1_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK13 +MASK1_3 ENDS + +MASK2_1 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK21 +MASK2_1 ENDS + +MASK2_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK23 +MASK2_3 ENDS + +FLIPGFXSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN FLIPGFX:BYTE +SISTAGFX LABEL BYTE +FLIPGFXSEG ENDS + +SPRINGSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN SPRING +SPRINGSEG ENDS +;****************************************************************************** + + + \ No newline at end of file diff --git a/SHOW.ASM b/SHOW.ASM new file mode 100644 index 0000000..0e24888 --- /dev/null +++ b/SHOW.ASM @@ -0,0 +1,4457 @@ +;****************************************************************************** +;** ** +;** P I N B A L L F A N T A S I E S ** +;** TABLE 3: BILLION DOLLAR GAME SHOW ** +;** ** +;****************************************************************************** +INCLUDELIB BILLION +INCLUDELIB CLEAR +flipgfxfilesize=220 +FIRSTMASK_GFXADR=BPL*(SPLH+BANH) +GFXADR_FOR_FLIP_ANIM_DATA=FIRSTMASK_GFXADR+BPL*40 +springsourceadr=GFXADR_FOR_FLIP_ANIM_DATA-3*23 ;3*23 ˇR F™R FJˇDERNS GFX +springdestadr=(splh+556)*bpl+304/4 +DATAFLIP SEGMENT PARA PUBLIC 'DATA' +MAXDIFS1=114+5 +MAXDIFS2=114+5 +MAXDIFS3=137+5 +maxdifs=137 +if create_flip_data +LEFTFLIPTAB DW 42*(2*MAXDIFS1) DUP (1) +RIGHTFLIPTAB DW 42*(2*MAXDIFS2) DUP (1) +LEFTFLIP2TAB DW 26*(2*MAXDIFS3) DUP (1) +TEMPTAB DW 2*MAXDIFS DUP (1) +else + extrn leftfliptab,rightfliptab,leftflip2tab +endif +DATAFLIP ENDS +DATA SEGMENT PARA PUBLIC 'DATA' + ASSUME CS:CODE,DS:DATA + BALL_LOCK_YPOS EQU 537 + +MODUL DB 'TABLE3.MOD',0,'$' +if create_flip_data +flipdatafil_L DB 'flipdata.3L',0 +flipdatafil_R DB 'flipdata.3R',0 +flipdatafil_L2 DB 'flipdata.3L2',0 +flipgfxfil DB 'flipgfx.3',0 +flipSTRUCfil DB 'flipSTRU.3',0 +endif +hi_score_file db 'table3.hi',0 +hi_score_list db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'TSP',0 + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ANY',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'J L',0 + db 0,0,0, 0,0,5, 0,0,0, 0,0,0,'ICE',0 +;****************************************************************************** +;******************************** DEFINITIONS ********************************* +;****************************************************************************** +TOTCENT=16 + +;******************** SYSTEM ********************** +MAX_NO_OF_LIGHTS_FLASHING=30 +MAX_NO_OF_WAIT_SYNCS=50 +NOOFTASKS=20 +RGB_BUFFER_LEN=500 + +;******************** FLIPPER & BALL ********************** +BALLH=16 +BANH=576 +STARTX=310-BALLH/2+2 +STARTY=543-BALLH/2 + +F3TOP=176 +F3HEIGHT=53 + +;******************** FLASHING ********************** +MATRIXlo=153 +MATRIXhi=114 +MATRIXCOLS=matrixhi*256+matrixlo +PARTY_ON_SPEED=3 ;? +SHOOT_AGAIN_SPEED=3 ;? +BIT2COL DB 0,0,0,0,6,1,41,0 ;flipper f„rgerna + +;******************** GAME TIMING ******************** +LM_TIME=10*60 +TV_Time=4*60 +BOAT_Time=10*60 +HOUSE_Time=10*60 +PLANE_Time=10*60 +SJP_TIME=5*60 +JP_TIME=25*60 +TRIP_Time=4*60 +CAR_Time=4*60 +cash5_time=11*60 ;cpw! +MB_time=4*60 ;cpw! +sfspeed=10 +LOOPS_N_TRAPS DB ? +PARTYFLASH DB FALSE +syncflasher db 0 +evendata +LOOP_MILLION_COUNTER DW 0 +SJP_counter dw 0 +JP_counter dw 0 +MBcounter dw 0 +TVcounter dw 0 +BOATcounter dw 0 +HOUSEcounter dw 0 +PLANEcounter dw 0 +TRIPcounter dw 0 +CARcounter dw 0 +cash5counter dw 0 +nextSPINtime dw ? +SPINTIMES_HI dw 15 dup(4),5,5,6,7,7,7,7,8,8,8,9,10,10,10,10,11,11,11,11,12,12,14,16,19,22,25,50,-1 +SPINTIMES dw 15 dup(4),5,5,5,6,6,6,6,7,7,7,8,8,8,8,9,9,10,10,12,14,17,20,24,32,47,-1 +SPINcounter dw ? +SPINlight db 0 +rm db 0,0,0,0,0,0,0,0,0,0,0,0 +Tjufemtusen db 0,0,0,0,0,0,0,2,5,0,0,0 +SPINscores db 0,0,0,'*'-'A'+10,'*'-'A'+10,'*'-'A'+10,'*'-'A'+10,2,5,0,0,0 ;rensar tv† f”rsta +_50K db 0,0,0,0,0,0,0,5,0,0,0,0 +_100K db 0,0,0,0,0,0,1,0,0,0,0,0 +_250K db 0,0,0,0,0,0,2,5,0,0,0,0 +_500K db 0,0,0,0,0,0,5,0,0,0,0,0 +_1000K db 0,0,0,0,0,1,0,0,0,0,0,0 +_2500K db 0,0,0,0,0,2,5,0,0,0,0,0 +_5000K db 0,0,0,0,0,5,0,0,0,0,0,0 + +CASHPOTSTEP DB 0,0,0,0,0,0,0,0,7,1,3,0 +CASHPOTSTEP2 DB 0,0,0,0,0,0,2,2,7,8,3,0 + +;******************** HOLES ********************** + +;****************************************************************************** +;****************************** GENERAL VARS ********************************** +;****************************************************************************** +TURBOMODE DB FALSE +OFFROADMODE DB FALSE +TVflag db ? +BILLION_ENABLED DB ? +TRIPflag db ? +CARflag db ? +HOUSEflag db ? +BOATflag db ? +PLANEflag db ? +top_three db ? +all_six db ? +bonusmultiplier db ? +BONUSTABLE DB 2,3,4,6,8,10 ;DE OLIKA BONUSMULTIPLIERNA +BONUS_ANIMS DW _bonusx2TS,_bonusx3TS,_bonusx4TS,_bonusx6TS,_bonusx8TS,_bonusx10TS +SKILLCOUNTER equ cyclonecounterbcd +ETTA DB 11 DUP(0),1 +HUNDRATUSEN db 0,0,0,0,0,0,1,0,0,0,0,0 +BCDfemmillioner db 0,0,0,0,0,5,0,0,0,0,0,0 +bcd7510 db 0,0,0,0,0,0,0,0,7,5,1,0 +bcd7520 db 0,0,0,0,0,0,0,0,7,5,2,0 +bcd550 db 0,0,0,0,0,0,0,0,0,5,5,0 +bcd570 db 0,0,0,0,0,0,0,0,0,5,7,0 +bcdhundratusen db 0,0,0,0,0,0,1,0,0,0,0,0 + +if create_flip_data +FlipLInfo LABEL FLIPSTRUC + DB FlipperL,222 + DW 80,510,4,53,0,142,400,576,95,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,LEFTFLIPTAB,LEFTFLIPTAB,MAXDIFS1*4 + DW FLIPLEFT + + DB FlipperR,222 + DW 160,510,4,53,143,320,400,576,204,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,RIGHTFLIPTAB,RIGHTFLIPTAB,MAXDIFS2*4 + DW FLIPRIGHT + + DB FlipperR,222 + DW 240,176,3,51,220,320,0,250,286,182,-1,(51*6*3) + DW 0,0,0,12,12*ADJUST,-9*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,LEFTFLIP2TAB,LEFTFLIP2TAB,MAXDIFS3*4 + Dw flipLEFT2 + + DB 0,0 ;END OF FLIPSTRUC +else + extrn fliplinfo:flipstruc +endif +no_of_ramps equ 5 ;cpw!?!? +RampTable DW 0,10*tt/nn + DW 4*tt/nn,13*tt/nn + DW 0,15*tt/nn + DW 2,10*tt/nn + DW 6*tt/nn,14*tt/nn + DW 0,0 ;ska den va me??? CP!! +RampTable_hi DW 0,10 + DW 4,13-1 + DW 0,15-1 + DW 2,10-1 + DW 6,14-1 + DW 0,0 ;ska den va me??? CP!! + + +PLAYER_STRUC STRUC + P_SIFFRORNA DB 12 DUP(?) + P_BONUSSIFFRORNA DB 12 DUP(?) + P_TOP_THREE DB ? + P_ALL_SIX DB ? + P_CYCLONECOUNTERBCD DB 12 DUP(?) + P_CYCLONECOUNTER DW ? +ENDS + +PLAYER_AREA DB SIZE PLAYER_STRUC * NO_OF_PLAYERS DUP(?) + +CYCLONECOUNTER DW ? ;HEXADECIMAL +cyclonecounterBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +CYCLONESCOREBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +XXBALLE DB ? + + +;****************************************************************************** +;********************************* EFFECTS ************************************ +;****************************************************************************** + +EFFECT_STRUC STRUC + THEJINGLE DW ? + TSCORE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + TBONUS DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + DOTMATRIX DW ? +ENDS +SHOOTTHEBALL DW SJINGLE12 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DW SHOOTTHEBALLTS + +BILLION DW SJINGLE1 + DB 0,0,1, 0,0,0, 0,0,0, 0,0,0 ;CP? + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 ;CP? + DW BILLIONTS + + +;BygelSetA Dc.L 0,SBygel1,0,$50000,0,0,0 +bygelsetA dw 0 + db 0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + dw 0 + +;BygelSetB Dc.L 0,SBygel2,0,$10000,0,$1020,0 +bygelsetB dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,2,0 + dw 0 + +;BygelSetC Dc.L 0,0,0,$10000,0,$1030,R6 +bygelsetC dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,3,0 + dw 0 + +;BygelSetD Dc.L 0,0,0,$10000,0,$1040,R5 +bygelsetD dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,4,0 + dw 0 + +;BygelSetE Dc.L 0,0,0,$10000,0,$1050,R3 +bygelsetE dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,5,0 + dw 0 + +;BygelSetF Dc.L 0,0,0,$10000,0,$1060,0 +bygelsetF dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,6,0 + dw 0 + +;BygelSetG Dc.L 0,0,0,$10000,0,$1070,0 +bygelsetG dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,7,0 + dw 0 + +;BygelSetH Dc.L 0,0,0,$10000,0,$1080,R4 +bygelsetH dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,8,0 + dw 0 + +;BygelSetI Dc.L 0,0,0,$10000,0,$1090,R1 +bygelsetI dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,9,0 + dw 0 + +;BygelSetJ Dc.L 0,0,0,$10000,0,$1010,R2 +bygelsetJ dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,1,0 + dw 0 + +;BygelSetK Dc.L 0,0,0,$10000,0,$1030,0 +bygelsetK dw 0 + db 0 + db 0,0,0, 0,0,0, 0,1,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,1, 0,3,0 + dw 0 + + +youwinTV dw sjingle7 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + DW youwinTVTS +youwinTrip dw sjingle7 + db 0,0,0, 0,0,1, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + DW youwinTRIPTS +youwinCAR dw sjingle7 + db 0,0,0, 0,0,3, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + DW youwinCARTS + +youwinBOAT dw sjingle7 + db 0,0,0, 0,0,5, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 2,5,0, 0,0,0 + DW youwinBOATTS +youwinHOUSE dw sjingle7 + db 0,0,0, 0,0,7, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + DW youwinHOUSETS +youwinPLANE dw sjingle7 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + DW youwinPLANETS + +moneymania dw sjingle9 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW turboTS + +moneymania2 dw sjingle9 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW turbo2TS + +JACKPOT dw sjingle14 +JACKVALUE db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW jackpotTS + +JACKINIT DB 0,0,0, 0,1,0, 0,0,0, 0,0,0 + +S_JACKPOT dw sjingle15 + db 0,0,0, 0,5,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,1, 0,0,0, 0,0,0 + DW 0 + +EXTRA_BALL dw sjingle11 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW _xtraballTS + +RAISING_M dw sjingle16 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW rmTS + + +SKILLSHOt DW sjingle6 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW skillshotTS + +SKILLSHOt_XB DW sjingle6 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW skillshotXBTS + +cashpot DW sjingle5 + ;dd 0,0 ;cp! fel po„ng&bonus +CASHPOTVAL db 0,0,0, 0,0,0, 5,0,7, 5,0,0 + db 0,0,0, 0,0,0, 0,0,0, 5,1,0 + DW cashpotTS + +cashpot5 DW sjingle18 + ;dd 0,0 ;cp! fel po„ng&bonus +CASHPOT5VAL db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 5,1,0 + DW cashpot5TS + +TouchB DW 0 + DB 0 + db 0,0,0, 0,0,0, 0,0,7, 5,0,0 + db 0,0,0, 0,0,0, 0,0,0, 5,3,0 + DW 0 + +TouchC DW 0 + DB 0 + db 0,0,0, 0,0,0, 0,0,7, 5,0,0 + db 0,0,0, 0,0,0, 0,0,0, 5,7,0 + DW 0 + +dollartouch DW 0 + DB 0 + db 0,0,0, 0,0,0, 0,0,7, 5,0,0 + db 0,0,0, 0,0,0, 0,0,0, 5,1,0 + DW 0 + +dollartouch2 DW sjingle20 + db 0,0,0, 0,0,0, 0,0,7, 5,0,0 + db 0,0,0, 0,0,0, 0,0,0, 5,1,0 + DW 0 + +LOOPMILLION DW SJINGLE17 + db 0,0,0, 0,0,1, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,7,5, 0,0,0 + DW millionTS ;CP! + +TVLIT DW SJINGLE6 +; DD 0,0 + db 0,0,0, 0,0,0, 1,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,5, 0,0,0 + DW TVlitTS + +TRIPLIT DW SJINGLE6 +; DD 0,0 + db 0,0,0, 0,0,0, 2,5,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,5, 0,0,0 + DW TRIPlitTS + +CARLIT DW SJINGLE16 +; DD 0,0 + db 0,0,0, 0,0,1, 2,5,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,5, 0,0,0 + DW CARlitTS + +BOATLIT DW SJINGLE21 +; DD 0,0 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + DW BOATlitTS + +HOUSElit DW SJINGLE21 +; DD 0,0 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + DW HOUSElitTS + +PLANELIT DW SJINGLE21 +; DD 0,0 + db 0,0,0, 0,0,0, 5,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,5,0, 0,0,0 + DW PLANElitTS + +LOSTBALL DW S_LOSTBALL +; DD 0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW ball_lostTS +if demover +MINUTE5 DW S_GAMEOVER2 +; DD 0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + db 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW minute5TS +endif +BONUS_X DB ? +TEMPBONUSBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? + + +;****************************************************************************** +;**************************** SOUND STRUCTURES ******************************** +;****************************************************************************** + +sbase Equ 16H + +SBrickNer DB (sbase+0),18,0,3 +SBrickUpp DB (sbase+1),18,0,3 +SBumper DB (sbase+2),18,0,3 +SFlippUpp DB (sbase+3),22,0,3 +SRinner DB 1ch,18,0,3 ;CP? +SNewBall DB 1ch,18,0,3 +SKicker DB 1DH,18,0,3 +SFjader DB 1eh,18,0,3 +SGrop DB (sbase+1),18,0,3 + +;*********************************************************************** + +ebase Equ 15 + +SBygel1 DB (ebase-8),10,0,3 +SBygel2 DB (ebase-8),12,0,3 +SBygel3 DB (ebase-8),8,0,3 +SBygel4 DB (ebase+0),17,0,3 +SBygel5 DB (ebase+0),8,0,3 +S_Touch1 DB (ebase-8),14,0,3 +S_Touch2 DB (ebase+0),10,0,3 +S_MultiLjud DB (ebase-8),10,0,3 +S_ScoreLjud DB (ebase+0),18,0,3 +S_TripCount DB (ebase+0),15,0,3 + +;*********************************************************************** +;JINGLE,NOOFPTNS (0=4EVER),PRIORITY + +;S_MULTILJUD DB 39,1,255 ;255? +emptyjingle equ 55 +springjingle equ 0 +mainjingle equ 1 +lastmainpos equ 6 +S_Empty DB 55,0,0 +S_Spring DB 0,0,0 +S_Main DB 1,0,0 +S_NoHigh DB 18,0,0 +S_Danger DB 44,1,255 +S_Tilt DB 43,1,255 +S_GameOver DB 28,0,0 +S_GameOver2 DB 7,0,0 +S_LostBall DB 30,1,200 +S_AddPlayer DB 53,0,200 + +;S_AddPlayer2 DB 53,0,200 ;cp!? +S_AddPlayer2 DB (ebase+0),20,0,3 ;cp!? + +S_Lock DB 29,1,90 ;Bonus Locked +S_Mystery DB 49,1,150 +S_EndFig DB 52,1,0 +S_Knacket DB 54,1,230 +S_BEATEN DB 54,1,200 ;CP!!! +S_BEATEN_XB DB 54,1,200 + +;*********************************************************************** +SJingle1 DB 23,3,200 ;Billion +SJingle2 DB 27,1,10 ;Multi Bonus +SJingle3 DB 31,1,10 ;Jackpot Lit +SJingle4 DB 32,1,10 ;Ball Locked +SJingle5 DB 33,1,10 ;Cash Pot +SJingle6 DB 34,1,10 ;Ramp Count +SJingle7 DB 35,1,10 ;10 Millions +SJingle8 DB 36,1,10 ;Price lit +SJingle9 DB 38,0,255 ;Money Mania +SJingle10 DB 41,1,255 ;Money Mania End +SJingle11 DB 42,1,120 ;Extra Ball +SJingle12 DB 47,1,10 ;Billion Lit +SJingle13 DB 48,1,10 ;Ball Lock Enabled +SJingle14 DB 50,1,110 ;Jackpot +SJingle15 DB 51,1,150 ;Super Jackpot +SJingle16 DB 45,1,110 ;Million Plus +SJingle17 DB 46,1,50 ;Million +SJingle18 DB 56,1,10 ;5*Cash Pot +SJingle19 DB 57,1,110 ;Extra Ball Lit +SJingle20 DB 58,1,150 ;Spin Wheel Enabled +SJingle21 DB 59,1,110 ;Price(2) Lit +SJingle22 DB 60,1,50 ;Ball Trap Open + + + +;****************************************************************************** +;***************************** DETECTION AREAS ******************************** +;****************************************************************************** + +BumperLista_L DW 44,145,68,169 + DW Bumper1 + DW 74,201,98,226 + DW Bumper2 + DW 11,231,35,247 + DW Bumper3 +BumperLista_U DW -1,-1,-1,-1 + DW -1 + +Bumper2Lista_L DW 50,415,80,470 ;Just to add power + DW Kicker ;No Scores or effects + DW 219,415,249,470 + DW Kicker +Bumper2Lista_U DW -1,-1,-1,-1 + DW -1 + +bumper1 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;CP!!! +bumper2 dw sbumper + db 0,0,0,0,0,0,0,0,1,0,0,0 +bumper3 dw sbumper + db 0,0,0,0,0,0,0,0,1,0,0,0 +kicker dw skicker + db 0,0,0,0,0,0,0,0,0,5,0,0 + +ZonLista_L label word + DW 159,122,180,131 + dw dropa1 + DW 180,127,202,136 + dw dropa2 + DW 139,225,148,244 + dw dropb1 + DW 135,245,144,264 + dw dropb2 + DW 30,264,39,283 + dw dropc1 + DW 26,284,35,303 + dw dropc2 + DW 0 + +AreaLista_L LABEL WORD + DW 230,280,260,330 ;Game On + DW Close1 + DW 305,512,320,576 ;Spring Valid + DW Bygel28 + DW 300,400,320,450 ;Spring invalid? + DW Open1 + DW 102,23,122,45 + DW Bygel11 ;l„ngst upp i loopen + DW 190,25,210,45 + DW Bygel12 ;till h”ger i loopen + DW 103,233,122,254 + DW GropA + DW 1,520,20,555 ;CP! SKA VA X1=0 + DW GropB + DW 1,460,25,500 ;CP! SKA VA X1=0 + DW Close4 + DW 25,435,35,445 + DW Bygel3 + DW 263,435,273,445 + DW Bygel4 + DW 5,455,15,465 + DW Bygel1 + DW 284,455,294,465 + DW Bygel2 + DW 120,130,130,140 ;SKILL + DW Bygel9 + DW 222,104,232,114 + DW Bygel8 + DW 90,152,100,162 + DW Bygel13 + DW 0 + +AreaLista_U LABEL WORD + DW 1,30,20,50 ;CP! SKA VA X1=0 + DW Bygel6 + DW 45,70,70,95 + DW Close3 + DW 31,78,51,98 + DW Bygel10 + DW 290,90,320,125 + DW Bygel5 + DW 155,75,185,105 + DW Bygel7 + DW 222,104,232,114 + DW Bygel8 + DW 120,130,130,140 + DW Bygel9 + DW 1,50,20,70 ;cp x1 ska va 0 + DW Bygel6b +COMMENT\ + DW 180,125,205,160 + DW Open2 + DW 25,200,50,255 + DW Close2 + DW 280,360,300,380 + DW Open5 + DW 25,435,35,445 + DW Open3 +\ + DW 0 + +AREALISTA_L_T LABEL WORD + DW 1,520,20,555 ;CP! SKA VA X1=0 + DW GropB + DW 0 + +AREALISTA_U_T LABEL WORD + DW 0 + + +LEVEL1LISTA LABEL WORD ;AREOR SOM ANGER HOPP TILL LEVEL 1 FR¸N LEVEL 2 + DW 100,70,125,98 + DW 250,70,270,100 + DW 255,85,277,120 + DW 210,110,250,140 + DW 290,125,320,145 + DW 140,125,170,170 + DW 95,155,120,190 + DW 260,450,277,470 + DW 20,450,50,470 + DW 0,525,25,555 + DW -1 + +LEVEL2LISTA LABEL WORD ;AREOR SOM ANGER HOPP TILL LEVEL 2 FR¸N LEVEL 1 + DW 125,70,150,100 + DW 190,75,230,100 + DW 200,80,240,100 + DW 290,105,320,125 + DW 110,110,140,150 + DW -1 + + +;****************************************************************************** +;************************ DEMO MODE LIGHT FLASHING **************************** +;****************************************************************************** + +FLASHLIST LABEL WORD + T2=15 + DW 0,0,T2,T2,1 ;SKILL + + T2=12 + DW 0,0,T2,T2,6 ;lock + + T1=6 ;DOLLAR SIGNS + T2=T1*2 + DW 0,0,T2,T2,2 + DW 0,T2,T2,T2,3 + + T1=6 ;SPIN DOCTORS + T2=T1*8 + DW 0,T1*0,T2,T2,19 + DW 0,T1*1,T2,T2,20 + DW 0,T1*2,T2,T2,21 + DW 0,T1*3,T2,T2,22 + DW 0,T1*4,T2,T2,23 + DW 0,T1*5,T2,T2,24 + DW 0,T1*6,T2,T2,25 + DW 0,T1*7,T2,T2,26 + + T1=12 + T2=T1 + DW 0,0,T2,T2,33 + DW 0,T1,T2,T2,34 + DW 0,0,T2,T2,35 + DW 0,T1+T1/2,T2,T2,36 + DW 0,T1/2,T2,T2,37 + DW 0,T1+T1/2,T2,T2,38 + DW -1 + +;****************************************************************************** +;**************************** LIGHT PALETTE DATA ****************************** +;****************************************************************************** + +NOOFLIGHTS=38 + +LON1 DB 254 ;skill + DB 2 + DB 64,0,0 + DB 95,0,0 + +LON2 DB 251 ;$1 + DB 3 + DB 14,70,64 + DB 8,64,58 + DB 14,83,77 + +LON3 DB 248 ;$2 + DB 3 + DB 14,70,64 + DB 8,64,58 + DB 14,83,77 + +LON4 DB 245 ;loop mil + DB 3 + DB 77,39,0 + DB 83,52,8 + DB 89,70,33 + +LON5 DB 243 ;50M + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON6 DB 240 ;lock + DB 3 + DB 70,70,70 + DB 83,83,83 + DB 95,95,95 + +LON7 DB 235 ;”vre bricka + DB 5 + DB 14,33,52 + DB 8,39,64 + DB 27,52,77 + DB 45,64,77 + DB 70,70,70 + +LON8 DB 230 ;nedre bricka + DB 5 + DB 14,33,52 + DB 8,39,64 + DB 27,52,77 + DB 45,64,77 + DB 70,70,70 + +LON9 DB 225 ;bricka + DB 5 + DB 14,33,52 + DB 8,39,64 + DB 27,52,77 + DB 45,64,77 + DB 70,70,70 + +LON10 DB 220 ;bricka + DB 5 + DB 14,33,52 + DB 8,39,64 + DB 27,52,77 + DB 45,64,77 + DB 70,70,70 + +LON11 DB 218 ;xb + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON12 DB 215 ;Cx5 + DB 3 + DB 58,58,58 + DB 70,70,70 + DB 95,95,95 + +LON13 DB 213 ;tv + DB 2 + DB 8,39,64 + DB 39,64,95 + +LON14 DB 211 ;trip + DB 2 + DB 45,45,45 + DB 70,39,89 + +LON15 DB 209 ;car + DB 2 + DB 8,39,64 + DB 39,64,95 + +LON16 DB 207 ;jp + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON17 DB 204 ;col. prize + DB 3 + DB 58,58,58 + DB 70,70,70 + DB 95,95,95 + +LON18 DB 201 ;spin wheel + DB 3 + DB 14,33,52 + DB 8,39,64 + DB 27,52,77 + +LON19 DB 199 ;spinindikator + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON20 DB 197 + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON21 DB 195 + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON22 DB 193 + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON23 DB 191 + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON24 DB 189 + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON25 DB 187 + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON26 DB 185 + DB 2 + DB 0,58,27 + DB 0,95,0 + +LON27 DB 183 ;1 billion + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON28 DB 181 ;boat + DB 2 + DB 8,39,64 + DB 39,64,95 + +LON29 DB 179 ;house + DB 2 + DB 45,45,45 + DB 70,39,89 + +LON30 DB 177 ;plane + DB 2 + DB 8,39,64 + DB 39,64,95 + +LON31 DB 175 ;mo' money + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON32 DB 173 ;money mania + DB 2 + DB 58,0,0 + DB 95,0,0 + +LON33 DB 170 ;x2 + DB 3 + DB 58,58,58 + DB 70,70,70 + DB 95,95,95 + +LON34 DB 167 ;x3 + DB 3 + DB 58,58,58 + DB 70,70,70 + DB 95,95,95 + +LON35 DB 164 ;x4 + DB 3 + DB 58,58,58 + DB 70,70,70 + DB 95,95,95 + +LON36 DB 161 ;x6 + DB 3 + DB 83,52,8 + DB 89,70,33 + DB 89,95,45 + +LON37 DB 158 ;x8 + DB 3 + DB 83,52,8 + DB 89,70,33 + DB 89,95,45 + +LON38 DB 155 ;x10 + DB 3 + DB 83,52,8 + DB 89,70,33 + DB 89,95,45 + +MATRIXON DB matrixlo ;(MATRIXCOL LOW BYTE) + DB 1 + DB 95,70,27 + +LONEND DB 0 + +LONINDEX LABEL WORD + DW OFFSET LON1 + DW OFFSET LON2 + DW OFFSET LON3 + DW OFFSET LON4 + DW OFFSET LON5 + DW OFFSET LON6 + DW OFFSET LON7 + DW OFFSET LON8 + DW OFFSET LON9 + DW OFFSET LON10 + DW OFFSET LON11 + DW OFFSET LON12 + DW OFFSET LON13 + DW OFFSET LON14 + DW OFFSET LON15 + DW OFFSET LON16 + DW OFFSET LON17 + DW OFFSET LON18 + DW OFFSET LON19 + DW OFFSET LON20 + DW OFFSET LON21 + DW OFFSET LON22 + DW OFFSET LON23 + DW OFFSET LON24 + DW OFFSET LON25 + DW OFFSET LON26 + DW OFFSET LON27 + DW OFFSET LON28 + DW OFFSET LON29 + DW OFFSET LON30 + DW OFFSET LON31 + DW OFFSET LON32 + DW OFFSET LON33 + DW OFFSET LON34 + DW OFFSET LON35 + DW OFFSET LON36 + DW OFFSET LON37 + DW OFFSET LON38 + +MATRIXOFF DB matrixlo + DB 3 + DB 3 DUP(27*64/100) + +;****************************************************************************** +;************************* GATES & BYGLARS DATA AREOR ************************* +;****************************************************************************** +extrn gate1o:byte +extrn gate1c:byte +extrn gate2o:byte +extrn gate2c:byte +extrn gate3o:byte +extrn gate3c:byte +extrn gate4o:byte +extrn gate4c:byte +extrn gate5o:byte +extrn gate5c:byte +extrn gate6o:byte +extrn gate6c:byte,GATE7O,GATE7C,GATE8O,GATE8C + +HOLDBONUSFLAG DB ? + +;****************************************************************************** +;****************************** DOT MATRIX ************************************ +;****************************************************************************** +clearit macro +assume ds:data2 +dw _animation,_clear +assume ds:data +endm + +;********************************************************* +;******* OBS!!! KOM IH¸G ATT ASSUMERA ANIMATIONER TILL DATA2 OCH +;******* SCROLLAR TILL DATA !!!!! +ASSUME DS:DATA2 + +BEATENSCROLL DB 21 DUP (1),'YOU HAVE BEATEN THE HIGHSCORE',21 DUP(1),255 +EXTRABALLTEXT DB 'EXTRA BALL',0 + +Beaten_bh_TS LABEL WORD ;I BALL LOST SEKVENSEN + DW _DOBEATEN,? + CLEARIT + DW _JINGLE,S_BEATEN + DW _LASTJINGLE,EMPTYJINGLE + DW _SCROLL,BEATENSCROLL + DW _FLASHON,10 + DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 + DW _WAIT,10*2*15 + CLEARIT + DW _FLASHOFF,? + DW _JMP,No_Bonus2TS + +BeatenTS LABEL WORD ;I SPELET + DW _DOBEATEN,? + CLEARIT + DW _JINGLE,S_BEATEN + DW _SCROLL,BEATENSCROLL + DW _FLASHON,10 + DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 + DW _WAIT,10*2*5 + CLEARIT + DW _FLASHOFF,? + DW 0 + + + +;***************************************** +party_onTS LABEL BYTE ;Turn on party on . . . + CLEARIT + DW _FLASHON,PARTY_ON_SPEED + DW _PARTYONN,1 + DW _PRINT13,PARTY_ON_TEXT,SW*4/4 ;+16*3/4 ;CP! + DW _PARTYON,1 + DW 0 + +party_offTS LABEL WORD ;Turn it off + CLEARIT + DW _PARTYOFF,1 + DW _FLASHOFF,1 + DW 0 + +;***************************************** + ASSUME DS:DATA2 +clearTS dw _animation,_clear + dw 0 + +tomTS dw _animation,_clear + dw _wait,32767 + dw 0 + +ASSUME DS:DATA + +SHOOTTHEBALLTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PARTYONN,? + DW _PRINT13,SHOOTTHEBALLTEXT,SW*4/4 + DW _PARTYON,? + DW 0 + +TVlitTS label word + clearit + dw _scroll,TVlitTEXT + dw 0 +TVlitTEXT db 21 dup(1),'THE TV IS LIT',21 DUP(1),255 +TRIPlitTS label word + clearit + dw _scroll,TRIPlitTEXT + dw 0 +TRIPlitTEXT db 21 dup(1),'YOU CAN ACTUALLY WIN A TRIP',21 DUP(1),255 + +CARlitTS label word + clearit + dw _scroll,CARlitTEXT + dw 0 +CARlitTEXT db 21 dup(1),'HOW ABOUT A BRAND NEW CAR',21 DUP(1),255 + +BOATlitTS label word + clearit + dw _scroll,BOATlitTEXT + dw 0 +boatLitTEXT db 21 dup(1),'PLAY WELL AND WIN A BOAT',21 DUP(1),255 +HOUSElitTS label word + clearit + dw _scroll,HOUSElitTEXT + dw 0 +HOUSElitTEXT db 21 dup(1),'THE HOUSE CAN BE YOURS',21 DUP(1),255 + +PLANElitTS label word + clearit + dw _scroll,PLANElitTEXT + dw 0 +PLANElitTEXT db 21 dup(1),'YOU CAN WIN A PRIVATE JET',21 DUP(1),255 + +RMTEXT DB ' RAISING MILLIONS',0 +rmTS LABEL WORD + CLEARIT + DW _RULLGARDIN_UPP,rmTEXT,1 + DW _WAIT,40 ;CPW! + DW _CLEAR2 + DW _PRINT13_NUMBER_CENT,RM,SW*4/4+TOTCENT + DW _FLASHON,2 + DW _WAIT,60 + DW _FLASHOFF,1 + DW _CLEAR3 + DW 0 +ASSUME DS:DATA2 +millionTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW 0 +BillionTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_BILLION + DW _ANIMATION,_CLEAR + DW 0 +liteprize_rightTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_liteprize_right + DW _ANIMATION,_CLEAR + DW 0 +liteprize_leftTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_liteprize_left + DW _ANIMATION,_CLEAR + DW 0 +_bonusx2TS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_multiply + dw _animation,_x2 + DW _ANIMATION,_CLEAR + DW 0 +_bonusx3TS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_multiply + dw _animation,_x3 + DW _ANIMATION,_CLEAR + DW 0 +_bonusx4TS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_multiply + dw _animation,_x4 + DW _ANIMATION,_CLEAR + DW 0 +_bonusx6TS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_multiply + dw _animation,_x6 + DW _ANIMATION,_CLEAR + DW 0 +_bonusx8TS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_multiply + dw _animation,_x8 + DW _ANIMATION,_CLEAR + DW 0 +_bonusx10TS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_multiply + dw _animation,_x10 + DW _ANIMATION,_CLEAR + DW 0 +cashpotTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_cashpot + DW _ANIMATION,_CLEAR +assume ds:data + dw _print13_number_cent,cashpotval,SW*4/4+TOTCENT + dw _flashon,1 + dw _wait,60 + dw _flashoff,1 +assume ds:data2 + clearit + DW 0 +cashpot5TS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_cashpot5 + DW _ANIMATION,_CLEAR +assume ds:data + dw _print13_number_cent,cashpot5val,SW*4/4+TOTCENT + dw _flashon,1 + dw _wait,60 + dw _flashoff,1 +assume ds:data2 + clearit + DW 0 +jackpotTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_jackpot + DW _ANIMATION,_CLEAR + DW 0 +youwinTVTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_youwin + DW _ANIMATION,_CLEAR +ASSUME DS:DATA + DW _SCROLL,A_TV_TEXT + DW _END_OF_SPIN,? + DW 0 +ASSUME DS:DATA2 +youwinTRIPTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_youwin + DW _ANIMATION,_CLEAR +ASSUME DS:DATA + DW _SCROLL,A_TRIP_TEXT + DW _END_OF_SPIN,? + DW 0 +ASSUME DS:DATA2 +youwinCARTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_youwin + DW _ANIMATION,_CLEAR +ASSUME DS:DATA + DW _SCROLL,A_CAR_TEXT + DW _END_OF_SPIN,? + DW 0 +ASSUME DS:DATA2 + +youwinBOATTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_youwin + DW _ANIMATION,_CLEAR +ASSUME DS:DATA + DW _SCROLL,A_BOAT_TEXT + DW _END_OF_SPIN,? + DW 0 +ASSUME DS:DATA2 +youwinHOUSETS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_youwin + DW _ANIMATION,_CLEAR +ASSUME DS:DATA + DW _SCROLL,A_HOUSE_TEXT + DW _END_OF_SPIN,? + DW 0 +ASSUME DS:DATA2 +youwinPLANETS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_youwin + DW _ANIMATION,_CLEAR +ASSUME DS:DATA + DW _SCROLL,A_PLANE_TEXT + DW _END_OF_SPIN,? + DW 0 +ASSUME DS:DATA2 +_xtraballTS LABEL WORD + DW _ANIMATION,_CLEAR + DW _ANIMATION,_xtraball + DW _ANIMATION,_CLEAR + DW 0 +ASSUME DS:DATA + +skillshotTS label word + clearit + dw _flashon,1 + dw _number,skillcounter + dw _wait,50 ;cpw! + dw _flashoff,1 + clearit + dw _flashon,5 + dw _print8,skilltext,sw*2*5/4+16*0/4 + dw _wait,80 ;cpw! + dw _flashoff,1 + CLEARIT + dw 0 +skilltext db ' MONEY MANIA AT ',6+'7',' ',0 +skillshotXBTS label word + clearit + dw _flashon,1 + dw _number,skillcounter + dw _wait,50 ;cpw! + dw _flashoff,1 + clearit + dw _flashon,5 + dw _print8,XB_TEXT,sw*2*5/4+16*0/4 + dw _wait,80 ;cpw! + dw _flashoff,1 + CLEARIT + dw 0 +xb_text db '89 LITES EXTRA BALL',0 +flashmatrixTS label word + dw _flashon,8 + dw _wait,75 + dw _flashoff,1 + dw _wait,30000 + dw 0 +rensaTS label word + clearit + dw 0 +rensa2TS label word + clearit + dw _wait,30000 + dw 0 +spinTS label word + dw _print13_number +SPINscoreptr dw offset spinscores + dw SW*4/4+16*2/4 + dw _wait,30000 + dw 0 + + + +Turbo2TS dw _animation,_clear + DW _ANIMATION,_moneyM + DW _ANIMATION,_CLEAR + DW _SCROLL,ALLloopTEXT + dw _jmp,initurboTS + +turboTS dw _animation,_clear + DW _ANIMATION,_moneyM + DW _ANIMATION,_CLEAR + DW _SCROLL,ALLTARGETTEXT +initurboTS dw _animation,_clear + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + dw _countdown,2,5,tm_total ;(the final?) + dw _animation,_clear +TurboMode_endingTS Label Word + DW _JBCDZ,TM_TOTAL,no_tmTS + assume ds:data + dw _rullgardin_upp,tm_total_text,1 + DW _LIGHTFLASH,32 + assume ds:data2 + dw _wait,60 ;CPW! + + dw _animation,_clear + DW _FLASHON,1 + assume ds:data + DW _PRINT13_NUMBER,tm_total,SW*4/4+16*2/4 ;CP! RUTCENT + assume ds:data2 + dw _wait,80 ;CPW! + DW _FLASHOFF,1 + dw _animation,_clear + dw _TurnOffSpecialMode,? + dw 0 +no_tmTS DW _PRINT13,NO_tm_TEXT,SW*4/4 + ASSUME DS:DATA2 + dw _wait,80 ;CPW! + CLEARIT + dw _TurnOffSpecialMode,? + DW 0 + + +go_for_nisse_text db ' MONEY MANIA ',0 +tm_total_Text db ' MONEY MANIA TOTAL',0 +alltargetTEXT db 21 dup(' '),'ALL TARGETS SCORE 500000',21 DUP(' '),255 +allloopTEXT db 21 dup(' '),'ALL LOOPS SCORE 1000000',21 DUP(' '),255 +A_TV_TEXT db 21 dup(' '),'A 72 INCH TV WITH NO COMMERCIALS',21 DUP(' '),255 +A_CAR_TEXT db 21 dup(' '),'A SUPER TURBO EXTRA MEGA COOL CAR',21 DUP(' '),255 +A_TRIP_TEXT db 21 dup(' '),'A TRIP TO BEAUTIFUL SWEDEN',21 DUP(' '),255 +A_BOAT_TEXT db 21 dup(' '),'A NICE 5 MILLION DOLLAR BOAT',21 DUP(' '),255 +A_HOUSE_TEXT db 21 dup(' '),'A HUGE 50 ROOM MANSION',21 DUP(' '),255 +A_PLANE_TEXT db 21 dup(' '),'THE PRIVATE JET WITH CREW',21 DUP(' '),255 +COMMENT\ +Price4ATS String 3,16,16,"_PLAY_WELL_AND_WIN_A_BOAT_" +Price5ATS String 3,16,16,"_THE_HOUSE_CAN_BE_YOURS_" +Price6ATS String 3,16,16,"_YOU_CAN_WIN_THE_PRIVATE_JET_" +Price4TS String 3,16,16,"_A_NICE_µ00°000_DOLLAR_BOAT_" +Price5TS String 3,16,16,"_A_HUGE_50_ROOM_MANSION_" +Price6TS String 3,16,16,"_THE_PRIVATE_JET_WITH_CREW_" +\ + ASSUME DS:DATA +no_tm_text db ' NO BONUS',0 +tm_total db ?,?,?,?,?,?,?,?,?,?,?,? + + + + +;*********************** NYA BALL LOST ******************* + +ASSUME DS:DATA +show_cyclones_text db ' SKILLS X ',0 +show_or_text db ' MONEY MANIA TOTAL',0 + + + +ball_lostTS LABEL WORD + CLEARIT + + DW _PRINT13,GETTING_SICK_TEXT,SW*2/4*2 + DW _JINGLE,S_LOSTBALL + DW _LASTJINGLE,55 + DW _SETDECCOR,70 + DW _WAITJINGLE2,? + DW _JINGLE,S_Empty + CLEARIT + + DW _JBCDZ,BONUSSIFFRORNA,no_bonusTS + DW _PRINT5,show_bonus_TEXT,SW*1*2/4+16*7/4 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + + DW _JBONUSX1,NoBonusXTS + CLEARIT ;CP! CLEARIT ˇR ON™DIGT BRUTAL! + DW _BONUS_X_CALCS,? + DW _PRINT5,BONUS_X_TEXT,SW*1*2/4+16*7/4-4*2 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 +NoBonusXTS LABEL WORD + +no_bonusTS LABEL WORD + DW _JBCDZ,CYCLONECOUNTERBCD,no_cyclonesTS + CLEARIT + DW _CALC_CYCLO ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5_NUMBER,CYCLONECOUNTERBCD,SW*1*2/4-16*10/4 + DW _PRINT5_number,HUNDRATUSEN,SW*1*2/4+13*8/4 + DW _PRINT5,show_CYCLONES_TEXT,SW*1*2/4-16*1/4 + DW _PRINT8_NUMBER_CENT,CYCLONESCOREBCD,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT +no_cyclonesTS LABEL WORD + DW _JBCDZ,TM_TOTAL,no_happy_stewartTS + CLEARIT + DW _CALC_HAPPY ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5,show_or_TEXT,SW*1*2/4+16/4/2 + DW _PRINT8_NUMBER_CENT,TM_TOTAL,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT + +no_happy_stewartTS LABEL WORD + + DW _JBCDZ,BONUSSIFFRORNA,no_bonus2TS + DW _PRINT5,show_totalbonus_TEXT,SW*1*2/4+16*4/4 + + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + + DW _WAIT,60 ;CPW! + CLEARIT + DW _PRINT8_NUMBER,BONUSSIFFRORNA,7*2*SW/4-16*4/4 + DW _FLORPA + DW _WAIT,25 ;CPW! + dw _beaten_matrix +no_bonus2TS LABEL WORD + DW _KOLLA_XXBALL + dw _waitifmulti,2*60 ;cpgnu? (visa poeng lite lengre) + DW _MATRIXLGT,0 + clearit + + DW _CHANGE_PLAYER + CLEARIT + dw _wait,32000 + DW 0 +SORRYNOBONUSTEXT DB ' SORRY ',94,' NO BONUS ',0 + +shoot_again_onTS LABEL BYTE ;Turn on shoot again . . . + CLEARIT + DW _FLASHON,SHOOT_AGAIN_SPEED + DW _SHOOT_AGAIN_ONN,1 + DW _PRINT13,SHOOT_AGAIN_TEXT,SW*4/4 ;+16*3/4 ;CP! + DW _NEW_BALL2 + DW _PARTYON,1 ;CP? + DW 0 + + +out_of_ballsTS LABEL WORD ;ˇr Stewarts fortfarande borta kanske? + CLEARIT + dw _matrixlgt,1 + dw _knacket,? + DW _SETDECCOR,120 + DW _WAITJINGLE2,? +check_xxballTS LABEL WORD + DW _check_xxballs ;utf”r ev xxballs, hoppar sedan till after_xxballs! + +after_xxballTS LABEL WORD + + clearit + dw _check_high,? + DW _MATRIXLGT,0 + DW _2_DEMO_MODE + dw _wait,20000 + +AfterDemoModeTS Label Word + DW _MATRIXLGT,0 + dw _wait,20 + dw _setloop,2,? + DW _INIT_SCORE,? + DW _JMP,UrbanOverTS + +Once_MoreTS LABEL WORD + DW _INIT_SCORE,? + +GameOverTS LABEL WORD + SHOWTIME=80 + DW _WAIT,SHOWTIME + +UrbanOverTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,GAME_OVER_TEXT,SW*2*2/4 + DW _WAIT,30 + DW _FLASHOFF,? + CLEARIT + DW _SHOW_SCORE,OFFSET GAMEOVERTS + dw _loop_,2,offset once_morets + DW _WAIT,SHOWTIME + CLEARIT + DW _WAIT,20 + DW _JMP,ShowHighsTS + DW 0 +GAME_OVER_TEXT DB ' GAME OVER',0 +;TUBORG! + +;********************** SLUT P¸ BALL LOST ******************* + +showithi macro + DW _PRINT13,ALLTIME_TEXT,SW*2/4*2+16/4/2 + dw _wait,40 + + CLEARIT + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_1,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*0),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*0+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_2,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*1),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*1+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_3,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*2),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*2+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_4,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*3),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*3+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + DW _FLASHOFF,1 +endm + + +ShowInfoTS LABEL WORD + CLEARIT + clearit + DW _rullgardin_ned,PLAY_TEXT,1 + dw _wait,40*3 + DW _MATRIXLGT,0 + CLEARIT + DW _PRINT13,JACK_TEXT,SW*4/4 + dw _print13_number,jackvalue,SW*4/4+8*16/4 + DW _FLASHON,1 + dw _wait,40*3 + DW _FLASHOFF,1 + CLEARIT + dw _rullgardin_upp,BONUS_TEXT,1 + dw _wait,40*3 + CLEARIT + showithi + CLEARIT + + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + + DW 0 + +ShowHighsTS LABEL WORD +;TEXTER + CLEARIT + DW _FLASHON,1 + DW _PRINT13,PF_TEXT,SW*2/4*2-2 + dw _wait,120 + DW _CLEAR2 + DW _FLASHOFF,1 + dw _rullgardin_upp,TRS_TEXT,1 + dw _wait,90 + CLEARIT +; DW _FLASHON,1 + DW _SCROLL,PL_TEXT +; dw _wait,40 +; DW _FLASHOFF,1 +;SCROLLA + clearit + DW _SCROLL,SCROLL_TEXT1 +;VISA HIGHSCORE + showithi +;DI UPP ¸ NED! + CLEARIT +; dw _rullgardin_NED,DIGITAL_TEXT,16 +; dw _rullgardin_upp,DIGITAL_TEXT,-13 +; dw _wait,40 +; CLEARIT + dw _rullgardin_NED,fld_TEXT,16 + dw _rullgardin_upp,fld_TEXT,-13 + dw _wait,40 +;SCROLLA SISTA + DW _SCROLL,SCROLL_TEXT2 + CLEARIT + DW _JMP,ShowHighsTS + dw 0 + + +ShowPlayersTS label word + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + dw 0 +first_no_of_playersTS LABEL WORD + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + DW _PRINT13,NOLLA,SW*2*2/4+16*19/4 +no_of_playersTS label word + dw _print5,no_of_players_text,sw*2*10/4+16*1/4 + DW _WAIT_GAME_ON,? + dw 0 + + +tiltTS LABEL WORD + CLEARIT + DW _PRINT13,TILT_TEXT,sw*2/4*2+16*0/4 + DW _WAIT,32767 + DW 0 +TILT_TEXT DB ' TILT TILT TILT',0 +last_text db ' ',0 +flashlast db ' ',0 +slutsiffra db '0',0 +startext db '*',0 +last_pos dw 0 + +if demover +MINUTE5TS LABEL WORD + CLEARIT + dw _scroll,MINUTE5TEXT + DW _FLASHON,1 + dw _print13_number,offset SIFFRORNA,SW*4/4+16*2/4 + DW _WAIT,100 + DW _FLASHOFF,1 + dw _scroll,MINUTE5TEXTB + DW _FADE,256 + DW _WAIT,100 + DW QUIT,? + dw 0 +MINUTE5TEXT DB 21 DUP (1) + DB "WELL DONE PLAYER 1 - YOU HAVE ACHEIVED THE MEGA SCORE OF" + DB 21 DUP (1),255 +MINUTE5TEXTB DB 21 DUP (1) + DB "LOOK OUT FOR PINBALL FANTASIES PC - FULL GAME AVAILABLE SOON" + DB 21 DUP (1),255 +endif +;*********************************************************** + +GETTING_SICK_TEXT DB ' FALLING DOWN',0 + +PARTY_ON_TEXT DB 'PLAY MORE - PLAYER X',0 +ZEROQ DB '0'+7,0 +SHOOT_AGAIN_TEXT DB 'SHOOT AGAIN PLAYER ',0 +SHOOTTHEBALLTEXT DB 'SHOOT THE BALL PL ?',0 + +NO_OF_PLAYERS_TEXT DB 'PLAYERS X',0 +NOLLA DB '7',0 +show_bonus_TEXT DB 'BONUS',0 +show_totalbonus_TEXT DB 'TOTAL*BONUS',0 +BONUS_X_TEXT DB 'BONUS*X*??',0 + +fld_TEXT DB ' FRONTLINE DESIGN',0 + +PF_TEXT DB ' PINBALL FANTASIES',0 +TRS_TEXT DB ' THE REAL SIMULATOR',0 +PL_TEXT DB 21 DUP (' '),'BILLION DOLLAR GAMESHOW',21 DUP (' '),255 +SCROLL_TEXT1 DB 21 DUP (' '),'ADD PLAYERS WITH F1 TO F8',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' '),255 +ALLTIME_TEXT DB 'ALL TIME HIGHSCORES',0 +SCROLL_TEXT2 DB 21 DUP (' '),'FLIP WITH LEFT AND RIGHT ALT SHIFT OR CTRL KEYS',21 DUP (' ') + DB 'PUSH TABLE WITH SPACE',21 DUP (' ') + DB 'CONTROL SPRING WITH DOWN ARROW KEY',' ESC EXITS',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS ',21 DUP (' ') + DB 255 +COMMENT\ +PF_TEXT DB ' PINBALL FANTASIES',0 +TRS_TEXT DB ' THE REAL SIMULATOR',0 +PL_TEXT DB ' PARTY LAND',0 +SCROLL_TEXT1 DB 21 DUP (' '),'ADD PLAYERS WITH F1 TO F8 OR ENTER',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' '),255 +ALLTIME_TEXT DB ' ALL TIMES HIGHSCORE',0 +SCROLL_TEXT2 DB 21 DUP (' '),'FLIP WITH LEFT AND RIGHT ALT SHIFT OR CTRL KEYS',21 DUP (' ') + DB 'PUSH TABLE WITH SPACE',21 DUP (' ') + DB 'CONTROL SPRING WITH DOWN ARROW KEY OR MOUSE',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' ') + DB 'P PAUSES GAME AND M TOGGLES INGAME MUSIC ON AND OFF',21 DUP (' ') + DB 'ESC EXITS AND SAVES NEW HIGHSCORES',21 DUP (' '),255 +\ +DIGITAL_TEXT DB ' DIGITAL ILLUSIONS',0 + +JACK_TEXT DB 'JACKPOT IS',0 +BONUS_TEXT DB ' YOU HAVE XX BONUS',0 ;10 +PLAY_TEXT DB ' PLAYER 8 BALL 8 ',0 ;8,18 + +INFO_TEXT DB 21 DUP (' ') + db '' + DB 21 DUP (1),255 + +playerstext db 'PLAYER 8',0 ;8=1 (L™S EKVATIONEN!) +BALLSTEXT DB 'BALL 8',0 ;8=1 + +hajjskar db 'HIGHSCORE PL X ',92,' ',93,0 +stjaernor db '********************',0 + +;****************************************************************************** + +DATA ENDS + + + + + + + +;****************************************************************************** +;** ** +;** C O D E ** +;** ** +;****************************************************************************** + +CODE SEGMENT PARA PUBLIC 'CODE' + ASSUME CS:CODE,DS:DATA + + +;*********************************** INITS ************************************ + +JUST_ONE_TIME_RESET_TABLE: + CALL SLACK_LIGHTS + RETN + +RESET_VARS PROC NEAR + NIL AX + MOVE ES,DS + MOV DI,OFFSET SIFFRORNA + MOV CX,6 + REP STOSW + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,6 + REP STOSW + MOV DI,OFFSET TM_TOTAL + MOV CX,6 + REP STOSW + + MOV BALLHIGH,FALSE + + MOVEBCD CASHPOTVAL,_500K + + + MOV TVFLAG,FALSE + MOV TRIPFLAG,FALSE + MOV CARFLAG,FALSE + MOV BOATFLAG,FALSE + MOV PLANEFLAG,FALSE + MOV HOUSEFLAG,FALSE + + MOV TVCOUNTER,0 + MOV TRIPCOUNTER,0 + MOV CARCOUNTER,0 + MOV BOATCOUNTER,0 + MOV PLANECOUNTER,0 + MOV HOUSECOUNTER,0 + + MOV BILLION_ENABLED,FALSE + + mov bonusmultiplier,0 + MOV BONUS_X,1 + MOV WORD PTR BONUS_TEXT[10],'8 ' + CALL RESETFLASHLIST + CALL SLACK_LIGHTS +; CALL KILL_FLASHOR ;DOT MATRIX FLASH RESET + call closegate1 + + lighton 7 ;sl„pp upp brickorna + call closegate3 + lighton 8 + call closegate4 + lighton 9 + call closegate5 + lighton 10 + call closegate6 + + endflash 1 + lightflash 1,15 ;blinka med skill-lampan (ska det ligga h„r?) + +;HˇR VAR DEN! ; mov paRTYFLASh,false + + RETN +RESET_VARS ENDP + +WHEN_NEW_GAME_RESET_TABLE: + MOV XxballE,FALSE + MOVA ES,DS + MOV DI,OFFSET CYCLONECOUNTERBCD + MOV CX,12/2 + NIL AX + REP STOSW + MOV CYCLONECOUNTER,0 + + MOV TOP_THREE,FALSE + MOV ALL_SIX,FALSE + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + CALL RESET_VARS + CALL UPDATE_P_STRUC_4_ALL_PLAYERS + CALL INITJACK + ;cleara slutsiffrorna (di alla!) (F”r knacket allts†!!!) + push es + move es,ds + MOV di,offset last_text + mov al,' ' + mov cx,8*2 + rep stosb + MOV di,offset flashlast + mov al,' ' + mov cx,8*2 + rep stosb + pop es +RETN + + +WHEN_NEW_BALL_RESET_TABLE: +; CALL KILL_FLASHOR ;DOT MATRIX FLASH RESET + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + CALL RESET_VARS + CALL P_STRUC_2_VARS + CALL closeGATE7 + CALL closeGATE8 + RETN + + +;****************************************************************************** + + + +DEMO_MUSIC PROC NEAR + CMP HIGHSCORE,TRUE +; JE OOPS_HIGH ;CP! + PLAYJINGLE S_NOHIGH + MOV AL,S_NOHIGH[2] + MOV LASTPRIORITY,AL + MOV LASTJINGLE,9 ;9=NOHIGH ;SVEN + RETN +DEMO_MUSIC ENDP + +GAME_MUSIC PROC NEAR + PLAYJINGLE S_SPRING + MOV AL,S_SPRING+2 + MOV LASTPRIORITY,AL + MOV LASTJINGLE,0 + RETN +GAME_MUSIC ENDP + +;******************************** LOOSE BALL ********************************** +LOOSE_BALL PROC NEAR + MOV LOOSING,TRUE + MOV SCREENFORCE2,576-SH_LO+SPLH ;CP? + CMP HI_RES,TRUE + JNE NOTHIRES16 + MOV SCREENFORCE2,576-SH_HI+SPLH ;CP? +NOTHIRES16: + SETBALLPOS 135,28,0,0,FALSE ;CP!!!!!!! LˇGG BOLLEN P¸ BˇTTRE STˇLLE + mov holdstill,true + MOV ALLOWFLIP,FALSE ;KILL FLIPPERS! + + MOV SPECIALMODE,FALSE + + MOV CURRENT_PRIORITY,0 + EFFECT LOSTBALL + MOV LASTJINGLE,emptyjingle + ADDTASK SOUNDRINNER + RETN + +SOUNDRINNER: + WAITSYNCS 5 + SOUNDEFFECT SRINNER,0 + SUICIDE + +_FLORPA: + MOV CS:LB6CNT,0 ;RESET F™RDR™JNINGS-RˇKNAREN + MOV ADDORPEK,OFFSET ADDOR ;STARTA MED SISTA NUFFRAN + MOV BONUSPEK,OFFSET BONUSSIFFRORNA+11 + + MOV SI,OFFSET BONUSSIFFRORNA ;SPARA BONUSSIFFRORNA + MOV DI,OFFSET TEMPSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW + + MOV DOTRUT,OFFSET DO_FLORPA + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_5 + MOV BX,0 +_NEXTp_5: + MOV NEXT_A,BX + RETN +PLIPPA_SCORE: + mov si,offset siffrorna + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN + +LB6CNT DW ? +DO_FLORPA: + INC CS:LB6CNT + CMP CS:LB6CNT,4 ;CPW! + JE LB6CNTOK + MOV SI,75 + RETN +LB6CNTOK: + MOV CS:LB6CNT,0 + +DO_IT_AGAIN_AND_DO_IT_NOW: + MOV BX,BONUSPEK + MOV AL,[BX] + OR AL,AL ;IS DIGIT ZERO? + JZ DIGIT_IS_ZERO + DEC BYTE PTR [BX] ;RˇKNA NED BONUSEN + JNZ NO_WAITS_TODAY + + IFZEROBCD BONUSSIFFRORNA + JNC NO_WAITS_TODAY + + MOV CS:LB6CNT,-10 ;CPW! +NO_WAITS_TODAY: + + MOV SI,ADDORPEK ;RˇKNA UPP POˇNGEN + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + + SOUNDEFFECT S_SCORELJUD,0 + + JMP STEP_DONE + +DIGIT_IS_ZERO: + ;FLER SIFFROR? + INC ADDORPEK ;NEXT DIGIT IN POˇNGEN + CMP ADDORPEK,OFFSET ADDOR+12 + JE NO_MORE_NUFFROR + DEC BONUSPEK ;NEXT DIGIT IN BONUS + JMP DO_IT_AGAIN_AND_DO_IT_NOW + +STEP_DONE: + ;SHOW BONUSSIFFRORNA & SIFFRORNA + MOV SI_siffror,OFFSET BONUSSIFFRORNA + MOV DI_siffror,7*2*SW/4-16*4/4 ;10 RADER NED, 8 (12-4) TECKEN IN P¸ RADEN!! + MOV TABORT_DIOVRE_FNT,0 + MOV PRINTTASK,OFFSET PRINT8_task + CALL PLIPPA_SCORE + MOV SI,75 ;AVINSTALLERA EJ! + RETN + +NO_MORE_NUFFROR: + mov clear_box_start,7*2*SW/4 + mov clear_box_bredd,16*(12-1)/4-16*4/4 + mov clear_box_hojd,10 + CALL clear_box2 + MOV SI,0 ;AVINSTALLERA! + RETN + +;******************************* ARNESSON + + +;******************************* +disa dw ? +playerQ db ? +hi_pos dw ? +_check_high: + MOV SISA,1 + mov al,players + mov cs:playerQ,0 + MOV CS:DISA,0 + MOV DOTRUT,offset SPINTSEL_IN_HIGH + JMP NORMAL_END + +spintsel_in_high: + + LEA SI,PLAYER_AREA.P_SIFFRORNA + + MOV CX,4 + + add si,cs:disa + add cs:disa,size player_struc + + mov di,offset hi_score_list + + inc cs:playerQ + mov al,cs:playerQ + cmp al,players + jna check_list + mov first_high,false + cmp highscore,true + je no_sad_jingle + + mov current_priority,0 + mov jinglejumpcnt,1 + PLAYJINGLE S_GameOver + mov current_priority,0 + mov no_demomusic,true +no_sad_jingle: + mov highscore,false + mov si,0 + retn ;f„rdig! + +check_list: + push cx + mov cx,12 + mov bx,0 +check_num: + mov al,[di+bx] + cmp [si+bx],al + jb not_beaten + ja beaten + inc bx + loop check_num +not_beaten: + mov bp,false + jmp poppera +beaten: + pop cx + mov cs:hi_pos,cx +;play the happy highscore jingle . . . +;But only the first time!! + cmp first_high,true + je noplay_of_this + mov first_high,true + mov current_priority,0 + mov jinglejumpcnt,1 + mov highscore,true + playjingle_PENETRATE S_GameOver2 ;(HiScore jingle) +noplay_of_this: + mov sisa,1 + mov bp,true + jmp done_hi_check + +poppera: + pop cx + add di,12+3+1 ;12 nuffror, 3 bokst„ver + loop check_list + +done_hi_check: + mov si,1 + cmp bp,true + jne dont_getit +;***************** +;Print 'highscore pl x ( )' and install key-reader TS + + mov al,cs:playerQ + mov hajjskar[13],al + add hajjskar[13],'7' + + mov dotrut,offset get_it_from_keyboard + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +;***************** + mov si,1 + retn + +dont_getit: + retn + +get_it_from_keyboard: +;************ insert in list + push es + move es,ds + mov cx,cs:hi_pos + + mov si,offset hi_score_list+(12+3+1)*3-1 + mov di,offset hi_score_list+(12+3+1)*4-1 + dec cx + jcxz pos4 + + mov ax,12+3+1 + mul cx + mov cx,ax + + std + rep movsb + +pos4: sub di,(12+3+1)-1 + cld + lea si,player_area.p_siffrorna + MOV CX,SIZE PLAYER_STRUC + MOV AL,CS:PLAYERQ + dec al + NIL AH + MUL CX + ADD SI,AX + mov cx,12 + rep movsb ;mov in new hiscore + pop es +;di pekar d„r namnet ska petas in!! + mov cs:nof_chars_to_read,3 + mov cs:place_hi,di + mov scan_code,-1 ;l„s ev. tidigare tangenttryck! + mov dotrut,offset read_keyboardet + mov si,1 + retn +;***************** +place_hi dw ? +nof_chars_to_read dw ? + +read_keyboardet: + push es + mov al,scan_code + cmp al,-1 + je kvar_svar ;ej tryckt! + mov scan_code,-1 + mov bx,offset alfa_keys + xlat + cmp al,0 + je kvar_svar ;felaktigt tecken! + move es,ds + mov di,cs:place_hi + stosb + push ax + mov cs:place_hi,di + mov ax,3 + sub ax,cs:nof_chars_to_read + mov di,offset hajjskar+16 + add di,ax + pop ax + stosb ;skriv te sk„rm texten . . + dec cs:nof_chars_to_read + jnz kvar_svar + mov sisa,60 ;cpw! + mov dotrut,offset wait_a_little + pop es + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + + ;cleara namnet! + push es + move es,ds + mov al,' ' + mov cx,3 + mov di,offset hajjskar+16 + rep stosb ;skriv te sk„rm texten . . + pop es + jmp dont_write_play +kvar_svar: + pop es + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT +dont_write_play: + mov si,sisa + retn + +wait_a_little: + dec si + cmp si,30 ;cpw! + jne dont_blame_me + push si + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset stjaernor + MOVE DI,sw*2*2/4 + call PRINT_TEXT + pop si +dont_blame_me: + cmp si,2 + jnbe retta_oooo + mov dotrut,offset spintsel_in_high + mov si,1 +retta_oooo: + retn +_loop_: + dec cs:looper + JZ NOJUMPER_tomorrow + add bx,4 + mov bx,[bx] + MOV NEXT_A,BX + jmp [bx] + +looper dw ? +_setloop: +NOJUMPER_tomorrow: +;reinstall loop val + mov ax,[bx+2] + mov cs:looper,ax + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp print_end + + + +SHOWER DB ? +player_adr dw ? +_INIT_SCORE: + mov cs:player_adr,0 + sub cs:player_adr,size player_struc + MOV PLAYERSTEXT[7],0+'7' + MOV AL,PLAYERS + MOV CS:SHOWER,AL + inc CS:SHOWER + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end +_SHOW_SCORE: + INC PLAYERSTEXT[7] + add cs:player_adr,size player_struc + DEC CS:SHOWER + JZ NOJUMPER + + + MOV SISA,1 + mov dotrut,offset ShowIt + + cmp CS:SHOWER,1 + je normal_end + + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + RETN + +NOJUMPER: + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end + +ShowIt: + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset PLAYERSTEXT + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +; mov si,offset siffrorna + + mov bx,cs:player_adr + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN +_END_OF_SPIN: + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + PUSH BX + ADDTASK END_OF_SPIN + POP BX + JMP NORMAL_END + +_TurnOffSpecialMode: + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + mov specialmode,false + PUSH BX + ENDFLASH 32 + LIGHTOFF 32 ;CP!? (SLˇCK MONEYMANIA-LAMPAN) + POP BX + mov current_priority,0 + jmp Normal_End +_LIGHTFLASH: + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + PUSH BX + LIGHTFLASH 32,3 + POP BX + jmp Normal_End + +_knacket: + mov dotrut,offset knackrut1 + mov sisa,1 + MOV PLAYER,1 ;F™R CHECK_XXBALL + jmp normal_end + + +;tid mellan knack samt antal knack . . . + knacktid=14 ;12 ;CPW! + nof_banks=15 ;CPW! + +knackrut1: + PLAYJINGLE_PENETRATE S_endfig + MOV LASTJINGLE,62 ;TYST EFTER FULLGJORD PENETRERING + mov dotrut,offset knackrut2 +;g”r text me sista nuffrerna!! + mov cl,players + nil ch + mov di,offset last_text + mov ah,' ' + mov bx,10 ;n„st sista! + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + push es + move es,data + mov bx,0 +make_last: + mov al,ds:[si] + add si,size player_struc + add al,'7' + stosw + mov word ptr offset [flashlast+bx],ax ;kopiera texten f”r senare blink + + add bx,2 + loop make_last + + pop es + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset last_text + MOVE DI,sw*2/4 + call PRINT_TEXT + + + mov si,nof_banks + mov sisa,nof_banks + mov cs:timglas,knacktid + retn +timglas dw ? +knackrut2: + dec cs:timglas + jz no_ret + ret +no_ret: + push si + mov cs:timglas,knacktid + mov ax,last_pos + ;ax=linje adress, ett steg=32 pixel=> 1 steg= 8 adr.(mcgab) + ;(1 char=8*2 pix, 1 steg=2 char) + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOVE DI,sw*2*8/4 + add di,ax + MOV AX,offset startext + call PRINT_TEXT + mov si,1 + + ;knacka(????) fram en ny slutsiffra! + mov ax,slump_countern + mov dx,0 + mov cx,10 + div cx + ;resten i de„ks e mellan n†ll † NI¸ + CMP LAST_POS,DX + JNE ITS_ALRIGHT + NEG DX + ADD DX,9 +ITS_ALRIGHT: + mov last_pos,dx + mov ax,last_pos + add ax,'7' + mov slutsiffra[0],al + sub ax,'7' + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX_PRINT,offset slutsiffra + MOVE DI_PRINT,sw*2*8/4 + add di_print,ax + MOV PRINTTASK,OFFSET PRINT_TEXT + pop si + dec si + cmp si,0 + jne retta_nuda + +;kolla om siffrorna st„mmer f”r n†en . . . + mov cl,players + nil ch + mov si,offset last_text + mov bx,last_pos + add bx,'7' + + mov di,offset flashlast + + move es,data + mov cs:alla_glada,false +READ_NUFFROR: + lodsw + cmp al,bl + jne gladgnu_tu + mov cs:alla_glada,true + add di,2 + loop READ_NUFFROR + jmp ture_sventton_kravdes_har +gladgnu_tu: + mov ax,'**' + stosw + loop READ_NUFFROR +ture_sventton_kravdes_har: + cmp cs:alla_glada,true + je gladgnu + mov si,0 + jmp retta_nuda ;-( ingen glad )-: + +;Om javisst, spela glad gnu † flasha! +gladgnu: + MOV MATRIX_SPEED,3 + MOV MATRIX_CNT,3 + MOV MATRIX_ONOFF,TRUE + MOV MATRIX_IS_FLASHING,TRUE + + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset flashlast + MOVE DI,sw*2/4 + call PRINT_TEXT + + + mov current_priority,0 + PLAYJINGLE S_Knacket + MOV JINGLEJUMPCNT,1 + mov current_priority,0 + mov lastjingle,55 + mov si,0 +retta_nuda: + retn +alla_glada db ? + +_CHECK_XXBALLS: ;OBS! TV¸ ING¸NGAR TILL DENNA RUTIN + ;INPUT: LAST_TEXT, LAST_POS, PLAYER, PLAYERS + ;OUTPUT: FT_PEKARE, PLAYER +TESTNEXTPL: + PUSH BX + + MOV BL,PLAYER + NIL BH + SHL BX,1 + ADD BX,OFFSET LAST_TEXT-2 ;bx pekar p† spelare n's slutsiffra + + MOV AL,[BX] + MOV WORD PTR [BX],'XX' ;DESTROY HIM MY ROBOTS! + SUB AL,'7' + NIL AH + + POP BX + + CMP LAST_POS,AX + JE THIS_ONE ;HAN SKA F¸ XXBALL!!! + + INC PLAYER ;INGEN XXBALL F™R HONOM! + MOV AL,PLAYER + CMP AL,PLAYERS + JNA TESTNEXTPL + + MOV BX,OFFSET after_xxballTS + MOV NEXT_A,BX + JMP [BX] + +THIS_ONE: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + MOV XXBALLE,TRUE + MOV BX,OFFSET shoOt_AGAIN_Onts + MOV NEXT_A,BX + JMP [BX] + +;********************************* + +_KOLLA_XXBALL: + CMP XXBALLE,FALSE + JE HU_ + PUSH BX + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + POP BX + + CMP LIGHTSTATUS[31],TRUE ;LAUGH AGAIN? + JE LET_HIM_SHOOT_AGAIN ;MEGA-HOPP + + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER2 + + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED2 + +HIGHEST_PLAYER2: + MOV BX,OFFSET AFTER_XXBALLTS + MOV NEXT_A,BX + JMP [BX] + +PLAYER_CHANGED2: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + + MOV BX,OFFSET CHECK_XXBALLTS + MOV NEXT_A,BX + JMP [BX] + +;********** + + +_CHANGE_PLAYER: + PUSH BX + CMP HOLDBONUSFLAG,TRUE + JNE NOT_HB_TRUE + MOV SI,OFFSET TEMPSIFFRORNA ;HOLD THE BONUS! + MOV DI,OFFSET BONUSSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW +NOT_HB_TRUE: + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + pop bx + CMP LIGHTSTATUS[31],TRUE ;LAUGH AGAIN? + JE LET_HIM_SHOOT_AGAIN + push bx + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED +HIGHEST_PLAYER: + INC BALLS[11] + MOV AL,NO_OF_BALLS + CMP BALLS[11],AL + JA NO_MORE_BALLS + MOV PLAYER,1 ;NEXT PLAYER IS FIRST PLAYER! + MOV AL,BALLS[11] + ADD AL,'7' ;SEPEKOMPENSERING + MOV BALLSTEXT[5],AL +PLAYER_CHANGED: + + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + +HU_: ADD BX,2 ;TASKSYTEM, HOPPA TILL NˇSTA/AVSLUT + CMP WORD PTR [BX],0 + JNE _NEXTp_7 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_7: + MOV NEXT_A,BX + JMP [BX] + +;GNUERNA +LET_HIM_SHOOT_AGAIN: ;2 ING¸NGAR! + MOV BX,OFFSET shoot_again_onTS + MOV NODOTCOUNT,0 + UPDAT_SCORE + JMP [BX] + +_NEW_BALL2: + PUSH BX + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + JMP HU_ + + +NO_MORE_BALLS: + CALL VARS_2_P_STRUC ;STORE LAST PLAYER'S SCORE TOO! + POP BX + MOV BX,OFFSET out_of_ballsTS + MOV NEXT_A,BX + JMP [BX] + RETN + + +_2_DEMO_MODE: + ADDTASK TO_DEMO_FROM_GAME + JMP HU_ +zeroscore: + push es + move es,ds + mov cx,12/2 + mov ax,0 + mov di,offset siffrorna + rep stosw + pop es + retn + +TO_DEMO_FROM_GAME: + MOV PLAYERS_CP,TRUE + CALL GO_DEMO_MODE ;TO DEMO FROM GAME + MOV SCREENFORCE,BANH-(SH_LO-SPLH) + CMP HI_RES,TRUE + JNE NOTHIRES17 + MOV SCREENFORCE,BANH-(SH_HI-SPLH) +NOTHIRES17: + MOV CARMEN,-1 +; CALL DEMO_MUSIC ;CP! DET SKALL REDAN VARA GJORT! + call zeroscore + CALL SLACK_LIGHTS + MOV ADDPLAYERS,TRUE + SUICIDE + + + + +;TUBORG! + + +COMMENT\ + ;CP! RENSA MATRIX OCH RITA SLUTSIFFROR! + ADDTASK KNACK_SEKVENS + SUICIDE + +KNACK_SEKVENS: + ;CP! KNACKA! +KNACK_KLART: +; ADDTASK LYCKY_GUY ;CP! OM N¸GON FICK EN X-BALL + ADDTASK AFTER_KNACK + SUICIDE + +AFTER_KNACK: + ;CP! KOLLA OM N¸N FICK HIGHSCORE! +HIGH_READY: + ADDTASK SHOW_SCORES + SUICIDE + +SHOW_SCORES: ;NOTE: TRIGGED BY AFTER_KNACK--- AND SHOW_GAME_OVER--- + ;CP! RˇKNARE1 = 0: KOLLA OM ALLA VISADE 2 GGR. + ; VISA SEDAN POˇNG F™R SPELARE (SPELARE-RˇKNARE). + ; = CA 2*60: ADDTASK SHOW_GAME_OVER. +; ADDTASK SHOW_GAME_OVER + ADDTASK TO_DEMO_FROM_GAME + SUICIDE + +SHOW_GAME_OVER: + ;CP! VISA "GAME OVER" + ADDTASK SGO_TASK2 + SUICIDE + +SGO_TASK2: + WAITSYNCS 45 ;CPW! + ADDTASK SHOW_SCORES + SUICIDE +\ + +LOOSE_BALL ENDP + + + +;******************************** NEW_BALL ************************************ + +NEW_BALL_TASK: + WAITSYNCS 60 + CALL NEW_BALL + RETN ;PGA NEWBALL + +NEW_BALL PROC NEAR ;ENDA SˇTTET ATT F¸ UT EN BOLL P¸ BANAN! + MOV LOOSING,FALSE + MOV BALL_DOWN,FALSE + MOV I_UTSKJUT,TRUE + + CALL WHEN_NEW_BALL_RESET + CALL WHEN_NEW_BALL_RESET_TABLE + + MOV HOLDSTILL,TRUE + SETBALLPOS STARTX-5-15,STARTY-5,0,0,FALSE + MOV SCREENFORCE2,-1 ;500 + + CMP ADDPLAYERS,TRUE + JE NOSP + PLAYJINGLE S_SPRING +NOSP: + MOV LASTJINGLE,0 + MOV SCORECHANGED,FALSE + + CMP ADDPLAYERS,TRUE + JE ITS_FROM_DEMO + CALL NEW_BALL_PART_TWO + RETN + +ITS_FROM_DEMO: + ADDTASK SNART_NEW_BALL + RETN + +NEW_BALL_PART_TWO: + ADDTASK SOUNDNEWBALL + ADDTASK SETBALL + ADDTASK SOUNDBRICKUPP + + MOV ALLOWFLIP,TRUE + MOV TILTFLAG,FALSE + MOV TILTCOUNTER,0 + MOV SCORECHANGED,FALSE + RETN + +SOUNDBRICKUPP: + WAITSYNCS 5 + SOUNDEFFECT SBRICKUPP,0 + SUICIDE + +SOUNDNEWBALL: + WAITSYNCS 50 + SOUNDEFFECT SNEWBALL,0 + SUICIDE + +SETBALL: + WAITSYNCS 80 + SETBALLPOS STARTX-5,STARTY-5,10,0,FALSE + MOV HOLDSTILL,FALSE + MOV SCREENFORCE2,-1 + SUICIDE +;FIAT UNO +NEW_BALL ENDP + +MOTA_BORT_INACTIVE_SLINGAN: + ;OBS! AVINSTALLERA DENNA GENOM "MOV I_UTSKJUT,FALSE" + MOV NODOTCOUNT,0 +; UPDAT_INFOBAR ;CP? JOHAN F¸R FIXA DETTA! + CMP I_UTSKJUT,FALSE + JE TA_BORT_MEJ + RETN +TA_BORT_MEJ: + SUICIDE + + +P_STRUC_2_VARS PROC NEAR ;INPUT:PLAYER + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA + + MOVEBCD SIFFRORNA,PLAYER_AREA[BX].P_SIFFRORNA + MOVEBCD BONUSSIFFRORNA,PLAYER_AREA[BX].P_BONUSSIFFRORNA + MOVEBCD CYCLONECOUNTERBCD,PLAYER_AREA[BX].P_CYCLONECOUNTERBCD + MOVA CYCLONECOUNTER,PLAYER_AREA[BX].P_CYCLONECOUNTER + MOVAL TOP_THREE,PLAYER_AREA[BX].P_TOP_THREE + MOVAL ALL_SIX,PLAYER_AREA[BX].P_ALL_SIX + CMP TOP_THREE,FALSE + JE NO_PRIZES + MOV TVFLAG,2 + MOV TRIPFLAG,2 + MOV CARFLAG,2 + LIGHTON 13 + LIGHTON 14 + LIGHTON 15 + CMP ALL_SIX,FALSE + JE NO_PRIZES + MOV BOATFLAG,2 + MOV HOUSEFLAG,2 + MOV PLANEFLAG,2 + LIGHTON 28 + LIGHTON 29 + LIGHTON 30 +NO_PRIZES: + RETN +P_STRUC_2_VARS ENDP + + +VARS_2_P_STRUC PROC NEAR ;INPUT: PLAYER + ;2 ENTRIES TO THIS RUT + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA +VARS_2_P_STRUC_2: ;USED BY WHEN_NEW_GAME_RESET! + MOVEBCD PLAYER_AREA[BX].P_SIFFRORNA,SIFFRORNA + MOVEBCD PLAYER_AREA[BX].P_BONUSSIFFRORNA,BONUSSIFFRORNA + MOVEBCD PLAYER_AREA[BX].P_CYCLONECOUNTERBCD,CYCLONECOUNTERBCD + MOVA PLAYER_AREA[BX].P_CYCLONECOUNTER,CYCLONECOUNTER + MOVAL PLAYER_AREA[BX].P_TOP_THREE,TOP_THREE + MOVAL PLAYER_AREA[BX].P_ALL_SIX,ALL_SIX + RETN +VARS_2_P_STRUC ENDP + + + +;******************************** TILT TILT TILT ***************************** +HE_TILTED PROC NEAR + MOV ALLOWFLIP,FALSE + PLAYJINGLE S_TILT + MOV LASTJINGLE,EMPTYJINGLE + MOV BX,OFFSET tiltTS + CALL DO_MATRIX + CALL RESETFLASHLIST + CALL SLACK_LIGHTS + RETN +HE_TILTED ENDP + +HE_ALMOST_TILTED PROC NEAR + PLAYJINGLE S_DANGER + RETN +ENDP + +;********************************* CHECK SHIFTKEYS **************************** + +CHECK_SHIFTKEYS PROC NEAR + CMP SHIFTPRESSED,TRUE + JNE NO_SHIFT + MOV SHIFTPRESSED,FALSE + +NO_SHIFT: + RETN +CHECK_SHIFTKEYS ENDP + + + +;******************************** GATES ROUTINES ****************************** +opengate1: + mov si,offset gate1o + jmp gogate1 +closegate1: + mov si,offset gate1c +gogate1: + mova es,mask2_2 + mov di,40*96 + mov cx,25 + mov dx,3 + call MOVE_mask_DATA + retn + +opengate2: + mov si,offset gate2o + jmp gogate2 +closegate2: + mov si,offset gate2c +gogate2: + mova es,mask1_2 + mov di,40*305+272/8+1 + mov cx,34 + mov dx,2 + call MOVE_mask_DATA + retn +opengate3: + mov si,offset gate3o + jmp gogate3 +closegate3: + mov si,offset gate3c +gogate3: + mova es,mask1_2 + mov di,136/8+40*227 + mov cx,16 + mov dx,2 + call MOVE_mask_DATA + retn +opengate4: + mov si,offset gate4o + jmp gogate4 +closegate4: + mov si,offset gate4c +gogate4: + mova es,mask1_2 + mov di,136/8+40*247 + mov cx,16 + mov dx,1 + call MOVE_mask_DATA + retn +opengate5: + mov si,offset gate5o + jmp gogate5 +closegate5: + mov si,offset gate5c +gogate5: + mova es,mask1_2 + mov di,32/8+266*40 + mov cx,16 + mov dx,1 + call MOVE_mask_DATA + retn +opengate6: + mov si,offset gate6o + jmp gogate6 +closegate6: + mov si,offset gate6c +gogate6: + mova es,mask1_2 + mov di,24/8+286*40 + mov cx,16 + mov dx,2 + call MOVE_mask_DATA + retn +opengate7: + mov si,offset gate7o + jmp gogate7 +closegate7: + mov si,offset gate7c +gogate7: + mova es,mask2_2 + mov di,22+163*40 + mov cx,20 + mov dx,4 + ADD SI,DX + call MOVE_mask_DATA_b + retn + +opengate8: + mov si,offset gate8o + jmp gogate8 +closegate8: + mov si,offset gate8c +gogate8: + mova es,mask1_2 + mov di,511*40 + mov cx,14 + mov dx,4 + ADD SI,DX + call MOVE_mask_DATA_b + retn + +dropb1: + CALL ADDMONEY + CMP LIGHTSTATUS[7],FALSE + JE DUMRET + EFFECT TOUCHB + soundeffect s_touch2,0 + call opengate3 + lightoff 7 + CMP LIGHTSTATUS[8],FALSE + JNE DUMRET + ADDTASK UP_B + retn +dropb2: + CALL ADDMONEY + CMP LIGHTSTATUS[8],FALSE + JE DUMRET + EFFECT TOUCHB + soundeffect s_touch2,0 + call opengate4 + lightoff 8 + CMP LIGHTSTATUS[7],FALSE + JNE DUMRET + ADDTASK UP_B + retn +UP_B: WAITSYNCS 60 + SOUNDEFFECT SBRICKUPP,0 + LIGHTON 7 + LIGHTON 8 + CALL CLOSEGATE3 + CALL CLOSEGATE4 + SUICIDE +dropC1: + CALL ADDMONEY + CMP LIGHTSTATUS[9],FALSE + JE DUMRET + EFFECT TOUCHC + soundeffect s_touch2,0 + call opengate5 + lightoff 9 + CMP LIGHTSTATUS[10],FALSE + JNE DUMRET + ADDTASK UP_C + retn +dropC2: + CALL ADDMONEY + CMP LIGHTSTATUS[10],FALSE + JE DUMRET + EFFECT TOUCHC + soundeffect s_touch2,0 + call opengate6 + lightoff 10 + CMP LIGHTSTATUS[9],FALSE + JNE DUMRET + ADDTASK UP_C + retn +UP_C: WAITSYNCS 60 + SOUNDEFFECT SBRICKUPP,0 + LIGHTON 9 + LIGHTON 10 + CALL CLOSEGATE5 + CALL CLOSEGATE6 + SUICIDE +;************************* SUPER MODES CHECKS ********************************* + + + +;****************************************************************************** +;***************************** BRICKOR & KNAPPAR ****************************** +;****************************************************************************** +dropa1: + CALL ADDMONEY + soundeffect s_touch2,0 + cmp lightstatus[3],true + je doret1 + lightflash 2,6 + mov lightstatus[2],true + addtask flasha2 + effect dollartouch + retn +dropa2: + CALL ADDMONEY + soundeffect s_touch2,0 + cmp lightstatus[2],true + jne doret2 +doret1: lightflash 2,2 + lightflash 3,2 + addtask flasha23 + effect dollartouch2 + endflash 18 + invertedsyncedflash 18,sfspeed,syncflasher + mov lightstatus[18],true + call opengate1 ;open gate to spin wheel + retn +doret2: lightflash 3,6 + mov lightstatus[3],true + addtask flasha3 + effect dollartouch + retn +flasha2: + waitsyncs 25 + endflash 2 + lighton 2 + suicide +flasha3: + waitsyncs 25 + endflash 3 + lighton 3 + suicide +flasha23: + waitsyncs 60 + endflash 2 + lightoff 2 + endflash 3 + lightoff 3 + suicide + + + +;****************************************************************************** +;********************************** LOWER ************************************* +;****************************************************************************** + + +;*********************************** GAME ON ********************************** + +CLOSE1: ;GAME ON + CMP LASTAREA,OFFSET open1 + JNE NOT_GAME_ON + call closegate2 + MOV ADDPLAYERS,FALSE + PLAYJINGLE S_MAIN + MOV LASTJINGLE,1 + MOV BX,OFFSET PARTY_OFFTS + CALL DO_MATRIX + MOV I_UTSKJUT,FALSE ;TILL¸TER INACTIVE-SLINGAN (DOTMATRIX) + MOV PARTYFLASH,FALSE +NOT_GAME_ON: + RETN + +close4: + call closegate8 + retn + +;***************************** SPRING INVALID ********************************* + +open1: ;SPRING INVALID + MOV SPRING_VALID,FALSE + call opengate2 + RETN + + +;******************************* SPRING VALID ********************************* + +BYGEL28: ;SPRING VALID + MOV SPRING_VALID,TRUE + RETN +;****************************************************************************** +GOT_THE_BILLION: + MOV BILLION_ENABLED,FALSE + EFFECT BILLION + ENDFLASH 27 + LIGHTFLASH 27,4 + ADDTASK TURNOFF_BILLION + mov holdstill,TRUE + setballpos 4,529,0,0,false + RETN +TURNOFF_BILLION: + waitsyncs 5*50 ;cpw! + ENDFLASH 27 + LIGHTOFF 27 + LIGHTOFF 13 + LIGHTOFF 14 + LIGHTOFF 15 + LIGHTOFF 28 + LIGHTOFF 29 + LIGHTOFF 30 + MOV TVFLAG,FALSE + MOV TRIPFLAG,FALSE + MOV CARFLAG,FALSE + MOV BOATFLAG,FALSE + MOV PLANEFLAG,FALSE + MOV HOUSEFLAG,FALSE + MOV TOP_THREE,FALSE + MOV ALL_SIX,FALSE + + mov y_hast,-3500 + SOUNDEFFECT SNEWBALL,0 + MOV HOLDSTILL,FALSE + + SUICIDE +DONT_NOW: + mov holdstill,TRUE + setballpos 4,529,0,0,false + ADDTASK SLAPP_HONOM + RETN +SLAPP_HONOM: + WAITSYNCS 30 + mov y_hast,-3500 + SOUNDEFFECT SNEWBALL,0 + MOV HOLDSTILL,FALSE + SUICIDE + +gropB: call opengate8 + CMP SPECIALMODE,TRUE + JE DONT_NOW + CMP TILTFLAG,TRUE + JE DONT_NOW + CMP BILLION_ENABLED,TRUE + JE GOT_THE_BILLION ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + mov holdstill,true + cmp lightstatus[17],0 + jnz noclose1 + call closegate1 ;st„ng till spin wheel +noclose1: + setballpos 4,529,0,0,false + ;spin wheel (lights 19-26) + playjingle s_mystery + mov nextspintime,offset SPINtimes_hi + cmp hi_res,true + je nohej + mov nextspintime,offset SPINtimes +nohej: + mov bx,nextspintime + mova SPINcounter,[bx] + mov bx,offset rensa2TS + call do_matrix + mov al,19 + add al,spinlight + lightoff al + cmp lightstatus[17],1 + jne nofusk + mov al,0 ;fuska s† att lampan stannar p† r„tt sak! + cmp tvflag,1 + je dosp + mov al,1 + cmp tripflag,1 + je dosp + mov al,2 + cmp carflag,1 + je dosp + mov al,6 + cmp boatflag,1 + je dosp + mov al,5 + cmp houseflag,1 + je dosp + mov al,4 + cmp planeflag,1 + je dosp +nofusk: mov al,byte ptr slump_countern +dosp: cmp hi_res,true + jne noth + sub al,2 +noth: + mov spinlight,al + and spinlight,7 + + MOV SCREENFORCE2,270 + CMP HI_RES,TRUE + JNE NOTHIRES35 + MOV SCREENFORCE2,220 +NOTHIRES35: + + retn +nextSPIN: + add nextspintime,2 + mov bx,nextspintime + cmp word ptr [bx],-1 + je last_spin + mova spincounter,[bx] + mov al,19 + add al,spinlight + lightoff al + inc spinlight + and spinlight,7 + mov al,19 + add al,spinlight + lighton al + mov al,12 + mul spinlight + add ax,offset spinscores + mov spinscoreptr,ax ;addressen till current po„ng + mov bx,offset spinTS + call do_matrix + retn +last_spin: + mov bx,offset flashmatrixTS + call do_matrix + cmp lightstatus[17],1 + jne no_prize_to_collect + addtask you_win + retn +no_prize_to_collect: + addtask end_of_spin + retn +end_of_spin: + waitsyncs 100 ;cpw! + mov screenforce2,-1 + cmp spinscoreptr,offset spinscores + jne adds + mov spinscoreptr,offset tjufemtusen +adds: + mov si,spinscoreptr + mov di,offset siffrorna + call addscorebcd + mov bx,offset rensaTS + call do_matrix + mov holdstill,false + mov y_hast,-3500*TT/NN + endflash 18 + lightoff 18 + suicide +you_win: + cmp top_three,true + je gottopthree + cmp tvflag,2 + je won_tv + endflash 13 + lighton 13 + mov tvflag,2 + MOV CURRENT_PRIORITY,0 + effect youwinTV + jmp endofyw +won_tv:cmp tripflag,2 + je won_trip + endflash 14 + lighton 14 + mov tripflag,2 + MOV CURRENT_PRIORITY,0 + effect youwinTRIP + jmp endofyw +won_trip: + endflash 15 + lighton 15 + ENDFLASH 17 + LIGHTOFF 17 + mov CARflag,2 + MOV CURRENT_PRIORITY,0 + effect youwinCAR + syncedFLASH 16,sfspeed,syncflasher + MOV LIGHTSTATUS[16],1 ;ENABLE JACKPOT + MOV JP_COUNTER,JP_TIME + mov top_three,true + call closegate1 ;st„ng till spin wheel + jmp endofyw +endofyw: + suicide +gottopthree: + cmp BOATflag,2 + je won_BOAT + endflash 28 + lighton 28 + mov BOATflag,2 + MOV CURRENT_PRIORITY,0 + effect youwinBOAT + jmp endofyw +won_BOAT: + cmp HOUSEflag,2 + je won_HOUSE + endflash 29 + lighton 29 + mov HOUSEflag,2 + MOV CURRENT_PRIORITY,0 + effect youwinHOUSE + jmp endofyw +won_HOUSE: + endflash 30 + lighton 30 + ENDFLASH 17 + LIGHTOFF 17 + mov PLANEflag,2 + MOV CURRENT_PRIORITY,0 + effect youwinPLANE +; LIGHTFLASH 16,10 +; MOV LIGHTSTATUS[16],1 ;ENABLE JACKPOT +; MOV JP_COUNTER,JP_TIME + mov all_six,true + call closegate1 ;st„ng till spin wheel + jmp endofyw +LOCK_THE_BALL: + LIGHTON 6 + SYNCEDFLASH 27,SFSPEED,SYNCFLASHER + EFFECT SHOOTTHEBALL + MOV LASTJINGLE,0 ;EFTER BILLION LIT SKA DEN SPELA S_SPRING + SETBALLPOS STARTX,STARTY,10,0,FALSE + mov holdstill,false + MOV CURRENT_PRIORITY,0 + MOV LASTJINGLE,0 + CALL OPENGATE1 ;™PPNA TILL SPIN WHEEL + MOV BILLION_ENABLED,TRUE + RETN +gropA: mov holdstill,true + CMP SPECIALMODE,TRUE + JE RELEASE_HIM + CMP ALL_SIX,TRUE + JE LOCK_THE_BALL + CALL JACKADD + cmp cash5counter,0 + jnz cash_times_5 + effect cashpot +go_cashpot: + addtask release_ball + retn +cash_times_5: + mov cash5counter,10 ;st„ng av cash5lampan + mov cx,5 +addcash: + addbcd cashpot5val,cashpotval + loop addcash + effect cashpot5 + jmp go_cashpot +release_ball: + mov holdstill,true + SETBALLPOS 103,233,0,0,FALSE + waitsyncs 200-40 + lighton 6 + addtask basil_fawlty + mova es,ds + mov di,offset cashpot5val + mov cx,6 + nil ax + rep stosw + suicide +basil_fawlty: ;old chap + waitsyncs 40 + CALL RELEASE_IT + suicide +RELEASE_HIM: + MOV HOLDSTILL,TRUE + LIGHTON 6 + ADDTASK SLAPP2 + RETN +SLAPP2: + SETBALLPOS 103,233,0,0,FALSE + WAITSYNCS 30 + CALL RELEASE_IT + SUICIDE +RELEASE_IT: + lightoff 6 + SOUNDEFFECT SGROP,0 + SETBALLPOS 103,233,100*TT/NN,1700*TT/NN,FALSE + mov holdstill,false + RETN + +bygel5: + CALL CASHADD + CALL ADDMONEY2 + effect bygelsetC ;he's on the right ramp + mov CARcounter,CAR_time + call opengate7 + CMP JP_COUNTER,0 + JZ NO_JP2 + MOV JP_COUNTER,1 ;S¸ ATT LAMPAN SLOCKNAR VID NˇSTA DOWNCOUNT + EFFECT JACKPOT + CALL INITJACK + MOV SJP_COUNTER,SJP_TIME + LIGHTFLASH 5,10 + PLAYJINGLE SJINGLE3 +NO_JP2: + mov TVcounter,TV_time + retn +endcash5: + endflash 12 + lightoff 12 + retn +bygel7: ;clockwise ramp + CALL CASHADD + CALL JACKADD + CALL ADDMONEY2 + effect bygelsetE + CMP SJP_COUNTER,0 + JZ NO_SJP7 + EFFECT S_JACKPOT + MOV SJP_COUNTER,1 ;S¸ ATT DEN SLˇCKS VID NˇSTA DOWNCOUNT +NO_SJP7: + mov cash5counter,cash5_time + endflash 12 + invertedsyncedflash 12,sfspeed,syncflasher ;cash*5 enabled + CMP CARCOUNTER,0 + JZ NOCAR + cmp carFLAG,1 + jAE noCAR + mov CARcounter,0 + mov CARflag,1 + effect CARlit + syncedFLASH 15,sfspeed,syncflasher + cmp tripflag,0 + jz dumret + cmp tvflag,0 + jz dumret + invertedsyncedflash 17,sfspeed,syncflasher + mov lightstatus[17],1 + call opengate1 + retn +noCAR: + cmp PLANEflag,0 + jnz noHOUSE2 + cmp CARcounter,0 + jz noHOUSE2 + CMP TOP_THREE,TRUE + JNE NOHOUSE2 + mov CARcounter,0 + cmp all_six,true + je nohouse2 + jmp show_where_plane + +noHOUSE2: + cmp MBcounter,0 + jz RAISING_MILLIONS + cmp bonusmultiplier,6 + je DUMRET + inc bonusmultiplier + MOV BL,BONUSMULTIPLIER + NIL BH + dec bl + SHL BX,1 + mov al,current_priority ;GNU + cmp al,byte ptr sjingle2+2 ;GNU + ja noeff ;GNU + mov bx,BONUS_ANIMS[BX] + call do_matrix + playjingle sjingle2 +noeff: mov al,bonusmultiplier + dec al + MOV BX,OFFSET BONUSTABLE + XLATB + MOV BONUS_X,AL + CMP AL,10 + MOV BONUS_TEXT[10],' ' + JNE NOTB10 + MOV BONUS_TEXT[10],'8' + XOR AL,AL +NOTB10: + ADD AL,'7' + MOV BONUS_TEXT[11],AL + mov al,bonusmultiplier + add al,32 + lighton al + RETN +RAISING_MILLIONS: + CMP CARCOUNTER,0 + JZ DUMRET + INC RM[5] + INC BYTE PTR RAISING_M[5+2] + EFFECT RAISING_M + RETN +bygel11: + effect bygelsetI + cmp lastarea,OFFSET bygel12 + jne dumret +;he did the reverse loop + cmp BOATcounter,0 + jz noBOAT + CMP BOATflag,0 + JNZ noBOAT + mov BOATcounter,0 + mov BOATflag,1 + effect BOATlit + syncedFLASH 28,sfspeed,syncflasher + cmp HOUSEflag,0 + jz dumret + cmp PLANEflag,0 + jz dumret + invertedsyncedflash 17,sfspeed,syncflasher + mov lightstatus[17],1 + call opengate1 + retn +noBOAT: + cmp HOUSEcounter,0 + jz noHOUSE + cmp HOUSEflag,0 + jnz noHOUSE + mov HOUSEflag,1 + effect HOUSElit + invertedsyncedflash 29,sfspeed,syncflasher + cmp PLANEflag,0 + jz dumret + cmp BOATflag,0 + jz dumret + invertedsyncedflash 17,sfspeed,syncflasher + mov lightstatus[17],1 + call opengate1 + retn +noHOUSE: + retn +bygel12: + CALL ADDMONEY2 + effect bygelsetJ + cmp lastarea,offset bygel11 + jne dumret +;he did the loop... + CMP LIGHTSTATUS[11],0 + JZ NOXB + EFFECT EXTRA_BALL + ENDFLASH 11 + LIGHTOFF 11 + LIGHTON 31 +NOXB: + cmp PLANEcounter,0 + jz noPLANE + CMP PLANEflag,0 + JNZ noPLANE + mov PLANEcounter,0 + mov PLANEflag,1 + effect PLANElit + syncedFLASH 30,sfspeed,syncflasher + cmp HOUSEflag,0 + jz dumret + cmp BOATflag,0 + jz dumret + invertedsyncedflash 17,sfspeed,syncflasher + mov lightstatus[17],1 + call opengate1 + retn + +noPLANE: + call closegate7 ;v„xla till v„nster bana + mov MBcounter,MB_time + mov TRIPcounter,TRIP_time + retn + +close3: + retn +bygel10: + effect bygelsetH + cmp lastarea,offset close3 + jne dumret + CALL JACKADD + CALL CASHADD + CALL ADDMONEY2 + CALL ANOTHER_SKILL + cmp TVcounter,0 ;he did a skill shot + jz notTV + cmp all_six,true + je dumret + cmp top_three,true + je show_where_boat + CMP TVFLAG,0 + JNZ NOTTV + mov TVcounter,0 + mov TVflag,1 + effect TVlit + syncedFLASH 13,sfspeed,syncflasher + cmp carflag,0 + jz dumret + cmp TRIPflag,0 + jz dumret + invertedsyncedflash 17,sfspeed,syncflasher + mov lightstatus[17],1 + call opengate1 + retn +show_where_boat: + CMP BOATflag,0 + jnz dumret + mov bx,offset liteprize_rightTS + call do_matrix + mov boatcounter,boat_time + retn +show_where_house: + CMP HOUSEflag,0 + jnz dumret + mov bx,offset liteprize_rightTS + call do_matrix + mov HOUSEcounter,hOUse_time + retn +show_where_plane: + CMP PLANEflag,0 + jnz dumret + mov bx,offset liteprize_leftTS + call do_matrix + mov PLANEcounter,PLANE_time + retn +notTV: + cmp TRIPcounter,0 + jz noTRIP + cmp all_six,true + je noTRIP + cmp top_three,true + je show_where_house + mov TRIPcounter,0 + cmp TRIPflag,0 + jnz noTRIP + mov TRIPflag,1 + effect TRIPlit + invertedsyncedFLASH 14,sfspeed,syncflasher + cmp carflag,0 + jz dumret + cmp tvflag,0 + jz dumret + invertedsyncedflash 17,sfspeed,syncflasher + mov lightstatus[17],1 + call opengate1 + retn +noTRIP: + RETN +another_skill: + ADDBCD SKILLCOUNTER,ETTA + INC CYCLONECOUNTER + cmp cyclonecounter,1 + je another_skill + MOV AX,CYCLONECOUNTER + MOV BL,6 + DIV BL + OR AH,AH + JZ MONEY_MANIA + + CMP AL,1 + JB NO_PUT + JE NEXT_IS_XB + INC AL + MUL BL + mov bx,offset SKILLTEXT+16 ;vilken text † stoppa in v„rdet i + CMP AX,100 + JB NOIB + INC BX +NOIB: Call Put_In_Text +NO_PUT: + EFFECT SKILLSHOT + retn +money_mania: + CMP AL,1 + JE N_MM + CMP AL,2 + JE X_BALL + TEST AL,1 + JNZ LT_MM +N_MM: + EFFECT MONEYMANIA + MOV TURBOMODE,TRUE + MOV SPECIALMODE,TRUE + MOV LOOPS_N_TRAPS,FALSE + lighton 32 + retn +LT_MM: + EFFECT MONEYMANIA2 + MOV TURBOMODE,TRUE + MOV SPECIALMODE,TRUE + MOV LOOPS_N_TRAPS,TRUE + lighton 32 + retn + +X_BALL: + PLAYJINGLE SJINGLE19 + invertedsyncedFLASH 11,sfspeed,syncflasher + MOV LIGHTSTATUS[11],1 + RETN +NEXT_IS_XB: + EFFECT SKILLSHOT_XB + RETN + ;***************************** +;Input: Ax= NextR„knare Bx=offset till texten +Put_In_Text: + mov di,2 + mov cx,3 +loopen_lejf: + push cx + mov dx,0 + mov cx,10 + div cx + cmp dx,0 + jne nozero + cmp di,0 + jne nozero + mov dx,'*'-'7' +nozero: + add dx,'7' + mov [bx][di],dl + pop cx + dec di + loop loopen_lejf + retn +;***************************** + +;****************************************************************************** +;*********************************** UPPER ************************************ +;****************************************************************************** +bygel1: + effect bygelsetA + soundeffect sbygel1,20h + retn +bygel2: + effect bygelsetA + soundeffect sbygel1,20h + retn +bygel3: + effect bygelsetB + soundeffect sbygel2,0 + retn +bygel4: + effect bygelsetB + soundeffect sbygel2,0 + retn +bygel8: + effect bygelsetF + retn +bygel9: + effect bygelsetG + retn +bygel13: + effect bygelsetK + retn +BYGEL6B: + CALL JACKADD + RETN +BYGEL6: + CALL CASHADD + effect bygelsetD + CMP LOOP_MILLION_COUNTER,0 + MOV LOOP_MILLION_COUNTER,LM_TIME + JZ NO_MILLION + EFFECT LOOPMILLION +NO_MILLION: + CMP LIGHTSTATUS[17],1 + JNE NO_FORVANTAN + PLAYJINGLE SJINGLE21 ;DU KOMMER ATT VINNA ETT PRIS +NO_FORVANTAN: + ENDFLASH 4 + syncedFLASH 4,sfspeed,syncflasher + RETN + + + +;****************************************************************************** +UPDATE_COUNTERS PROC NEAR + downcount SJP_COUNTER,NO_SJP + CMP SJP_COUNTER,2*60 + JNE NOTSJP2 + ENDFLASH 5 + LIGHTFLASH 5,2 + JMP NOTSJP2 +NO_SJP: ENDFLASH 5 + LIGHTOFF 5 + RETN +NOTSJP2: + downcount JP_COUNTER,NO_JP + CMP JP_COUNTER,2*60 + JNE NOTJP2 + ENDFLASH 16 + LIGHTFLASH 16,2 + JMP NOTJP2 +NO_JP: ENDFLASH 16 + LIGHTOFF 16 + RETN +NOTJP2: + synccount syncflasher,sfspeed + downcount SPINcounter,nextSPIN + downcount MBcounter,dumret + downcount TVcounter,dumret + downcount BOATcounter,dumret + downcount TRIPcounter,dumret + downcount CARcounter,dumret + downcount CAsh5counter,endcash5 + cmp cash5counter,2*60 + jne notfastend + endflash 12 + lightflash 12,2 +notfastend: + DOWNCOUNT LOOP_MILLION_COUNTER,ENDLM + CMP LOOP_MILLION_COUNTER,2*60 + JNE NOHST_FLASH + ENDFLASH 4 + LIGHTFLASH 4,3 +NOHST_FLASH: + RETN +ENDLM: ENDFLASH 4 ;STˇNG AV LOOP MILLION LAMPAN + LOFF 4 + RETN +UPDATE_COUNTERS ENDP + + +BUMPER_WAS_HIT_PROC PROC NEAR ;INPUT: HITPOINTER + CALL ADDMONEY + UPDAT_INFOBAR + RETN +BUMPER_WAS_HIT_PROC ENDP +JACKADD PROC NEAR + ADDBCD JACKVALUE,_100K + RETN +INITJACK: + MOVEBCD JACKVALUE,JACKINIT + RETN +ENDP +CASHADD PROC NEAR + ADDBCD CASHPOTVAL,CASHPOTSTEP + RETN +ENDP +CASHADD2 PROC NEAR + ADDBCD CASHPOTVAL,CASHPOTSTEP2 + RETN +ENDP +ADDMONEY PROC NEAR + CMP SPECIALMODE,TRUE + JNE DUMRET + CMP TURBOMODE,TRUE + JNE DUMRET + CMP LOOPS_N_TRAPS,TRUE + JE DUMRET + ADDBCD TM_TOTAL,_500K + RETN +ENDP +ADDMONEY2 PROC NEAR + CMP SPECIALMODE,TRUE + JNE DUMRET + CMP TURBOMODE,TRUE + JNE DUMRET + CMP LOOPS_N_TRAPS,FALSE + JE DUMRET + ADDBCD TM_TOTAL,_1000K + RETN +ENDP + +;********************************* DOT MATRIX CODE **************************** +_PARTYONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV AL,PLAYER + ADD AL,'A'-10 + MOV PARTY_ON_TEXT[18],AL + MOV SHOOTTHEBALLTEXT[19],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END +_SHOOT_AGAIN_ONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV AL,PLAYER + ADD AL,'A'-10 + MOV SHOOT_AGAIN_TEXT[19],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END +_PARTYON: ;BX NOT USED! + MOV PARTYFLASH,TRUE + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET PARTYRUT + JMP NORMAL_END + +_PARTYOFF: ;TURN OFF PARTYON FLASHING (AND BRING BACK SCORE!) + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + JMP NORMAL_END + +_WAIT_GAME_ON: + MOV DOTRUT,OFFSET GONRUT + MOV SISA,44 + JMP NORMAL_END +GONRUT: + CMP ADDPLAYERS,TRUE + JE INTE_SATT_IGANG + MOV SI,0 + RETN +INTE_SATT_IGANG: + MOV SI,34 ;INTE 0 = INTE IG¸NG !! + RETN + + +_JBCDZ: + IFZEROBCD [BX+2] + JC OVERIT_ + MOV BX,[BX+4] + SUB BX,6 +OVERIT_: + ADD BX,6 + CMP WORD PTR [BX],0 + JNE _NEXTp_4 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_4: + MOV NEXT_A,BX + JMP [BX] + RETN +_BONUS_X_CALCS: ;FN: MULTIPLIES THE BONUS + ;INPUT: BONUS_X, BONUSSIFFRORNA + ;OUTPUT: BONUSSIFFRORNA + PUSH BX + PUSH ES + MOVEBCD TEMPBONUSBCD,BONUSSIFFRORNA + MOV CL,BONUS_X + DEC CL + JZ NO_X_BONUS + NIL CH +DO_IT_AGAIN: + PUSH CX + MOV SI,OFFSET TEMPBONUSBCD + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POP CX + LOOP DO_IT_AGAIN +NO_X_BONUS: + MOV BONUS_X_TEXT[8],1+'7' + MOV BONUS_X_TEXT[9],0+'7' + MOV AL,BONUS_X + ADD AL,'7' + CMP AL,10+'7' + JNB ITS10 + MOV BONUS_X_TEXT[8],AL + MOV BONUS_X_TEXT[9],' ' +ITS10: + POP ES + POP BX + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + + +_JBONUSX1: + CMP BONUS_X,1 + JNE QJBX1 + ADD BX,2 + MOV BX,[BX] + MOV NEXT_A,BX + JMP [BX] +QJBX1: MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END +_CALC_HAPPY: + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + PUSHA + MOV SI,OFFSET TM_TOTAL ;ML_TOT -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POPA + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3E + MOV BX,0 +_NEXTp_3E: + MOV NEXT_A,BX + RETN + +_Jmp: + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + JMP [BX] + retn + +_NEXTp_3Q: +_NEXTp_3: + MOV NEXT_A,BX + RETN + +_CALC_CYCLO: + PUSH ES + MOVE ES,DS + MOV DI,OFFSET CYCLONESCOREBCD + NIL AX + MOV CX,12/2 ;(12/6=6!!!) + REP STOSW + POP ES + + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + MOV CX,CYCLONECOUNTER +URBANLOOP: + MOV SI,OFFSET HUNDRATUSEN + MOV DI,OFFSET CYCLONESCOREBCD + PUSH CX BX + CALL ADDSCOREBCD + POP BX CX + LOOP URBANLOOP + + MOV SI,OFFSET CYCLONESCOREBCD ;CYCLONES -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3gg + MOV BX,0 +_NEXTp_3gg: + MOV NEXT_A,BX + RETN + +READ_SPECIAL_MODE_COUNTER PROC NEAR + +;[SEC_ASC] PEKAR P¸ MSD, (0='*') [SEC_ASC+1] PEKAR P¸ LSD +;LˇS AV BARA! + MOVE DS,DATA + cmp [sec_asc],'*' + jne no_end + cmp [sec_asc+1],'0'+7 ;??? + jne no_end + cmp turbomode,true + jne noturboend + playjingle_penetrate Sjingle10 + mov lastjingle,3 +noturboend: + cmp OffRoadmode,true + jne nooffrend + playjingle_penetrate Sjingle10 + mov lastjingle,3 +nooffrend: +; mov specialmode,false + mov offroadmode,false + mov turbomode,false ;mega cp!! + mov current_priority,0 + mov lastjingle,3 + mov jinglejumpcnt,1 +no_end: + RETN +READ_SPECIAL_MODE_COUNTER ENDP + +_DOBEATEN: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + PUSHA + LIGHTON 31 + POPA + JMP NORMAL_END + +CODE ENDS + +;****************************************************************************** +;************************* O T H E R S E G M E N T S ************************ +;****************************************************************************** + +HIDDEN1 SEGMENT PARA PUBLIC 'DATA' + UNDANSPR DB 16*16 DUP (0) + HIDDA DB 576*2 DUP(0) + EXTRN HID1 +HIDDEN1 ENDS + +HIDDEN2 SEGMENT PARA PUBLIC 'DATA' + HIDDA2 DB 576*2 DUP(0) + EXTRN HID2 +HIDDEN2 ENDS + +MASK1_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK12 +MASK1_2 ENDS + +MASK1_1 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK11 +MASK1_1 ENDS + +MASK2_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK22 +MASK2_2 ENDS + +FLIPLEFT SEGMENT PARA PUBLIC 'DATA' +IF CREATE_FLIP_DATA + EXTRN FLIPL +ELSE + EXTRN FLIPL_1 +ENDIF +FLIPLEFT ENDS + +FLIPLEFT2 SEGMENT PARA PUBLIC 'DATA' +IF CREATE_FLIP_DATA + EXTRN FLIPR2 +ELSE + EXTRN FLIPR2_1 +ENDIF +FLIPLEFT2 ENDS + +FLIPRIGHT SEGMENT PARA PUBLIC 'DATA' +IF CREATE_FLIP_DATA + EXTRN FLIPR +ELSE + EXTRN FLIPR_1 +ENDIF +FLIPRIGHT ENDS + +LASTSEG SEGMENT +LASTSEG ENDS + +STAGE1_1 SEGMENT PARA PUBLIC 'DUMP' + extrn st1 +STAGE1_1 ENDS + +STAGE1_2 SEGMENT PARA PUBLIC 'DUMP' + extrn st2 +STAGE1_2 ENDS + +STAGE1_3 SEGMENT PARA PUBLIC 'DUMP' + extrn st3 +STAGE1_3 ENDS + +STAGE1_4 SEGMENT PARA PUBLIC 'DUMP' + extrn st4 +STAGE1_4 ENDS + +MASK1_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK13 +MASK1_3 ENDS + +MASK2_1 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK21 +MASK2_1 ENDS + +MASK2_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK23 +MASK2_3 ENDS + +FLIPGFXSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN FLIPGFX:BYTE +SISTAGFX LABEL BYTE +FLIPGFXSEG ENDS + +SPRINGSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN SPRING +SPRINGSEG ENDS + +;****************************************************************************** + +;*************************** Animations ************************************** +DATA2 SEGMENT PARA PUBLIC 'DATA' +;*********************ANIMATIONS MALL************************* +comment\ + dw 1*4 ;loop pos + dw 15 ;number of loops (1=NOLOOP) + dw 5*4-4 ;length of anim (5 frames * 4 bytes!) (IF LOOP=> -4) +_happy dw happy_1,1;<---start! + dw happy_2,2;<-, loop! + dw happy_3,2; I + dw happy_4,2; I + dw happy_5,2;__I +\ +;*______________________/Billion Dollar GameShow\______________________* +; Bredd: Antal: Anim: +;Multiply 6 7 3 +;2,3,4 . . 12 alla i anim 4 !! +;MoneyMania 40 9 5 +;JackPot 40 37 1 ;Puhhhh vicken j„vla mega anim!!! ¸ den e 15 h”g †x†!!! +;ExtraBall 40 17 2 +;Million 40 16 8 +;Billion 32 16 9 + +;YouWin 24 16 7 ;Olika h”jd p† alla!!! + +extrn a_01_00,a_01_01,a_01_02 ,a_01_03 ,a_01_04 ,a_01_05 ,a_01_06 ,a_01_07 ,a_01_08 ,a_01_09 ,a_01_10 ,a_01_11 ,a_01_12 ,a_01_13 ,a_01_14 ,a_01_15,a_01_16,a_01_17,a_01_18,a_01_19,a_01_20,a_01_21,a_01_22,a_01_23,a_01_24,a_01_25,a_01_26,a_01_27,a_01_28,a_01_29,a_01_30,a_01_31,a_01_32,a_01_33,a_01_34,a_01_35,a_01_36,a_01_37 +extrn a_02_00,a_02_01,a_02_02 ,a_02_03 ,a_02_04 ,a_02_05 ,a_02_06 ,a_02_07 ,a_02_08 ,a_02_09 ,a_02_10 ,a_02_11 ,a_02_12 ,a_02_13 ,a_02_14 ,a_02_15,a_02_16,a_02_17 +extrn a_03_00,a_03_01,a_03_02 ,a_03_03 ,a_03_04 ,a_03_05 ,a_03_06 ,A_03_07 +extrn a_14_00,a_24_00,a_34_00 ,a_44_00 ,a_54_00 ,a_64_00 +extrn a_05_00,a_05_01,a_05_02 ,a_05_03 ,a_05_04 ,a_05_05 ,a_05_06 ,A_05_07,A_05_08 +extrn a_06_00,a_06_01,a_06_02 ,a_06_03 ,a_06_04 ,a_06_05 ,a_06_06,a_06_07 ,a_06_08 ,a_06_09 ,a_06_10 ,a_06_11 +extrn a_07_00,a_07_01,a_07_02 ,a_07_03 ,a_07_04 ,a_07_05 ,a_07_06,a_07_07 ,a_07_08 ,a_07_09 ,a_07_10 ,a_07_11 ,a_07_12 ,a_07_13 ,a_07_14 ,a_07_15 +extrn a_08_00,a_08_01,a_08_02 ,a_08_03 ,a_08_04 ,a_08_05 ,a_08_06,a_08_07 ,a_08_08 ,a_08_09 ,a_08_10 ,a_08_11 ,a_08_12 ,a_08_13 ,a_08_14 ,a_08_15 +extrn a_09_00,a_09_01,a_09_02 ,a_09_03 ,a_09_04 ,a_09_05 ,a_09_06,a_09_07 ,a_09_08 ,a_09_09 ,a_09_10 ,a_09_11 ,a_09_12 ,a_09_13 ,a_09_14 ,a_09_15 +extrn a_10_00,a_10_01,a_10_02 +extrn a_10b00,a_10b01,a_10b02 + + dw 0 ;adressen till bilden f”re den f”rsta i loopen + dw 10 ;antal loopar + dw 2*4 ;adressen till den sista bilden i loopen +_liteprize_right label word + dw a_10_00,15 + dw a_10_01,15 + dw a_10_02,15 + + dw 0 + dw 10 + dw 2*4 +_liteprize_left label word + dw a_10b00,15 + dw a_10b01,15 + dw a_10b02,15 + +MONEYMSPEED=5 + DW 0 + dw 5 + dw 4*9-4 +_moneyM dw a_05_00,MONEYMSPEED + dw a_05_01,MONEYMSPEED + dw a_05_02,MONEYMSPEED + dw a_05_03,MONEYMSPEED + dw a_05_04,MONEYMSPEED + dw a_05_05,MONEYMSPEED + dw a_05_06,MONEYMSPEED + dw a_05_07,MONEYMSPEED + dw a_05_08,MONEYMSPEED + +multiplyspeed=3 + dw 1 + dw 4*7 +_multiply label word + dw a_03_00,multiplyspeed + dw a_03_01,multiplyspeed + dw a_03_02,multiplyspeed + dw a_03_03,multiplyspeed + dw a_03_04,multiplyspeed + dw a_03_05,multiplyspeed + dw a_03_06,multiplyspeed + + dw 1,4*1 +_x2 dw a_14_00,50 + dw 1,4*1 +_x3 dw a_24_00,50 + dw 1,4*1 +_x4 dw a_34_00,50 + dw 1,4*1 +_x6 dw a_44_00,50 + dw 1,4*1 +_x8 dw a_54_00,50 + dw 1,4*1 +_x10 dw a_64_00,50 + +cashpotspeed=2 + dw 1 + dw 4*10 +_cashpot label word + dw a_06_00,cashpotspeed + dw a_06_01,cashpotspeed + dw a_06_02,cashpotspeed + dw a_06_03,cashpotspeed + dw a_06_04,cashpotspeed + dw a_06_05,cashpotspeed + dw a_06_06,cashpotspeed + dw a_06_07,cashpotspeed + dw a_06_08,cashpotspeed + dw a_06_09,90 + +cashpot5speed=2 + dw 4*10-4 + dw 5 + dw 4*12-4 +_cashpot5 label word + dw a_06_00,cashpot5speed + dw a_06_01,cashpot5speed + dw a_06_02,cashpot5speed + dw a_06_03,cashpot5speed + dw a_06_04,cashpot5speed + dw a_06_05,cashpot5speed + dw a_06_06,cashpot5speed + dw a_06_07,cashpot5speed + dw a_06_08,cashpot5speed + dw a_06_09,cashpot5speed + dw a_06_10,20 + dw a_06_11,20 +millionspeed=2 + dw 1 + dw 4*16 +_million label word + dw a_08_00,millionspeed + dw a_08_01,millionspeed + dw a_08_02,millionspeed + dw a_08_03,millionspeed + dw a_08_04,millionspeed + dw a_08_05,millionspeed + dw a_08_06,millionspeed + dw a_08_07,millionspeed + dw a_08_08,millionspeed + dw a_08_09,millionspeed + dw a_08_10,millionspeed + dw a_08_11,millionspeed + dw a_08_12,millionspeed + dw a_08_13,millionspeed + dw a_08_14,millionspeed + dw a_08_15,50 + +Billionspeed=2 + dw 1 + dw 4*16 +_Billion label word + dw a_09_00,Billionspeed + dw a_09_01,Billionspeed + dw a_09_02,Billionspeed + dw a_09_03,Billionspeed + dw a_09_04,Billionspeed + dw a_09_05,Billionspeed + dw a_09_06,Billionspeed + dw a_09_07,Billionspeed + dw a_09_08,Billionspeed + dw a_09_09,Billionspeed + dw a_09_10,Billionspeed + dw a_09_11,Billionspeed + dw a_09_12,Billionspeed + dw a_09_13,Billionspeed + dw a_09_14,Billionspeed + dw a_09_15,50 + +youwinspeed=2 + dw 1 + dw 4*16 +_youwin dw a_07_00,youwinspeed + dw a_07_01,youwinspeed + dw a_07_02,youwinspeed + dw a_07_03,youwinspeed + dw a_07_04,youwinspeed + dw a_07_05,youwinspeed + dw a_07_06,youwinspeed + dw a_07_07,youwinspeed + dw a_07_08,youwinspeed + dw a_07_09,youwinspeed + dw a_07_10,youwinspeed + dw a_07_11,youwinspeed + dw a_07_12,youwinspeed + dw a_07_13,youwinspeed + dw a_07_14,youwinspeed + dw a_07_15,50 + +xtraballspeed=5 + dw 1 + dw 4*17 +_xtraball dw a_02_00,xtraballspeed + dw a_02_01,xtraballspeed + dw a_02_02,xtraballspeed + dw a_02_03,xtraballspeed + dw a_02_04,xtraballspeed + dw a_02_05,xtraballspeed + dw a_02_06,xtraballspeed + dw a_02_07,xtraballspeed + dw a_02_08,xtraballspeed + dw a_02_09,xtraballspeed + dw a_02_10,xtraballspeed + dw a_02_11,xtraballspeed + dw a_02_12,xtraballspeed + dw a_02_13,xtraballspeed + dw a_02_14,xtraballspeed + dw a_02_15,xtraballspeed + dw a_02_16,150 + +jpspeed=4 + dw 1 + dw 4*37 +_jackpot dw a_01_00,jpspeed + dw a_01_01,jpspeed + dw a_01_02,jpspeed + dw a_01_03,jpspeed + dw a_01_04,jpspeed + dw a_01_05,jpspeed + dw a_01_06,jpspeed + dw a_01_07,jpspeed + dw a_01_08,jpspeed + dw a_01_09,jpspeed + dw a_01_10,jpspeed + dw a_01_11,jpspeed + dw a_01_12,jpspeed + dw a_01_13,jpspeed + dw a_01_14,jpspeed + dw a_01_15,jpspeed + dw a_01_16,jpspeed + dw a_01_17,jpspeed + dw a_01_18,jpspeed + dw a_01_19,jpspeed + dw a_01_20,jpspeed + dw a_01_21,jpspeed + dw a_01_22,jpspeed + dw a_01_23,jpspeed + dw a_01_24,jpspeed + dw a_01_25,jpspeed + dw a_01_26,jpspeed + dw a_01_27,jpspeed + dw a_01_28,jpspeed + dw a_01_29,jpspeed + dw a_01_30,jpspeed + dw a_01_31,jpspeed + dw a_01_32,jpspeed + dw a_01_33,jpspeed + dw a_01_34,jpspeed + dw a_01_35,jpspeed + dw a_01_36,50 +;************************************************************** + dw 1 + dw 4*4 +_clear dw clear2,1 + dw clear3,1 + dw clear4,1 + dw clear5,1 +;**************************************************************** +extrn clear2,clear3,clear4,clear5:byte + +DATA2 ENDS + +;****************************************************************************** + + \ No newline at end of file diff --git a/START.ASM b/START.ASM new file mode 100644 index 0000000..17a2f8b --- /dev/null +++ b/START.ASM @@ -0,0 +1,460 @@ +demover=0 +keyhandler=65h +jumps +include c:\source\macros1.asm +rate=20000 +basememreq=585000 ;free mem required +nosoundmemreq=450000 ;if no music, or XMS detected +xmssize=220000 ;minimum XMS size + +GURKA=42 +MONOVALUE=72-GURKA +COLORVALUE=73-GURKA + +.286P + +stacken segment para stack 'stack' + dw 256 dup(0) +stacken ends + +data segment para public 'data' +parm db 30 dup (0) +notfound db 'not loaded! Reinstall program.',13,10,'$' +IF DEMOVER +introname db 'Demo.Prg',0,'$' +ELSE +introname db 'Intro.prg',0,'$' +ENDIF +comment\ +errlist dw offset error1 + dw offset error2 + dw offset error3 + dw offset error4 +error1 db 'Unexpected out of memory! Free up DOS memory!',13,10,'$' +error2 db 'Can not init sound device! Please run the SETSOUND program!',13,10,'$' +error3 db 'Can not find game file! Please reinstall game!',13,10,'$' +error4 db 'Error in game files! Please reinstall game!',13,10,'$' +error5 db ' +unknowntxt db 'Unknown error! Please reinstall game and try again!',13,10,'$' +CRITICAL DB 'Critical Error! (Drive not ready?)',13,10,'$',0 +\ +COMMENT\ +IF DEMOVER +ELSE +BADPARM DB 13,10,"Pinball Fantasies (c) 1993-94 21st Century Entertainment Ltd.",13,10,13,10 + DB "Usage: PINBALL [options]",13,10,13,10 + DB "Options",13,10,13,10 + DB " /h - Hi resolution graphics mode.",13,10,13,10 + DB " /m - Monochrome graphics mode, suitable for monochrome",13,10 + DB " monitors used on a VGA video card." + DB 13,10,13,10,"$" +ENDIF +\ +banor label byte +namelen=12 +if demover +f1name db 'Pland.Prg',0,'$' +else +f1name db 'Table1.Prg',0,'$' +endif +f2name db 'Table2.Prg',0,'$' +f3name db 'Table3.Prg',0,'$' +f4name db 'Table4.Prg',0,'$' +data ends +savestack macro + move cs:s_s,ss + mov cs:s_p,sp +endm +restorestack macro + move ss,cs:s_s + mov sp,cs:s_p +endm + +code segment para public 'code' + assume cs:code,ds:data + +START PROC FAR + PUSHA + PUSH DS + +COMMENT\ +IF DEMOVER +ELSE + MOV CL,DS:[80H] + XOR CH,CH + DEC CX + JLE PARMS_READY ;NO PARMS AT ALL + + MOV BP,CX + MOV SI,82H +READ_MORE: + CALL SKIP_BLANKS + JC PARMS_READY + CMP BYTE PTR DS:[SI],'M' + JE ITS_MONO + CMP BYTE PTR DS:[SI],'m' + JE ITS_MONO + CMP BYTE PTR DS:[SI],'H' + JE ITS_HIRES + CMP BYTE PTR DS:[SI],'h' + JE ITS_HIRES + JMP INVALID_PARMS + +ITS_MONO: + INC SI + MOV CS:MONOMODE,MONOVALUE + JMP READ_MORE + +ITS_HIRES: + INC SI + MOV CS:HI_RES,TRUE + JMP READ_MORE + +SKIP_BLANKS: ;OUTPUT: SI POINTS TO THE NEXT NON-BLANK CHAR + ; -C- IF LAST CHAR IS READ + MOV AX,SI + SUB AX,82H + CMP AX,BP + JE TESTAT_DEN_SISTA + MOV CX,30 +TRY_NEXT: + CMP BYTE PTR DS:[SI],' ' + JE BLANK + CMP BYTE PTR DS:[SI],'/' + JE BLANK + CMP BYTE PTR DS:[SI],'-' + JE BLANK + CMP BYTE PTR DS:[SI],0 + JE BLANK + CLC + RETN +BLANK: MOV AX,SI + SUB AX,82H + INC AX + CMP AX,BP + JE TESTAT_DEN_SISTA + INC SI + LOOP TRY_NEXT +TESTAT_DEN_SISTA: + STC + RETN + +INVALID_PARMS: + POP DS + POPA + MOVE DS,DATA + MOV AX,3 + INT 10H + MOV DX,OFFSET BADPARM + MOV AX,0900H + INT 21H + JMP QUITTA +ENDIF +PARMS_READY: +\ + + POP DS + POPA + + move es,ds + move ds,DATA + mov ax,4a00h + mov bx,es + neg bx + add bx,endofprog + add bx,1024/16 + int 21h ;shrink block + + jmp enough_mem +bannumber db 1 +INT24H_SEG DW ? +INT24H_ADR DW ? +int9_ip dw ? +int9_cs dw ? +int16h_ip dw ? +int16h_cs dw ? +in_hyperspace db false +s_p dw ? +s_s dw ? +scan db ? + +enough_mem: +;install keyints . . . + + move es,0 + + PUSHF + CLI + move int9_ip,es:[9*4] + move int9_cs,es:[9*4+2] + mov es:[9*4],offset keyint + move es:[9*4+2],cs + + move int16h_ip,es:[keyhandler*4] + move int16h_cs,es:[keyhandler*4+2] + mov es:[keyhandler*4],offset int16h + move es:[keyhandler*4+2],cs + + MOVE INT24H_ADR,ES:[24H*4] + MOVE INT24H_SEG,ES:[24H*4+2] + NEEEEJ EQU OFFSET BAD24H + MOVE ES:[24H*4],NEEEEJ + MOVE ES:[24H*4+2],CS + + POPF + move es,DATA + + +ONCE_AGAIN: +;Intro and chooser . . . + move ds,DATA + move es,DATA + pusha + savestack + mov ax,4b00h + mov bx,offset parm + mov dx,offset introname + int 21h ;load and execute program + restorestack + popa + move ds,DATA + mov dx,offset introname + jc file_not_found + + ;Check if any errors was detected in prog.(eg. Mod not found, out of mem) + mov ax,4d00h + int 21h + cmp ax,0 + jne PrintGameErrors + + mov cs:first_time,false + +;******************* cp cp cp! ta bort i riktiga! + +; mov ax,3 +; int 10h +;******************* + +;Ladda bana . . . + cmp bannumber,0 + je quit ;esc pressed!!!! + move ds,DATA + pusha + savestack + mov al,cs:bannumber + mov ah,0 + mov cx,namelen + mul cx + mov dx,ax + add dx,offset banor-namelen + mov bx,offset parm + mov ax,4b00h + int 21h ;load and execute program + restorestack + popa + move ds,DATA + pushf + mov al,cs:bannumber + mov ah,0 + mov cx,namelen + mul cx + mov dx,ax + add dx,offset banor-namelen + popf + jc file_not_found +;********** ska de vara h„r??? + ;Check if any errors was detected in prog.(eg. Mod not found, out of mem) + mov ax,4d00h + int 21h + cmp ax,0 + jne PrintGameErrors +;**************** + jmp once_again +;****************************************************************************** +;* Print Error Messages * +;****************************************************************************** +PrintGameErrors: +jmp Equit +comment\ +; al=1 Out of mem +; al=2 Can't init sound +; al=3 file not found +; al=4 Error in file +; + move ds,data + cmp al,4 + ja unknownerror + mov bx,offset errlist + nil ah + shl ax,1 + add bx,ax + mov dx,[bx] + MOV AX,900H +; INT 21H +; mov ax,900h +; int 21h + jmp quit +unknownerror: + mov dx,offset unknowntxt + MOV AX,900H + INT 21H +; mov ax,900h +; int 21h + jmp quit + +;drv_not_found: + pusha + mov dx,offset error2 + mov ax,900h + int 21h + + mov cx,13 + mov al,0 +; mov di,offset drv + move es,data + rep scasb + inc di + mov al,'$' + stosb + popa +; mov dx,offset drv + jmp yo +\ +file_not_found: + pusha + mov ax,3 + int 10h + popa +yo: + MOV AX,900H + INT 21H + mov dx,offset notfound + mov ax,900h + int 21h + jmp quit + +Equit: +quit: + PUSHF + CLI + move es,0 + move es:[9*4],int9_ip + move es:[9*4+2],int9_cs + move es:[keyhandler*4],int16h_ip + move es:[keyhandler*4+2],int16h_cs + MOVE ES:[24H*4],INT24H_ADR + MOVE ES:[24H*4+2],INT24H_SEG + POPF +quitta: + mov ax,4c00h + int 21h + +TOGGLAR_STRUCEN STRUC + S_BALLS DB ? + S_ANGLE DB ? + S_SCROLLING DB ? + S_IM DB ? + S_RESOLUTION DB ? + S_MODE DB ? +ENDS +RESIDENTA_TOGGLAREN DB SIZE TOGGLAR_STRUCEN DUP (0) + +first_time db true +int16h: + push ax + cmp ax,0 + jne no_first_time_ask + pop ax + mov ah,cs:first_time + mov bl,cs:bannumber + iret +no_first_time_ask: + cmp ax,0ffffh + jne no_savenumber + mov cs:bannumber,bl ;Vilken bana (1-4)!! 0=Esc pressed!! +no_savenumber: + + CMP AX,0100H ;LOKALA TOGGLAREN => RESIDENTA TOGGLAREN + JNE INTE_JAG + ;INPUT: ES:BX=OFFSET TO LOKALA TOGGLAREN + PUSH ES DS + MOVE DS,ES + MOVE ES,CS + MOV SI,BX + LEA DI,RESIDENTA_TOGGLAREN + MOV CX,SIZE TOGGLAR_STRUCEN + REP MOVSB + POP DS ES + JMP INTE_JAG_HELLER +INTE_JAG: + + CMP AX,0200H ;RESIDENTA TOGGLAREN => LOKALA TOGGLAREN + JNE INTE_JAG_HELLER_OXO_KANSKE + ;INPUT: ES:BX=OFFSET TO LOKALA TOGGLAREN + PUSH DS + MOVE DS,CS + MOV DI,BX + LEA SI,RESIDENTA_TOGGLAREN + MOV CX,SIZE TOGGLAR_STRUCEN + REP MOVSB + POP DS + JMP INTE_JAG_HELLER +INTE_JAG_HELLER_OXO_KANSKE: + + CMP AX,12H ;text input + JNE INTE_JAG_heller + pop ax + mov ah,0 + mov al,cs:scan + mov cs:scan,0 + iret +inte_jag_heller: + pop ax + mov ah,0 + mov al,cs:scan ;nja, n†got minskad funktion . . + mov cs:scan,0 + iret + +KEYINT: ;int 9 + PUSHA + PUSH DS + MOV AL,20H + OUT 20H,AL + MOVE DS,DATA + IN AL,60H + PUSH AX + IN AL,61H + OR AL,80H + OUT 61H,AL + AND AL,7FH + OUT 61H,AL + POP AX + test al,80h + jnz no_alfa_key + + MOV CS:SCAN,AL ;REKORDKORV?? +no_alfa_key: + POP DS + POPA + IRET + +BAD24H_RETURN DB 3 ;3=SOMETHING IS WRONG! + ;2=ABORT + ;1=RETRY + ;0=IGNORE +BAD24H: + MOV AL,CS:BAD24H_RETURN + DEC CS:BAD24H_RETURN + JNL JUST_IRET + MOV CS:BAD24H_RETURN,3 +JUST_IRET: + IRET + +START ENDP +CODE ENDS +endofprog segment +ends +end staRT + + + \ No newline at end of file diff --git a/STONES.ASM b/STONES.ASM new file mode 100644 index 0000000..f8f18bf --- /dev/null +++ b/STONES.ASM @@ -0,0 +1,5954 @@ +;****************************************************************************** +;** ** +;** P I N B A L L F A N T A S I E S ** +;** TABLE: STONES 'N' BONES ** +;** ** +;****************************************************************************** + +;BONUS X10 I INACTIVE-SLINGAN +;FEL LOOP COMBO-TEXT +;RIGHT PASSAGE REAGERAR P¸ MISSLYCKADE F™RS™K VID SUPERLˇGEN +;R™DARE MATRIX + +INCLUDELIB STONES.LIB +INCLUDELIB CLEAR.LIB + +FLIPGFXFILESIZE=120 +DATAFLIP SEGMENT PARA PUBLIC 'DATA' +MAXDIFS1=114+5 +MAXDIFS2=114+5 +MAXDIFS=114 +IF CREATE_FLIP_DATA +LEFTFLIPTAB DW 42*(2*MAXDIFS1) DUP (1) +RIGHTFLIPTAB DW 42*(2*MAXDIFS2) DUP (1) +LEFTFLIP2TAB DW ? +TEMPTAB DW 2*MAXDIFS DUP (1) +ELSE + EXTRN LEFTFLIPTAB,RIGHTFLIPTAB,LEFTFLIP2TAB +ENDIF +DATAFLIP ENDS + +DATA SEGMENT PARA PUBLIC 'DATA' + ASSUME CS:CODE,DS:DATA + +;tid mellan knack +KNACKTAB_LO DW 24,23,21,21,18,16,15,13,11,9,8,7,7,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3 +KNACKTABEND_LO LABEL WORD +KNACKTAB_HI DW 22,28,25,25,22,19,18,15,13,11,9,9,8,8,7,7,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3 +KNACKTABEND_HI LABEL WORD +NOF_BANKS_LO=(KNACKTABEND_LO-KNACKTAB_LO)/2 +NOF_BANKS_HI=(KNACKTABEND_HI-KNACKTAB_HI)/2 + +MODUL DB 'TABLE4.MOD',0,'$' + +if create_flip_data +flipdatafil_L DB 'flipdata.4L',0 +flipdatafil_R DB 'flipdata.4R',0 +flipdatafil_L2 DB 'flipdata.4L2',0 +flipgfxfil DB 'flipgfx.4',0 +flipSTRUCfil DB 'flipSTRU.4',0 +endif + +hi_score_file db 'table4.hi',0 +hi_score_list db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 + db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'ICE',0 + db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ANY',0 + db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'J L',0 + +;****************************************************************************** +;******************************** DEFINITIONS ********************************* +;****************************************************************************** +TOTCENT=16 + +;******************** SYSTEM ********************** +MAX_NO_OF_LIGHTS_FLASHING=64 +MAX_NO_OF_WAIT_SYNCS=50 +NOOFTASKS=20 +FIRSTMASK_GFXADR=BPL*(SPLH+BANH) +GFXADR_FOR_FLIP_ANIM_DATA=FIRSTMASK_GFXADR+BPL*40 +springsourceadr=GFXADR_FOR_FLIP_ANIM_DATA-3*23 ;3*23 ˇR F™R FJˇDERNS GFX +springdestadr=(splh+556)*bpl+304/4 +RGB_BUFFER_LEN=1200 + +;******************** FLIPPER & BALL ********************** +BALLH=16 +BANH=576 +STARTX=310-5-BALLH/2+3 +STARTY=543-5-BALLH/2 + +F3TOP=168-15 +F3HEIGHT=53 + +;******************** FLASHING ********************** +SBSPEED=2 +SBFASTTIME=10 +SBSPEED2=2 +SBFASTTIME2=70 +RIPSPEED=2 +RIPFASTTIME=20 +RIPSPEED2=2 +RIPFASTTIME2=70 +GHOSTSPEED=32 +TRIGHOSTSPEED=18 +TOWERSPEED=20 +SKILLSPEED=1 +KICKSPEED=18 +SULPSPEED=16 ;ˇVEN MBSPEED & 2X_SCREAMSSPEED +MBFASTFLASHSPEED=1 +SULPFASTFLASHSPEED=1 +TBSPEED=18 +LOCKSPEED=18 +DEMONSPEED=18 +BIGGHOSTTIME=4*60 +BIGGHOSTSPEED=2 + +MATRIXLO equ 79 +MATRIXHI equ 231 +MATRIXCOLS equ MATRIXLO+MATRIXHI*256 +public matrixlo,matrixhi,matrixcols +BIT2COL DB 0,0,0,0,252,255,48,0 ;flipper f„rgerna + +PARTY_ON_SPEED=3 ;? +SHOOT_AGAIN_SPEED=3 ;? + + +;******************** GAME TIMING ******************** +LEFT_RAMP_MILLE_TIME=5*60 ;(AMIGA:5 SEC) +MB_TIME=11*60 +MB_FASTFLASH_TIME=1*60+30 +SULP_TIME=9*60 ;(AMIGA:9 SEC) +SULP_FASTFLASH_TIME=1*60+30 +SUPERJACK_TIME=13*60 ;(AMIGA:10 SEC) +COMBO_TIME=13*60 ;(AMIGA:12 SEC?) +TOWERHUNT_TIME=40*60 ;CP. +MULTIDEMON_TIME=35*60 ;CP! + +;******************** HOLES ********************** +DROPX=140 +DROPY=210 +TOWERX=148-BALLH/2+1 +TOWERY=150-BALLH/2+1 +TOWERXS=0*TT/NN +TOWERYS=-4000*TT/NN +WELLX=283-BALLH/2 +WELLY=253-BALLH/2 +WELLXS=-800*TT/NN +WELLYS=2000*TT/NN +VAULTX=10-BALLH/2 +VAULTY=540-BALLH/2 +VAULTXS=0 ;*TT/NN +VAULTYS=-2880 ;*TT/NN cpe + + +;****************************************************************************** +;****************************** GENERAL VARS ********************************** +;****************************************************************************** + +BCD0 DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 +BCD510 DB 0,0,0, 0,0,0, 0,0,0, 5,1,0 +BCD750 DB 0,0,0, 0,0,0, 0,0,0, 7,5,0 +BCD1000 DB 0,0,0, 0,0,0, 0,0,1, 0,0,0 +BCD1010 DB 0,0,0, 0,0,0, 0,0,1, 0,1,0 +BCD1020 DB 0,0,0, 0,0,0, 0,0,1, 0,2,0 +BCD1050 DB 0,0,0, 0,0,0, 0,0,1, 0,5,0 +BCD1040 DB 0,0,0, 0,0,0, 0,0,1, 0,4,0 +BCD1080 DB 0,0,0, 0,0,0, 0,0,1, 0,8,0 +BCD10000 DB 0,0,0, 0,0,0, 0,1,0, 0,0,0 +BCD10030 DB 0,0,0, 0,0,0, 0,1,0, 0,3,0 +BCD10020 DB 0,0,0, 0,0,0, 0,1,0, 0,2,0 +BCD10060 DB 0,0,0, 0,0,0, 0,1,0, 0,6,0 +BCD10070 DB 0,0,0, 0,0,0, 0,1,0, 0,7,0 +BCD17520 DB 0,0,0, 0,0,0, 0,1,7, 5,2,0 +BCD27530 DB 0,0,0, 0,0,0, 0,2,7, 5,3,0 +BCD50010 DB 0,0,0, 0,0,0, 5,0,0, 0,1,0 +BCD50030 DB 0,0,0, 0,0,0, 5,0,0, 0,3,0 +BCD1000000 DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 +BCD5000000 DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 +BCD50000000 DB 0,0,0, 0,5,0, 0,0,0, 0,0,0 + +NEXTJUMP DW ? +CYCLONECOUNTER DW ? ;HEXADECIMAL +cyclonecounterBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +CYCLONESCOREBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? ;BCD CODED +XXBALLE DB ? +KEY_DISABLED DB ? +SB_DISABLED DB ? +RIP_DISABLED DB ? +KEY_ROL_DISABLED DB ? +RIP_ROL_DISABLED DB ? +GHOSTCOUNTER DB ? ;0-7 ARE VALID VALUES, 8 GHOSTS +GHOST_FLASHING DB ? ;BOTH THE TRIANGLE AND THE GHOST ITSELF +LEFT_RAMP_DOWN_COUNTER DW ? +TOWER_OPEN DB ? +SKILLKEY DB ? +SKILLSCOREBCD DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 +KICK_BACK_FLASHING DB ? +TBSYNCER DB ? +MB_FLASHING DB ? +_2X_SCREAMS_FLASHING DB ? +SULP_FLASHING DB ? +LOCK1_FLASHING DB ? +LOCK2_FLASHING DB ? +SULPSYNCER DB ? +XBALLS DB ? +TBMILLIONFLASHING DB ? +TB5MFLASHING DB ? +XBALLFLASHING DB ? +JACKPOTFLASHING DB ? +SJACKPOTFLASHING DB ? +HOLDBONUSFLASHING DB ? +DOUBLEBONUSFLASHING DB ? +HOLDBONUSFLAG DB ? +SULP_SCORE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 +BPOINTER DB ? +SB_DISABLE_AREA DB 11 DUP(0) ;0-3:BONE 6-10:STONE 4-5:UNUSED +HIGH_VAULT DB ? +TBNEXT DW ? +REMAL DB ? +MBDOWNCOUNTER DW ? +SULPDOWNCOUNTER DW ? +COMBODOWNCOUNTER DW ? +COMBOSTAGE DB ? +TOWERHUNTMODE DB ? +TOWERHUNTMODEORIG DB ? +TOWERHUNTSTAGE DB ? +TOWERHUNTDOWNCOUNTER DW ? +MULTIDEMONDOWNCOUNTER DW ? +MULTIDEMONMODE DB ? +LOCKVAULTFLASHING DB ? +LOCKWELLFLASHING DB ? +HOLDMULTICOUNTER DB ? +PARTYFLASH DB ? +DEMONFLASHING DB ? +FIX_TELEPORT_BUG DB ? +GHOST_INH_SB DB ? +BONUS_X DB ? +TEMPBONUSBCD DB ?,?,?, ?,?,?, ?,?,?, ?,?,? +FROM_DEMO_MODE DB ? +TURBOBACKUP DB ? +OFFROADBACKUP DB ? +WAS_SPECIAL DB ? +IN_VAULT DB ? ;TILT +IN_WELL DB ? ;TILT +IN_TOWER DB ? ;TILT + +JackValue DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;Jackpot Current +JackRaise DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 ;Jackpot Step +JackInit DB 0,0,0, 0,1,0, 0,0,0, 0,0,0 ;Jackpot Start + +TOWERVALUE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 +TOWERSTART DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 +TOWERADDS DB 0,0,0, 0,0,0, 2,2,3, 4,7,0 + +VAULTVALUE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 +VAULTSTART DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 +VAULTADDS DB 0,0,0, 0,0,0, 0,8,2, 1,5,0 + +WELLVALUE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 +WELLSTART DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 +WELLADDS DB 0,0,0, 0,0,0, 0,6,4, 1,9,0 + +GHOST_STRUC STRUC + G_LIGHTNO DB ? ;LIGHTNO OF THE GHOST + G_ROUTINE DW ? ;RUT CALLED WHEN GHOST COLLECTED + G_EFFECT DW ? ;EFFECT DONE WHEN GHOST COLLECTED + G_SBEFF DW ? ;EFFECT DONE WHEN GHOST ENABLED +ENDS + +GHOSTAREA LABEL BYTE ;"R9b" + DB 32 ;BAT + DW BATMANRUT,BATMAN,EVENT_LIT1 + DB 34 ;BLUE GHOST + DW TOWERHUNTRUT,TOWERHUNT,EVENT_LIT2 + DB 35 ;GREEN SMILER + DW SMILERRUT,SMILER,EVENT_LIT3 + DB 37 ;RED DEVIL + DW REDDEVILRUT,REDDEVIL,EVENT_LIT4 + DB 36 ;YELLOW POLERGEIST + DW GHOSTHUNTRUT,GHOSTHUNT,EVENT_LIT5 + DB 31 ;BLUE OCTOPUSSY + DW MULTIDEMONRUT,MULTIDEMONS,EVENT_LIT6 + DB 33 ;MUMMY HEAD + DW MUMMYHEADRUT,MUMMYHEAD,EVENT_LIT7 + DB 38 ;GRIM PEAPER + DW GRIMRUT,GRIMR,EVENT_LIT8 + + +;****************************************************************************** +;********************************* EFFECTS ************************************ +;****************************************************************************** + +EFFECT_STRUC STRUC + THEJINGLE DW ? + TSCORE DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + TBONUS DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;12 ST!! + DOTMATRIX DW ? +ENDS + +SHOOTTHEBALL DW SJINGLE2 ;SJINGLE0 ;CP? + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DW SHOOTTHEBALLTS + +MULTIDEMONS DW 0 + DB 100 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DW MULTIDEMONTS + +EVENT_LIT DW 0 + DB 0 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW 0 + +EVENT_LIT1 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT1TS + +EVENT_LIT2 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT2TS + +EVENT_LIT3 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT3TS + +EVENT_LIT4 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT4TS + +EVENT_LIT5 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT5TS + +EVENT_LIT6 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT6TS + +EVENT_LIT7 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT7TS + +EVENT_LIT8 DW SJINGLE3 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW EVENT8TS + +SMILER DW SJINGLE3B + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DW SMILERTS + +TowerHunt1 DW SJingle5 + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,5,0, 0,0,0 + DW Tower1TS + +TowerHunt2 DW SJingle5 + DB 0,0,0, 0,1,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DW Tower2TS + +TowerHunt3 DW SJingle5 + DB 0,0,0, 0,2,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 2,0,0, 0,0,0 + DW Tower3TS + +BATMAN DW SJINGLE7 + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DW BATMANTS + +REDDEVIL DW SJINGLE21 + DB 0,0,0, 0,1,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 + DW REDDEVILTS + +MUMMYHEAD DW SJINGLE21 + DB 0,0,0, 0,1,5, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,1, 5,0,0, 0,0,0 + DW MUMMYHEADTS + +LOOPCOMBO DW SJINGLE8 + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW LOOPCOMBOTS + +GETXBALL DW SJINGLE5 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW GETXBALLTS + +RIPEFF DW 0 + DB 40 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW RIPEFFTS + +SKILLSHOT DW SJINGLE9 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW SKILLSHOTTS + +OPENTOWER DW SJINGLE6 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW OPENTOWERTS + +GHOSTHUNT DW SJINGLE17 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DW OFFROADTS + +GRIMR DW SJINGLE19 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW TURBOTS + +TOWERHUNT DW SJINGLE6 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 ;CP? + DW TOWERHUNTTS + +MILLION DW SJINGLE9 + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DW MILLIONTS + +TMillion DW SJINGLE9 + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 + DW TMILLIONANIMTS + +Million5 DW SJingle7 + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DW Million5TS + +TMillion5 DW SJingle7 + DB 0,0,0, 0,0,5, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DW TMillion5TS + +ExtraBall DW SJingle13 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW ExtraBallTS + +Million10 DW SJingle21 + DB 0,0,0, 0,1,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 5,0,0, 0,0,0 + DW Million10TS + +Million20 DW SJingle4 + DB 0,0,0, 0,2,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,2, 0,0,0, 0,0,0 + DW Million20TS + +HoldBonus DW SJingle24 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,2,0, 0,0,0 + DW HoldBTS + +DoubleBonus DW SJingle23 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,2,0, 0,0,0 + DW DoubleBTS + +Jackpot DW SJingle10 + DB 0,0,0, 0,0,1, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 2,5,0, 0,0,0 + DW JackpotTS + +SuperJack DW SJingle1 + DB 0,0,0, 0,5,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,2, 0,0,0, 0,0,0 + DW SuperJackTS + +MillionPlus DW SJingle9 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW MillionPlusTS ;CP! + +ScoreVault DW SJingle14 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW VaultValueTS + +ScoreWell DW SJingle12 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW WellValueTS + +ScoreTower DW SJingle5 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW TowerValueTS + +M2 DW SJingle11 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 + DW M2TS + +M4 DW SJingle11 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 + DW M4TS + +M6 DW SJingle11 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 + DW M6TS + +M8 DW SJingle11 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 + DW M8TS + +M10 DW SJingle11 + DB 0,0,0, 0,0,0, 1,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,2,5, 0,0,0 + DW M10TS + +JUMP_AT DW SJINGLE9B + DB 0,0,0, 0,0,0, 0,2,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW JUMP_AT_TS + +JUMP_AT2 DW SJINGLE9B + DB 0,0,0, 0,0,0, 0,2,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW JUMP_AT2_TS + +LOSTBALL DW S_LOSTBALL + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DB 0,0,0, 0,0,0, 0,0,0, 0,0,0 + DW ball_lostTS + +ETTA DB 0,0,0,0,0,0,0,0,0,0,0,1 +HUNDRATUSEN DB 0,0,0,0,0,0,1,0,0,0,0,0 + +;****************************************************************************** +;**************************** SOUND STRUCTURES ******************************** +;****************************************************************************** + +;SAMPLE,PERIOD,EFFECT,CHANNEL + +sbase Equ 19 + +SBumper DB 18H,18,0,3 +SFlippUpp DB 19H,22,0,3 +SRinner DB 1CH,18,0,3 +SNewBall DB 1CH,18,0,3 +SKicker DB 1DH,18,0,3 +SFjader DB 1EH,18,0,3 +SGrop DB 17H,18,0,3 + +;*********************************************************************** + +ebase Equ 10 +SBygel1 DB (ebase-4),10,0,3 +SBygel2 DB (ebase-4),12,0,3 +S_Touch1 DB (ebase-8),14,0,3 +S_Touch2 DB (ebase+0),10,0,3 +S_MultiLjud DB (ebase-8),10,0,3 +S_ScoreLjud DB (ebase+0),18,0,3 +S_AddPlayer2 DB (ebase+0),18,0,3 +;*********************************************************************** + +;JINGLE,NOOFPTNS (0=4EVER),PRIORITY + +EMPTYJINGLE EQU 52 +SPRINGJINGLE EQU 0 +MAINJINGLE EQU 1 +LASTMAINPOS EQU 9 +S_Empty DB 52,0,0 +S_Spring1 DB 33,0,0 +S_Spring DB 0,0,0 +S_Main DB 1,0,0 +S_NoHigh DB 21,0,0 +S_Danger DB 37,1,255 +S_Tilt DB 38,2,255 +S_GameOver DB 40,0,0 +S_GameOver2 DB 39,0,0 +S_LostBall DB 62,1,200 +S_AddPlayer DB 33,0,200 +S_Knacket DB 44,1,230 +S_EndFig DB 43,1,0 +S_BEATEN DB 61,1,200 +S_BEATEN_XB DB 42,1,200 +;*********************************************************************** + +SJINGLE0 DB 0,0,1 ;TVINGA UTSKJUT +SJingle1 DB 24,1,200 ;Super Jackpot +SJingle2 DB 26,1,100 ;Lock ball +SJingle3 DB 27,1,50 ;Event lit +SJingle3B DB 27,1,51 ;Event lit +SJingle4 DB 28,1,100 ;20 Mil +SJingle5 DB 29,1,110 ;X Ball lit +SJingle6 DB 30,1,75 ;Tower Open +SJingle7 DB 31,1,100 ;5 millions +SJingle8 DB 32,1,80 ;Jackpot Lit / Loop Combo +SJingle9 DB 34,1,70 ;Million / Millions+ +SJingle9B DB 34,1,35 ;SCREAMS +SJingle10 DB 35,1,200 ;Jackpot +SJingle11 DB 36,1,100 ;X Bonus +SJingle12 DB 41,1,50 ;Well value +SJingle13 DB 42,1,200 ;X Ball +SJingle14 DB 45,1,50 ;Vault value +SJingle15 DB 46,0,0 ;Tower On +SJingle16 DB 51,1,0 ;Tower End +SJingle17 DB 53,0,100 ;Grave On +SJingle18 DB 55,1,100 ;Grave End +SJingle19 DB 56,0,100 ;Grim On +SJingle20 DB 60,1,100 ;Grim End +SJingle21 DB 61,1,100 ;10 / 15 millions +SJingle22 DB 63,1,90 ;Ball lock enabled +SJingle23 DB 64,1,90 ;Double bonus +SJingle24 DB 25,1,90 ;Hold Bonus + + + +;****************************************************************************** +;***************************** DETECTION AREAS ******************************** +;****************************************************************************** + +BumperLista_L DW 172,88,185,112 + DW Bumper1 + DW 231,94,255,118 + DW Bumper2 + DW 190,134,214,158 + DW Bumper3 + DW -1,-1,-1,-1 + DW -1 + +BumperLista_U DW -1,-1,-1,-1 + DW -1 + +Bumper2Lista_L DW 50,415,80,470 ;Just to add power + DW Kicker1 ;No Scores or effects + DW 219,415,249,470 + DW Kicker2 + +Bumper2Lista_U DW -1,-1,-1,-1 + DW -1 + +bumper1 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 +bumper2 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 +bumper3 dw sbumper + db 0,0,0, 0,0,0, 0,0,1, 0,0,0 ;1,000 +kicker1 dw skicker + db 0,0,0, 0,0,0, 0,0,0, 5,0,0 ;500 +kicker2 dw skicker + db 0,0,0, 0,0,0, 0,0,0, 5,0,0 ;500 + +ZonLista_L LABEL WORD + DW 123,226,143,243 + DW Touch_O_BONE + DW 143,230,164,243 + DW Touch_N_BONE + DW 70,234,81,241 + DW Touch_B_BONE + DW 217,234,229,241 + DW Touch_E_BONE + + DW 11,277,38,294 + DW Touch_O_STONE + DW 11,294,38,310 + DW Touch_T_STONE + DW 11,310,38,325 + DW Touch_S_STONE + DW 272,303,286,323 + DW Touch_N_STONE + DW 272,323,286,343 + DW Touch_E_STONE + DW 0 + +ZonLista_U DW 0 + +AreaLista_L LABEL WORD + DW 213,4,245,25 ;Game On + DW Close1 + DW 130,15,160,40 ;IN TILL TOWER + DW Bygel15 + DW 285,50,310,80 ;UPP TILL BUMPER-OMR¸DET + DW Bygel16 + DW 184,51,194,61 ;K + DW Bygel5 + DW 206,51,216,61 ;E + DW Bygel6 + DW 228,51,238,61 ;Y + DW Bygel7 + DW 278,248,288,258 ;THE WELL + DW GropB + DW 1,400,20,430 ;Vˇ DRAIN ™VRE + DW Bygel19 + DW 25,435,35,445 ;Vˇ FLIPPER-RˇNNA + DW Bygel3 + DW 263,435,273,445 ;H™ FLIPPER-RˇNNA + DW Bygel4 + DW 1,450,20,480 ;Vˇ DRAIN NEDRE + DW Bygel1 + DW 284,450,294,470 ;H™ DRAIN + DW Bygel2 + DW 1,530,20,550 ;THE VAULT + DW GropC + DW 305,544,320,576 ;Spring Valid + DW Bygel28 + DW 300,520,315,540 ;SPRING INVALID + DW BYGELSI + DW 50,576,270,600 ;Close Tower + DW Close4 + DW 160,180,177,197 ;OPEN BUMPERGATE + DW OPENBUMPERS + DW 232,151,254,177 ;OPEN BUMPERGATE + DW OPENBUMPERS +; DW 177,5,245,48 ;LAST GATE IN LIST! +; DW PARTYOFFAREA + DW 0 + +AreaLista_U LABEL WORD + DW 135,140,155,160 ;TOWER SUG-H¸L + DW GropA + DW 100,5,130,30 ;LOOP MIDDLE + DW Bygel8 + DW 17,80,27,90 ;R + DW Bygel12 + DW 63,80,73,90 ;P + DW Bygel14 + DW 41,83,51,93 ;I + DW Bygel13 + DW 267,85,283,105 ;LOOP END + DW Bygel8b + DW 240,121,260,151 ;SCREAM RAMP + DW Bygel11 + DW 22,140,42,170 ;GRID-RAMP START LEFT + DW Bygel9 + DW 49,140,69,170 ;GRID-RAMP START RIGHT + DW Bygel10 + DW 22,200,42,230 ;GRID-RAMP B™J1 LEFT + DW Open6 + DW 49,200,69,230 ;GRID-RAMP B™J1 RIGHT + DW Close6 + DW 22,250,42,280 ;GRID-RAMP B™J2 LEFT + DW Open7 + DW 49,250,69,280 ;GRID-RAMP B™J2 RIGHT + DW Close7 + DW 5,400,20,430 ;TO THE VAULT + DW Bygel18 +; DW 271,28,292,58 ;CLEARIT, MM. + DW 213,4,245,25 + DW PARTYOFFAREA + DW 0 + +AREALISTA_L_T LABEL WORD + DW 278,248,288,258 ;THE WELL (TILT) + DW GropB_T + DW 1,530,20,550 ;THE VAULT + DW GropC + DW 135,140,155,160 ;TOWER SUG-H¸L (TILT) + DW GropA_T + DW 0 + +AREALISTA_U_T LABEL WORD + DW 1,530,20,550 ;THE VAULT + DW GropC + DW 135,140,155,160 ;TOWER SUG-H¸L (TILT) + DW GropA_T + DW 22,140,42,170 ;GRID-RAMP START LEFT + DW Bygel9 + DW 49,140,69,170 ;GRID-RAMP START RIGHT + DW Bygel10 + DW 22,200,42,230 ;GRID-RAMP B™J1 LEFT + DW Open6 + DW 49,200,69,230 ;GRID-RAMP B™J1 RIGHT + DW Close6 + DW 22,250,42,280 ;GRID-RAMP B™J2 LEFT + DW Open7 + DW 49,250,69,280 ;GRID-RAMP B™J2 RIGHT + DW Close7 + DW 0 + +LEVEL1LISTA LABEL WORD ;AREOR SOM ANGER HOPP TILL LEVEL 1 FR¸N LEVEL 2 +;PARTY ON? DW 213,4,245,25 + DW 16,8,42,45 + DW 90,80,115,120 + DW 265,155,295,185 +; DW 75,165,105,190 + DW 74,169,88,181 ; + DW 74,181,104,193 ; + DW 185,200,215,240 + DW 300,200,320,250 + DW 260,450,277,470 + DW 20,450,50,470 + DW 1,526,20,576 + DW -1 + +LEVEL2LISTA LABEL WORD ;AREOR SOM ANGER HOPP TILL LEVEL 2 FR¸N LEVEL 1 + DW 42,8,66,38 + DW 136,36,156,60 + DW 91,38,133,55 + DW 138,140,157,160 + DW 190,165,225,200 + DW 300,170,320,200 + DW -1 + +IF CREATE_FLIP_DATA +FlipLInfo DB FlipperL,222 + DW 80,510,4,53,0,142,400,576,95,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,LEFTFLIPTAB,LEFTFLIPTAB,maxdifs1*4 + DW FLIPLEFT + + DB FlipperR,222 + DW 160,510,4,53,143,320,400,576,204,536,0,(53*8*3) + DW 0,0,0,20,20*ADJUST,-7*tt/nn,4*tt/nn,-68*tt/nn,48*tt/nn + DW ?,?,?,?,RIGHTFLIPTAB,RIGHTFLIPTAB,maxdifs2*4 + DW FLIPRIGHT + + DB 0,0 +ELSE + EXTRN FLIPLINFO:FLIPSTRUC:2 +ENDIF +no_of_ramps equ 11 ;cpw!?!? +RampTable DW 0,(10*2*tt/nn)/2 + DW -10*tt/nn,5*tt/nn + DW 0,-10*tt/nn + DW 5*tt/nn,0 + DW 5*tt/nn,15*tt/nn + DW -10*tt/nn,12*tt/nn + DW 2,15*tt/nn + DW -8*tt/nn,12*tt/nn + DW 3,10*tt/nn + DW 4,13*tt/nn + DW 7*tt/nn,10*tt/nn + DW 0,0 +RampTable_hi DW 0,10 + DW -10,5 + DW 0,-10 + DW 5,0 + DW 5,15 + DW -10,12 + DW 2,15 + DW -8,12 + DW 3,10 + DW 4,13 + DW 7,10 + DW 0,0 + +PLAYER_STRUC STRUC + P_SIFFRORNA DB 12 DUP(?) + P_BONUSSIFFRORNA DB 12 DUP(?) + P_GHOSTCOUNTER DB ? + P_GHOSTFLASHING DB ? + P_SKILLSCOREBCD DB 12 DUP(?) + P_KICKBACKFLASHING DB ? + P_R_RIP DB ? + P_I_RIP DB ? + P_P_RIP DB ? + P_STONE_S DB ? + P_STONE_T DB ? + P_STONE_O DB ? + P_STONE_N DB ? + P_STONE_E DB ? + P_BONE_B DB ? + P_BONE_O DB ? + P_BONE_N DB ? + P_BONE_E DB ? + P_CYCLONECOUNTER DW ? + P_CYCLONECOUNTERBCD DB 12 DUP(?) + P_NEXTJUMP DW ? +ENDS + +PUBLIC PLAYER_AREA +PLAYER_AREA PLAYER_STRUC NO_OF_PLAYERS DUP() + + + + +;****************************************************************************** +;************************ DEMO MODE LIGHT FLASHING **************************** +;****************************************************************************** + +FLASHLIST LABEL WORD + T2=14 + DW 0,0,T2,T2,1 ;KEY + DW 0,T2,T2,T2,2 + DW 0,0,T2,T2,3 + + T2=9 + DW 0,0,T2,T2,26 ;STONE BONE + DW 0,T2,T2,T2,27 + DW 0,0,T2,T2,28 + DW 0,T2,T2,T2,29 + DW 0,0,T2,T2,30 + DW 0,T2,T2,T2,20 + DW 0,0,T2,T2,21 + DW 0,T2,T2,T2,22 + DW 0,0,T2,T2,23 + + T2=12 + DW 0,T2,T2,T2,15 ;LOCK & LOCK + DW 0,0,T2,T2,25 + + T2=7 + DW 0,0,T2,T2,39 ;X2X4X6X8X10 + DW 0,T2,T2,T2,40 + DW 0,0,T2,T2,41 + DW 0,T2,T2,T2,42 + DW 0,0,T2,T2,43 + + DW -1 + +;****************************************************************************** +;**************************** LIGHT PALETTE DATA ****************************** +;****************************************************************************** + +NOOFLIGHTS=44 + +LON1 DB 129 ;K + DB 2 + DB 33,58,33 + DB 52,89,52 +LON2 DB 131 ;E + DB 2 + DB 33,58,33 + DB 52,89,52 +LON3 DB 133 ;Y + DB 2 + DB 33,58,33 + DB 52,89,52 +LON4 DB 135 ;R + DB 2 + DB 77,52,27 + DB 95,83,20 +LON5 DB 137 ;I + DB 1 + DB 95,83,20 +LON6 DB 138 ;P + DB 2 + DB 77,52,27 + DB 95,83,20 +LON7 DB 140 ;TOWER + DB 2 + DB 33,58,33 + DB 52,89,57 +LON8 DB 187 ;X-TRA BALL + DB 2 + DB 60,60,60 + DB 96,96,96 +LON9 DB 189 ;JACKPOT + DB 2 + DB 60,60,60 + DB 96,96,96 +LON10 DB 191 ;S-JACKPOT + DB 2 + DB 60,60,60 + DB 96,96,96 +LON11 DB 193 ;MILLION + DB 2 + DB 60,60,60 + DB 96,96,96 +LON12 DB 195 ;5-MILLION + DB 2 + DB 60,60,60 + DB 96,96,96 +LON13 DB 197 ;HOLD-BONUS + DB 2 + DB 60,60,60 + DB 96,96,96 +LON14 DB 199 ;DOUBLE-BONUS + DB 2 + DB 60,60,60 + DB 96,96,96 +LON15 DB 142 ;L¸S + DB 3 + DB 33,58,33 + DB 39,70,39 + DB 52,89,52 +LON16 DB 145 ;SP™KE + DB 3 + DB 58,58,58 + DB 70,70,70 + DB 95,95,95 +LON17 DB 148 ;2*SKRIK + DB 3 + DB 43,43,43 + DB 70,70,70 + DB 95,95,95 +LON18 DB 151 ;DEMON + DB 2 + DB 52,8,14 + DB 95,0,0 +LON19 DB 153 ;+ + DB 2 + DB 52,8,14 + DB 95,0,0 +LON20 DB 155 ;B + DB 2 + DB 39,70,39 + DB 52,89,52 +LON21 DB 157 ;O + DB 2 + DB 39,70,39 + DB 52,89,52 +LON22 DB 159 ;N + DB 2 + DB 39,70,39 + DB 52,89,52 +LON23 DB 161 ;E + DB 2 + DB 39,70,39 + DB 52,89,52 +LON24 DB 180 ;MB + DB 3 + DB 58,58,58 + DB 70,70,70 + DB 95,95,95 +LON25 DB 183 ;L¸S + DB 2 + DB 33,58,33 + DB 52,89,52 +LON26 DB 163 ;S + DB 2 + DB 39,70,39 + DB 52,89,52 +LON27 DB 165 ;T + DB 1 + DB 52,89,52 +LON28 DB 166 ;O + DB 1 + DB 52,89,52 +LON29 DB 167 ;N + DB 2 + DB 39,70,39 + DB 52,89,52 +LON30 DB 169 ;E + DB 2 + DB 39,70,39 + DB 52,89,52 +LON31 DB 64 ;SLEMBOLLEN + DB 9 + DB 20,27,33 + DB 27,33,45 + DB 33,45,58 + DB 39,52,70 + DB 52,64,77 + DB 70,70,70 + DB 39,0,0 + DB 52,8,14 + DB 58,27,27 +LON32 DB 73 ;FLADDERMUSEN + DB 6 + DB 20,27,33 + DB 27,33,45 + DB 39,39,39 + DB 58,58,58 + DB 77,52,27 + DB 95,83,20 +LON33 DB 80 ;MUMIEN + DB 5 + DB 39,39,39 + DB 58,58,58 + DB 70,70,70 + DB 52,8,14 + DB 95,0,0 +LON34 DB 85 ;BL¸A ANSIKTET + DB 7 + DB 20,27,33 + DB 27,33,45 + DB 27,39,52 + DB 33,45,58 + DB 39,52,70 + DB 52,64,77 + DB 95,83,20 +LON35 DB 92 ;BARBA-PAPPA + DB 8 + DB 14,39,14 + DB 27,45,20 + DB 33,58,33 + DB 39,70,39 + DB 52,89,52 + DB 52,8,14 + DB 95,0,0 + DB 95,83,20 +LON36 DB 100 ;PEPPARKAKS-GUBBEN + DB 5 + DB 58,27,27 + DB 64,39,39 + DB 77,52,27 + DB 95,83,20 + DB 95,95,95 +LON37 DB 105 ;R™D-LUVAN + DB 7 + DB 39,0,0 + DB 52,8,14 + DB 58,27,27 + DB 64,39,39 + DB 77,52,27 + DB 95,95,95 + DB 95,0,0 +LON38 DB 112 ;DEN GRYMMA RAPPARN + DB 17 + DB 17,23,30 + DB 20,27,33 + DB 27,33,45 + DB 27,39,52 + DB 33,45,58 + DB 52,8,14 + DB 95,0,0 + DB 39,39,39 + DB 39,52,70 + DB 58,58,58 + DB 33,20,20 + DB 58,27,27 + DB 64,39,39 + DB 77,52,27 + DB 52,39,27 + DB 64,52,39 + DB 77,64,52 +LON39 DB 171 ;X2 + DB 2 + DB 52,27,27 + DB 95,0,0 +LON40 DB 173 ;X4 + DB 1 + DB 95,0,0 +LON41 DB 174 ;X6 + DB 2 + DB 52,27,27 + DB 95,0,0 +LON42 DB 176 ;X8 + DB 2 + DB 52,27,27 + DB 95,0,0 +LON43 DB 178 ;X10 + DB 2 + DB 52,27,27 + DB 95,0,0 +LON44 DB 185 ;SPARKA TILLBAKA + DB 2 + DB 58,58,58 + DB 95,95,95 +MATRIXON DB matrixlo ;(MATRIXCOL LOW BYTE) + DB 1 + DB 95,83,20 +LONEND DB 0 + +LONINDEX LABEL WORD + DW OFFSET LON1 + DW OFFSET LON2 + DW OFFSET LON3 + DW OFFSET LON4 + DW OFFSET LON5 + DW OFFSET LON6 + DW OFFSET LON7 + DW OFFSET LON8 + DW OFFSET LON9 + DW OFFSET LON10 + DW OFFSET LON11 + DW OFFSET LON12 + DW OFFSET LON13 + DW OFFSET LON14 + DW OFFSET LON15 + DW OFFSET LON16 + DW OFFSET LON17 + DW OFFSET LON18 + DW OFFSET LON19 + DW OFFSET LON20 + DW OFFSET LON21 + DW OFFSET LON22 + DW OFFSET LON23 + DW OFFSET LON24 + DW OFFSET LON25 + DW OFFSET LON26 + DW OFFSET LON27 + DW OFFSET LON28 + DW OFFSET LON29 + DW OFFSET LON30 + DW OFFSET LON31 + DW OFFSET LON32 + DW OFFSET LON33 + DW OFFSET LON34 + DW OFFSET LON35 + DW OFFSET LON36 + DW OFFSET LON37 + DW OFFSET LON38 + DW OFFSET LON39 + DW OFFSET LON40 + DW OFFSET LON41 + DW OFFSET LON42 + DW OFFSET LON43 + DW OFFSET LON44 + + +MATRIXOFF DB matrixlo + DB 3 + DB 3 DUP(20*64/100,27*64/100,33*64/100) +; DB 3 DUP(20*64/100,27*64/100,36*64/100) ;(50) + + +;****************************************************************************** +;************************* GATES & BYGLARS DATA AREOR ************************* +;****************************************************************************** + +EXTRN POS2,POS3,POS4,POS5:BYTE +EXTRN NEG2,NEG3,NEG4,NEG5:BYTE + +GATE2 DW POS3-2 ;TO THE BUMPERS + DW NEG3-2 + DW 5*40+30 + DW 2,20 +GATE3 DW POS4-2 ;TO THE TOWER + DW NEG4-2 + DW 5*40+20 + DW 2,24 +GATE4A DW POS2 ;LEFT RAMP 1 + DW NEG2 + DW 191*40+4 + DW 4,14 +GATE4B DW POS2 ;LEFT RAMP 2 + DW NEG2 + DW 247*40+4 + DW 4,14 +GATE4C DW POS2 ;LEFT RAMP 3 + DW NEG2 + DW 303*40+4 + DW 4,14 +GATE5 DW POS5 ;KICKBACK + DW NEG5 + DW 511*40+0 + DW 4,13 + +OffRoadMode db ? +TurboMode db ? + + + +;****************************************************************************** +;****************************** DOT MATRIX ************************************ +;****************************************************************************** +CLEARIT MACRO + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + ASSUME DS:DATA +ENDM + + +;********************************** TEXTER ************************************ +OPENTOWERTEXT DB 21 DUP (1),'THE TOWER IS OPEN',21 DUP(1),255 +MILLIONSCROLL DB 21 DUP (1),'MILLION',6 DUP (1),255 +GRIMSCROLL DB 21 DUP (1),'ALL LOOPS TRAPS AND RAMPS SCORE 5000000',21 DUP(1),255 +MILLIONPLUSTEXT DB ' MILLION PLUS',0 +VAULTVALUETEXT DB ' VAULT SCORE',0 +WELLVALUETEXT DB ' WELL TREASURE',0 +TOWERVALUETEXT DB ' TOWER BONUS',0 +DOUBLETEXT DB ' DOUBLE BONUS',0 +HOLDTEXT DB ' HOLD BONUS',0 +RIPTEXT DB ' KICKBACK ACTIVATED',0 +GETXBALLTEXT DB ' GET THE EXTRA BALL',0 +SKILLTEXT DB ' SKILL SHOT',0 +LOOPCOMBOTEXT DB ' LOOP COMBO',0 ;CP!? +TOWER_TEXT DB 21 DUP (1),'SHOOT THE TOWER FOR 5 ',94,' 10 AND 20 MILLIONS IN 30 SECONDS',21 DUP(1),255 +MARTIN_BERG_TEXT DB ' TOWER HUNT',0 +VAULT45M DB 21 DUP (1),'ENTER THE VAULT FOR 5000000',21 DUP(1),255 +VAULT4TOWERHUNT DB 21 DUP (1),'ENTER THE VAULT FOR TOWER HUNT',21 DUP(1),255 +VAULT4XBALL DB 21 DUP (1),'ENTER THE VAULT TO LITE THE EXTRA BALL',21 DUP(1),255 +VAULT410M DB 21 DUP (1),'ENTER THE VAULT FOR 10000000',21 DUP(1),255 +VAULT4GHOSTHUNT DB 21 DUP (1),'ENTER THE VAULT FOR GHOST HUNT',21 DUP(1),255 +VAULT4MULTIDEMONS DB 21 DUP (1),'ENTER THE VAULT FOR MULTI DEMONS',21 DUP(1),255 +VAULT415M DB 21 DUP (1),'ENTER THE VAULT FOR 15000000',21 DUP(1),255 +VAULT4GRIMREAPER DB 21 DUP (1),'ENTER THE VAULT FOR GRIM REAPER',21 DUP(1),255 +MULTIDEMONTEXT DB 21 DUP (1),'LOCK BALLS IN WELL AND VAULT TO INCREASE DEMON VALUE BY 5 AND 10 MILLIONS',21 DUP(1),255 +SHOOTTHEBALLTEXT DB 'SHOOT THE BALL PL X',0 +SUPERTEXT DB 'SUPER',0 +EXTRABALLTEXT DB 'EXTRA BALL',0 + +;****************************************************************************** +;********************************** TSAR ************************************** +;****************************************************************************** + +;********************************************************* +;******* OBS!!! KOM IH¸G ATT ASSUMERA ANIMATIONER TILL DATA2 OCH +;******* SCROLLAR TILL DATA !!!!! + +BEATENSCROLL DB 21 DUP (1),'YOU HAVE BEATEN THE HIGHSCORE',21 DUP(1),255 + +Beaten_bh_TS LABEL WORD ;I BALL LOST SEKVENSEN + DW _DOBEATEN,? + CLEARIT + DW _JINGLE,S_BEATEN + DW _LASTJINGLE,EMPTYJINGLE + DW _SCROLL,BEATENSCROLL + DW _WAITJINGLE,? + DW _JINGLE,S_BEATEN_XB + DW _LASTJINGLE,EMPTYJINGLE + DW _FLASHON,1 ;6 +; DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 +; DW _WAIT,6*2*30 + DW _ANIMATION,_EXTRABALL + DW _WAIT,90 + CLEARIT + DW _FLASHOFF,? + DW _JMP,No_Bonus2TS + +BeatenTS LABEL WORD ;I SPELET + DW _DOBEATEN,? + CLEARIT + DW _JINGLE,S_BEATEN + DW _LASTJINGLE,EMPTYJINGLE + DW _SCROLL,BEATENSCROLL + DW _WAITJINGLE,? + DW _JINGLE,S_BEATEN_XB + DW _LASTJINGLE,3 + DW _FLASHON,1 ;6 +; DW _PRINT13,EXTRABALLTEXT,SW*4/4+TOTCENT+4 +; DW _WAIT,6*2*30 + DW _ANIMATION,_EXTRABALL + DW _WAIT,90 + CLEARIT + DW _FLASHOFF,? + DW 0 + +SHOOTTHEBALLTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PARTYONN,? + DW _PRINT13,SHOOTTHEBALLTEXT,SW*4/4 + DW _PARTYON,? + DW 0 + +MULTIDEMONTS LABEL WORD + CLEARIT + DW _SCROLL,MULTIDEMONTEXT + CLEARIT + DW _VAULTEND,? + DW 0 + +EVENT1TS LABEL WORD + DW _SCROLL,VAULT45M + DW 0 + +EVENT2TS LABEL WORD + DW _SCROLL,VAULT4TOWERHUNT + DW 0 + +EVENT3TS LABEL WORD + DW _SCROLL,VAULT4XBALL + DW 0 + +EVENT4TS LABEL WORD + DW _SCROLL,VAULT410M + DW 0 + +EVENT5TS LABEL WORD + DW _SCROLL,VAULT4GHOSTHUNT + DW 0 + +EVENT6TS LABEL WORD + DW _SCROLL,VAULT4MULTIDEMONS + DW 0 + +EVENT7TS LABEL WORD + DW _SCROLL,VAULT415M + DW 0 + +EVENT8TS LABEL WORD + DW _SCROLL,VAULT4GRIMREAPER + DW 0 + +SMILERTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PRINT13,GETXBALLTEXT,SW*4/4 + DW _WAIT,150 + DW _FLASHOFF,? + CLEARIT + DW _VAULTEND,? + DW 0 + +TOWER1TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _TOWER,87-16+2 + DW _WAIT,50 + DW _ANIMATION,_CLEAR + DW _TOWEREND,? + DW 0 + +TOWER2TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _TOWER,61-16+2 + DW _WAIT,50 + DW _ANIMATION,_CLEAR + DW _TOWEREND,? + DW 0 + +TOWER3TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _TOWER,36-16 + DW _WAIT,120 + DW _ANIMATION,_CLEAR + DW _TOWEREND,? + DW 0 + +BATMANTS LABEL WORD + ASSUME DS:DATA2 + DW _WAIT,5 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_5 + DW _WAIT,25 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW _VAULTEND,? + DW 0 + +REDDEVILTS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_10 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW _WAIT,50 + DW _VAULTEND,? + DW 0 + +MUMMYHEADTS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_15 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW _WAIT,50 + DW _VAULTEND,? + DW 0 + +LOOPCOMBOTS LABEL WORD ;CP! INTE S¸ I ALLA FALL!! + CLEARIT + DW _FLASHON,2 + DW _PRINT13,LOOPCOMBOTEXT,SW*4/4 + DW _WAIT,140 + DW _FLASHOFF,? + CLEARIT + DW 0 + +GETXBALLTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PRINT13,GETXBALLTEXT,SW*4/4 + DW _WAIT,150 + DW _FLASHOFF,? + CLEARIT + DW 0 + +RIPEFFTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,RIPTEXT,SW*4/4 + DW _WAIT,90 + DW _FLASHOFF,? + CLEARIT + DW 0 + +SKILLSHOTTS LABEL WORD + CLEARIT + DW _RULLGARDIN_UPP,SKILLTEXT,1 + DW _WAIT,60 + CLEARIT + DW _FLASHON,1 + DW _PRINT13_NUMBER_CENT,SKILLSCOREBCD,2*2*SW/4+TOTCENT + DW _WAIT,2*60 + CLEARIT + DW _FLASHOFF,? + DW 0 + +OPENTOWERTS LABEL WORD + CLEARIT + DW _SCROLL,OPENTOWERTEXT + CLEARIT + DW 0 + +MILLIONTS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _SCROLL,MILLIONSCROLL + DW _WAIT,60 + DW _ANIMATION,_CLEAR + DW 0 + +TMILLIONANIMTS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW _TOWEREND,? + DW 0 + +Million5TS LABEL WORD + ASSUME DS:DATA2 + DW _WAIT,5 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_5 + DW _WAIT,25 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW 0 + +TMillion5TS LABEL WORD + ASSUME DS:DATA2 + DW _WAIT,5 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_5 + DW _WAIT,25 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW _TOWEREND,? + DW 0 + +Million10TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_10 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _ANIMATION,_CLEAR + DW 0 + +Million20TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_20 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_MILLION + DW _WAIT,120 + DW _ANIMATION,_CLEAR + DW 0 + +DoubleBTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PRINT13,DOUBLETEXT,SW*4/4 + DW _WAIT,150 + DW _FLASHOFF,? + CLEARIT + DW _TOWEREND,? + DW 0 + +HOLDBTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PRINT13,HOLDTEXT,SW*4/4 + DW _WAIT,150 + DW _FLASHOFF,? + CLEARIT + DW _TOWEREND,? + DW 0 + +JackpotTS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_JACKPOT + DW _WAIT,30 + DW _ANIMATION,_CLEAR + DW _TOWEREND,? + DW 0 + +SuperJackTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,SUPERTEXT,SW*4/4+7*4 + DW _WAIT,100 + DW _FLASHOFF,? + CLEARIT + ASSUME DS:DATA2 + DW _ANIMATION,_JACKPOT + DW _WAIT,30 + CLEARIT + DW _FLASHON,1 + DW _PRINT13_NUMBER_CENT,BCD50000000,2*2*SW/4+TOTCENT + DW _WAIT,100 + CLEARIT + DW _FLASHOFF,? + DW _TOWEREND,? + DW 0 + +MillionPlusTS LABEL WORD + CLEARIT + DW _RULLGARDIN_UPP,MILLIONPLUSTEXT,1 + DW _WAIT,60 + CLEARIT + DW _PRINT13_NUMBER_CENT,SULP_SCORE,2*2*SW/4+TOTCENT + DW _WAIT,2*60 + CLEARIT + DW 0 + +VaultValueTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PRINT13,VAULTVALUETEXT,SW*4/4 + DW _WAIT,60 + DW _FLASHOFF,? + CLEARIT + DW _PRINT13_NUMBER_CENT,VAULTVALUE,2*2*SW/4+TOTCENT + DW _WAIT,80 + CLEARIT + DW _VAULTEND,? + DW 0 + +WellValueTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PRINT13,WELLVALUETEXT,SW*4/4 + DW _WAIT,60 + DW _FLASHOFF,? + CLEARIT + DW _PRINT13_NUMBER_CENT,WELLVALUE,2*2*SW/4+TOTCENT + DW _WAIT,80 + CLEARIT + DW _WELLEND,? + DW 0 + +TowerValueTS LABEL WORD + CLEARIT + DW _FLASHON,2 + DW _PRINT13,TOWERVALUETEXT,SW*4/4 + DW _WAIT,60 + DW _FLASHOFF,? + CLEARIT + DW _PRINT13_NUMBER_CENT,TOWERVALUE,2*2*SW/4+TOTCENT + DW _WAIT,80 + CLEARIT + DW _TOWEREND,? + DW 0 + +EXTRABALLTS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_EXTRABALL + DW _WAIT,120 + DW _ANIMATION,_CLEAR + DW _TOWEREND,? + DW 0 + +M2TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_BONUSX2 + DW _ANIMATION,_CLEAR + DW _WELLEND,? + DW 0 + +M4TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_BONUSX4 + DW _ANIMATION,_CLEAR + DW _WELLEND,? + DW 0 + +M6TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_BONUSX6 + DW _ANIMATION,_CLEAR + DW _WELLEND,? + DW 0 + +M8TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_BONUSX8 + DW _ANIMATION,_CLEAR + DW _WELLEND,? + DW 0 + +M10TS LABEL WORD + ASSUME DS:DATA2 + DW _ANIMATION,_CLEAR + DW _ANIMATION,_BONUSX10 + DW _ANIMATION,_CLEAR + DW _WELLEND,? + DW 0 + +TOWERHUNTTS LABEL WORD + CLEARIT + DW _RULLGARDIN_UPP,MARTIN_BERG_TEXT,-13 + DW _RULLGARDIN_NED,MARTIN_BERG_TEXT,16 + DW _RULLGARDIN_UPP,MARTIN_BERG_TEXT,-13 + DW _RULLGARDIN_NED,MARTIN_BERG_TEXT,16 + DW _SCROLL,TOWER_TEXT + CLEARIT + DW _VAULTEND,? + DW 0 + +;***************************************** +party_onTS LABEL BYTE ;Turn on party on . . . + CLEARIT + DW _FLASHON,PARTY_ON_SPEED + DW _PARTYONN,1 + DW _PRINT13,PARTY_ON_TEXT,SW*4/4 ;+16*3/4 ;CP! + DW _PARTYON,1 + DW 0 + +party_offTS LABEL WORD ;Turn it off + CLEARIT + DW _PARTYOFF,1 + DW _FLASHOFF,1 + DW 0 + +;***************************************** + ASSUME DS:DATA2 +clearTS dw _animation,_clear + dw 0 + +tomTS dw _animation,_clear + dw _wait,32767 + dw 0 + + +OffRoadTS LABEL WORD + DW _TURNONSPECIALMODE,? + DW _TURNONOFFROADMODE,? + DW _ANIMATION,_CLEAR + dw _scroll,go_for_some_text + dw _animation,_clear + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + DW _VAULTEND,? + dw _countdown,3,0,OR_total +AFTER_ORCDTS LABEL WORD + dw _animation,_clear +OffRoad_endingTS Label Word + DW _TURNOFFOFFROADMODE,? + DW _JACKEND,? + DW _JBCDZ,OR_TOTAL,no_orTS + assume ds:data + dw _rullgardin_upp,or_total_text,1 + + assume ds:data2 + dw _wait,60 ;CPW! + + dw _animation,_clear + DW _FLASHON,1 + assume ds:data + DW _PRINT13_NUMBER,OR_total,SW*4/4+16*2/4 ;CP! RUTCENT + assume ds:data2 + dw _wait,80 ;CPW! + DW _FLASHOFF,1 + dw _animation,_clear + dw _TurnOffSpecialMode,? + dw 0 + +no_orTS DW _PRINT13,NO_or_TEXT,SW*4/4 + ASSUME DS:DATA2 + dw _wait,80 ;CPW! + CLEARIT + dw _TurnOffSpecialMode,? + DW 0 + +BACK_2_OFFROADTS LABEL WORD + CLEARIT + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + DW _COUNTDOWNCONTINUE,?,?,OR_TOTAL + DW _JMP,AFTER_ORCDTS + DW 0 + +BREAK_OR_MODETS LABEL WORD + DW _TURNOFFOFFROADMODE,? + CLEARIT + DW 0 + +go_for_some_text db 21 dup (' '),'ALL TARGETS SCORE 1000000 FOR 30 SECONDS',21 dup (' '),255 +OR_total_Text db ' GHOST HUNTER TOTAL',0 + ASSUME DS:DATA +no_or_text db ' NO BONUS',0 +or_total db ?,?,?,?,?,?,?,?,?,?,?,? + +;********************************************************** + +TurboTS LABEL WORD + CLEARIT + DW _TurnONSpecialMode,? + DW _TURNONTURBOMODE,? + DW _RULLGARDIN_UPP,GO_FOR_NISSE_TEXT,-13 + DW _RULLGARDIN_NED,GO_FOR_NISSE_TEXT,16 + DW _RULLGARDIN_UPP,GO_FOR_NISSE_TEXT,-13 + DW _RULLGARDIN_NED,GO_FOR_NISSE_TEXT,16 + CLEARIT + DW _SCROLL,GRIMSCROLL + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + DW _VAULTEND,? + dw _countdown,5,0,tm_total ;(the final?) ;CP? +AFTER_TMCDTS LABEL WORD + DW _GRIMOFF,? + CLEARIT +TurboMode_endingTS Label Word + DW _TURNOFFTURBOMODE,? + DW _JACKEND,? + DW _JBCDZ,TM_TOTAL,no_tmTS + assume ds:data + dw _rullgardin_upp,tm_total_text,1 + + assume ds:data2 + dw _wait,60 ;CPW! + + CLEARIT + DW _FLASHON,1 + DW _PRINT13_NUMBER,tm_total,SW*4/4+16*2/4 ;CP! RUTCENT + dw _wait,80 ;CPW! + DW _FLASHOFF,1 + CLEARIT + dw _TurnOffSpecialMode,? + dw 0 +no_tmTS DW _PRINT13,NO_tm_TEXT,SW*4/4 + dw _wait,80 ;CPW! + CLEARIT + dw _TurnOffSpecialMode,? + DW 0 + +BACK_2_TURBOTS LABEL WORD + CLEARIT + DW _PRINT13,ZEROQ,SW*(2+2)/4+16*13/4 + DW _COUNTDOWNCONTINUE,?,?,TM_TOTAL + DW _JMP,AFTER_TMCDTS + DW 0 + +BREAK_TURBO_MODETS LABEL WORD + DW _TURNOFFTURBOMODE,? + CLEARIT + DW 0 + +go_for_nisse_text db ' GRIM REAPER',0 +tm_total_Text db ' GRIM REAPER TOTAL ',0 + ASSUME DS:DATA +no_tm_text db ' NO BONUS',0 +tm_total db ?,?,?,?,?,?,?,?,?,?,?,? +MILES_TEXT DB ' XXX SCREAMS',0 + +Jump_At_TS label word + CLEARIT + DW _FLASHON,1 + DW _PRINT11,MILES_TEXT,SW*2*3/4 + DW _WAIT,60 + CLEARIT + DW _FLASHOFF,? + DW _FLASHON,9 + dw _print11,jump_at_text,sw*2*3/4 + DW _WAIT,120 + CLEARIT + DW _FLASHOFF,? + DW 0 + +Jump_At2_TS label word + CLEARIT + DW _FLASHON,1 + DW _PRINT11,MILES_TEXT,SW*2*3/4 + DW _WAIT,60 + CLEARIT + DW _FLASHOFF,? + DW _FLASHON,9 + dw _print11,jump_at_text2,sw*2*3/4 + DW _WAIT,120 + CLEARIT + DW _FLASHOFF,? + DW 0 + +jump_at_text db 'XXX LITES EXTRA BALL',0 +jump_at_text2 db 'XXX LITES ','7'+5,' MILLIONS',0 + + + +;*********************** NYA BALL LOST ******************* + +ASSUME DS:DATA +show_cyclones_text db ' SCREAMS X ',0 +show_or_text db ' GHOST HUNT TOTAL ',0 ;CP!? + + + +ball_lostTS LABEL WORD + CLEARIT + + DW _PRINT13,GETTING_SICK_TEXT,SW*2/4*2 + DW _LASTJINGLE,EMPTYJINGLE + DW _SETDECCOR,70 ;CPW! + DW _WAITJINGLE2,? + CLEARIT + + DW _JBCDZ,BONUSSIFFRORNA,no_bonusTS + DW _PRINT5,show_bonus_TEXT,SW*1*2/4+16*7/4 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + + DW _JBONUSX1,NoBonusXTS + CLEARIT ;CP! CLEARIT ˇR ON™DIGT BRUTAL! + DW _BONUS_X_CALCS,? + DW _PRINT5,BONUS_X_TEXT,SW*1*2/4+16*7/4-4*2 + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + DW _WAIT,60 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 +NoBonusXTS LABEL WORD + +no_bonusTS LABEL WORD + DW _JBCDZ,CYCLONECOUNTERBCD,no_cyclonesTS + CLEARIT + DW _CALC_CYCLO ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5_NUMBER,CYCLONECOUNTERBCD,SW*1*2/4-17*9/4 + DW _PRINT5_number,HUNDRATUSEN,SW*1*2/4+14*8/4 + DW _PRINT5,show_CYCLONES_TEXT,SW*1*2/4-16*1/4 + DW _PRINT8_NUMBER_CENT,CYCLONESCOREBCD,SW*2*7/4+TOTCENT + DW _WAIT,120 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT +no_cyclonesTS LABEL WORD + + ;OFF ROAD!!!!!! + DW _JBCDZ,OR_TOTAL,no_happy_stewartTS + CLEARIT + DW _CALC_HAPPY ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5,show_or_TEXT,SW*1*2/4 + DW _PRINT8_NUMBER_CENT,or_TOTAL,SW*2*7/4+TOTCENT + DW _WAIT,70 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT +no_happy_stewartTS LABEL WORD + + ;TURBO MODE!!!!!!! + DW _JBCDZ,TM_TOTAL,no_MEGA_LAUGHTS + CLEARIT + DW _CALC_MEGA ;CYCLONESCOREBCD & SIFFRORNA UPPDATERAS! + DW _PRINT5,show_TURBO_TEXT,SW*1*2/4+4 + DW _PRINT8_NUMBER_CENT,TM_TOTAL,SW*2*7/4+TOTCENT + DW _WAIT,70 ;CPW! + dw _Sound_Effect,s_MultiLjud,0 + CLEARIT +no_MEGA_LAUGHTS LABEL WORD + + DW _JBCDZ,BONUSSIFFRORNA,no_bonus2TS + DW _PRINT5,show_totalbonus_TEXT,SW*1*2/4+16*4/4 + + DW _PRINT8_NUMBER_CENT,BONUSSIFFRORNA,7*2*SW/4+TOTCENT + + DW _WAIT,60 ;CPW! + CLEARIT + DW _PRINT8_NUMBER,BONUSSIFFRORNA,7*2*SW/4-16*4/4 + DW _FLORPA + DW _WAIT,25 ;CPW! + dw _beaten_matrix +no_bonus2TS LABEL WORD + DW _KOLLA_XXBALL ;EXEKVERAS ENDAST VID XXBALLE + ;UTF™R XBALLES VUNNA UNDER XXBALLEN + ;OCH HOPPAR TILL CHECK_XXBALLE + ;VID EJ XXBALLE: DUMRET + ;VID XXBALLE: NˇSTA SPELARE ELLER AVSLUTA + dw _waitifmulti,2*60 ;cpgnu? (visa poeng lite lengre) + DW _MATRIXLGT,0 + clearit + DW _CHANGE_PLAYER + CLEARIT + dw _wait,32000 ;BRˇCKS! + DW 0 +SORRYNOBONUSTEXT DB ' SORRY ',94,' NO BONUS ',0 +SHOW_TURBO_TEXT DB ' GRIM REAPER TOTAL',0 + +shoot_again_onTS LABEL BYTE ;Turn on shoot again . . . + CLEARIT + DW _WAITJINGLE,? + DW _FLASHON,SHOOT_AGAIN_SPEED + DW _SHOOT_AGAIN_ONN,1 + DW _PRINT13,SHOOT_AGAIN_TEXT,SW*2/4*2 ;+16*3/4 ;CP! + DW _NEW_BALL2 + DW _PARTYON,1 ;CP? + DW 0 + + +out_of_ballsTS LABEL WORD ;ˇr Stewarts fortfarande borta kanske? + CLEARIT + dw _matrixlgt,1 + dw _knacket,? + DW _SETDECCOR,60 + DW _WAITJINGLE2,? + dw _flashoff,? +; dw _wait,1 + +check_xxballTS LABEL WORD + DW _check_Xxballs ;KOLLA SPELAREN N'S XXBALL. + ;OM XXBALL: G™R NEWBALL + ;OM EJ XXBALL: HOPPA TILL AFTER_XXBALLSTS + ;KOMMER EJ HIT! + + +after_xxballsTS LABEL WORD + clearit + dw _check_high,? + DW _MATRIXLGT,0 + DW _2_DEMO_MODE + dw _wait,30000 + DW 0 + +AfterDemoModeTS Label Word + DW _MATRIXLGT,0 + dw _wait,20 + dw _setloop,2,? + DW _INIT_SCORE,? + DW _JMP,UrbanOverTS + +Once_MoreTS LABEL WORD + DW _INIT_SCORE,? + +GameOverTS LABEL WORD + SHOWTIME=80 + DW _WAIT,SHOWTIME + +UrbanOverTS LABEL WORD + CLEARIT + DW _FLASHON,1 + DW _PRINT13,GAME_OVER_TEXT,SW*2*2/4 + DW _WAIT,30 + DW _FLASHOFF,? + CLEARIT + DW _SHOW_SCORE,OFFSET GAMEOVERTS + dw _loop_,2,offset once_morets + DW _WAIT,SHOWTIME + CLEARIT + DW _WAIT,20 + DW _JMP,ShowHighsTS + DW 0 +GAME_OVER_TEXT DB ' GAME OVER',0 +;TUBORG! + +;********************** SLUT P¸ BALL LOST ******************* +ASSUME DS:DATA +showithi macro + DW _PRINT13,ALLTIME_TEXT,SW*2/4*2+16/4/2 + dw _wait,40 + + CLEARIT + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_1,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*0),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*0+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_2,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*1),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*1+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_3,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*2),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*2+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + + DW _FLASHOFF,1 + DW _MATRIXLGT,0 + DW _PRINT13,hi_4,SW*2/4*2 + DW _PRINT13_NUMBER,(offset hi_score_list+(12+3+1)*3),4*SW/4+8*16/4 + DW _PRINT13,(offset hi_score_list+(12+3+1)*3+12),SW*2/4*2+2*16/4 + DW _FLASHON,1 + dw _wait,140 + clearit + DW _FLASHOFF,1 +endm + + +ShowInfoTS LABEL WORD + CLEARIT + clearit + DW _rullgardin_ned,PLAY_TEXT,1 + dw _wait,40*3 + DW _MATRIXLGT,0 + CLEARIT + DW _PRINT13,JACK_TEXT,SW*4/4 + dw _print13_number,jackvalue,SW*4/4+8*16/4 + DW _FLASHON,1 + dw _wait,40*3 + DW _FLASHOFF,1 + CLEARIT + dw _rullgardin_upp,BONUS_TEXT,1 + dw _wait,40*3 + CLEARIT + showithi + CLEARIT + + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + + DW 0 + +ShowHighsTS LABEL WORD +;TEXTER + CLEARIT + DW _FLASHON,1 + DW _PRINT13,PF_TEXT,SW*2/4*2+4+2 + dw _wait,120 + DW _CLEAR2 + DW _FLASHOFF,1 + dw _rullgardin_upp,TRS_TEXT,1 + dw _wait,90 + CLEARIT + DW _FLASHON,1 + DW _PRINT13,PL_TEXT,SW*2/4*2+3*4 + dw _wait,90 + DW _CLEAR3 + DW _FLASHOFF,1 +;SCROLLA + clearit + DW _SCROLL,SCROLL_TEXT1 +;VISA HIGHSCORE + showithi +;DI UPP ¸ NED! + CLEARIT +; dw _rullgardin_NED,DIGITAL_TEXT,16 +; dw _rullgardin_upp,DIGITAL_TEXT,-13 +; dw _wait,40 +; CLEARIT + dw _rullgardin_NED,fld_TEXT,16 + dw _rullgardin_upp,fld_TEXT,-13 + dw _wait,40 +;SCROLLA SISTA + DW _SCROLL,SCROLL_TEXT2 + CLEARIT + DW _JMP,ShowHighsTS + dw 0 + + +ShowPlayersTS label word + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + dw _print5,ballstext,sw*2*10/4+16*1/4 + dw 0 + +first_no_of_playersTS LABEL WORD + clearit + dw _print5,playerstext,sw*2*2/4+16*1/4 + DW _PRINT13,NOLLA,SW*2*2/4+16*19/4 +no_of_playersTS label word + dw _print5,no_of_players_text,sw*2*10/4+16*1/4 + DW _WAIT_GAME_ON,? + dw 0 + + + + +BonusHeldTS label word + clearit + DW _PRINT13,BonusHeld_Text,SW*2/4*2 + DW _WAIT,30 + clearit + dw 0 + +BonusHeld_text db ' B O N U S H E L D ',0 +LIT_XBALL_TEXT DB ' GET THE EXTRA BALL ',0 + + +tiltTS LABEL WORD + DW _TILTED,? + CLEARIT + DW _PRINT13,TILT_TEXT,sw*2/4*2+16*0/4 + DW _WAIT,32767 + DW _PRINT13,CPTEXT,sw*2/4*2+16*0/4 + DW 0 + +TILT_TEXT DB ' TILT TILT TILT',0 +CPTEXT DB 'EVER HEARD OF TILT?',0 +last_text db ' ',0 +flashlast db ' ',0 +slutsiffra db '0',0 +startext db '*',0 +last_pos dw 0 + +;*********************************************************** + +GETTING_SICK_TEXT DB ' DOWN THE DRAIN',0 + +PARTY_ON_TEXT DB ' KUK-AMIGA! ',0 ;N„men Gabriel hur du skriver!!! +ZEROQ DB '0'+7,0 +SHOOT_AGAIN_TEXT DB 'SHOOT AGAIN PLAYER ',0 + +NO_OF_PLAYERS_TEXT DB 'PLAYERS X',0 +NOLLA DB '7',0 +show_bonus_TEXT DB 'BONUS',0 +BONUS_X_TEXT DB 'BONUS*X*??',0 +show_totalbonus_TEXT DB 'TOTAL*BONUS',0 + + +fld_TEXT DB ' FRONTLINE DESIGN',0 + +PF_TEXT DB 'PINBALL FANTASIES',0 +TRS_TEXT DB ' THE REAL SIMULATOR',0 +PL_TEXT DB "STONES N BONES",0 +SCROLL_TEXT1 DB 21 DUP (' '),'ADD PLAYERS WITH F1 TO F8 OR ENTER',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' '),255 +ALLTIME_TEXT DB 'ALL TIME HIGHSCORES',0 +SCROLL_TEXT2 DB 21 DUP (' '),'FLIP WITH LEFT AND RIGHT ALT SHIFT OR CTRL KEYS',21 DUP (' ') + DB 'PUSH TABLE WITH SPACE',21 DUP (' ') + DB 'CONTROL SPRING WITH DOWN ARROW KEY OR MOUSE',21 DUP (' ') + DB 'WINNERS DO NOT USE DRUGS',21 DUP (' ') + DB 'P PAUSES GAME AND M TOGGLES INGAME MUSIC ON AND OFF',21 DUP (' ') + DB 'ESC EXITS AND SAVES NEW HIGHSCORES',21 DUP (' '),255 +DIGITAL_TEXT DB ' DIGITAL ILLUSIONS',0 + +JACK_TEXT DB 'JACKPOT IS',0 +BONUS_TEXT DB ' YOU HAVE ?X BONUS',0 ;11 +PLAY_TEXT DB ' PLAYER 8 BALL 8 ',0 ;8,18 + +INFO_TEXT DB 21 DUP (' ') + db '' + DB 21 DUP (1),255 + +playerstext db 'PLAYER 8',0 ;8=1 (L™S EKVATIONEN!) +BALLSTEXT DB 'BALL*8***',0 ;8=1 + +hajjskar db 'HIGHSCORE PL X ',92,' ',93,0 +stjaernor db '********************',0 + + + +BONUSX2TS LABEL WORD + CLEARIT + ASSUME DS:DATA2 + DW _ANIMATION,_BONUSX2 + CLEARIT + DW 0 + + +BONUSX4TS LABEL WORD + CLEARIT + ASSUME DS:DATA2 + DW _ANIMATION,_BONUSX4 + CLEARIT + DW 0 + + +DATA ENDS + + + + +;****************************************************************************** +;*************************** Animations ************************************** +;****************************************************************************** +DATA2 SEGMENT PARA PUBLIC 'DATA' + + dw 1 + dw 4*4 +_clear dw clear2,1 + dw clear3,1 + dw clear4,1 + dw clear5,1 + + +BONUSTIMEFIRST=25 +BONUSTIME=3 +BONUSTIMELAST=60 + DW 1 + DW 12*4 +_BONUSX2 LABEL WORD + DW A_01_00,BONUSTIMEFIRST + DW A_01_01,BONUSTIME + DW A_01_02,BONUSTIME + DW A_01_03,BONUSTIME + DW A_01_04,BONUSTIME + DW A_01_05,BONUSTIME + DW A_01_06,BONUSTIME + DW A_01_07,BONUSTIME + DW A_01_08,BONUSTIME + DW A_01_09,BONUSTIME + DW A_01_10,BONUSTIME + DW A_01_11,BONUSTIMELAST + + DW 1 + DW 12*4 +_BONUSX4 LABEL WORD + DW A_01_00,BONUSTIMEFIRST + DW A_02_00,BONUSTIME + DW A_02_01,BONUSTIME + DW A_02_02,BONUSTIME + DW A_02_03,BONUSTIME + DW A_02_04,BONUSTIME + DW A_02_05,BONUSTIME + DW A_02_06,BONUSTIME + DW A_02_07,BONUSTIME + DW A_02_08,BONUSTIME + DW A_02_09,BONUSTIME + DW A_02_10,BONUSTIMELAST + + DW 1 + DW 12*4 +_BONUSX6 LABEL WORD + DW A_01_00,BONUSTIMEFIRST + DW A_03_00,BONUSTIME + DW A_03_01,BONUSTIME + DW A_03_02,BONUSTIME + DW A_03_03,BONUSTIME + DW A_03_04,BONUSTIME + DW A_03_05,BONUSTIME + DW A_03_06,BONUSTIME + DW A_03_07,BONUSTIME + DW A_03_08,BONUSTIME + DW A_03_09,BONUSTIME + DW A_03_10,BONUSTIMELAST + + DW 1 + DW 12*4 +_BONUSX8 LABEL WORD + DW A_01_00,BONUSTIMEFIRST + DW A_04_00,BONUSTIME + DW A_04_01,BONUSTIME + DW A_04_02,BONUSTIME + DW A_04_03,BONUSTIME + DW A_04_04,BONUSTIME + DW A_04_05,BONUSTIME + DW A_04_06,BONUSTIME + DW A_04_07,BONUSTIME + DW A_04_08,BONUSTIME + DW A_04_09,BONUSTIME + DW A_04_10,BONUSTIMELAST + + DW 1 + DW 12*4 +_BONUSX10 LABEL WORD + DW A_01_00,BONUSTIMEFIRST + DW A_05_00,BONUSTIME + DW A_05_01,BONUSTIME + DW A_05_02,BONUSTIME + DW A_05_03,BONUSTIME + DW A_05_04,BONUSTIME + DW A_05_05,BONUSTIME + DW A_05_06,BONUSTIME + DW A_05_07,BONUSTIME + DW A_05_08,BONUSTIME + DW A_05_09,BONUSTIME + DW A_05_10,BONUSTIMELAST + +FRAMETIME=3 + DW 0 + DW 4 ;ANTAL FJANTIGA FUJUMPVARV!!!!! + DW 17*4-4 +_JACKPOT LABEL WORD + DW A_06_00,FRAMETIME + DW A_06_01,FRAMETIME + DW A_06_02,FRAMETIME + DW A_06_03,FRAMETIME + DW A_06_04,FRAMETIME + DW A_06_05,FRAMETIME + DW A_06_06,FRAMETIME + DW A_06_07,FRAMETIME + DW A_06_08,FRAMETIME + DW A_06_09,FRAMETIME + DW A_06_10,FRAMETIME + DW A_06_11,FRAMETIME + DW A_06_12,FRAMETIME + DW A_06_13,FRAMETIME + DW A_06_14,FRAMETIME + DW A_06_15,FRAMETIME + DW A_06_16,FRAMETIME + + + +FRAMETIME=3 + DW 1 + DW 8*4 +_EXTRABALL LABEL WORD + DW A_07_00,FRAMETIME*9 + DW A_07_01,FRAMETIME + DW A_07_02,FRAMETIME + DW A_07_03,FRAMETIME + DW A_07_04,FRAMETIME + DW A_07_05,FRAMETIME + DW A_07_06,FRAMETIME + DW A_07_07,FRAMETIME*17 + +FRAMETIME=1 + DW 1 + DW 16*4 +_MILLION LABEL WORD + DW A_09_00,FRAMETIME + DW A_09_01,FRAMETIME + DW A_09_02,FRAMETIME + DW A_09_03,FRAMETIME + DW A_09_04,FRAMETIME + DW A_09_05,FRAMETIME + DW A_09_06,FRAMETIME + DW A_09_07,FRAMETIME + DW A_09_08,FRAMETIME + DW A_09_09,FRAMETIME + DW A_09_10,FRAMETIME + DW A_09_11,FRAMETIME + DW A_09_12,FRAMETIME + DW A_09_13,FRAMETIME + DW A_09_14,FRAMETIME + DW A_09_15,120 + +FRAMETIME=1 +FRAMETIMELAST=30 + DW 1 + DW 8*4 +_5 LABEL WORD + DW A_10_00,FRAMETIME + DW A_10_01,FRAMETIME + DW A_10_02,FRAMETIME + DW A_10_03,FRAMETIME + DW A_10_04,FRAMETIME + DW A_10_05,FRAMETIME + DW A_10_06,FRAMETIME + DW A_10_07,FRAMETIMELAST + +FRAMETIME=1 + DW 1 + DW 8*4 +_10 LABEL WORD + DW A_10200,FRAMETIME + DW A_10201,FRAMETIME + DW A_10202,FRAMETIME + DW A_10203,FRAMETIME + DW A_10204,FRAMETIME + DW A_10205,FRAMETIME + DW A_10206,FRAMETIME + DW A_10207,FRAMETIMELAST + + DW 1 + DW 8*4 +_15 LABEL WORD + DW A_11_00,FRAMETIME + DW A_11_01,FRAMETIME + DW A_11_02,FRAMETIME + DW A_11_03,FRAMETIME + DW A_11_04,FRAMETIME + DW A_11_05,FRAMETIME + DW A_11_06,FRAMETIME + DW A_11_07,FRAMETIMELAST + + DW 1 + DW 8*4 +_20 LABEL WORD + DW A_11200,FRAMETIME + DW A_11201,FRAMETIME + DW A_11202,FRAMETIME + DW A_11203,FRAMETIME + DW A_11204,FRAMETIME + DW A_11205,FRAMETIME + DW A_11206,FRAMETIME + DW A_11207,FRAMETIMELAST + + +extrn clear2,clear3,clear4,clear5:byte +extrn a_01_00,a_01_01,a_01_02,a_01_03,a_01_04,a_01_05,a_01_06 ,A_01_07 ,a_01_08 ,a_01_09 ,a_01_10 ,a_01_11 +extrn a_02_00,a_02_01,a_02_02,a_02_03,a_02_04,a_02_05,a_02_06 ,A_02_07 ,a_02_08 ,a_02_09 ,a_02_10 +extrn a_03_00,a_03_01,a_03_02,a_03_03,a_03_04,a_03_05,a_03_06 ,A_03_07 ,a_03_08 ,a_03_09 ,a_03_10 +extrn a_04_00,a_04_01,a_04_02,a_04_03,a_04_04,a_04_05,a_04_06 ,A_04_07 ,a_04_08 ,a_04_09 ,a_04_10 +extrn a_05_00,a_05_01,a_05_02,a_05_03,a_05_04,a_05_05,a_05_06 ,A_05_07 ,a_05_08 ,a_05_09 ,a_05_10 +extrn a_06_00,a_06_01,a_06_02,a_06_03,a_06_04,a_06_05,a_06_06 ,A_06_07 ,a_06_08 ,a_06_09 ,a_06_10 ,A_06_11 ,A_06_12 ,A_06_13 ,A_06_14 ,A_06_15,A_06_16 +extrn a_07_00,a_07_01,a_07_02,a_07_03,a_07_04,a_07_05,a_07_06 ,A_07_07 +extrn a_09_00,a_09_01,a_09_02,a_09_03,a_09_04,a_09_05,a_09_06 ,A_09_07 ,a_09_08 ,a_09_09 ,a_09_10 ,A_09_11 ,A_09_12 ,A_09_13 ,A_09_14 ,A_09_15 +extrn a_10_00,a_10_01,a_10_02,a_10_03,a_10_04,a_10_05,a_10_06 ,A_10_07 +extrn a_10200,a_10201,a_10202,a_10203,a_10204,a_10205,a_10206 ,A_10207 +extrn a_11_00,a_11_01,a_11_02,a_11_03,a_11_04,a_11_05,a_11_06 ,A_11_07 +extrn a_11200,a_11201,a_11202,a_11203,a_11204,a_11205,a_11206 ,A_11207 + +DATA2 ENDS + + + + +;****************************************************************************** +;** ** +;** C O D E ** +;** ** +;****************************************************************************** + +CODE SEGMENT PARA PUBLIC 'CODE' + ASSUME CS:CODE,DS:DATA + + +;****************************************************************************** +;*********************************** INITS ************************************ +;****************************************************************************** + +JUST_ONE_TIME_RESET_TABLE: + CALL SLACK_LIGHTS + RETN + + +WHEN_NEW_GAME_RESET_TABLE: + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + MOVEBCD JACKVALUE,JACKINIT + CALL RESET_VARS + CALL UPDATE_P_STRUC_4_ALL_PLAYERS + MOV XBALLS,0 + MOV XxballE,FALSE + MOV FROM_DEMO_MODE,TRUE + ;cleara slutsiffrorna (di alla!) (F”r knacket allts†!!!) + push es + move es,ds + MOV di,offset last_text + mov al,' ' + mov cx,8*2 + rep stosb + MOV di,offset flashlast + mov al,' ' + mov cx,8*2 + rep stosb + pop es + RETN + +WHEN_NEW_BALL_RESET_TABLE: +; CALL KILL_FLASHOR ;DOT MATRIX FLASH RESET + CALL SLACK_LIGHTS + CALL RESETFLASHLIST + CALL RESET_VARS + CALL P_STRUC_2_VARS + RETN + + +RESET_VARS: + MOV BONUS_TEXT[11],'8' + MOV play_TEXT[18],'8' + MOV play_TEXT[8],'8' + + NIL AX + MOVE ES,DS + MOV DI,OFFSET SIFFRORNA + MOV CX,6 + REP STOSW + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,6 + REP STOSW + MOV DI,OFFSET CYCLONECOUNTERBCD + MOV CX,6 + REP STOSW + MOVEBCD OR_TOTAL,BCD0 + MOVEBCD TM_TOTAL,BCD0 + + NIL AL + MOV DI,OFFSET SB_DISABLE_AREA + MOV CX,11 + REP STOSB + + NIL AX + MOV DI,OFFSET SKILLSCOREBCD + MOV CX,6 + REP STOSW + + MOVEBCD SULP_SCORE,BCD0 + + MOV BALLHIGH,FALSE + MOV HOLDBONUSFLAG,FALSE + MOV KEY_DISABLED,FALSE + MOV SB_DISABLED,FALSE + MOV KEY_ROL_DISABLED,TRUE + MOV RIP_ROL_DISABLED,FALSE + MOV LEFT_RAMP_DOWN_COUNTER,0 + MOV GHOSTCOUNTER,0 + MOV GHOST_FLASHING,FALSE + MOV TOWER_OPEN,FALSE + + PUT_GATE_POS_LOW GATE3 + PUT_GATE_POS_LOW GATE5 + + CALL INIT_TOWER + CALL INIT_VAULT + CALL INIT_WELL + + MOV NEXTJUMP,10 + MOV CYCLONECOUNTER,0 + MOV AX,SLUMP_COUNTERN + NIL AH + MOV BL,3 + DIV BL + INC AH + MOV SKILLKEY,AH + LIGHTFLASH AH,SKILLSPEED + MOV KICK_BACK_FLASHING,FALSE + MOV MB_FLASHING,FALSE + MOV _2X_SCREAMS_FLASHING,FALSE + MOV SULP_FLASHING,FALSE + MOV LOCK1_FLASHING,FALSE + MOV LOCK2_FLASHING,FALSE + MOV SULPSYNCER,0 + MOV TBMILLIONFLASHING,0 + MOV TB5MFLASHING,0 + MOV TBSYNCER,0 + MOV XBALLFLASHING,FALSE + MOV JACKPOTFLASHING,FALSE + MOV SJACKPOTFLASHING,FALSE + MOV HOLDBONUSFLASHING,FALSE + MOV DOUBLEBONUSFLASHING,FALSE + MOV HOLDBONUSFLAG,FALSE + MOV BPOINTER,39 ;MULTIPEL BONUS POINTER + MOV HIGH_VAULT,FALSE ;NOT KICKBACK IN THE VAULT? + MOV TBNEXT,0 + MOV TURBOMODE,FALSE + MOV OFFROADMODE,FALSE + MOV MBDOWNCOUNTER,0 + MOV SULPDOWNCOUNTER,0 + MOV COMBODOWNCOUNTER,0 + MOV COMBOSTAGE,0 + MOV TOWERHUNTMODE,FALSE + MOV TOWERHUNTSTAGE,0 + MOV TOWERHUNTDOWNCOUNTER,0 + MOV MULTIDEMONDOWNCOUNTER,0 + MOV MULTIDEMONMODE,FALSE + MOV LOCKVAULTFLASHING,FALSE + MOV LOCKWELLFLASHING,FALSE + MOV HOLDMULTICOUNTER,FALSE +;HˇR VAR DEN! ; mov paRTYFLASh,false + MOV DEMONFLASHING,FALSE + MOV FIX_TELEPORT_BUG,FALSE ;OVERRIDE-VARIABEL! + MOV GHOST_INH_SB,FALSE + MOV BONUS_X,1 + MOV IN_VAULT,FALSE ;TILT-BUG-FIX + MOV IN_WELL,FALSE ;TILT-BUG-FIX + MOV IN_TOWER,FALSE ;TILT-BUG-FIX + RETN + + + +;****************************************************************************** + + + +DEMO_MUSIC PROC NEAR + CMP HIGHSCORE,TRUE +; JE OOPS_HIGH ;CP! + PLAYJINGLE S_NOHIGH + MOV AL,S_NOHIGH[2] + MOV LASTPRIORITY,AL + MOV LASTJINGLE,9 ;9=NOHIGH ;SVEN + RETN +DEMO_MUSIC ENDP + +GAME_MUSIC PROC NEAR + PLAYJINGLE S_SPRING1 + MOV AL,S_SPRING1+2 + MOV LASTPRIORITY,AL + MOV LASTJINGLE,0 + RETN +GAME_MUSIC ENDP + +;****************************************************************************** +;******************************** LOOSE BALL ********************************** +;****************************************************************************** +LOOSE_BALL PROC NEAR + MOV LOOSING,TRUE + MOV SCREENFORCE2,576-SH_LO+SPLH ;CP? + CMP HI_RES,TRUE + JNE NOTHIRES16 + MOV SCREENFORCE2,576-SH_HI+SPLH ;CP? +NOTHIRES16: + SETBALLPOS DROPX,DROPY,0,0,FALSE + MOV HOLDSTILL,TRUE + MOV ALLOWFLIP,FALSE ;KILL FLIPPERS! + + ADDTASK SOUNDRINNER + + MOV SPECIALMODE,FALSE + ENDFLASH 38 ;GRIM OFF! ;CP. + LIGHTOFF 38 + + MOV CURRENT_PRIORITY,0 + EFFECT LOSTBALL + MOV LASTLOOPVAL,0 + RETN + +SOUNDRINNER: + WAITSYNCS 5 + SOUNDEFFECT SRINNER,0 + SUICIDE + +_FLORPA: + MOV CS:LB6CNT,0 ;RESET F™RDR™JNINGS-RˇKNAREN + MOV ADDORPEK,OFFSET ADDOR ;STARTA MED SISTA NUFFRAN + MOV BONUSPEK,OFFSET BONUSSIFFRORNA+11 + + MOV SI,OFFSET BONUSSIFFRORNA ;SPARA BONUSSIFFRORNA + MOV DI,OFFSET TEMPSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW + + MOV DOTRUT,OFFSET DO_FLORPA + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_5 + MOV BX,0 +_NEXTp_5: + MOV NEXT_A,BX + RETN +PLIPPA_SCORE: + mov si,offset siffrorna + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN + +LB6CNT DW ? +DO_FLORPA: + INC CS:LB6CNT + CMP CS:LB6CNT,4 ;CPW! + JE LB6CNTOK + MOV SI,75 + RETN +LB6CNTOK: + MOV CS:LB6CNT,0 + +DO_IT_AGAIN_AND_DO_IT_NOW: + MOV BX,BONUSPEK + MOV AL,[BX] + OR AL,AL ;IS DIGIT ZERO? + JZ DIGIT_IS_ZERO + DEC BYTE PTR [BX] ;RˇKNA NED BONUSEN + JNZ NO_WAITS_TODAY + + IFZEROBCD BONUSSIFFRORNA + JNC NO_WAITS_TODAY + + MOV CS:LB6CNT,-10 ;CPW! +NO_WAITS_TODAY: + + MOV SI,ADDORPEK ;RˇKNA UPP POˇNGEN + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + + SOUNDEFFECT S_SCORELJUD,0 + + JMP STEP_DONE + +DIGIT_IS_ZERO: + ;FLER SIFFROR? + INC ADDORPEK ;NEXT DIGIT IN POˇNGEN + CMP ADDORPEK,OFFSET ADDOR+12 + JE NO_MORE_NUFFROR + DEC BONUSPEK ;NEXT DIGIT IN BONUS + JMP DO_IT_AGAIN_AND_DO_IT_NOW + +STEP_DONE: + ;SHOW BONUSSIFFRORNA & SIFFRORNA + MOV SI_siffror,OFFSET BONUSSIFFRORNA + MOV DI_siffror,7*2*SW/4-16*4/4 ;10 RADER NED, 8 (12-4) TECKEN IN P¸ RADEN!! + MOV TABORT_DIOVRE_FNT,0 + MOV PRINTTASK,OFFSET PRINT8_task + CALL PLIPPA_SCORE + MOV SI,75 ;AVINSTALLERA EJ! + RETN + +NO_MORE_NUFFROR: + mov clear_box_start,7*2*SW/4 + mov clear_box_bredd,16*(12-1)/4-16*4/4 + mov clear_box_hojd,10 + CALL clear_box2 + MOV SI,0 ;AVINSTALLERA! + RETN + +;******************************* ARNESSON + + +disa dw ? +playerQ db ? +hi_pos dw ? +_check_high: + MOV SISA,1 + mov al,players + mov cs:playerQ,0 + MOV CS:DISA,0 + MOV DOTRUT,offset SPINTSEL_IN_HIGH + JMP NORMAL_END + +spintsel_in_high: + + LEA SI,PLAYER_AREA.P_SIFFRORNA + + MOV CX,4 + + add si,cs:disa + add cs:disa,size player_struc + + mov di,offset hi_score_list + + inc cs:playerQ + mov al,cs:playerQ + cmp al,players + jna check_list + mov first_high,false + cmp highscore,true + je no_sad_jingle + + mov current_priority,0 + mov jinglejumpcnt,1 + PLAYJINGLE S_GameOver + mov current_priority,0 + mov no_demomusic,true +no_sad_jingle: + mov highscore,false + mov si,0 + retn ;f„rdig! + +check_list: + push cx + mov cx,12 + mov bx,0 +check_num: + mov al,[di+bx] + cmp [si+bx],al + jb not_beaten + ja beaten + inc bx + loop check_num +not_beaten: + mov bp,false + jmp poppera +beaten: + pop cx + mov cs:hi_pos,cx +;play the happy highscore jingle . . . +;But only the first time!! + cmp first_high,true + je noplay_of_this + mov first_high,true + mov current_priority,0 + mov jinglejumpcnt,1 + mov highscore,true + playjingle_PENETRATE S_GameOver2 ;(HiScore jingle) +noplay_of_this: + mov sisa,1 + mov bp,true + jmp done_hi_check + +poppera: + pop cx + add di,12+3+1 ;12 nuffror, 3 bokst„ver + loop check_list + +done_hi_check: + mov si,1 + cmp bp,true + jne dont_getit +;***************** +;Print 'highscore pl x ( )' and install key-reader TS + + mov al,cs:playerQ + mov hajjskar[13],al + add hajjskar[13],'7' + + mov dotrut,offset get_it_from_keyboard + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +;***************** + mov si,1 + retn + +dont_getit: + retn + +get_it_from_keyboard: +;************ insert in list + push es + move es,ds + mov cx,cs:hi_pos + + mov si,offset hi_score_list+(12+3+1)*3-1 + mov di,offset hi_score_list+(12+3+1)*4-1 + dec cx + jcxz pos4J + + mov ax,12+3+1 + mul cx + mov cx,ax + + std + rep movsb + +pos4J: sub di,(12+3+1)-1 + cld + lea si,player_area.p_siffrorna + MOV CX,SIZE PLAYER_STRUC + MOV AL,CS:PLAYERQ + dec al + NIL AH + MUL CX + ADD SI,AX + mov cx,12 + rep movsb ;mov in new hiscore + pop es +;di pekar d„r namnet ska petas in!! + mov cs:nof_chars_to_read,3 + mov cs:place_hi,di + mov scan_code,-1 ;l„s ev. tidigare tangenttryck! + mov dotrut,offset read_keyboardet + mov si,1 + retn +;***************** +place_hi dw ? +nof_chars_to_read dw ? + +read_keyboardet: + push es + mov al,scan_code + cmp al,-1 + je feltecken_du ;ej tryckt! + mov scan_code,-1 + mov bx,offset alfa_keys + xlat + cmp al,0 + je feltecken_du ;felaktigt tecken! + move es,ds + mov di,cs:place_hi + stosb + push ax + mov cs:place_hi,di + mov ax,3 + sub ax,cs:nof_chars_to_read + mov di,offset hajjskar+16 + add di,ax + pop ax + stosb ;skriv te sk„rm texten . . + dec cs:nof_chars_to_read + jnz kvar_svar + mov sisa,60 ;cpw! + mov dotrut,offset wait_a_little + pop es + + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + + ;cleara namnet! + push es + move es,ds + mov al,' ' + mov cx,3 + mov di,offset hajjskar+16 + rep stosb ;skriv te sk„rm texten . . + pop es + jmp dont_write_play +kvar_svar: + pop es + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset hajjskar + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +dont_write_play: + mov si,sisa + retn +feltecken_du: + pop es + mov si,sisa + retn + +wait_a_little: + dec si + cmp si,30 ;cpw! + jne dont_blame_me + push si + mov hojd_1,13 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*13*2/4 + mov font_adr,offset font13 + MOV AX,offset stjaernor + MOVE DI,sw*2*2/4 + call PRINT_TEXT + pop si +dont_blame_me: + cmp si,2 + jnbe retta_oooo + mov dotrut,offset spintsel_in_high + mov si,1 +retta_oooo: + retn +_loop_: + dec cs:looper + JZ NOJUMPER_tomorrow + add bx,4 + mov bx,[bx] + MOV NEXT_A,BX + jmp [bx] + +looper dw ? +_setloop: +NOJUMPER_tomorrow: +;reinstall loop val + mov ax,[bx+2] + mov cs:looper,ax + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp print_end + + + +SHOWER DB ? +player_adr dw ? +_INIT_SCORE: + mov cs:player_adr,0 + sub cs:player_adr,size player_struc + MOV PLAYERSTEXT[7],0+'7' + MOV PLAY_TEXT[8],0+'7' + MOV AL,PLAYERS + MOV CS:SHOWER,AL + inc CS:SHOWER + + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end +_SHOW_SCORE: + INC PLAYERSTEXT[7] + INC PLAY_TEXT[8] + add cs:player_adr,size player_struc + DEC CS:SHOWER + JZ NOJUMPER + + + MOV SISA,1 + mov dotrut,offset ShowIt + + cmp CS:SHOWER,1 + je normal_end + + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + RETN + +NOJUMPER: + MOV SISA,1 + mov dotrut,offset WAITRUT + jmp normal_end + +ShowIt: + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset PLAYERSTEXT + MOVE DI,sw*2*2/4 + call PRINT_TEXT + +; mov si,offset siffrorna + + mov bx,cs:player_adr + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + + mov bx,336*2/4+(320-12*16)/4 ;h”ger justerad! + MOVE ES,CS + CALL DWORD PTR ES:PEKOR + MOV SI,0 + RETN + +_TurnOffSpecialMode: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + mov specialmode,false + mov current_priority,0 + jmp Normal_End + +_TurnONSpecialMode: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + MOV SPECIALMODE,TRUE + JMP NORMAL_END + +_TURNONTURBOMODE: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + MOV TURBOMODE,TRUE + JMP NORMAL_END + +_TURNOFFTURBOMODE: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + MOV TURBOMODE,FALSE + JMP NORMAL_END + +_TURNONOFFROADMODE: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + MOV OFFROADMODE,TRUE + JMP NORMAL_END + +_TURNOFFOFFROADMODE: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + MOV OFFROADMODE,FALSE + JMP NORMAL_END + + +_knacket: + mov dotrut,offset knackrut1 + mov sisa,1 + MOV PLAYER,1 ;F™R CHECK_XXBALL + jmp normal_end + + + +knackrut1: + PLAYJINGLE_PENETRATE S_endfig + MOV LASTJINGLE,emptyjingle ;TYST EFTER FULLGJORD PENETRERING + mov dotrut,offset knackrut2 +;g”r text me sista nuffrerna!! + mov cl,players + nil ch + mov di,offset last_text + mov ah,' ' + mov bx,10 ;n„st sista! + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + push es + move es,data + mov bx,0 +make_last: + mov al,ds:[si] + add si,size player_struc + add al,'7' + stosw + mov word ptr offset [flashlast+bx],ax ;kopiera texten f”r senare blink + + add bx,2 + loop make_last + + pop es + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset last_text + MOVE DI,sw*2/4 + call PRINT_TEXT + + ;knacka(????) fram en ny slutsiffra! + mov ax,slump_countern + mov dx,0 + mov cx,10 + div cx + ;resten i de„ks e mellan n†ll † ti† + mov last_pos,dx + + mov cs:knackptr,offset knacktab_LO + mov si,nof_banks_LO + CMP HI_RES,TRUE + JNE NOTHIRES38 + mov cs:knackptr,offset knacktab_HI + mov si,nof_banks_HI +NOTHIRES38: + mov bx,cs:knackptr + move cs:knacktiden,[bx] + mov sisa,SI + + retn +knackptr dw ? +knacktiden dw ? +alla_glada db ? +knackrut2: + + push si + mov ax,last_pos + ;ax=linje adress, ett steg=32 pixel=> 1 steg= 8 adr.(mcgab) + ;(1 char=8*2 pix, 1 steg=2 char) + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOVE DI,sw*2*8/4 + add di,ax + MOV AX,offset startext + call PRINT_TEXT + mov si,1 + + dec cs:knacktiden + jnz over_iii + mov bx,cs:knackptr + move cs:knacktiden,[bx] + add cs:knackptr,2 + pop si + dec si + push si + DEC LAST_POS + CMP LAST_POS,-1 + JNE OVER_III + MOV LAST_POS,9 +OVER_III: + + mov ax,last_pos + add ax,'7' + mov slutsiffra[0],al + sub ax,'7' + shl ax,3 + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX_PRINT,offset slutsiffra + MOVE DI_PRINT,sw*2*8/4 + add di_print,ax + MOV PRINTTASK,OFFSET PRINT_TEXT + pop si +; dec si + cmp si,0 + jne retta_nuda +;kolla om siffrorna st„mmer f”r n†en . . . + mov cl,players + nil ch + mov si,offset last_text + mov bx,last_pos + add bx,'7' + + mov di,offset flashlast + + move es,data + mov cs:alla_glada,false +READ_NUFFROR: + lodsw + cmp al,bl + jne gladgnu_tu + mov cs:alla_glada,true + add di,2 + loop READ_NUFFROR + jmp ture_sventton_kravdes_har +gladgnu_tu: + mov ax,'**' + stosw + loop READ_NUFFROR +ture_sventton_kravdes_har: + cmp cs:alla_glada,true + je gladgnu + mov si,0 + jmp retta_nuda ;-( ingen glad )-: + +;Om javisst, spela glad gnu † flasha! +gladgnu: + MOV MATRIX_SPEED,3 + MOV MATRIX_CNT,3 + MOV MATRIX_ONOFF,TRUE + MOV MATRIX_IS_FLASHING,TRUE + + mov hojd_1,5 + mov tabort_diovre,0 + mov tabort_diovre_fnt,0 + mov hojd_add,bredd_1/4-sw*5*2/4 + mov font_adr,offset font5 + MOV AX,offset flashlast + MOVE DI,sw*2/4 + call PRINT_TEXT + + + mov current_priority,0 + PLAYJINGLE S_Knacket + MOV JINGLEJUMPCNT,1 + mov current_priority,0 + mov lastjingle,emptyjingle + mov si,0 +retta_nuda: + retn + + + +_CHECK_XXBALLS: ;OBS! TV¸ ING¸NGAR TILL DENNA RUTIN + ;INPUT: LAST_TEXT, LAST_POS, PLAYER, PLAYERS + ;OUTPUT: FT_PEKARE, PLAYER +TESTNEXTPL: + PUSH BX + + MOV BL,PLAYER + NIL BH + + SHL BX,1 + ADD BX,OFFSET LAST_TEXT-2 ;bx pekar p† spelare n's slutsiffra + + MOV AL,[BX] + MOV WORD PTR [BX],'XX' ;DESTROY HIM MY ROBOTS! + NIL AH + SUB AL,'7' + POP BX + + + CMP LAST_POS,AX + JE THIS_ONE ;HAN SKA F¸ XXBALL!!! CP? + + INC PLAYER ;INGEN XXBALL F™R HONOM! + MOV AL,PLAYER + CMP AL,PLAYERS + JNA TESTNEXTPL + + MOV BX,OFFSET after_xxballsTS ;¸X¸ AVSLUT + MOV NEXT_A,BX + JMP [BX] + +THIS_ONE: + + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + + MOV XXBALLE,TRUE + MOV BX,OFFSET shoOt_AGAIN_OnTS + MOV NEXT_A,BX + JMP [BX] + +;********************************* + +_KOLLA_XXBALL: ;VID EJ XXBALLE: DUMRET + ;VID XXBALLE: NˇSTA SPELARE ELLER AVSLUTA + ;(FIXAR EV XBALL) + CMP XXBALLE,FALSE + JE HU_ + PUSH BX + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + POP BX + + CMP XBALLS,0 ;LAUGH AGAIN? + JA LET_HIM_SHOOT_AGAIN ;MEGA-HOPP + + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER2 + + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED2 + +HIGHEST_PLAYER2: + MOV BX,OFFSET AFTER_XXBALLSTS ;END XXBALLE GAME + MOV NEXT_A,BX + JMP [BX] + +PLAYER_CHANGED2: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + + + MOV BX,OFFSET CHECK_XXBALLTS + MOV NEXT_A,BX + JMP [BX] + +;********** + + +_CHANGE_PLAYER: + PUSH BX + CMP HOLDBONUSFLAG,TRUE + JNE NOT_HB_TRUE + MOV SI,OFFSET TEMPSIFFRORNA ;HOLD THE BONUS! + MOV DI,OFFSET BONUSSIFFRORNA + MOVE ES,DS + MOV CX,6 + REP MOVSW +NOT_HB_TRUE: + + CALL VARS_2_P_STRUC ;STORE TABLE AND SCORE! + + POP BX + CMP XBALLS,0 ;LAUGH AGAIN? + JA LET_HIM_SHOOT_AGAIN + PUSH BX + + MOV AL,PLAYER ;IS HE THE HIGHEST PLAYER? + CMP AL,PLAYERS + JE HIGHEST_PLAYER + + INC PLAYER ;CHANGE TO THE NEXT PLAYER! + JMP PLAYER_CHANGED + +HIGHEST_PLAYER: + INC BALLS[11] + MOV AL,NO_OF_BALLS + CMP BALLS[11],AL + JA NO_MORE_BALLS + MOV PLAYER,1 ;NEXT PLAYER IS FIRST PLAYER! + MOV AL,BALLS[11] + ADD AL,'7' ;SEPEKOMPENSERING + MOV BALLSTEXT[5],AL + MOV play_TEXT[18],AL + +PLAYER_CHANGED: + MOV AL,PLAYER + ADD AL,'7' ;SEPEKOMPENSERING + MOV PLAYERSTEXT[7],AL + MOV play_TEXT[8],AL + + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + +HU_: ADD BX,2 ;TASKSYTEM, HOPPA TILL NˇSTA/AVSLUT + CMP WORD PTR [BX],0 + JNE _NEXTp_7 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_7: + MOV NEXT_A,BX + JMP [BX] + +LET_HIM_SHOOT_AGAIN: ;2 ING¸NGAR! + DEC XBALLS + MOV BX,OFFSET shoot_again_onTS + MOV NODOTCOUNT,0 + UPDAT_SCORE +; MOV NEXT_A,BX ;CP? + JMP [BX] + +_NEW_BALL2: + PUSH BX + ADDTASK NEW_BALL_TASK ;TO GAME FROM GAME + POP BX + JMP HU_ + + +NO_MORE_BALLS: + CALL VARS_2_P_STRUC ;STORE LAST PLAYER'S SCORE TOO! + POP BX + MOV BX,OFFSET out_of_ballsTS + MOV NEXT_A,BX + JMP [BX] + RETN + + +_2_DEMO_MODE: + ADDTASK TO_DEMO_FROM_GAME + JMP HU_ + +zeroscore: + push es + move es,ds + mov cx,12/2 + mov ax,0 + mov di,offset siffrorna + rep stosw + pop es + retn + +TO_DEMO_FROM_GAME: + MOV PLAYERS_CP,TRUE + CALL GO_DEMO_MODE ;TO DEMO FROM GAME + MOV SCREENFORCE,BANH-(SH_LO-SPLH) + CMP HI_RES,TRUE + JNE NOTHIRES17 + MOV SCREENFORCE,BANH-(SH_HI-SPLH) +NOTHIRES17: + MOV CARMEN,-1 ;KARMANN GHIA??? + CALL SLACK_LIGHTS + MOV ADDPLAYERS,TRUE + SUICIDE + + +LOOSE_BALL ENDP + + + +;****************************************************************************** +;******************************** NEW_BALL ************************************ +;****************************************************************************** + +NEW_BALL_TASK: + WAITSYNCS 30 + CALL NEW_BALL + RETN ;PGA NEWBALL + +NEW_BALL PROC NEAR ;ENDA SˇTTET ATT F¸ UT EN BOLL P¸ BANAN! + MOV LOOSING,FALSE + MOV BALL_DOWN,FALSE + MOV I_UTSKJUT,TRUE + + CALL WHEN_NEW_BALL_RESET + CALL WHEN_NEW_BALL_RESET_TABLE + + MOV HOLDSTILL,TRUE + SETBALLPOS STARTX-5-15,STARTY-5,0,0,FALSE + MOV SCREENFORCE2,-1 ;500 + + CMP ADDPLAYERS,TRUE + JE NOSP + PLAYJINGLE S_SPRING +NOSP: + MOV LASTJINGLE,0 + MOV SCORECHANGED,FALSE + + CMP ADDPLAYERS,TRUE + JE ITS_FROM_DEMO + CALL NEW_BALL_PART_TWO + RETN + +ITS_FROM_DEMO: + ADDTASK SNART_NEW_BALL + RETN + +NEW_BALL_PART_TWO: + ADDTASK SOUNDNEWBALL + ADDTASK SETBALL + + MOV ALLOWFLIP,TRUE + MOV TILTFLAG,FALSE + MOV TILTCOUNTER,0 + MOV SCORECHANGED,FALSE + RETN + +SOUNDNEWBALL: + WAITSYNCS 45 + SOUNDEFFECT SNEWBALL,0 + SUICIDE + +SETBALL: + WAITSYNCS 80 + SETBALLPOS STARTX-5,STARTY-5,10,0,FALSE + MOV HOLDSTILL,FALSE + MOV SCREENFORCE2,-1 + SUICIDE +;FIAT UNO +NEW_BALL ENDP + +MOTA_BORT_INACTIVE_SLINGAN: + ;OBS! AVINSTALLERA DENNA GENOM "MOV I_UTSKJUT,FALSE" + MOV NODOTCOUNT,0 + CMP I_UTSKJUT,FALSE + JE TA_BORT_MEJ + RETN +TA_BORT_MEJ: + SUICIDE + + +P_STRUC_2_VARS PROC NEAR ;INPUT: PLAYER + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA + + MOV CX,12/2 + MOVE ES,DS + + LEA SI,PLAYER_AREA[BX].P_SIFFRORNA + MOV DI,OFFSET SIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_BONUSSIFFRORNA + MOV DI,OFFSET BONUSSIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA SI,PLAYER_AREA[BX].P_SKILLSCOREBCD + MOV DI,OFFSET SKILLSCOREBCD + MOV CX,12/2 + REP MOVSW + CALL DOLIGHTS + + UPDATE_LIGHT 26,PLAYER_AREA[BX].P_STONE_S ;STONE + UPDATE_LIGHT 27,PLAYER_AREA[BX].P_STONE_T + UPDATE_LIGHT 28,PLAYER_AREA[BX].P_STONE_O + UPDATE_LIGHT 29,PLAYER_AREA[BX].P_STONE_N + UPDATE_LIGHT 30,PLAYER_AREA[BX].P_STONE_E + + CALL DOLIGHTS + + UPDATE_LIGHT 20,PLAYER_AREA[BX].P_BONE_B ;BONE + UPDATE_LIGHT 21,PLAYER_AREA[BX].P_BONE_O + UPDATE_LIGHT 22,PLAYER_AREA[BX].P_BONE_N + UPDATE_LIGHT 23,PLAYER_AREA[BX].P_BONE_E + UPDATE_LIGHT 4,PLAYER_AREA[BX].P_R_RIP ;RIP + UPDATE_LIGHT 5,PLAYER_AREA[BX].P_I_RIP + UPDATE_LIGHT 6,PLAYER_AREA[BX].P_P_RIP + + CALL DOLIGHTS + + MOV AL,PLAYER_AREA[BX].P_KICKBACKFLASHING ;KICKBACK + MOV KICK_BACK_FLASHING,AL + CMP AL,TRUE + JNE NOTTHEKICKBACK + PUSH BX + ENDFLASH 44 + LIGHTFLASH 44,KICKSPEED + PUT_GATE_NEG_LOW GATE5 + POP BX +NOTTHEKICKBACK: + + MOVE NEXTJUMP,PLAYER_AREA[BX].P_NEXTJUMP + MOVE CYCLONECOUNTER,PLAYER_AREA[BX].P_CYCLONECOUNTER + MOVEBCD CYCLONECOUNTERBCD,PLAYER_AREA[BX].P_CYCLONECOUNTERBCD + + MOV CL,PLAYER_AREA[BX].P_GHOSTCOUNTER + MOV GHOSTCOUNTER,CL + OR CL,CL + JZ NOGHOSTS + NIL CH +NEXTGHOST: + PUSH CX + PUSH BX + MOV BL,CL + DEC BL + MOV AL,SIZE GHOST_STRUC + MUL BL + MOV BX,AX + MOV AL,GHOSTAREA[BX].G_LIGHTNO + LIGHTON AL + POP BX + POP CX + LOOP NEXTGHOST +NOGHOSTS: + MOV AL,PLAYER_AREA[BX].P_GHOSTFLASHING + MOV GHOST_FLASHING,AL + CMP AL,TRUE + JNE NOTFLASHTHEGHOST + MOV BL,GHOSTCOUNTER + MOV AL,SIZE GHOST_STRUC + MUL BL + MOV BX,AX + ADD BX,OFFSET GHOSTAREA + MOV AL,[BX].G_LIGHTNO + LIGHTFLASH AL,GHOSTSPEED + ENDFLASH 16 + LIGHTFLASH 16,TRIGHOSTSPEED +NOTFLASHTHEGHOST: + RETN +P_STRUC_2_VARS ENDP + + +VARS_2_P_STRUC PROC NEAR ;INPUT: PLAYER + ;2 ENTRIES TO THIS RUT + MOV BL,PLAYER + DEC BL + NIL BH + MOV AX,SIZE PLAYER_STRUC + MUL BX + MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA +VARS_2_P_STRUC_2: ;USED BY WHEN_NEW_GAME_RESET! + MOV CX,12/2 + MOVE ES,DS + + LEA DI,PLAYER_AREA[BX].P_SIFFRORNA + + MOV SI,OFFSET SIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_BONUSSIFFRORNA + MOV SI,OFFSET BONUSSIFFRORNA + MOV CX,12/2 + REP MOVSW + + LEA DI,PLAYER_AREA[BX].P_SKILLSCOREBCD + MOV SI,OFFSET SKILLSCOREBCD + MOV CX,12/2 + REP MOVSW + + UPDATE_PSTRUC PLAYER_AREA[BX].P_STONE_S,26 ;STONE + UPDATE_PSTRUC PLAYER_AREA[BX].P_STONE_T,27 + UPDATE_PSTRUC PLAYER_AREA[BX].P_STONE_O,28 + UPDATE_PSTRUC PLAYER_AREA[BX].P_STONE_N,29 + UPDATE_PSTRUC PLAYER_AREA[BX].P_STONE_E,30 + UPDATE_PSTRUC PLAYER_AREA[BX].P_BONE_B,20 ;BONE + UPDATE_PSTRUC PLAYER_AREA[BX].P_BONE_O,21 + UPDATE_PSTRUC PLAYER_AREA[BX].P_BONE_N,22 + UPDATE_PSTRUC PLAYER_AREA[BX].P_BONE_E,23 + UPDATE_PSTRUC PLAYER_AREA[BX].P_R_RIP,4 ;RIP + UPDATE_PSTRUC PLAYER_AREA[BX].P_I_RIP,5 + UPDATE_PSTRUC PLAYER_AREA[BX].P_P_RIP,6 + + MOVE PLAYER_AREA[BX].P_NEXTJUMP,NEXTJUMP + MOVE PLAYER_AREA[BX].P_CYCLONECOUNTER,CYCLONECOUNTER + MOVEBCD PLAYER_AREA[BX].P_CYCLONECOUNTERBCD,CYCLONECOUNTERBCD + MOVAL PLAYER_AREA[BX].P_KICKBACKFLASHING,KICK_BACK_FLASHING + MOVAL PLAYER_AREA[BX].P_GHOSTCOUNTER,GHOSTCOUNTER + MOVAL PLAYER_AREA[BX].P_GHOSTFLASHING,GHOST_FLASHING + + RETN +VARS_2_P_STRUC ENDP + + + +;****************************************************************************** +;******************************** TILT TILT TILT ****************************** +;****************************************************************************** +HE_TILTED PROC NEAR + MOV ALLOWFLIP,FALSE + PLAYJINGLE S_TILT + MOV LASTJINGLE,EMPTYJINGLE + MOV BX,OFFSET tiltTS + CALL DO_MATRIX + CALL RESETFLASHLIST + CALL SLACK_LIGHTS + RETN +HE_TILTED ENDP + +HE_ALMOST_TILTED PROC NEAR + PLAYJINGLE S_DANGER + RETN +ENDP + +;********************************* CHECK SHIFTKEYS **************************** + +CHECK_SHIFTKEYS PROC NEAR + CMP SHIFTPRESSED,TRUE + JNE NO_SHIFT + MOV SHIFTPRESSED,FALSE +;**************************************** +;* 3 light rol * +;**************************************** + CMP KEY_ROL_DISABLED,TRUE + JE NO_KEY_ROL + START_LIGHT=1 + SHIFT_LIGHT +NO_KEY_ROL: + CMP RIP_ROL_DISABLED,TRUE + JE NO_RIP_ROL + START_LIGHT=4 + SHIFT_LIGHT +NO_RIP_ROL: +NO_SHIFT: + RETN +CHECK_SHIFTKEYS ENDP + +;****************************************************************************** +;***************************** BRICKOR & KNAPPAR ****************************** +;****************************************************************************** + +SB_TOUCHERA MACRO LNO + LOCAL QXX,XXT,QXXT + CMP GHOST_INH_SB,TRUE + JE QXX + CMP SB_DISABLED,TRUE + JE QXX + CMP SB_DISABLE_AREA[LNO-20],TRUE + JE QXX + MOV SB_DISABLE_AREA[LNO-20],TRUE + CALL TOUCHSETA + MOV LIGHTSTATUS[LNO],TRUE + CALL CHECK_STONE_BONE + JC ALL_STONE_BONE + ADDTASK XXT + LIGHTFLASH LNO,SBSPEED +QXX: RETN +XXT: CMP SB_DISABLED,TRUE + JE QXXT + WAITSYNCS SBFASTTIME + ENDFLASH LNO + LIGHTON LNO + MOV SB_DISABLE_AREA[LNO-20],FALSE + SUICIDE +QXXT: ENDFLASH LNO + MOV SB_DISABLE_AREA[LNO-20],FALSE + SUICIDE + ENDM + +SB_TOUCHERB MACRO LNO + LOCAL QXX,XXT,QXXT + CMP GHOST_INH_SB,TRUE + JE QXX + CMP SB_DISABLED,TRUE + JE QXX + CMP SB_DISABLE_AREA[LNO-20],TRUE + JE QXX + MOV SB_DISABLE_AREA[LNO-20],TRUE + CALL TOUCHSETB + MOV LIGHTSTATUS[LNO],TRUE + CALL CHECK_STONE_BONE + JC ALL_STONE_BONE + ADDTASK XXT + LIGHTFLASH LNO,SBSPEED +QXX: RETN +XXT: CMP SB_DISABLED,TRUE + JE QXXT + WAITSYNCS SBFASTTIME + ENDFLASH LNO + LIGHTON LNO + MOV SB_DISABLE_AREA[LNO-20],FALSE + SUICIDE +QXXT: ENDFLASH LNO + MOV SB_DISABLE_AREA[LNO-20],FALSE + SUICIDE + ENDM + +TOUCH_B_BONE: + SB_TOUCHERA 20 +TOUCH_O_BONE: + SB_TOUCHERA 21 +TOUCH_N_BONE: + SB_TOUCHERA 22 +TOUCH_E_BONE: + SB_TOUCHERA 23 + +TOUCH_S_STONE: + SB_TOUCHERB 26 +TOUCH_T_STONE: + SB_TOUCHERB 27 +TOUCH_O_STONE: + SB_TOUCHERB 28 +TOUCH_N_STONE: + SB_TOUCHERB 29 +TOUCH_E_STONE: + SB_TOUCHERB 30 + +TOUCHSETA: + CALL ADDOFFROAD + SOUNDEFFECT S_TOUCH2,0 + ADDSCORE BCD27530 + ADDBONUS BCD510 + RETN + +TOUCHSETB: + CALL ADDOFFROAD + SOUNDEFFECT S_TOUCH1,40 + ADDSCORE BCD17520 + ADDBONUS BCD750 + RETN + +ALL_STONE_BONE: + CALL JACKADD + MOV SB_DISABLED,TRUE + MOVE ES,DS + NIL AL + MOV DI,OFFSET SB_DISABLE_AREA + MOV CX,11 + REP STOSB + ENDFLASH 20 ;B + ENDFLASH 21 ;O + ENDFLASH 22 ;N + ENDFLASH 23 ;E + ENDFLASH 26 ;S + ENDFLASH 27 ;T + ENDFLASH 28 ;O + ENDFLASH 29 ;N + ENDFLASH 30 ;E + CMP GHOST_FLASHING,TRUE + JE GANDALF_THE_GREY + MOV BL,GHOSTCOUNTER + MOV AL,SIZE GHOST_STRUC + MUL BL + MOV BX,AX + MOV AX,GHOSTAREA[BX].G_SBEFF + EFFECT AX + JMP GANDALF_THE_WHITE +GANDALF_THE_GREY: + EFFECT EVENT_LIT +GANDALF_THE_WHITE: + CALL DO_GHOST + ADDTASK ALL_STONE_BONE_2 + RETN + +ALL_STONE_BONE_2: + WAITSYNCS 2 + LIGHTFLASH 20,SBSPEED2 + LIGHTFLASH 21,SBSPEED2 + LIGHTFLASH 22,SBSPEED2 + LIGHTFLASH 23,SBSPEED2 + LIGHTFLASH 26,SBSPEED2 + LIGHTFLASH 27,SBSPEED2 + LIGHTFLASH 28,SBSPEED2 + LIGHTFLASH 29,SBSPEED2 + LIGHTFLASH 30,SBSPEED2 + ADDTASK ALL_STONE_BONE_3 + SUICIDE + +ALL_STONE_BONE_3: + WAITSYNCS SBFASTTIME2 + ENDFLASH 20 ;B + ENDFLASH 21 ;O + ENDFLASH 22 ;N + ENDFLASH 23 ;E + ENDFLASH 26 ;S + ENDFLASH 27 ;T + ENDFLASH 28 ;O + ENDFLASH 29 ;N + ENDFLASH 30 ;E + LIGHTOFF 20 ;B + LIGHTOFF 21 ;O + LIGHTOFF 22 ;N + LIGHTOFF 23 ;E + LIGHTOFF 26 ;S + LIGHTOFF 27 ;T + LIGHTOFF 28 ;O + LIGHTOFF 29 ;N + LIGHTOFF 30 ;E + MOV SB_DISABLED,FALSE + SUICIDE + +CHECK_STONE_BONE: ;-C- IF ALL STONE BONE + CMP LIGHTSTATUS[20],TRUE ;B + JNE NCST + CMP LIGHTSTATUS[21],TRUE ;O + JNE NCST + CMP LIGHTSTATUS[22],TRUE ;N + JNE NCST + CMP LIGHTSTATUS[23],TRUE ;E + JNE NCST + CMP LIGHTSTATUS[26],TRUE ;S + JNE NCST + CMP LIGHTSTATUS[27],TRUE ;T + JNE NCST + CMP LIGHTSTATUS[28],TRUE ;O + JNE NCST + CMP LIGHTSTATUS[29],TRUE ;N + JNE NCST + CMP LIGHTSTATUS[30],TRUE ;E + JNE NCST + STC + RETN +NCST: CLC + RETN + + +DO_GHOST PROC NEAR ;ENABLE GHOST IF NOT ENABLED + CMP GHOST_FLASHING,TRUE + JE QDG + MOV GHOST_FLASHING,TRUE + MOV BL,GHOSTCOUNTER + MOV AL,SIZE GHOST_STRUC + MUL BL + MOV BX,AX + MOV DL,GHOSTAREA[BX].G_LIGHTNO + LIGHTFLASH DL,GHOSTSPEED + LIGHTFLASH 16,TRIGHOSTSPEED +QDG: RETN +DO_GHOST ENDP + + + + +;****************************************************************************** +;********************************** LOWER ************************************* +;****************************************************************************** + +PARTYOFFAREA: ;REAL GAME ON + MOV BX,OFFSET PARTY_OFFTS + CALL DO_MATRIX + MOV BALLHIGH,FALSE + MOV PARTYFLASH,FALSE + MOV ADDPLAYERS,FALSE + MOV CURRENT_PRIORITY,0 + PLAYJINGLE S_MAIN + MOV LASTJINGLE,1 + MOV I_UTSKJUT,FALSE ;TILL¸TER INACTIVE-SLINGAN (DOTMATRIX) + RETN + +;*********************************** GAME ON ********************************** +CLOSE1: ;GAME ON + CALL CLOSEBUMPERS + MOV HOLDMULTICOUNTER,FALSE + MOV SI,OFFSET BCD10000 + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + MOV SI,OFFSET BCD1000 + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + RETN + + +;***************************** BYGEL15 ******************************* +BYGEL15: ;IN TO TOWER + RETN + + +;***************************** BYGEL16 ******************************* +BYGEL16: ;UPP TILL BUMPEROMR¸DET + PUT_GATE_NEG_LOW GATE2 + CALL ADDTURBO ;CP! EGENTLIGEN SKALL DENNA LIGGA I BUMPEROMR. + RETN + +OPENBUMPERS: + PUT_GATE_NEG_LOW GATE2 + RETN + +CLOSEBUMPERS: ;F¸R EJ CALLAS P¸ MANUELLT!!! + PUT_GATE_POS_LOW GATE2 + CMP SULP_FLASHING,TRUE + JNE NOTSFL + MOV SI,OFFSET BCD1000000 + MOV DI,OFFSET SULP_SCORE + CALL ADDSCOREBCD + MOV SI,OFFSET SULP_SCORE + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + EFFECT MILLIONPLUS + ENDFLASH 19 + LIGHTOFF 19 + MOV SULP_FLASHING,FALSE +NOTSFL: + RETN + + +;***************************** Bygel5 ******************************* +Bygel5: ;K + CMP KEY_DISABLED,TRUE + JE QB5 + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD10060 + ADDBONUS BCD1010 + MOV LIGHTSTATUS[1],TRUE + CMP SKILLKEY,1 + JNE NOT_SKILL_K + ENDFLASH 1 + MOV SI,OFFSET BCD1000000 + MOV DI,OFFSET SKILLSCOREBCD + CALL ADDSCOREBCD + MOV SI,OFFSET SKILLSCOREBCD + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + EFFECT SKILLSHOT + CALL VAULTADD + CALL TOWERADD + CALL JACKADD + CALL WELLADD +NOT_SKILL_K: + CMP SKILLKEY,0 + JZ K_NO_SKILL + MOV KEY_ROL_DISABLED,FALSE + ENDFLASH 2 + ENDFLASH 3 + LIGHTOFF 2 + LIGHTOFF 3 +K_NO_SKILL: + MOV SKILLKEY,0 + CALL CHECK_KEY + JC ALL_KEY + ADDTASK BYGEL5T + LIGHTFLASH 1,SBSPEED + MOV KEY_ROL_DISABLED,TRUE +QB5: RETN + +BYGEL5T: + CMP KEY_DISABLED,TRUE + JE QB5T + WAITSYNCS SBFASTTIME + ENDFLASH 1 ;K + LIGHTON 1 + MOV KEY_ROL_DISABLED,FALSE +QB5T: SUICIDE + + +;***************************** Bygel6 ******************************* +Bygel6: ;E + CMP KEY_DISABLED,TRUE + JE QB6 + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD10060 + ADDBONUS BCD1010 + MOV LIGHTSTATUS[2],TRUE + CMP SKILLKEY,2 + JNE NOT_SKILL_E + ENDFLASH 2 + MOV SI,OFFSET BCD1000000 + MOV DI,OFFSET SKILLSCOREBCD + CALL ADDSCOREBCD + MOV SI,OFFSET SKILLSCOREBCD + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + EFFECT SKILLSHOT + CALL VAULTADD + CALL TOWERADD + CALL JACKADD + CALL WELLADD +NOT_SKILL_E: + CMP SKILLKEY,0 + JZ E_NO_SKILL + MOV KEY_ROL_DISABLED,FALSE + ENDFLASH 1 + ENDFLASH 3 + LIGHTOFF 1 + LIGHTOFF 3 +E_NO_SKILL: + MOV SKILLKEY,0 + CALL CHECK_KEY + JC ALL_KEY + ADDTASK BYGEL6T + MOV KEY_ROL_DISABLED,TRUE + LIGHTFLASH 2,SBSPEED +QB6: RETN + +BYGEL6T: + CMP KEY_DISABLED,TRUE + JE QB6T + WAITSYNCS SBFASTTIME + ENDFLASH 2 ;E + LIGHTON 2 + MOV KEY_ROL_DISABLED,FALSE +QB6T: SUICIDE + + +;***************************** Bygel7 ******************************* +Bygel7: ;Y + CMP KEY_DISABLED,TRUE + JE QB7 + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD10060 + ADDBONUS BCD1010 + MOV LIGHTSTATUS[3],TRUE + CMP SKILLKEY,3 + JNE NOT_SKILL_Y + ENDFLASH 3 + MOV SI,OFFSET BCD1000000 + MOV DI,OFFSET SKILLSCOREBCD + CALL ADDSCOREBCD + MOV SI,OFFSET SKILLSCOREBCD + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + EFFECT SKILLSHOT + CALL VAULTADD + CALL TOWERADD + CALL JACKADD + CALL WELLADD +NOT_SKILL_Y: + CMP SKILLKEY,0 + JZ Y_NO_SKILL + MOV KEY_ROL_DISABLED,FALSE + ENDFLASH 1 + ENDFLASH 2 + LIGHTOFF 1 + LIGHTOFF 2 +Y_NO_SKILL: + MOV SKILLKEY,0 + CALL CHECK_KEY + JC ALL_KEY + ADDTASK BYGEL7T + LIGHTFLASH 3,SBSPEED + MOV KEY_ROL_DISABLED,TRUE +QB7: RETN + +BYGEL7T: + CMP KEY_DISABLED,TRUE + JE QB7T + WAITSYNCS SBFASTTIME + ENDFLASH 3 ;Y + LIGHTON 3 + MOV KEY_ROL_DISABLED,FALSE +QB7T: SUICIDE + + +ALL_KEY: + CALL VAULTADD + CALL JACKADD + MOV KEY_DISABLED,TRUE + MOV KEY_ROL_DISABLED,TRUE + MOV SKILLKEY,0 + ENDFLASH 1 ;K + ENDFLASH 2 ;E + ENDFLASH 3 ;Y + LIGHTFLASH 1,SBSPEED2 + LIGHTFLASH 2,SBSPEED2 + LIGHTFLASH 3,SBSPEED2 + CMP TBNEXT,0 + JNE NOTTB1 + CMP TBMILLIONFLASHING,TRUE + JE KEFFREADY + SYNCEDFLASH 11,TBSPEED,TBSYNCER + MOV TBMILLIONFLASHING,TRUE + JMP KEFFREADY +NOTTB1: + CMP TBNEXT,1 + JE TB5 + CMP TBNEXT,4 + JB NOTTB5 +TB5: CMP TB5MFLASHING,TRUE + JE KEFFREADY + SYNCEDFLASH 12,TBSPEED,TBSYNCER + MOV TB5MFLASHING,TRUE + JMP KEFFREADY +NOTTB5: + CMP TBNEXT,2 + JNE NOTTBDB + CMP DOUBLEBONUSFLASHING,TRUE + JE KEFFREADY + SYNCEDFLASH 14,TBSPEED,TBSYNCER + MOV DOUBLEBONUSFLASHING,TRUE + JMP KEFFREADY +NOTTBDB: + CMP TBNEXT,3 + JNE NOTTBHB + CMP HOLDBONUSFLASHING,TRUE + JE KEFFREADY + SYNCEDFLASH 13,TBSPEED,TBSYNCER + MOV HOLDBONUSFLASHING,TRUE + JMP KEFFREADY +NOTTBHB: +KEFFREADY: + INC TBNEXT + ADDTASK ALL_KEY_2 + CMP TOWER_OPEN,TRUE + JE TOWER_ALREADY_OPEN + EFFECT OPENTOWER + MOV TOWER_OPEN,TRUE + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED +TOWER_ALREADY_OPEN: + PUT_GATE_NEG_LOW GATE3 + RETN + +ALL_KEY_2: + WAITSYNCS SBFASTTIME2 + ENDFLASH 1 + ENDFLASH 2 + ENDFLASH 3 + LIGHTOFF 1 + LIGHTOFF 2 + LIGHTOFF 3 + MOV KEY_DISABLED,FALSE + MOV KEY_ROL_DISABLED,FALSE + SUICIDE + + +CHECK_KEY: ;-C- IF ALL KEY + CMP LIGHTSTATUS[1],TRUE ;K + JNE NCK + CMP LIGHTSTATUS[2],TRUE ;E + JNE NCK + CMP LIGHTSTATUS[3],TRUE ;Y + JNE NCK + STC + RETN +NCK: CLC + RETN + + +;***************************** THE TOWER ******************************* + +GropA: ;TOWER SUG-H¸L + SETBALLPOS TOWERX,TOWERY,0,0,TRUE + MOV HOLDSTILL,TRUE + MOV IN_TOWER,TRUE + CALL ADDTURBO + CALL JACKADD + MOV INHIBIT_COUNT_DOWN,TRUE + + MOV WAS_SPECIAL,FALSE + CMP SPECIALMODE,TRUE + JNE JAJA_DE_E_LUNGT + MOV WAS_SPECIAL,TRUE + MOVAL TURBOBACKUP,TURBOMODE +JAJA_DE_E_LUNGT: + + MOV AL,TOWERHUNTMODE + MOV TOWERHUNTMODEORIG,AL + PUT_GATE_POS_LOW GATE3 ;CLOSE TO THE TOWER + PUT_GATE_NEG_LOW GATE2 ;OPEN TO THE BUMPERS + MOV TOWER_OPEN,FALSE + ENDFLASH 7 + LIGHTOFF 7 + MOV REMAL,0 + + CMP TOWERHUNTMODE,TRUE ;TOWER HUNT? + JNE NOTTHMODE + CMP TOWERHUNTSTAGE,1 ;TOWER HUNT 1? + JNE NOTSTAGE1 + EFFECT TOWERHUNT1 + CMP LASTJINGLE,50 + JE ITS50A + INC LASTJINGLE +ITS50A: ADD REMAL,AL + MOV INH_EFF,TRUE + MOV TOWERHUNTSTAGE,2 + PUT_GATE_NEG_LOW GATE3 + CMP TOWER_OPEN,TRUE + JE TOWAO + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + MOV TOWER_OPEN,TRUE +TOWAO: JMP THSTAGEDONE +NOTSTAGE1: + CMP TOWERHUNTSTAGE,2 ;TOWER HUNT 2? + JNE NOTSTAGE2 + EFFECT TOWERHUNT2 + CMP LASTJINGLE,50 + JE ITS50B + INC LASTJINGLE +ITS50B: ADD REMAL,AL + MOV INH_EFF,TRUE + MOV TOWERHUNTSTAGE,3 + PUT_GATE_NEG_LOW GATE3 + CMP TOWER_OPEN,TRUE + JE TOWAO2 + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + MOV TOWER_OPEN,TRUE +TOWAO2: JMP THSTAGEDONE +NOTSTAGE2: + CMP TOWERHUNTSTAGE,3 ;TOWER HUNT 3? + JNE NOTSTAGE3 + EFFECT TOWERHUNT3 + CMP LASTJINGLE,50 + JE ITS50C + INC LASTJINGLE +ITS50C: ADD REMAL,AL + MOV INH_EFF,TRUE + MOV TOWERHUNTSTAGE,0 + PUT_GATE_NEG_LOW GATE3 + CMP TOWER_OPEN,TRUE + JE TOWAO3 + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + MOV TOWER_OPEN,TRUE +TOWAO3: +NOTSTAGE3: +THSTAGEDONE: +NOTTHMODE: + + CMP SJACKPOTFLASHING,TRUE ;SUPER JACK? + JNE NOT_T_SJ + MOV SJACKPOTFLASHING,FALSE + ENDFLASH 10 + LIGHTOFF 10 + EFFECTBRACK SUPERJACK + ADD REMAL,AL + MOV INH_EFF,TRUE +NOT_T_SJ: + + CMP JACKPOTFLASHING,TRUE ;JACKPOT? + JNE NOT_T_J + MOV JACKPOTFLASHING,FALSE + ENDFLASH 9 + LIGHTOFF 9 + EFFECTBRACK JACKPOT + ADD REMAL,AL + MOV SI,OFFSET JACKVALUE + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + MOVEBCD JACKVALUE,JACKINIT + SYNCEDFLASH 10,TBSPEED,TBSYNCER + MOV SJACKPOTFLASHING,TRUE + CMP TOWER_OPEN,TRUE + JE TALRO + MOV TOWER_OPEN,TRUE + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED +TALRO: PUT_GATE_NEG_LOW GATE3 + ADDTASK SJOFF + MOV INH_EFF,TRUE +NOT_T_J: + + CMP XBALLFLASHING,TRUE ;EXTRA BALL? + JNE NOT_T_XB + MOV XBALLFLASHING,FALSE + ENDFLASH 8 + LIGHTOFF 8 + EFFECT EXTRABALL + ADD REMAL,AL + INC XBALLS + MOV INH_EFF,TRUE +NOT_T_XB: + + CMP DOUBLEBONUSFLASHING,TRUE ;DOUBLE BONUS? + JNE NOT_T_DB + MOV DOUBLEBONUSFLASHING,FALSE + ENDFLASH 14 + LIGHTOFF 14 + EFFECT DOUBLEBONUS + ADD REMAL,AL + MOV SI,OFFSET BONUSSIFFRORNA + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + MOV INH_EFF,TRUE +NOT_T_DB: + + CMP HOLDBONUSFLASHING,TRUE ;HOLD BONUS? + JNE NOT_T_HB + MOV HOLDBONUSFLASHING,FALSE + ENDFLASH 13 + LIGHTOFF 13 + EFFECT HOLDBONUS + ADD REMAL,AL + MOV HOLDBONUSFLAG,TRUE + MOV INH_EFF,TRUE +NOT_T_HB: + + CMP TB5MFLASHING,TRUE ;5 MILLIONS? + JNE NOT_T_5M + MOV TB5MFLASHING,FALSE + ENDFLASH 12 + LIGHTOFF 12 + EFFECT TMILLION5 + ADD REMAL,AL + MOV INH_EFF,TRUE +NOT_T_5M: + + CMP TBMILLIONFLASHING,TRUE ;MILLION ? + JNE NOT_T_MILLION + MOV TBMILLIONFLASHING,FALSE + ENDFLASH 11 + LIGHTOFF 11 + EFFECT TMILLION + ADD REMAL,AL + MOV INH_EFF,TRUE + jmp notthmode2 ;ska de va s† h„r? (annars f†r man + ; b†de million och tower bonus (2M)) +NOT_T_MILLION: + + EFFECT SCORETOWER ;TOWER BONUS ONLY! + ADD REMAL,AL + MOV SI,OFFSET TOWERVALUE + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + MOVEBCD TOWERVALUE,TOWERSTART + CMP TOWERHUNTMODE,TRUE ;TOWER HUNT? + JNE NOTTHMODE2 + PUT_GATE_NEG_LOW GATE3 + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + MOV TOWER_OPEN,TRUE +NOTTHMODE2: + + CMP REMAL,0 + JNE ANEFFISDONE + ADDTASK TOWERENDT +ANEFFISDONE: + MOV INH_EFF,FALSE + RETN + +_JACKEND: + PUSH BX + ENDFLASH 9 + LIGHTOFF 9 + MOV JACKPOTFLASHING,FALSE + ENDFLASH 10 + LIGHTOFF 10 + MOV SJACKPOTFLASHING,FALSE + CMP TOWERHUNTMODEORIG,TRUE + JE DONTCLOSETOWER + CALL UPDATE_TOWER_GATE + JC SOMETHINGFLASHING + MOV TOWER_OPEN,FALSE + PUT_GATE_POS_LOW GATE3 ;CLOSE TO THE TOWER + ENDFLASH 7 + LIGHTOFF 7 +DONTCLOSETOWER: +SOMETHINGFLASHING: + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + POP BX + JMP NORMAL_END + +SJOFF: WAITSYNCS SUPERJACK_TIME + CMP SJACKPOTFLASHING,FALSE + JE SJANF + ENDFLASH 10 + LIGHTOFF 10 + MOV SJACKPOTFLASHING,FALSE + PUT_GATE_NEG_LOW GATE3 + CALL UPDATE_TOWER_GATE +SJANF: SUICIDE + +UPDATE_TOWER_GATE: ;CLOSE TOWER IF NO TB OPTION + ;RET -C- IF SOMETHING IS FLASHING + CMP XBALLFLASHING,TRUE + JE TGOPEN + CMP SJACKPOTFLASHING,TRUE + JE TGOPEN + CMP JACKPOTFLASHING,TRUE + JE TGOPEN + CMP HOLDBONUSFLASHING,TRUE + JE TGOPEN + CMP DOUBLEBONUSFLASHING,TRUE + JE TGOPEN + CMP TB5MFLASHING,TRUE + JE TGOPEN + CMP TBMILLIONFLASHING,TRUE + JE TGOPEN + MOV TOWER_OPEN,FALSE + PUT_GATE_POS_LOW GATE3 + ENDFLASH 7 + LIGHTOFF 7 + CLC + RETN +TGOPEN: STC + RETN + +GROPA_T: + SETBALLPOS TOWERX,TOWERY,0,0,TRUE + MOV HOLDSTILL,TRUE + ADDTASK TOWERENDT + RETN + +_TOWEREND: + PUSH BX + ADDTASK TOWERENDT + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + POP BX + JMP NORMAL_END + +TOWERENDT: ;¸TERSTˇLLAREN (ALLTS¸ INTE DEN ¸TERSTˇLLAREN!) + WAITSYNCS 10 + MOV INHIBIT_COUNT_DOWN,FALSE + CMP WAS_SPECIAL,TRUE + JNE INGA_KONSTIGHETER + MOV BX,OFFSET BACK_2_TURBOTS + CMP TURBOBACKUP,TRUE + JE TURBO_IT_WAS + MOV BX,OFFSET BACK_2_OFFROADTS + MOV OFFROADMODE,TRUE + JMP READY_2_CALL +TURBO_IT_WAS: + MOV TURBOMODE,TRUE +READY_2_CALL: + CALL DO_MATRIX +INGA_KONSTIGHETER: + CALL SHOOT_AWAY + SUICIDE + +SHOOT_AWAY: + SOUNDEFFECT SGROP,0 + MOV HOLDSTILL,FALSE + SETBALLPOS TOWERX,TOWERY,TOWERXS,TOWERYS,TRUE + MOV IN_TOWER,FALSE + RETN + +TOWERENDT_TILT: ;EN LITEN KNUT. + CALL SHOOT_AWAY + SUICIDE + +;***************************** THE WELL ******************************* +GropB: ;THE WELL + CMP LIGHTSTATUS[25],TRUE ;LOCKED BALL? + JNE NOBALLINTHEWELL + MOV HOLDSTILL,TRUE + ADDTASK WELLENDT + RETN ;RETN +NOBALLINTHEWELL: + + MOV HOLDSTILL,TRUE ;SCORE STANDARD SCORES! + SETBALLPOS WELLX,WELLY,0,0,FALSE + MOV IN_WELL,TRUE + CALL ADDTURBO + CALL JACKADD + MOV REMAL,0 + MOV SI,OFFSET WELLVALUE + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + + CMP LOCKWELLFLASHING,TRUE ;LOCK ENABLED? + JNE NOTWLOCKFLASHING + MOV HOLDMULTICOUNTER,TRUE + MOV CURRENT_PRIORITY,0 + EFFECT SHOOTTHEBALL + MOV INH_EFF,TRUE + ADD REMAL,AL + SETBALLPOS STARTX,STARTY,10,0,FALSE + MOV HOLDSTILL,FALSE + MOV INH_EFF,TRUE + MOV PARTYFLASH,TRUE + MOV LASTJINGLE,0 ;0=UTSKJUT + MOV LOCKWELLFLASHING,FALSE + ENDFLASH 25 ;LOCK (THE WELL) + LIGHTON 25 +NOTWLOCKFLASHING: + + EFFECT SCOREWELL + ADD REMAL,AL + + CMP MB_FLASHING,FALSE + JE NOMB + MOV MB_FLASHING,FALSE + ENDFLASH 24 + LIGHTOFF 24 + CMP BPOINTER,43 + JA NOMB + CMP BONUS_X,1 + JNE NOTBONX1 + INC BONUS_X + JMP SHORT BONUSXOK +NOTBONX1: + ADD BONUS_X,2 +BONUSXOK: + LIGHTON BPOINTER + MOV BL,BPOINTER + SUB BL,39 + MOV AL,SIZE EFFECT_STRUC + MUL BL + ADD AX,OFFSET M2 + EFFECT AX + ADD REMAL,AL + INC BPOINTER +NOMB: + CMP REMAL,0 + JNZ ALL_IS_WELL_WITH_WELL + ADDTASK WELLENDT +ALL_IS_WELL_WITH_WELL: ;HMM... MAYBE NOT! + MOV INH_EFF,FALSE + MOV AL,BONUS_X + ADD AL,'7' + MOV BONUS_TEXT[11],AL + RETN + +_WELLEND: + PUSH BX + ADDTASK WELLENDT + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + POP BX + JMP NORMAL_END + +WELLENDT_TILT: +WELLENDT: + WAITSYNCS 10 ;CP! + SOUNDEFFECT SGROP,0 + MOV HOLDSTILL,FALSE + SETBALLPOS WELLX,WELLY,WELLXS,WELLYS,FALSE + MOV IN_WELL,FALSE + SUICIDE + +GROPB_T: + MOV IN_WELL,FALSE + ADDTASK WELLENDT + RETN + + + + +Bygel19: ;Vˇ DRAIN ™VRE + RETN + + +Bygel3: ;Vˇ FLIPPER-RˇNNA + SOUNDEFFECT SBYGEL2,0 + ADDSCORE BCD10070 + ADDBONUS BCD1080 + RETN + +Bygel4: ;H™ FLIPPER-RˇNNA + SOUNDEFFECT SBYGEL2,0 + ADDSCORE BCD10070 + ADDBONUS BCD1080 + RETN + +Bygel1: ;Vˇ DRAIN NEDRE + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD50010 + RETN + +Bygel2: ;H™ DRAIN + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD50030 + RETN + + +;***************************** THE VAULT ******************************* +GropC: ;THE VAULT + MOV REMAL,0 + CMP HIGH_VAULT,TRUE ;THE KICKBACK? + JE NOT_THE_KICKBACK + ENDFLASH 44 + LIGHTOFF 44 + MOV KICK_BACK_FLASHING,FALSE +NOT_THE_KICKBACK: + + MOV HOLDSTILL,TRUE ;FREEZE BALL! + SETBALLPOS VAULTX,VAULTY,0,0,FALSE + + CMP TILTFLAG,TRUE ;TILT? + JNE NOT_TILT_GC + ADDTASK VAULTENDT + RETN ;RETN +NOT_TILT_GC: + + CMP LIGHTSTATUS[15],FALSE ;BALL LOCKED IN VAULT? + JE NOTLOCKEDINVAULT + ADDTASK VAULTENDT + RETN ;RETN +NOTLOCKEDINVAULT: + + MOV IN_VAULT,TRUE + CALL JACKADD + CMP LOCKVAULTFLASHING,TRUE ;LOCK BALL ENABLED? + JNE NOTVFLASHING + MOV HOLDMULTICOUNTER,TRUE + MOV CURRENT_PRIORITY,0 + EFFECT SHOOTTHEBALL + MOV INH_EFF,TRUE + ADD REMAL,AL + MOV HOLDSTILL,FALSE + SETBALLPOS STARTX,STARTY,10,0,FALSE + MOV INH_EFF,TRUE + MOV PARTYFLASH,TRUE + MOV LASTJINGLE,0 ;0=UTSKJUT + MOV LOCKVAULTFLASHING,FALSE + ENDFLASH 15 ;LOCK (THE VAULT) + LIGHTON 15 +NOTVFLASHING: + + CMP GHOST_FLASHING,TRUE ;GHOST FLASHING? + JNE NO_GHOST + MOV GHOST_FLASHING,FALSE ;GET THE GHOST! + ENDFLASH 16 ;"GHOST" TRIANGLEOLIKHETEN F™R SP™KMˇNGDEN + LIGHTOFF 16 + MOV BL,GHOSTCOUNTER + MOV AL,SIZE GHOST_STRUC + MUL BL + MOV BX,AX + PUSH BX + MOV DL,GHOSTAREA[BX].G_LIGHTNO + PUSH DX + ENDFLASH DL + POP DX + LIGHTON DL + POP BX + PUSH BX + MOV AX,GHOSTAREA[BX].G_EFFECT + + CMP SPECIALMODE,TRUE + JNE NOSPECIALM + CMP AX,OFFSET GRIMR + JNE NOTVERYGRIM + ADDTASK TURBOWAITING + JMP EFFISDONE +NOTVERYGRIM: + CMP AX,OFFSET GHOSTHUNT + JNE NOTMANYGHOSTS + MOV FIX_TELEPORT_BUG,TRUE + ADDTASK OFFROADWAITING + JMP EFFISDONE +NOTMANYGHOSTS: +NOSPECIALM: + EFFECT AX + ADD REMAL,AL +EFFISDONE: + POP BX + PUSH BX + MOV AX,GHOSTAREA[BX].G_ROUTINE + CALL AX + POP BX + INC GHOSTCOUNTER + CMP GHOSTCOUNTER,8 ;TOTALT 8 SP™KEN! + JB NOT_LAST_GHOST + MOV GHOSTCOUNTER,0 + CALL DOLIGHTS + MOV GHOST_INH_SB,TRUE + LIGHTFLASH 31,BIGGHOSTSPEED + LIGHTFLASH 32,BIGGHOSTSPEED + LIGHTFLASH 33,BIGGHOSTSPEED + LIGHTFLASH 34,BIGGHOSTSPEED + LIGHTFLASH 35,BIGGHOSTSPEED + LIGHTFLASH 36,BIGGHOSTSPEED + LIGHTFLASH 37,BIGGHOSTSPEED + LIGHTFLASH 38,BIGGHOSTSPEED + ADDTASK GHOSTOFF +NOT_LAST_GHOST: +NO_GHOST: + + CALL ADDTURBO ;SCORE STANDARD SCORES! + MOV SI,OFFSET VAULTVALUE + MOV DI,OFFSET SIFFRORNA + CALL ADDSCOREBCD + CMP REMAL,0 + JE NOINHIBIT + MOV INH_EFF,TRUE +NOINHIBIT: + EFFECT SCOREVAULT + MOV INH_EFF,FALSE + ADD REMAL,AL + + CMP REMAL,0 + JNZ TVINGA_MEJ_INTE + ADDTASK VAULTENDT +TVINGA_MEJ_INTE: + RETN + +GHOSTOFF: + WAITSYNCS BIGGHOSTTIME + ENDFLASH 31 + ENDFLASH 32 + ENDFLASH 33 + ENDFLASH 34 + ENDFLASH 35 + ENDFLASH 36 + ENDFLASH 37 + ENDFLASH 38 + CALL DOLIGHTS + LIGHTOFF 31 + LIGHTOFF 32 + LIGHTOFF 33 + LIGHTOFF 34 + LIGHTOFF 35 + LIGHTOFF 36 + LIGHTOFF 37 + LIGHTOFF 38 + CALL DOLIGHTS + MOV GHOST_INH_SB,FALSE + SUICIDE + +GRIMRUT: + MOV JINGLEJUMPCNT,0 + CMP JACKPOTFLASHING,TRUE + JE JPAF + MOV JACKPOTFLASHING,TRUE + SYNCEDFLASH 9,TBSPEED,TBSYNCER + PUT_GATE_NEG_LOW GATE3 +JPAF: CMP TOWER_OPEN,TRUE + JE TOWAF + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + MOV TOWER_OPEN,TRUE +TOWAF: RETN + +GHOSTHUNTRUT: + CMP JACKPOTFLASHING,TRUE + JE JPAF2 + MOV JACKPOTFLASHING,TRUE + SYNCEDFLASH 9,TBSPEED,TBSYNCER + PUT_GATE_NEG_LOW GATE3 +JPAF2: CMP TOWER_OPEN,TRUE + JE TOWAF2 + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + MOV TOWER_OPEN,TRUE +TOWAF2: RETN + +BATMANRUT: +REDDEVILRUT: +MUMMYHEADRUT: + RETN + +MULTIDEMONRUT: + MOV MULTIDEMONMODE,TRUE + MOV MULTIDEMONDOWNCOUNTER,MULTIDEMON_TIME + MOV LOCKVAULTFLASHING,TRUE + MOV LOCKWELLFLASHING,TRUE + MOV HOLDMULTICOUNTER,FALSE + ENDFLASH 15 ;LOCK (THE VAULT) + ENDFLASH 25 ;LOCK (THE WELL) + LIGHTFLASH 15,LOCKSPEED ;BUDGET-SYNCAD MED 25 + LIGHTFLASH 25,LOCKSPEED + MOV DEMONFLASHING,TRUE + LIGHTFLASH 18,DEMONSPEED + RETN + +SMILERRUT: + CMP XBALLFLASHING,TRUE + JE AXBAF2 + MOV XBALLFLASHING,TRUE + SYNCEDFLASH 8,TBSPEED,TBSYNCER + PUT_GATE_NEG_LOW GATE3 + MOV TOWER_OPEN,TRUE + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED +AXBAF2: RETN + +TOWERHUNTRUT: + PUT_GATE_NEG_LOW GATE3 + MOV TOWERHUNTSTAGE,1 + MOV TOWERHUNTMODE,TRUE + MOV TOWERHUNTDOWNCOUNTER,TOWERHUNT_TIME + MOV LASTLOOPVAL,0 + MOV LASTJINGLE,46 + CMP TOWER_OPEN,TRUE + JE TOWAF3 + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + MOV TOWER_OPEN,TRUE +TOWAF3: RETN + +_GRIMOFF: + PUSH BX + ENDFLASH 38 ;GRIM OFF! + LIGHTOFF 38 + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + POP BX + JMP NORMAL_END + +_VAULTEND: + PUSH BX + CMP FIX_TELEPORT_BUG,TRUE + JE NOUTSKJUT + ADDTASK VAULTENDT +NOUTSKJUT: + MOV FIX_TELEPORT_BUG,FALSE + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + POP BX + JMP NORMAL_END + +VAULTENDT: +VAULTENDT_TILT: + WAITSYNCS 10 ;CP? + SOUNDEFFECT SGROP,0 + MOV HOLDSTILL,FALSE + PUT_GATE_NEG_LOW GATE5 + SETBALLPOS VAULTX,VAULTY,VAULTXS,VAULTYS,FALSE + MOV IN_VAULT,FALSE + ADDTASK VAULTENDTT + SUICIDE + +VAULTENDTT: + WAITSYNCS 30 ;CP? + CMP KICK_BACK_FLASHING,TRUE + JE GATE_OK + PUT_GATE_POS_LOW GATE5 +GATE_OK: + MOV HIGH_VAULT,FALSE ;H™GSPˇNNING! + SUICIDE + +_TILTED: + PUSH BX + CMP IN_VAULT,TRUE + JNE NOT_IN_THE_VAULT + ADDTASK VAULTENDT_TILT + JMP SHORT IM_SHOT +NOT_IN_THE_VAULT: + CMP IN_TOWER,TRUE + JNE NOT_IN_THE_TOWER + ADDTASK TOWERENDT_TILT + JMP SHORT IM_SHOT +NOT_IN_THE_TOWER: + CMP IN_WELL,TRUE + JNE NOT_IN_THE_WELL + ADDTASK WELLENDT_TILT +NOT_IN_THE_WELL: +IM_SHOT: + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + POP BX + JMP NORMAL_END + + +Close4: ;Close Tower + RETN + + +;******************************* SPRING VALID ********************************* +BYGEL28: ;SPRING VALID + MOV SPRING_VALID,TRUE + RETN + +;****************************** SPRING INVALID ******************************** +BYGELSI: ;SPRING INVALID + MOV SPRING_VALID,FALSE + RETN + + +;****************************************************************************** +;*********************************** UPPER ************************************ +;****************************************************************************** + +;***************************** THE LOOP ******************************* +Bygel8: ;LOOP MIDDLE + CALL ADDTURBO + CALL VAULTADD + CMP COMBODOWNCOUNTER,0 + JZ NOCOMBO3 + CMP COMBOSTAGE,2 + JNE NOCOMBO3 + EFFECT LOOPCOMBO +NOCOMBO3: + MOV COMBOSTAGE,0 + CMP LEFT_RAMP_DOWN_COUNTER,0 + MOV LEFT_RAMP_DOWN_COUNTER,LEFT_RAMP_MILLE_TIME + JNE GIVE_HIM_MILLE + SOUNDEFFECT SBYGEL1,0 ;BYGELSETD + ADDSCORE BCD10030 + ADDBONUS BCD1020 + RETN + +GIVE_HIM_MILLE: + EFFECT MILLION + RETN + +;*********************************** RIP ************************************* +RIP_TOUCH MACRO LNO + LOCAL QXX,XXT,QXXT + CMP RIP_DISABLED,TRUE + JE QXX + SOUNDEFFECT SBYGEL1,0 ;BYGELSETH + ADDSCORE BCD10070 + ADDBONUS BCD1080 + MOV LIGHTSTATUS[LNO],TRUE + CALL CHECK_RIP + JC ALL_RIP + ADDTASK XXT + LIGHTFLASH LNO,RIPSPEED + MOV RIP_ROL_DISABLED,TRUE +QXX: RETN +XXT: CMP RIP_DISABLED,TRUE + JE QXXT + WAITSYNCS RIPFASTTIME + ENDFLASH LNO + LIGHTON LNO + MOV RIP_ROL_DISABLED,FALSE + SUICIDE +QXXT: ENDFLASH LNO + MOV RIP_ROL_DISABLED,FALSE + SUICIDE + ENDM + +ALL_RIP: + MOV RIP_DISABLED,TRUE + MOV RIP_ROL_DISABLED,TRUE + ENDFLASH 4 ;R + ENDFLASH 5 ;I + ENDFLASH 6 ;P + LIGHTFLASH 4,RIPSPEED2 + LIGHTFLASH 5,RIPSPEED2 + LIGHTFLASH 6,RIPSPEED2 + ADDTASK ALL_RIP_2 + CMP KICK_BACK_FLASHING,TRUE + JE ALREADY_KICK + MOV KICK_BACK_FLASHING,TRUE + LIGHTFLASH 44,KICKSPEED + PUT_GATE_NEG_LOW GATE5 +ALREADY_KICK: + EFFECT RIPEFF + RETN + +ALL_RIP_2: + WAITSYNCS RIPFASTTIME2 + ENDFLASH 4 + ENDFLASH 5 + ENDFLASH 6 + LIGHTOFF 4 + LIGHTOFF 5 + LIGHTOFF 6 + MOV RIP_DISABLED,FALSE + MOV RIP_ROL_DISABLED,FALSE + SUICIDE + +CHECK_RIP: ;-C- IF ALL RIP + CMP LIGHTSTATUS[4],TRUE ;R + JNE NCR + CMP LIGHTSTATUS[5],TRUE ;I + JNE NCR + CMP LIGHTSTATUS[6],TRUE ;P + JNE NCR + STC + RETN +NCR: CLC + RETN + +Bygel12: ;R + RIP_TOUCH 4 + +Bygel13: ;I + RIP_TOUCH 5 + +Bygel14: ;P + RIP_TOUCH 6 + + +;***************************** LOOP END ******************************* +Bygel8b: ;LOOP END + MOV LEFT_RAMP_DOWN_COUNTER,LEFT_RAMP_MILLE_TIME + RETN + + +;***************************** SCREAM RAMP ******************************* +Bygel11: ;SCREAM RAMP * RIGHT RAMP * + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD10060 + ADDBONUS BCD1050 + CMP DEMONFLASHING,TRUE ;SCORE DEMONS? + JNE NODEMONS + ENDFLASH 18 + LIGHTOFF 18 + MOV MULTIDEMONDOWNCOUNTER,1 + MOV DEMONFLASHING,FALSE + MOV AL,LIGHTSTATUS[15] + MOV BL,LIGHTSTATUS[25] + NIL AH + NIL BH + ADD AX,BX + + CMP AX,TRUE*0 ;NO BALLS LOCKED? + JNE NOT_0_LOCKED + EFFECT MILLION5 + JMP SCORE_READY +NOT_0_LOCKED: + + CMP AX,TRUE*1 ;ONE BALL LOCKED? + JNE NOT_1_LOCKED + EFFECT MILLION10 + JMP SCORE_READY +NOT_1_LOCKED: + + CMP AX,TRUE*2 ;TWO BALLS LOCKED? + JNE NOT_2_LOCKED + EFFECT MILLION20 +NOT_2_LOCKED: +SCORE_READY: + LIGHTOFF 15 + LIGHTOFF 25 + MOV INH_EFF,TRUE +NODEMONS: + + CMP COMBODOWNCOUNTER,0 ;LOOP COMBO? + JZ NOCOMBO2 + CMP COMBOSTAGE,1 + JNE NOCOMBO2 + MOV COMBOSTAGE,2 + JMP COMBOSTAGE2OK +NOCOMBO2: + MOV COMBOSTAGE,0 +COMBOSTAGE2OK: + + CALL ADDTURBO + CALL WELLADD +intervall=10 +AGAIN_MILE: + INC CYCLONECOUNTER + MOV SI,OFFSET ETTA + MOV DI,OFFSET CYCLONECOUNTERBCD + CALL ADDSCOREBCD + + CMP _2X_SCREAMS_FLASHING,FALSE + JE NOT2XSF + MOV _2X_SCREAMS_FLASHING,FALSE + ENDFLASH 17 + LIGHTOFF 17 + ADDTASK THESECONDTIME +NOT2XSF: + Cmp CycloneCounter,1 + je Again_Mile ;Om 1 ”ke till 2 . . . + + mov ax,CycloneCounter + mov cx,nextjump + sub cx,ax + jz Do_Jump ;G”r effekten + cmp cx,10 +; jnb No_jump ;Den „r inte n„sta . . . + +;***************************** lites the jump + mov ax,nextjump ;V„rdet . . . + mov bx,offset jUMP_aT_text ;vilken text † stoppa in v„rdet i + CMP CYCLONECOUNTER,10 + JNA NOTTHE5M + MOV BX,OFFSET JUMP_AT_TEXT2 + Call Put_In_Text + MOV BX,OFFSET MILES_TEXT+4 + MOV AX,CYCLONECOUNTER + CALL PUT_IN_TEXT + EFFECT JUMP_AT2 + JMP HOPP +NOTTHE5M: + Call Put_In_Text + MOV BX,OFFSET MILES_TEXT+4 + MOV AX,CYCLONECOUNTER + CALL PUT_IN_TEXT + EFFECT JUMP_AT +HOPP: +No_Jump: + MOV INH_EFF,FALSE + RETN +do_Jump: + CMP CYCLONECOUNTER,10 + JNE ITS5M + CALL ENABLE_XBALL + JMP EFFUTFORD +ITS5M: CALL ENABLE_5M + MOV BX,OFFSET MILES_TEXT+4 + MOV AX,CYCLONECOUNTER + CALL PUT_IN_TEXT + EFFECT JUMP_AT2 +EFFUTFORD: + add nextjump,intervall + MOV INH_EFF,FALSE + RETN + +THESECONDTIME: ;ONLY IF 2X SCREAMS! + WAITSYNCS 2 + CALL BYGEL11 + SUICIDE + +;***************************** +;Input: Ax= NextR„knare Bx=offset till texten +Put_In_Text: + PUSH BX + mov di,2 + mov cx,3 +loopen_lejf: + push cx + NIL DX + MOV CX,10 + DIV CX + add dx,'7' + mov [bx][di],dl + pop cx + dec di + loop loopen_lejf + POP BX + +LOOPEN_BERTIL: + CMP BYTE PTR [BX],'7' + JNZ AVBRYT_BRUTALT + MOV BYTE PTR [BX],'*' + INC BX + LOOP LOOPEN_BERTIL +AVBRYT_BRUTALT: + RETN +;***************************** + +ENABLE_XBALL: + CMP XBALLFLASHING,TRUE + JE AXBAF + MOV XBALLFLASHING,TRUE + SYNCEDFLASH 8,TBSPEED,TBSYNCER + PUT_GATE_NEG_LOW GATE3 + MOV TOWER_OPEN,TRUE + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + EFFECT GETXBALL +AXBAF: RETN + +ENABLE_5M: + CMP TB5MFLASHING,TRUE + JE AF5M + MOV TB5MFLASHING,TRUE + SYNCEDFLASH 12,TBSPEED,TBSYNCER + PUT_GATE_NEG_LOW GATE3 + MOV TOWER_OPEN,TRUE + ENDFLASH 7 + LIGHTFLASH 7,TOWERSPEED + EFFECT OPENTOWER +AF5M: RETN + + +;***************************** Bygel9 ******************************* +Bygel9: ;GRID-RAMP START LEFT + CMP TILTFLAG,TRUE + JE TILT_B9 + CALL ADDTURBO + CALL VAULTADD + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD10030 + ADDBONUS BCD1040 + CMP SULP_FLASHING,TRUE + JE SAF + MOV SULP_FLASHING,TRUE + ENDFLASH 19 IF FASTFLASH! + SYNCEDFLASH 19,SULPSPEED,SULPSYNCER ;SULP +SAF: + CMP _2X_SCREAMS_FLASHING,TRUE + JE _2AF + MOV _2X_SCREAMS_FLASHING,TRUE + ENDFLASH 17 ;IF FASTFLASH! + SYNCEDFLASH 17,SULPSPEED,SULPSYNCER ;2XSCREAM +_2AF: + MOV SULPDOWNCOUNTER,SULP_TIME-SULP_FASTFLASH_TIME + CMP BPOINTER,43 + JA MBAF + CMP MB_FLASHING,TRUE + JE MBAF + MOV MB_FLASHING,TRUE + ENDFLASH 24 ;IF FASTFLASH! + SYNCEDFLASH 24,SULPSPEED,SULPSYNCER ;MB + MOV MBDOWNCOUNTER,MB_TIME-MB_FASTFLASH_TIME +MBAF: + MOV COMBOSTAGE,1 + MOV COMBODOWNCOUNTER,COMBO_TIME +TILT_B9: + PUT_GATE_NEG_HIGH GATE4A + RETN + + + +;***************************** Bygel10 ******************************* +Bygel10: ;GRID-RAMP START RIGHT + CMP TILTFLAG,TRUE + JE TILT_B10 + CALL ADDTURBO + SOUNDEFFECT SBYGEL1,0 + ADDSCORE BCD10020 + ADDBONUS BCD1010 +TILT_B10: + PUT_GATE_POS_HIGH GATE4A + RETN + + +Open6: ;GRID-RAMP B™J1 LEFT + PUT_GATE_NEG_HIGH GATE4B + RETN + + +Close6: ;GRID-RAMP B™J1 RIGHT + PUT_GATE_POS_HIGH GATE4B + RETN + + +Open7: ;GRID-RAMP B™J2 LEFT + PUT_GATE_NEG_HIGH GATE4C + RETN + + +Close7: ;GRID-RAMP B™J2 RIGHT + PUT_GATE_POS_HIGH GATE4C + RETN + + +Bygel18: ;TO THE VAULT + MOV HIGH_VAULT,TRUE + CALL VAULTADD + RETN + +;****************************************************************************** + +UPDATE_COUNTERS PROC NEAR + CMP LOOSING,TRUE + JE COUNTERS_INH + CMP INHIBIT_COUNT_DOWN,TRUE + JE COUNTERS_INH + + CMP LEFT_RAMP_DOWN_COUNTER,0 + JZ NLRDC + DEC LEFT_RAMP_DOWN_COUNTER +NLRDC: + + CMP HOLDMULTICOUNTER,TRUE + JE GURKA2 + CMP MULTIDEMONDOWNCOUNTER,1 ;MULTI DEMONS + JB GURKA + JNE NOTLASTGURKA + MOV MULTIDEMONMODE,FALSE + CMP LOCKVAULTFLASHING,FALSE + JE LOCKVAULTOK + MOV LOCKVAULTFLASHING,FALSE + ENDFLASH 15 ;LOCK (THE VAULT) + LIGHTOFF 15 +LOCKVAULTOK: + CMP LOCKWELLFLASHING,FALSE + JE LOCKWELLOK + MOV LOCKWELLFLASHING,FALSE + ENDFLASH 25 ;LOCK (THE WELL) + LIGHTOFF 25 +LOCKWELLOK: +NOTLASTGURKA: + DEC MULTIDEMONDOWNCOUNTER +GURKA: +GURKA2: + + INC SULPSYNCER ;SULP SYNCER + CMP SULPSYNCER,SULPSPEED*2 + JNE SULPSOK + MOV SULPSYNCER,0 +SULPSOK: + SYNCCOUNT TBSYNCER,TBSPEED + + ;******************** SULP, SCREAMS AND MB ********************** + CMP SULPDOWNCOUNTER,0 + JE SULPZERO + DEC SULPDOWNCOUNTER + JNZ NOTLASTSULP + CMP SULP_FLASHING,FALSE + JE NOSULPFF + MOV SULP_FLASHING,FALSE + ENDFLASH 19 + LIGHTOFF 19 +NOSULPFF: + CMP _2X_SCREAMS_FLASHING,FALSE + JE NO2XSFF + MOV _2X_SCREAMS_FLASHING,FALSE + ENDFLASH 17 + LIGHTOFF 17 +NO2XSFF: +NOTLASTSULP: + CMP SULPDOWNCOUNTER,SULP_FASTFLASH_TIME + JNE NOTFASTSULP + CMP SULP_FLASHING,FALSE + JE NOSULPF + ENDFLASH 19 + LIGHTFLASH 19,SULPFASTFLASHSPEED +NOSULPF:CMP _2X_SCREAMS_FLASHING,FALSE + JE NO2XSF + ENDFLASH 17 + LIGHTFLASH 17,SULPFASTFLASHSPEED +NO2XSF: +NOTFASTSULP: +SULPZERO: + ;**************************** MB ********************************** + CMP MBDOWNCOUNTER,0 + JE MBZERO + DEC MBDOWNCOUNTER + JNZ NOTLASTMB + CMP MB_FLASHING,FALSE + JE NOMBFF + MOV MB_FLASHING,FALSE + ENDFLASH 24 + LIGHTOFF 24 +NOMBFF: +NOTLASTMB: + CMP MBDOWNCOUNTER,MB_FASTFLASH_TIME + JNE NOTFASTMB + CMP MB_FLASHING,FALSE + JE NOMBF + ENDFLASH 24 + LIGHTFLASH 24,MBFASTFLASHSPEED +NOMBF: +NOTFASTMB: +MBZERO: + + CMP COMBODOWNCOUNTER,0 ;COMBO + JZ COMBOZERO + DEC COMBODOWNCOUNTER + JNZ NOTLASTCOMBO + MOV COMBOSTAGE,0 +NOTLASTCOMBO: +COMBOZERO: + CMP TOWERHUNTDOWNCOUNTER,0 ;TOWER HUNT + JZ TOWERHUNTZERO + DEC TOWERHUNTDOWNCOUNTER + JNZ NOTLASTTH + + MOV TOWERHUNTMODE,FALSE + MOV TOWERHUNTSTAGE,0 + PLAYJINGLE SJINGLE16 + MOVAL LASTJINGLE,S_MAIN[0] + +NOTLASTTH: +TOWERHUNTZERO: + +COUNTERS_INH: + RETN +UPDATE_COUNTERS ENDP + + + +BUMPER_WAS_HIT_PROC PROC NEAR ;INPUT: HITPOINTER + CALL ADDOFFROAD + UPDAT_INFOBAR + RETN +BUMPER_WAS_HIT_PROC ENDP + + + +;****************************************************************************** +;********************************* DOT MATRIX CODE **************************** +;****************************************************************************** + +_WAIT_GAME_ON: + MOV DOTRUT,OFFSET GONRUT + MOV SISA,44 + JMP NORMAL_END +GONRUT: + CMP ADDPLAYERS,TRUE + JE INTE_SATT_IGANG + MOV SI,0 + RETN +INTE_SATT_IGANG: + MOV SI,34 ;INTE 0 = INTE IG¸NG !! + RETN + + +_JBCDZ: + IFZEROBCD [BX+2] + JC OVERIT_ + MOV BX,[BX+4] + SUB BX,6 +OVERIT_: + ADD BX,6 + CMP WORD PTR [BX],0 + JNE _NEXTp_4 + MOV BX,0 + MOV NEXT_A,BX + RETN +_NEXTp_4: + MOV NEXT_A,BX + JMP [BX] + +_JBONUSX1: + CMP BONUS_X,1 + JNE QJBX1 + ADD BX,2 + MOV BX,[BX] + MOV NEXT_A,BX + JMP [BX] +QJBX1: MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + +_Jmp: + add bx,2 + mov bx,[bx] + MOV NEXT_A,BX + JMP [BX] + + +_CALC_HAPPY: + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + PUSHA + MOV SI,OFFSET OR_TOTAL ;ML_TOT -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POPA + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3E + MOV BX,0 +_NEXTp_3E: + MOV NEXT_A,BX + RETN + + + +_CALC_CYCLO: + PUSH ES + MOVE ES,DS + MOV DI,OFFSET CYCLONESCOREBCD + NIL AX + MOV CX,12/2 ;(12/6=6!!!) + REP STOSW + POP ES + + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + MOV CX,CYCLONECOUNTER +URBANLOOP: + MOV SI,OFFSET HUNDRATUSEN + MOV DI,OFFSET CYCLONESCOREBCD + PUSH CX BX + CALL ADDSCOREBCD + POP BX CX + LOOP URBANLOOP + + MOV SI,OFFSET CYCLONESCOREBCD ;CYCLONES -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3gg + MOV BX,0 +_NEXTp_3gg: + MOV NEXT_A,BX + RETN + +READ_SPECIAL_MODE_COUNTER PROC NEAR +;[SEC_ASC] PEKAR P¸ MSD, (0='*') [SEC_ASC+1] PEKAR P¸ LSD +;LˇS AV BARA! + MOVE DS,DATA + cmp [sec_asc],'*' + jne no_end + cmp [sec_asc+1],'0'+7 ;??? + jne no_end + cmp turbomode,true + jne noturboend + PLAYJINGLE_PENETRATE SJINGLE20 + mov lastjingle,3 +noturboend: + cmp OffRoadmode,true + jne nooffrend + PLAYJINGLE_PENETRATE SJINGLE20 ;CP! SJINGLE18!!!! + mov lastjingle,3 +nooffrend: +; mov specialmode,false + mov offroadmode,false + mov turbomode,false ;mega cp!! + mov current_priority,0 + mov lastjingle,3 + mov jinglejumpcnt,1 +no_end: + RETN +READ_SPECIAL_MODE_COUNTER ENDP + +INIT_TOWER: + MOVEBCD TOWERVALUE,TOWERSTART + RETN +INIT_VAULT: + MOVEBCD VAULTVALUE,VAULTSTART + RETN +INIT_WELL: + MOVEBCD WELLVALUE,WELLSTART + RETN + +TOWERADD: + PUSHA + MOV SI,OFFSET TOWERADDS + MOV DI,OFFSET TOWERVALUE + CALL ADDSCOREBCD + POPA + RETN +VAULTADD: + PUSHA + MOV SI,OFFSET VAULTADDS + MOV DI,OFFSET VAULTVALUE + CALL ADDSCOREBCD + POPA + RETN +WELLADD: + PUSHA + MOV SI,OFFSET WELLADDS + MOV DI,OFFSET WELLVALUE + CALL ADDSCOREBCD + POPA + RETN + +JACKADD PROC NEAR ;FN: JACKVALUE += JACKRAISE + PUSHA + MOV SI,OFFSET JACKRAISE + MOV DI,OFFSET JACKVALUE + CALL ADDSCOREBCD + POPA + RETN +JACKADD ENDP + +ADDTURBO: + CMP TURBOMODE,TRUE + JNE NO_TURBO + MOV SI,OFFSET BCD5000000 + MOV DI,OFFSET TM_TOTAL + CALL ADDSCOREBCD + MOV SPECIAL_SCORE_CHANGED,TRUE +NO_TURBO: + RETN + +ADDOFFROAD: + CMP OFFROADMODE,TRUE + JNE NO_OFFROAD + MOV SI,OFFSET BCD1000000 + MOV DI,OFFSET OR_TOTAL + CALL ADDSCOREBCD + MOV SPECIAL_SCORE_CHANGED,TRUE +NO_OFFROAD: + RETN + +_PARTYONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV AL,PLAYER + ADD AL,'A'-10 + MOV SHOOTTHEBALLTEXT[19],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + +_SHOOT_AGAIN_ONN: + MOVE DS,DATA + ASSUME DS:DATA + MOV AL,PLAYER + ADD AL,'A'-10 + MOV SHOOT_AGAIN_TEXT[19],AL + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + + +_PARTYON: ;BX NOT USED! + MOV PARTYFLASH,TRUE + MOVE SISA,1 ;HUR M†NGA + MOV DOTRUT,OFFSET PARTYRUT + JMP NORMAL_END + +_PARTYOFF: ;TURN OFF PARTYON FLASHING (AND BRING BACK SCORE!) + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + JMP NORMAL_END + + +TURBOWAITING: ; T.A.S.K. + CMP SPECIALMODE,TRUE + JE STILLTRUE1 + CMP LOOSING,TRUE + JE KILLHIMNOW1 + MOV FIX_TELEPORT_BUG,TRUE + EFFECT GRIMR +KILLHIMNOW1: + SUICIDE +STILLTRUE1: + RETN + +OFFROADWAITING: ; T.A.S.K. + CMP SPECIALMODE,TRUE + JE STILLTRUE2 + CMP LOOSING,TRUE + JE KILLHIMNOW2 + MOV FIX_TELEPORT_BUG,TRUE + EFFECT GHOSTHUNT +KILLHIMNOW2: + SUICIDE +STILLTRUE2: + RETN + + +_BONUS_X_CALCS: ;FN: MULTIPLIES THE BONUS + ;INPUT: BONUS_X, BONUSSIFFRORNA + ;OUTPUT: BONUSSIFFRORNA, BONUS_A_TEXT + PUSH BX + PUSH ES + MOVEBCD TEMPBONUSBCD,BONUSSIFFRORNA + MOV CL,BONUS_X + DEC CL + JZ NO_X_BONUS + NIL CH +DO_IT_AGAIN: + PUSH CX + MOV SI,OFFSET TEMPBONUSBCD + MOV DI,OFFSET BONUSSIFFRORNA + CALL ADDSCOREBCD + POP CX + LOOP DO_IT_AGAIN +NO_X_BONUS: + MOV BONUS_X_TEXT[8],1+'7' + MOV BONUS_X_TEXT[9],0+'7' + MOV AL,BONUS_X + ADD AL,'7' + CMP AL,10+'7' + JNB ITS10 + MOV BONUS_X_TEXT[8],AL + MOV BONUS_X_TEXT[9],' ' +ITS10: + POP ES + POP BX + MOV SISA,1 + MOV DOTRUT,OFFSET WAITRUT + JMP NORMAL_END + + + +_CALC_MEGA: + MOV DOTRUT,OFFSET WAITRUT + MOV SISA,1 + MOV SI,OFFSET TM_TOTAL ;ML_TOT -> TOTAL BONUS + MOV DI,OFFSET BONUSSIFFRORNA + PUSHA + CALL ADDSCOREBCD + POPA + ADD BX,2 + CMP WORD PTR [BX],0 + JNE _NEXTp_3Q + MOV BX,0 +_NEXTp_3Q: + MOV NEXT_A,BX + RETN + +;SetWBPL Set write BPL mask +SetWBPL macro BPLnr + mov dx,3c4h + mov ah,BPLnr + mov al,2 + out dx,ax + endm +;-) +_tower: + MOVE cs:stannalinne,[BX+2] ;HUR M†NGA + mov cs:linne,152 + MOV DOTRUT,OFFSET towerrut +;galopp + JMP NORMAL_END + +linne dw ? +stannalinne dw ? + +towerrut: + dec cs:linne ;mindre nattlinne=mer † se!! + mov cx,cs:linne + call showtower + mov ax,cs:stannalinne + cmp cs:linne,ax + je stopit + mov si,1 + retn +stopit: + mov si,0 + retn + +showtower: +;cx: startlinje! + move es,0a000h + move ds,anim08seg + mov di,sw/4*2 + mov dx,0 + mov ax,320/8 + ;cx=linje + mul cx + assume ds:anim08seg + mov si,offset anim08 + assume ds:data + add si,ax + mov bl,10000000b + mov bh,00001000b + + mov cx,2 +two: + push cx si di + push bx + shr bh,1 + xor bh,101b + setwbpl bh + pop bx + mov cx,16 +put_kll: + push cx + mov cx,320/8 +put_bits: + mov dl,[si] + inc si + test dl,bl + je gulan + +svartan: + mov al,matrixlo + stosb + jmp overit_ehrm +gulan: + mov al,matrixhi + stosb +overit_ehrm: +;och n„sta . . . + test dl,bh + je gulan2 +svartan2: + mov al,matrixlo + stosb + jmp overit_ehrm2 +gulan2: + mov al,matrixhi + stosb +overit_ehrm2: + loop put_bits + pop cx + add di,sw/4+(sw-320)/4 + loop put_kll + pop di si cx + shr bx,2 + loop two + move ds,data +retn + +_DOBEATEN: + MOVE SISA,1 + MOV DOTRUT,OFFSET WAITRUT + INC XBALLS + JMP NORMAL_END + + +CODE ENDS + + +;****************************************************************************** +;************************* O T H E R S E G M E N T S ************************ +;****************************************************************************** + +HIDDEN1 SEGMENT PARA PUBLIC 'DATA' + UNDANSPR DB 16*16 DUP (0) + HIDDA DB 576*2 DUP(0) + EXTRN HID1 +HIDDEN1 ENDS + +HIDDEN2 SEGMENT PARA PUBLIC 'DATA' + HIDDA2 DB 576*2 DUP(0) + EXTRN HID2 +HIDDEN2 ENDS + +MASK1_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK12 +MASK1_2 ENDS + +MASK1_1 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK11 +MASK1_1 ENDS + +MASK2_2 SEGMENT PARA PUBLIC 'DATA' + EXTRN MASK22 +MASK2_2 ENDS + +FLIPLEFT SEGMENT PARA PUBLIC 'DATA' +if create_flip_data + EXTRN FLIPL +else + extrn flipl_1 +endif +FLIPLEFT ENDS + +FLIPLEFT2 SEGMENT PARA PUBLIC 'DATA' +FLIPLEFT2 ENDS + +FLIPRIGHT SEGMENT PARA PUBLIC 'DATA' +if create_Flip_data + EXTRN FLIPR +else + extrn flipr_1 +endif +FLIPRIGHT ENDS + +anim08seg segment para public 'data' ;Martin Berg!! +extrn anim08 +anim08seg ends + +LASTSEG SEGMENT +LASTSEG ENDS + +STAGE1_1 SEGMENT PARA PUBLIC 'DUMP' + extrn st1 +STAGE1_1 ENDS + +STAGE1_2 SEGMENT PARA PUBLIC 'DUMP' + extrn st2 +STAGE1_2 ENDS + +STAGE1_3 SEGMENT PARA PUBLIC 'DUMP' + extrn st3 +STAGE1_3 ENDS + +STAGE1_4 SEGMENT PARA PUBLIC 'DUMP' + extrn st4 +STAGE1_4 ENDS + +MASK1_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK13 +MASK1_3 ENDS + +MASK2_1 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK21 +MASK2_1 ENDS + +MASK2_3 SEGMENT PARA PUBLIC 'DUMP' + EXTRN MASK23 +MASK2_3 ENDS + +FLIPGFXSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN FLIPGFX:BYTE +SISTAGFX LABEL BYTE +FLIPGFXSEG ENDS + +SPRINGSEG SEGMENT PARA PUBLIC 'DUMP' + EXTRN SPRING +SPRINGSEG ENDS + + + \ No newline at end of file