6677 lines
120 KiB
NASM
6677 lines
120 KiB
NASM
|
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<EFBFBD> flera datorer
|
|||
|
cheats
|
|||
|
|
|||
|
GABRIEL:
|
|||
|
LJUD F<EFBFBD>R OFTA VID STONEBONE
|
|||
|
CHECKSUMMA SKYDDET
|
|||
|
*Kolla minneskrav j<EFBFBD>ttenoga med st<EFBFBD>rsta SDRen
|
|||
|
*spela en massa p<EFBFBD> magnus dator <EFBFBD> din farsas notebook (m extern sk<EFBFBD>rm)
|
|||
|
|
|||
|
JOHAN:
|
|||
|
FELHANTERINGEN CP! (<EFBFBD>TMINSTONE OUT OF MEM)
|
|||
|
NYA FLD-LOGGAN! (FRONT.LBM P<EFBFBD> DIN DATOR)
|
|||
|
TONINGEN SKA INTE SLUTA P<EFBFBD> BAJSBRUNT UTAN P<EFBFBD> SVART!
|
|||
|
*Kolla minneskrav j<EFBFBD>ttenoga med st<EFBFBD>rsta SDRen
|
|||
|
spela en massa p<EFBFBD> TFT notebook + gotlandsdatorn
|
|||
|
|
|||
|
DANIEL:
|
|||
|
SB16
|
|||
|
JOHANS SYNDROM
|
|||
|
PAS 16 (l<EFBFBD>na Steins)
|
|||
|
|
|||
|
?H<EFBFBD>NGDE VID UPPSTART AV BILLION (STEWART)
|
|||
|
?BALL STUCK AFTER PAUSE
|
|||
|
?386SX16 FICK MEDIUM (INTERNAL)
|
|||
|
??SCANDICS SYNDROM
|
|||
|
|
|||
|
(MUSIC ON/OFF BORDE ST<EFBFBD>DJA SUPERL<EFBFBD>GEN (DVS ANDRA MAINSLINGOR <EFBFBD>N S_MAIN)
|
|||
|
(anv<EFBFBD>nd nya clears!!)
|
|||
|
SPELTESTA BILLION
|
|||
|
adlib och thing kn<EFBFBD>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 <20>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 <20>/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<4E>NDS <20>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<4E>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 <20> R<>JJA MED ASS<53>!
|
|||
|
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<66>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<72>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 <20>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<53>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<73>dat <20> 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<73>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<54> 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<53>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<73>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<73>mde!!
|
|||
|
mov bx,ax ;f<>r att kunna kalla p<> bx om det st<73>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 <20>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 <20>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 <20>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<50>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<56>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<4D>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 <20>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<6E>!!
|
|||
|
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<74>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<74>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 <20>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 ;<3B>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 <20>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<4E>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<41> 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 <20> 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 <20>R H<>RMED EN TASKRUTIN!!!
|
|||
|
;print_numbers input e si=offset till bcd:n, di=pos <20> 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 <20> 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 <20> 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 <20> 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<54> BER<45>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! <20>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<53>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<53>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<54>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<54>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 <20>r hur man addar p<> en score!!
|
|||
|
;detta <20>r upp till dig att r<>ja upp!
|
|||
|
;(si pekar p<> effektscoren!!)
|
|||
|
;JAHAPP, MEN DET <20>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<4C>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<73>ck sk<73>rmen SL<53>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<6F>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<73>rmh<6D>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<53>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 <20>R F<>R DE WORD SOM TALAR OM
|
|||
|
ADD DI,CS:ORGDI ;HUR MYCKET SOM BEH<45>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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|