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† flera datorer
|
||
cheats
|
||
|
||
GABRIEL:
|
||
LJUD F™R OFTA VID STONEBONE
|
||
CHECKSUMMA SKYDDET
|
||
*Kolla minneskrav j„ttenoga med st”rsta SDRen
|
||
*spela en massa p† magnus dator † din farsas notebook (m extern sk„rm)
|
||
|
||
JOHAN:
|
||
FELHANTERINGEN CP! (<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„ttenoga med st”rsta SDRen
|
||
spela en massa p† TFT notebook + gotlandsdatorn
|
||
|
||
DANIEL:
|
||
SB16
|
||
JOHANS SYNDROM
|
||
PAS 16 (l†na Steins)
|
||
|
||
?HŽNGDE VID UPPSTART AV BILLION (STEWART)
|
||
?BALL STUCK AFTER PAUSE
|
||
?386SX16 FICK MEDIUM (INTERNAL)
|
||
??SCANDICS SYNDROM
|
||
|
||
(MUSIC ON/OFF BORDE ST™DJA SUPERLŽGEN (DVS ANDRA MAINSLINGOR ŽN S_MAIN)
|
||
(anv„nd nya clears!!)
|
||
SPELTESTA BILLION
|
||
adlib och thing kn„pper till vid play sdr-laddning endast i introN?
|
||
|
||
******************************************************************************\
|
||
|
||
.286
|
||
JUMPS
|
||
LOCALS __
|
||
|
||
TRUE EQU 255
|
||
FALSE EQU 0
|
||
|
||
xst=165
|
||
yst=450
|
||
NOOFWAITSYNCS=0
|
||
NO_OF_PLAYERS=8 ;NOTE: F1-F8
|
||
inactivetime=12 ;(secs)
|
||
TA_TID=15 ;SYNCS EN KEY ŽR GILTIG EFTER DEN BLIVIT TRYCKT
|
||
SLIME_FACTOR_DEFAULT=11 ;5=OUT OF SCREEN 55=HARD
|
||
AWAYFROMMIDDLE=20
|
||
MOUSETOTAL=2
|
||
MOUSEMIDDLE=MOUSETOTAL/2
|
||
|
||
STACKEN SEGMENT PARA STACK 'STACK'
|
||
DB 256 DUP (0)
|
||
STACKEN ENDS
|
||
|
||
includelib fantasie
|
||
;includelib cleaR
|
||
INCLUDE C:\source\MACROS1.ASM
|
||
INCLUDE C:\source\MACROS3.ASM
|
||
INCLUDE FANTASIE.MAC
|
||
|
||
SKALA56 MACRO SKALVAR
|
||
MOV AX,5
|
||
IMUL SKALVAR
|
||
MOV CX,6
|
||
IDIV CX
|
||
MOV SKALVAR,AX
|
||
ENDM
|
||
|
||
|
||
if (bana EQ 1)
|
||
INCLUDE pland.ASM
|
||
endif
|
||
if (bana EQ 2)
|
||
INCLUDE sdev.ASM
|
||
endif
|
||
if (bana EQ 3)
|
||
INCLUDE show.ASM
|
||
endif
|
||
if (bana EQ 4)
|
||
INCLUDE stones.ASM
|
||
endif
|
||
|
||
flipstruc struc
|
||
typ DB 1 ;Left/Right
|
||
LastFrame DB 1 ;Blit again?
|
||
LeftX DW 1 ;Leftmost block position
|
||
TopY DW 1 ;Uppermost block position
|
||
FlipX DW 1 ;Words wide
|
||
FlipY DW 1 ;Lines high
|
||
FlipX1 DW 1 ;Left Border
|
||
FlipX2 DW 1 ;Right Border
|
||
FlipY1 DW 1 ;Upper Border
|
||
FlipY2 DW 1 ;Lower Border
|
||
RotCentX DW 1
|
||
RotCentY DW 1
|
||
PowerZonE DW 1 ;Quadrants for power calculations
|
||
FlipSize DW 1 ;Offset to next flipper
|
||
FlipVinkelHast DW 1 ;Speed °/200:th second
|
||
FlipVinkel DW 1 ;Angel from zero
|
||
FlipFrame DW 1 ;Frame to use
|
||
FlipFrames DW 1 ;Last frame
|
||
FlipFramesMax DW 1
|
||
FlipAxUp DW 1
|
||
FlipAxDown DW 1
|
||
FlipMaxHastUp DW 1
|
||
FlipMaxHastDown DW 1
|
||
LASTGFXFRAME DW 0
|
||
FLIPGFXSTART DW ?
|
||
FLIPMAXPEK DW ?
|
||
FLIPTOPPEK DW ?
|
||
FLIPPEK DW ?
|
||
FLIPTAB DW ?
|
||
FLIPDIFS DW ?
|
||
FlipData Dw 1 ;Data for flippers
|
||
ENDS
|
||
;****************************************************************
|
||
FLIPPERL EQU 2 ;OBS! M<>STA VARA 2 F™R ATT DET SKA BLI RŽTT SHIFTKEYS
|
||
FLIPPERR EQU 1
|
||
|
||
springh=17
|
||
NOT_PLAYING=60*INACTIVETIME
|
||
rotslowdown=2
|
||
PILHAST=1024 ;256+128 ;1024/4=256
|
||
SLOW=0
|
||
MARGIT=0
|
||
FLASHIT=0
|
||
SW=336
|
||
BPL=SW/4
|
||
HIRES=false
|
||
RES600=false
|
||
HZ50=FALSE
|
||
|
||
IF HIRES
|
||
IF RES600
|
||
SH=600
|
||
ELSE
|
||
SH=480
|
||
ENDIF
|
||
ELSE
|
||
IF HZ50
|
||
SH=256
|
||
ELSE
|
||
SH_HI=350
|
||
SH_LO=240
|
||
ENDIF
|
||
ENDIF
|
||
|
||
SPLH=33
|
||
MAXGAPU_LO=(SH_LO-SPLH)/2-AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2
|
||
MAXGAPD_LO=(SH_LO-SPLH)/2+AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2
|
||
MAXGAPU_HI=(SH_HI-SPLH)/2-AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2
|
||
MAXGAPD_HI=(SH_HI-SPLH)/2+AWAYFROMMIDDLE-GLAPP_SIZE-BALLH/2
|
||
|
||
IF HIRES
|
||
IF RES600
|
||
LATE_INTERRUPT_RASTER = (SH/2-SPLH)/2+BALLH+SPLH ;600
|
||
ELSE
|
||
LATE_INTERRUPT_RASTER = (SH/2-SPLH)/2+BALLH ;480
|
||
ENDIF
|
||
ELSE
|
||
LATE_INTERRUPT_RASTER_HI = (SH_HI/2-SPLH)/2+BALLH ;480
|
||
LATE_INTERRUPT_RASTER_LO = (SH_LO-SPLH)/2+F3HEIGHT/2 ;+BALLH ;240
|
||
ENDIF
|
||
|
||
IF RES600
|
||
MIDDLE_RASTER = (SH-SPLH)/2+SPLH
|
||
ELSE
|
||
MIDDLE_RASTER_LO = (SH_LO-SPLH)/2
|
||
MIDDLE_RASTER_HI = (SH_HI-SPLH)/2
|
||
ENDIF
|
||
|
||
UPPER EQU TRUE
|
||
LOWER EQU FALSE
|
||
|
||
IF CREATE_FLIP_DATA
|
||
PUBLIC FLIPLINFO
|
||
ENDIF
|
||
|
||
public exahitx,exahity,rotation,sc_X,sc_y,adjusttable,x_pos,y_pos,x_pos_hi,y_pos_hi,x_hast,y_hast,gfxmask21_offset,gfxmask23_offset,gfxmask13_offset,hitpointer,screenhast,screenpos,screenposy,materialdata,bumper2lista_l,bumperlista_l,gravx,gravy
|
||
public INSIDE_RASTINT,holdstill,ballhigh,hitvalue,materialbit,bumperwashit,ball_down,allowflip,shiftkeys,tiltflag,tiltkey
|
||
public moveflipmask
|
||
|
||
DATA SEGMENT PARA PUBLIC 'DATA'
|
||
extrn MINUSHAST:word ;l„gg dessa externer i datasegmentet
|
||
extrn pluSHAST:word
|
||
extrn bumperpower:word
|
||
extrn kickerpower:word
|
||
extrn kickminhast:word
|
||
extrn TILTHASTFW:word
|
||
extrn TILTHASTRV:word
|
||
|
||
SOUNDCFG DB "SOUND.CFG",0
|
||
DRV DB "c:\Masm\DS20\RESIPLAY\resiplay.exe",15 DUP(0)
|
||
PARMS DW 10 DUP(0)
|
||
LASTJINGLE DB ?
|
||
LASTLASTJINGLE DB ?
|
||
LASTPRIORITY DB ?
|
||
JINGLEJUMPCNT DB ?
|
||
;LASTLOOPVAL DB ?
|
||
SLOWCNT DB 0
|
||
;**************** STUDS-VARIABLER **************************************
|
||
PAUSEFLAG DB FALSE
|
||
TILTKEY DB FALSE
|
||
TILTFLAG DB FALSE
|
||
EVENDATA
|
||
TILTCOUNTER DW ?
|
||
STOTMAX EQU 2048
|
||
SCREENPOS DW 0
|
||
SCREENPOSY DW 0
|
||
SCREENHAST DW 0
|
||
muzik_off db false
|
||
kvot=4
|
||
MaterialData dw 1792,1792/Kvot,400,-300,38,0,0,0
|
||
FLipprubber dw 1792,1792/Kvot,400,-600,18,0,0,0 ;Flipper
|
||
dw 1792,1792/Kvot,400,-600,18,0,0,0
|
||
rubber dw 896,896/Kvot,875,-200,38,0,0,0 ;Rubber
|
||
dw 1792,1792/Kvot,400,-300,38,0,0,0
|
||
staal dw 30000,30000/Kvot,1000,-400,38,0,0,0 ;Spring Steel
|
||
Steel dw 10000,10000/Kvot,450,-700,38,0,0,0 ;Steel
|
||
plastic dw 10000,10000/Kvot,400,-500,38,0,0,0 ;Plastic
|
||
bumperwashit db false
|
||
ball_down db false
|
||
hitpointer dw ?
|
||
GFXMASK21_OFFSET dw FIRSTMASK_GFXADR
|
||
GFXMASK23_OFFSET dw ?
|
||
gFXMASK13_OFFSET dw ?
|
||
springpos db 0
|
||
realpos db 0
|
||
SPRINGTASK DW OFFSET SPRINGSTEEN
|
||
INSIDE_RASTINT DB FALSE
|
||
INSIDE_BALLHANDLER DB FALSE
|
||
INSIDE_RESTOFVBLANK DB FALSE
|
||
SLIME_FACTOR DW SLIME_FACTOR_DEFAULT ;5=OUT OF SCREEN 55=HARD
|
||
;**********************************************
|
||
ADJUST EQU 55
|
||
;*******************************
|
||
dw adjust*2 dup(0) ;h”r
|
||
adjusttable dw adjust*24 dup(0) ; ihop
|
||
;***********************************
|
||
hitvalue db 0,0
|
||
materialbit db 0,0
|
||
ROTATION DW 0
|
||
SC_X DW XST
|
||
SC_Y DW YST
|
||
X_POS DW 0
|
||
X_POS_HI DW 0
|
||
Y_POS DW 0
|
||
Y_POS_HI DW 0
|
||
X_HAST DW 0
|
||
Y_HAST DW 0
|
||
EXAHITX DW 0
|
||
EXAHITY DW 0
|
||
GRAVY DW 10*tt/nn
|
||
GRAVX DW 0
|
||
OLDPOS DW ?
|
||
OLDSHIFT DW ?
|
||
oldx dw 0
|
||
oldy dw 25
|
||
|
||
IF HIRES
|
||
SPLITLINE DW SH-SPLH
|
||
ELSE
|
||
SPLITLINE DW ? ;HI:SH_HI-SPLH, LO:(SH_LO-33)*2
|
||
ENDIF
|
||
|
||
START_RASTER DW ?
|
||
RASTERPOS DW 0
|
||
STATUS DB ?
|
||
LATEGFX DB ?
|
||
VERYFIRSTPUT DB ?
|
||
PUTITBETWEEN DB ?
|
||
PUTF3BETWEEN DB ?
|
||
FORCELATEF3 DB ?
|
||
BUFR DW 0
|
||
FLIPPEKARE DW ?
|
||
FLIPPTR DW ?
|
||
FLIPADR DW ?
|
||
FLIPXPOS DW ?
|
||
FLIPYPOS DW ?
|
||
FLIPSEG DW ?
|
||
FLIPWIDTH DW ?
|
||
FLIPHEIGHT DW ?
|
||
FLIPSTORLEK DW ?
|
||
FLIPLINESIZE DW ?
|
||
ASSUME DS:DATAFLIP ;*******************************************
|
||
LEFTFLIP2PTR DW OFFSET LEFTFLIP2TAB
|
||
LEFTFLIPPTR DW OFFSET LEFTFLIPTAB
|
||
RIGHTFLIPPTR DW OFFSET RIGHTFLIPTAB
|
||
ASSUME DS:DATA ;**************************************************
|
||
SHIFTKEYS DB 0
|
||
INTERRUPTS_ON DB false
|
||
HOLDSTILL DB FALSE
|
||
uppstartad db false
|
||
RGBBUFFER DB RGB_BUFFER_LEN DUP(0)
|
||
RGBBUFPTR DW RGBBUFFER
|
||
LASTCHECK DW ?
|
||
LASTAREA DW ?
|
||
BALLHIGH DB ?
|
||
TASKLIST DW NOOFTASKS DUP(DUMRET)
|
||
NO_OF_ACTIVE_TASKS DW 0
|
||
SAVESOURCE DW ?
|
||
SCREENFORCE DW ?
|
||
SCREENFORCE2 DW -1
|
||
SCROLLPOS DW ?
|
||
CURRENT_PRIORITY DB ?
|
||
SPRING_VALID DB ?
|
||
SHIFTPRESSED DB ?
|
||
KEYTASK DW ?
|
||
JINGLE_READY_ANIM DB TRUE
|
||
JINGLE_READY_LOGIC DB TRUE
|
||
MATRIX_SPEED DW ?
|
||
MATRIX_CNT DW ?
|
||
MATRIX_ONOFF DW ?
|
||
MATRIX_IS_FLASHING DB ?
|
||
INTFLAG DB FALSE
|
||
INH_EFF DB ?
|
||
BONUSSIFFRORNA DB 12 DUP(?) ;BCD CODED
|
||
TEMPSIFFRORNA DB 12 DUP(?) ;BCD CODED
|
||
BONUSMULTIPEL DW ?
|
||
ADDOR DB 11 DUP(0), 1, 11 DUP(0)
|
||
ADDORPEK DW ?
|
||
BONUSPEK DW ?
|
||
LOOSING DB ?
|
||
ALLOWFLIP DB ?
|
||
first_time_you_fool db true ;Jaaaa det r„cker s† h„r! (ANVŽNDS ŽVEN VID ESC I CHUTEN)
|
||
if demover
|
||
MINUTE_5_COUNTER DW 0
|
||
fiveminutes db false
|
||
endif
|
||
BALLS DB 12 DUP(0) ;FIRST 11 DIGITS MUST NEVER BE CHANGED
|
||
NO_OF_BALLS DB 1 ;WILL BE CHANGED
|
||
SCORECHANGED DB ?
|
||
SPECIAL_SCORE_CHANGED DB ?
|
||
I_UTSKJUT DB TRUE
|
||
behovs_provad db false
|
||
SPECIALMODE DB FALSE
|
||
ADDPLAYERS DB true
|
||
SUPER_INIT DB ? ;TRUE WHILE INITING SUPER MODE (FOR JP ETC)
|
||
NEXT_A DW 0
|
||
DOTRUT DW offset cs:nodot
|
||
sisa dw 0
|
||
clearval dw ?
|
||
slump_countern dw ?
|
||
MAKE_BAD DB false ;cpskydd (ska va true)
|
||
calamares_delay db 0
|
||
already_beaten db ?
|
||
VISAKEYS DB ?
|
||
VISAPOANG DW 0
|
||
STUDSSCOREN DW 0
|
||
INHIBIT_COUNT_DOWN DB ? ;(PENETRATION OF SPECIAL MODE)
|
||
EOTS DB ? ;UPP TILL VARJE BANA ATT ANVŽNDA
|
||
DOT_READY DB ?
|
||
LAGERARBETAREN DW ?
|
||
LILLE_LAGERARBETAREN DB ?
|
||
PAUSE_LAGRET DB 320/2*16/8+1 DUP(0)
|
||
PAUSE_TEXT DB 'GAME PAUSED',0
|
||
INSIDE_DOLIGHTS DB FALSE
|
||
SYNC_COUNTER DW 0
|
||
INT_WAS_HERE DB ?
|
||
INT_WAS_HERE2 DB ?
|
||
DNPRESSED DB FALSE
|
||
MOUSEINSTALLED DB ?
|
||
DECCOR DW ? ;WAITJINGLE2
|
||
FFLAG DB 0 ;F11/F12
|
||
HI_RES DB ? ;350 OR 240 LINES
|
||
|
||
FLASHSTRUC STRUC
|
||
LNUM DB ?
|
||
FLASHCOUNTER DB ?
|
||
TURNOFF DB ?
|
||
RESETFC DB ?
|
||
ENDS
|
||
REALFLASHLIST DB MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC DUP(0)
|
||
LIGHTSTATUS DB NOOFLIGHTS+1 DUP(0)
|
||
WAITLIST DW MAX_NO_OF_WAIT_SYNCS DUP(0)
|
||
|
||
TOGGLAR_STRUCEN STRUC
|
||
S_BALLS DB ?
|
||
S_ANGLE DB ?
|
||
S_SCROLLING DB ?
|
||
S_IM DB ?
|
||
S_RESOLUTION DB ?
|
||
S_MODE DB ?
|
||
ENDS
|
||
TOGGLAREN DB SIZE TOGGLAR_STRUCEN DUP (0)
|
||
|
||
;cp cp cp cp!
|
||
hi_1 db '8 ',94,0
|
||
hi_2 db '9 ',94,0
|
||
hi_3 db '9'+1,' ',94,0
|
||
hi_4 db '9'+2,' ',94,0
|
||
ALFA_KEYS DB 13 DUP(0),0,2 DUP(0),'QWERTYUIOP',0,0,0,0,'ASDFGHJKL',0,0,0,0,0,'ZXCVBNM',6 dup (0),'*',(128-50-7) dup (0),20 dup (0)
|
||
scan_code db ?
|
||
sec_left dw ?
|
||
sync_per_sec dw 60
|
||
sync_left dw ?
|
||
val_to_print dw ?
|
||
time_left dB ?
|
||
sec_asc db ?,?,0
|
||
NODOTCOUNT DW ?
|
||
fjanttext dw ?
|
||
PRINTTASK DW ?
|
||
AX_PRINT DW ?
|
||
DI_PRINT DW ?
|
||
clear_box_start dw ?
|
||
clear_box_bredd dw ?
|
||
clear_box_hojd dw ?
|
||
rullstart dw ?
|
||
rulltext dw ?
|
||
rull_pos dw ?
|
||
stop_at_pos dw ?
|
||
upp_add dw ?
|
||
first_high db false ;cp?
|
||
HIGHSCORE DB false ;CP?
|
||
no_demomusic db false ;cp?
|
||
DEMOMODE DB TRUE
|
||
F1F8_CODE DB ?
|
||
OLD_F1F8_CODE DB ?
|
||
PLAYERS DB 0
|
||
PLAYERS_CP DB FALSE
|
||
CARMEN DW ?
|
||
PLAYER DB ?
|
||
ORGPLAYER DB ?
|
||
extrn sin:word,material:word
|
||
;fonter
|
||
TOM_BRUN DB 13 DUP(0) ;F™R <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†gan
|
||
quit_fragenTS LABEL WORD
|
||
CLEARIT
|
||
dw _flashoff,?
|
||
DW _PRINT13,quit_TEXT,sw*2/4*2+16*0/4
|
||
dw _WAIT_YN,?
|
||
dw _jmp,showhighsTS
|
||
|
||
HALL_DIG_BORTATS dw _wait,1
|
||
DW _LOCK,1
|
||
dw 0
|
||
|
||
quit_TEXT DB 'REALLY QUIT ','Z'+2,'Y OR N','Z'+3,0
|
||
quitgam_TEXT DB ' END GAME ','Z'+2,'Y OR N','Z'+3,0
|
||
|
||
DATA ENDS
|
||
|
||
CODE SEGMENT PARA PUBLIC 'CODE'
|
||
ASSUME CS:CODE,DS:DATA
|
||
EXTRN UNPKLBM:NEAR,kollakulan:near
|
||
EXTRN PUTBALL:NEAR,DELBALL:NEAR
|
||
MARG DB 0
|
||
OLDMARG DB 0
|
||
|
||
FANTASIES PROC FAR
|
||
MOV BP,DS
|
||
MOV AH,4AH
|
||
MOV BX,LASTSEG
|
||
SUB BX,BP
|
||
ADD BX,1024/16
|
||
INT 21H ;HŽR F™RSVINNER BAN-GRAFIKEN
|
||
MOV AX,DATA
|
||
MOV DS,AX
|
||
IF STAND_ALONE
|
||
MOV TOGGLAREN.S_SCROLLING,1
|
||
ELSE
|
||
MOV AX,0200H ;RESIDENTA TOGGLAREN => LOKALA TOGGLAREN
|
||
MOVE ES,DS
|
||
LEA BX,TOGGLAREN
|
||
INT KEYHANDLER
|
||
ENDIF
|
||
|
||
if stand_alone
|
||
mov hi_res,true
|
||
else
|
||
MOV HI_RES,FALSE
|
||
CMP TOGGLAREN.S_RESOLUTION,0
|
||
JZ ITS_LOW_RES
|
||
MOV HI_RES,TRUE
|
||
ITS_LOW_RES:
|
||
endif
|
||
|
||
;HŽR DANIEL!!!
|
||
CMP TOGGLAREN.S_ANGLE,0
|
||
JZ NORMAL_ANGLE
|
||
CALL TABLE_ANGLE
|
||
NORMAL_ANGLE:
|
||
|
||
MOV NO_OF_BALLS,3
|
||
CMP TOGGLAREN.S_BALLS,0
|
||
JZ ITS_3_BALLS
|
||
MOV NO_OF_BALLS,5
|
||
ITS_3_BALLS:
|
||
|
||
CMP TOGGLAREN.S_IM,0
|
||
JE ITS_ON_THE_MUSIC
|
||
CALL MUSIC_TOGGLE
|
||
ITS_ON_THE_MUSIC:
|
||
|
||
CMP TOGGLAREN.S_SCROLLING,1
|
||
JB CF11
|
||
JA CF9
|
||
CALL F10
|
||
JMP SHORT KLAR
|
||
CF9: CALL F9
|
||
JMP SHORT KLAR
|
||
CF11: CALL F11
|
||
KLAR:
|
||
|
||
if debug
|
||
debugclear
|
||
endif
|
||
IF DEBUG
|
||
debugmess 0,0,"Pinball Fantasies PC by FrontLine Design"
|
||
ENDIF
|
||
cli ;CP!?
|
||
IF DEBUG
|
||
debugmess 0,1,"Initing..."
|
||
ENDIF
|
||
CALL INIT_SIN
|
||
CALL INIT_SCROLL
|
||
call init_ballspeed
|
||
CALL INIT_MATRIX
|
||
|
||
CALL BREDDA_MASK
|
||
IF DEBUG
|
||
debugmess 0,1,"Init gfx..."
|
||
ENDIF
|
||
CALL INIT_GFX
|
||
IF DEMOVER
|
||
ELSE
|
||
CALL INIT_HIGHS
|
||
ENDIF
|
||
MOVE DS,DATA
|
||
|
||
;************** CHECKSUMMA 1 START ***************
|
||
CHECK1_START:
|
||
MOV RGBBUFPTR,OFFSET RGBBUFFER
|
||
CALL RECALC_LIGHTS
|
||
CALL RECALCFLASHLIST
|
||
|
||
CALL MASKS2GFX ;INUTI LIGGER INIT_FLIPPERS (AV N<>N ANLEDNING)
|
||
;FATALT_HOPP:
|
||
CALL INIT_SPRING
|
||
CALL INIT_KEY
|
||
cmp hi_res,true
|
||
jne notcalc3
|
||
or shiftkeys,100b
|
||
notcalc3:
|
||
CALL INIT_MOUSE
|
||
CALL INIT_SOUND
|
||
CHECK1_END:
|
||
;************** CHECKSUMMA 1 END ***************
|
||
|
||
MOVE DS,DATA
|
||
MOV STATUS,LOWER ;INIT BEEM VARS
|
||
MOV VERYFIRSTPUT,TRUE
|
||
MOV LATEGFX,FALSE
|
||
MOV INTERRUPTS_ON,FALSE
|
||
|
||
CALL JUST_ONE_TIME_RESET
|
||
CALL JUST_ONE_TIME_RESET_TABLE
|
||
|
||
sti
|
||
|
||
|
||
call go_DEMO_mode ;CP! DEMO MODE
|
||
|
||
MOV SCREENFORCE,BANH-(SH_LO-SPLH)
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES2
|
||
MOV SCREENFORCE,BANH-(SH_HI-SPLH)
|
||
CALL KILL_UPPER_LINE
|
||
NOTHIRES2:
|
||
MOV CARMEN,-1
|
||
|
||
|
||
if demover
|
||
CALL game_MUSIC ;cp! demo mode
|
||
else
|
||
CALL demo_MUSIC ;cp! demo mode
|
||
endif
|
||
call setscreenstart
|
||
CALL INIT_INTS
|
||
|
||
call slack_lights_i_pelle
|
||
|
||
CMP TOGGLAREN.S_MODE,0
|
||
JZ DONOTCONV
|
||
CALL COLOR_2_BW
|
||
call pelle_2_bw
|
||
DONOTCONV:
|
||
|
||
|
||
; XOR BX,BX
|
||
;TONA: ADD BX,1
|
||
mov bx,256
|
||
CALL SETPAL
|
||
; cmp bx,256
|
||
; jb tona
|
||
|
||
MOV AX,4
|
||
MOV BX,2
|
||
mov cx,0 ;0=use configurated rate
|
||
INT 66H ;PLAY MODULE
|
||
IF_ERROR 1,OUTOFMEMORY
|
||
IF_ERROR 2,INIT_ERR
|
||
|
||
|
||
|
||
mov uppstartad,true
|
||
MOV INTERRUPTS_ON,TRUE ;********** INTERRUPTS ENABLED! **********
|
||
IF DEBUG
|
||
debugmess 0,1,"Running... "
|
||
ENDIF
|
||
IF DEBUG
|
||
MOV AH,48H
|
||
MOV BX,0FFFFH
|
||
INT 21H
|
||
DEBUGVAL 0,22,BX,"Free memory after all: "
|
||
ENDIF
|
||
jmp main
|
||
TABLE_ANGLE Proc Near
|
||
;for (c=0;c<11;c++) ramptable[c]-=4;
|
||
|
||
mov bx,offset ramptable
|
||
cmp hi_res,false
|
||
je goda_grannar
|
||
mov bx,offset ramptable_hi
|
||
goda_grannar:
|
||
mov cx,no_of_ramps
|
||
luta: sub word ptr [bx+2],3
|
||
add bx,4
|
||
loop luta
|
||
retn
|
||
TABLE_ANGLE EndP
|
||
|
||
init_ballspeed proc near ;ers„tt den gamla med denna
|
||
cmp hi_res,true
|
||
je no_adde_malmberg
|
||
|
||
mov bx,offset materialdata
|
||
mov cx,8
|
||
mov bp,5
|
||
mov si,6
|
||
hemul: mov ax,[bx+6]
|
||
imul bp
|
||
idiv si
|
||
mov [bx+6],ax
|
||
add bx,16
|
||
loop hemul
|
||
|
||
skala56 MINUSHASt
|
||
skala56 PLUSHAST
|
||
skala56 bumperpower
|
||
skala56 kickerpower
|
||
skala56 kickminhast
|
||
skala56 TILTHASTFW
|
||
skala56 TILTHASTRV
|
||
|
||
no_adde_malmberg:
|
||
retn
|
||
init_ballspeed endp
|
||
;**********
|
||
already_quitting db false
|
||
checkquit:
|
||
cmp cs:already_quitting,true
|
||
je no_fragen_sie_bitte_die_ende
|
||
mov cs:keyboard_enabled,false
|
||
mov CS:ALREADY_QUITTING,TRUE
|
||
mov bx,offset quit_fragenTS
|
||
call do_matrix
|
||
no_fragen_sie_bitte_die_ende:
|
||
retn
|
||
;***********
|
||
|
||
KILL_UPPER_LINE PROC NEAR
|
||
SETWRITE 1111B
|
||
MOVE ES,0A000H
|
||
MOV DI,SPLH*SW/4
|
||
MOV CX,320/4/2
|
||
XOR AX,AX
|
||
LUPPEN: STOSW
|
||
LOOP LUPPEN
|
||
RET
|
||
KILL_UPPER_LINE ENDP
|
||
|
||
checkpause:
|
||
if demover
|
||
; jmp nopause
|
||
endif
|
||
CMP PAUSEFLAG,false
|
||
JE NOPAUSE
|
||
mov interrupts_on,false
|
||
mov al,15
|
||
int 66h ;STOP
|
||
CALL PRINT_PAUSE
|
||
; DEBUGMESS 20,6,"in i pauseloopen"
|
||
mov scan_code,-1
|
||
|
||
FEELP: cmp scan_code,1 ;leverkorv
|
||
je kaka_calamares ;Esc pressed!!
|
||
kaka_pasa:
|
||
cmp scan_code,-1
|
||
JE FEELP
|
||
cmp scan_code,1
|
||
je kaka_calamares ;Esc pressed!! Y or N ????
|
||
judas: ;L†t han l”pa!!
|
||
mov calamares_delay,30
|
||
mov scan_code,-1
|
||
; DEBUGMESS 20,6,"ut ur den!!!!!!!"
|
||
|
||
|
||
mov cx,0 ;0=use configurated rate
|
||
MOV AX,4
|
||
MOV BX,3
|
||
INT 66H ;PLAY MODULE
|
||
IF_ERROR 1,OUTOFMEMORY
|
||
IF_ERROR 2,INIT_ERR
|
||
CALL RESTORE_AFTER_PAUSE
|
||
mov interrupts_on,true
|
||
mov pauseflag,false
|
||
NOPAUSE:
|
||
RETN
|
||
|
||
lat_den_sta:
|
||
;=============== DETTA ŽR EN CP-L™SNING F™R ATT F<> TYST ======================
|
||
MOVE DS,DATA
|
||
MOV HOLDSTILL,TRUE
|
||
CALL RESTORE_AFTER_PAUSE
|
||
mov pauseflag,false
|
||
|
||
;MOV INTERRUPTS_ON,TRUE
|
||
;MOV CS:QUITTING,TRUE
|
||
;MOV SI,0 ;?
|
||
;RETN
|
||
|
||
|
||
xor muzik_off,true
|
||
;CP? jz its_off_not
|
||
|
||
;CP? call its_off ;Turn him on . . . not!
|
||
its_off_not:
|
||
mov cs:levin,true ;en riktig urban!!
|
||
mov si,0
|
||
push si
|
||
MOV CX,0
|
||
MOV AL,6
|
||
INT 66H ;set vol
|
||
mov interrupts_on,true
|
||
pop si
|
||
|
||
mov cx,0 ;0=use configurated rate
|
||
MOV AX,4
|
||
MOV BX,3
|
||
INT 66H ;PLAY MODULE
|
||
; IF_ERROR 1,OUTOFMEMORY
|
||
; IF_ERROR 2,INIT_ERR
|
||
JMP QUIT ;CP!?
|
||
|
||
MOV CS:QUITTING,TRUE
|
||
mov si,1
|
||
retn
|
||
;=============================================================================
|
||
kaka_calamares:
|
||
PUSH OFFSET quit_TEXT
|
||
POP AX_PRINT
|
||
MOVE DI_PRINT,sw*4/4
|
||
call print_it_klux
|
||
do_kk_again:
|
||
mov scan_code,-1
|
||
keck_agan:
|
||
cmp scan_code,-1
|
||
je keck_agan ;wait for keypress!
|
||
mov bx,offset alfa_keys
|
||
mov al,scan_code
|
||
xlat
|
||
cmp al,'Y' ;y or anything!
|
||
je quitteras
|
||
jmp judas ;l†t han g†!!
|
||
quitteras:
|
||
jmp lat_den_sta
|
||
; jmp judas
|
||
|
||
|
||
ifscan macro tangent,rutin
|
||
local nedu
|
||
cmp scan_code,tangent
|
||
jne nedu
|
||
mov scan_code,-1
|
||
call rutin
|
||
nedu:
|
||
endm
|
||
ifscan_set macro tangent,var,val
|
||
local nedu
|
||
cmp scan_code,tangent
|
||
jne nedu
|
||
mov scan_code,-1
|
||
mov var,val
|
||
nedu:
|
||
endm
|
||
checkgamequit:
|
||
SETBALLPOS 300,570,0,0,FALSE
|
||
MOV CS:KEYBOARD_ENABLED,TRUE
|
||
addtask to_demo_from_game
|
||
CALL DEMO_MUSIC ;CP!???
|
||
mov scan_code,-1
|
||
call kill_flashor
|
||
mov bx,offset showhighsTS
|
||
call do_matrix
|
||
retn
|
||
|
||
;checkgamequit:
|
||
CMP ADDPLAYERS,TRUE
|
||
JE NO_END_GAME
|
||
PUSH OFFSET quitgam_TEXT
|
||
POP AX_PRINT
|
||
MOVE DI_PRINT,sw*4/4
|
||
call print_it_klux
|
||
do_kks_again:
|
||
mov scan_code,-1
|
||
MOV CS:KEYBOARD_ENABLED,FALSE
|
||
ADDTASK ALLADIN
|
||
RETN
|
||
|
||
NO_END_GAME:
|
||
ADDTASK END_GAMEN ;VID FLERA SPEL:POLYGAMI?
|
||
RETN
|
||
|
||
ALLADIN:
|
||
kecks_agan:
|
||
cmp scan_code,-1
|
||
je RETSTICKA ;kecks_agan ;wait for keypress!
|
||
MOV CS:NEGERN,60 ;S<> MAN HINNER STŽDA TILLS FARBROR STEWI KOMMER
|
||
mov bx,offset alfa_keys
|
||
mov al,scan_code
|
||
xlatb
|
||
cmp al,'Y' ;y or anything!
|
||
je end_gamen
|
||
ko_gamen:
|
||
ADDTASK CP_WAIT_FOR_MATRIX
|
||
mov bx,offset SHOWplayerSTS
|
||
call do_matrix
|
||
SUICIDE
|
||
RETSTICKA:
|
||
retn
|
||
NEGERN DB ?
|
||
CP_WAIT_FOR_MATRIX:
|
||
; DEC CS:NEGERN
|
||
; JZ JOBBA_DIG
|
||
cmp dotrut,offset nodot
|
||
je jobba_dig ;st„dat † klart!!
|
||
RETN
|
||
JOBBA_DIG:
|
||
MOV CS:KEYBOARD_ENABLED,TRUE
|
||
mov scan_code,-1
|
||
SUICIDE
|
||
end_gamen:
|
||
SETBALLPOS 300,570,0,0,FALSE
|
||
addtask to_demolation_derby
|
||
MOV first_time_you_fool,true
|
||
MOV CS:NEGERN,6 ;S<> bollen hinner sl„ckas
|
||
suicide
|
||
to_demolation_derby:
|
||
DEC CS:NEGERN
|
||
jz negressen
|
||
retn
|
||
negressen:
|
||
MOV CS:KEYBOARD_ENABLED,TRUE
|
||
addtask to_demo_from_game
|
||
CALL DEMO_MUSIC ;CP!???
|
||
mov scan_code,-1
|
||
SUICIDE
|
||
|
||
checkstartkeys:
|
||
MOV AL,SCAN_CODE
|
||
CMP AL,3BH
|
||
JB NOTF1F8
|
||
CMP AL,42H
|
||
JA NOTF1F8
|
||
MOV SCAN_CODE,-1
|
||
CMP ADDPLAYERS,FALSE
|
||
JE STARTDONE
|
||
MOV ADDPLAYERS,FALSE
|
||
MOV F1F8_CODE,AL ;=0: NOT PRESSED!
|
||
MOV OLD_F1F8_CODE,AL
|
||
MOV PLAYERS_CP,FALSE
|
||
|
||
NOTF1F8:
|
||
CMP AL,1CH
|
||
JNE NOTENTER
|
||
MOV SCAN_CODE,-1
|
||
CMP PLAYERS,8
|
||
JNB STARTDONE
|
||
CMP ADDPLAYERS,FALSE
|
||
JE STARTDONE
|
||
CMP PLAYERS_CP,FALSE
|
||
JE PLAYERS_NOT_CP
|
||
MOV PLAYERS,0
|
||
MOV PLAYERS_CP,FALSE
|
||
PLAYERS_NOT_CP:
|
||
INC PLAYERS
|
||
MOV AL,PLAYERS
|
||
ADD AL,3BH-1 ;3BH=CODE FOR F1
|
||
MOV ADDPLAYERS,FALSE
|
||
MOV F1F8_CODE,AL
|
||
MOV OLD_F1F8_CODE,AL
|
||
JMP STARTDONE
|
||
NOTENTER:
|
||
|
||
STARTDONE:
|
||
RETN
|
||
|
||
KEYBOARD_ENABLED DB true
|
||
SETTER DB 2
|
||
tiltkey2 db false
|
||
TILTLOGIC:
|
||
CMP TILTDISABLED,TRUE
|
||
JE RETTMIGGA
|
||
pusha
|
||
cmp i_utskjut,true ;Ej skjutit ut den
|
||
je tiltdone
|
||
CMP TILTFLAG,TRUE ;redan 'tilt tilt tilt'
|
||
JE tiltDONE
|
||
CMP BALL_DOWN,TRUE ;Redan d”tt
|
||
JE TILTDONE
|
||
CMP cs:TILTKEY2,TRUE
|
||
JE TILTDONE ;REDAN BANKAT!!
|
||
ADD TILTCOUNTER,60
|
||
|
||
; mov bx,tiltcounter
|
||
; debugval 0,12,bx,'tiltcounter='
|
||
|
||
mov cs:tiltkey2,true
|
||
|
||
CMP TILTCOUNTER,120 ;Tv<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ŽNG AV!
|
||
mov al,emptyjingle
|
||
mov byte ptr s_spring,al
|
||
mov byte ptr s_main,al
|
||
cmp lastjingle,emptyjingle
|
||
je mdone
|
||
addtask turnoffmusic
|
||
notM:
|
||
mdone: retn
|
||
|
||
turnoffmusic:
|
||
mov current_priority,0
|
||
playjingle s_empty
|
||
suicide
|
||
|
||
checkcheat:
|
||
mov bx,offset alfa_keys
|
||
mov al,scan_code
|
||
cmp al,-1
|
||
je novalidkey
|
||
nil ah
|
||
xlat
|
||
cmp al,0
|
||
je novalidkey
|
||
mov densomsparhanhar,al
|
||
move es,data
|
||
mov scan_code,-1
|
||
mov bx,cheatpekare
|
||
mov [bx+offset cheatinput],al
|
||
inc cheatpekare
|
||
cmp cheatpekare,12 ;av s„kerhetssk„l, ska aldrig h„nda!!
|
||
jbe eatit
|
||
mov cheatpekare,0
|
||
mov cx,12
|
||
mov di,offset cheatinput
|
||
mov al,' '
|
||
rep stosb
|
||
; debugmess 0,2,'overflow'
|
||
retn
|
||
eatit:
|
||
;check it
|
||
coulditbe:
|
||
mov si,offset cheats
|
||
mov dont_know_yet,false
|
||
|
||
checkit:
|
||
mov di,offset cheatinput
|
||
lodsw
|
||
cmp ax,255
|
||
je endofcheats ;inga cheats st„mde!!
|
||
mov bx,ax ;f”r att kunna kalla p† bx om det st„mde!!
|
||
mov dx,0
|
||
nexttest:
|
||
lodsb
|
||
cmp al,'$'
|
||
je found
|
||
|
||
cmp dx,cheatpekare
|
||
jae nownaaaating
|
||
inc dx
|
||
cmp al,[di]
|
||
jne notfound
|
||
inc di
|
||
jmp nexttest
|
||
nownaaaating:
|
||
; debugmess 0,1,'no naating'
|
||
; debugmess 0,2,'no naating'
|
||
mov dont_know_yet,true
|
||
notfound:
|
||
lodsb
|
||
cmp al,'$'
|
||
je checkit
|
||
jmp notfound
|
||
endofcheats:
|
||
cmp dont_know_yet,true
|
||
je norezza_ofit
|
||
mov cheatpekare,1
|
||
mov cx,11
|
||
mov di,offset cheatinput
|
||
mov al,densomsparhanhar
|
||
stosb
|
||
mov al,' '
|
||
rep stosb
|
||
norezza_ofit:
|
||
retn
|
||
novalidkey:
|
||
retn
|
||
|
||
found:
|
||
mov cheatpekare,0
|
||
call bx
|
||
retn
|
||
|
||
MAIN:
|
||
if debug
|
||
MOV AL,9
|
||
INT 66H
|
||
mov BL,AL
|
||
NIL BH
|
||
debugval 40,19,bx,"CURRENT POSITION: "
|
||
mov BL,LASTJINGLE
|
||
NIL BH
|
||
debugval 0,19,bx,"LASTJINGLE: "
|
||
cmp dotrut,offset nodot
|
||
je ledignuju
|
||
debugmess 0,2,'DOT BUSY'
|
||
jmp ulurkur
|
||
ledignuju:
|
||
debugmess 0,2,'DOT FREE'
|
||
ulurkur:
|
||
debugbcd 50,0,siffrorna,"siffrorna="
|
||
endif
|
||
|
||
|
||
cmp cs:keyboard_enabled,false
|
||
je no_command_keys ;D† tangentbordet „r upptaget . .
|
||
|
||
;SKALL ALLTID FUNKA:
|
||
IFSCAN 67,F9
|
||
IFSCAN 68,F10
|
||
CMP FFLAG,11
|
||
JNE NF11
|
||
CALL F11
|
||
NF11:
|
||
CMP FFLAG,12
|
||
JNE NF12
|
||
CALL F12
|
||
NF12:
|
||
|
||
;******** if demomode ******
|
||
cmp demomode,true
|
||
jne no_demomode
|
||
;Tangenter: f-keys + quit + cheats (om n†n orkar!) JOHAN <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 „r upptaget . .
|
||
call checkstartkeys
|
||
endif
|
||
no_chute:
|
||
;******** if ingame ********
|
||
;Tangenter: pause
|
||
IFSCAN 57,TILTLOGIC
|
||
ifscan 50,music_toggle
|
||
ifscan_set 25,pauseflag,true
|
||
call checkpause
|
||
no_command_keys:
|
||
ifscan_set 1,SCAN_CODE,-1
|
||
|
||
inc slump_countern
|
||
cmp holdstill,false
|
||
je noskruv
|
||
mova rotation,slump_countern
|
||
and rotation,1023
|
||
test rotation,1
|
||
jz noskruv
|
||
neg rotation
|
||
noskruv:
|
||
IF DEBUG
|
||
debugval 0,6,sc_y,"Ypos="
|
||
; DEBUGVAL 0,8,FLIPLINFO.LASTGFXFRAME,"LASTGFXFRAME"
|
||
MOV BL,FLIPLINFO.LASTFRAME
|
||
NIL BH
|
||
; DEBUGVAL 0,9,BX,"LASTFRAME"
|
||
; DEBUGVAL 0,10,FLIPLINFO.FLIPFRAME,"FLIPFRAME"
|
||
mov bl,jingle_ready_anim
|
||
nil bh
|
||
; debugval 40,2,bx,"jing_red_anim="
|
||
mov bl,jingle_ready_logic
|
||
nil bh
|
||
; debugval 40,3,bx,"JING_RED_LOGIC"
|
||
debugval 0,3,gravx,"X gravitation="
|
||
debugval 0,4,gravy,"Y gravitation="
|
||
debugval 0,5,sc_x,"Xpos="
|
||
cmp ballhigh,true
|
||
je notl
|
||
debugmess 0,7,"Lower level"
|
||
notl:
|
||
cmp ballhigh,true
|
||
jne noth
|
||
debugmess 0,7,"Upper level"
|
||
noth:
|
||
mov cx,word ptr hitvalue
|
||
debugval 0,8,cx,"Material="
|
||
debugval 0,9,rotation,"rotation="
|
||
MOV CL,CURRENT_PRIORITY
|
||
MOV CH,0
|
||
; debugval 0,13,cx,"CURRENT PRIORITY: "
|
||
; debugbcd 30,9,JACKVALUE,"JACKPOT="
|
||
; debugbcd 0,9,player_area.p_siffrorna,"player_area Po„ng="
|
||
; debugbcd 0,10,player_area.p_bonussiffrorna,"player_area Bonus="
|
||
debugVAL 0,11,NO_OF_ACTIVE_TASKS,"No of active tasks="
|
||
;*******
|
||
mov ax,sc_y
|
||
MOV DX,0
|
||
mov bX,576/25+1
|
||
div bX
|
||
mov bp,ax
|
||
mov ax,sc_x
|
||
MOV DX,0
|
||
mov bX,320/40
|
||
div bX
|
||
mov si,ax
|
||
add si,40
|
||
;*******
|
||
push si bp
|
||
mov si,oldx
|
||
mov bp,oldy
|
||
debugmess si,bp," "
|
||
pop bp si
|
||
mov oldx,si
|
||
mov oldy,bp
|
||
debugmess si,bp,"O"
|
||
ENDIF
|
||
|
||
CMP CS:QUITTING,TRUE
|
||
JE QUIT
|
||
; mov time_left,true
|
||
SET_ES 0
|
||
MOV AX,8
|
||
PUSHF
|
||
CALL DWORD PTR ES:[66H*4] ;CREATE MUSIC
|
||
JMP MAIN
|
||
QUITTING DB FALSE
|
||
|
||
F9: MOV SLIME_FACTOR,9
|
||
RETN
|
||
|
||
F10: MOV SLIME_FACTOR,SLIME_FACTOR_DEFAULT
|
||
RETN
|
||
|
||
F11: MOV FFLAG,0
|
||
MOV SLIME_FACTOR,20
|
||
RETN
|
||
|
||
F12: MOV FFLAG,0
|
||
MOV SLIME_FACTOR,40
|
||
RETN
|
||
|
||
JUST_ONE_TIME_RESET:
|
||
mov current_prIORITY,0
|
||
MOV LASTJINGLE,0
|
||
MOV LASTPRIORITY,0
|
||
MOV PRINTTASK,OFFSET DUMRET
|
||
mov rullstart,0
|
||
mov rulltext,0
|
||
mov rull_pos,0
|
||
mov upp_add,0
|
||
mov tabort_diovre,0
|
||
mov tabort_diovre_fnt,0
|
||
mov rull_pos,0
|
||
MOV ALLOWFLIP,FALSE
|
||
if demover
|
||
MOV F1F8_CODE,3bh ;CP! automatic 1 player in demo version
|
||
else
|
||
MOV F1F8_CODE,0 ;CP! not automatic 1 player in game version
|
||
MOV OLD_F1F8_CODE,0
|
||
endif
|
||
MOV HOJD_ADD,0
|
||
MOV NODOTCOUNT,NOT_PLAYING-2
|
||
MOV FJANTTEXT,FALSE
|
||
MOV CENT,FALSE
|
||
|
||
CALL RESETFLASHLIST
|
||
CALL RESET_TASK_LIST
|
||
CALL RESET_WAITLIST
|
||
cmp hi_res,true
|
||
calle hires_changes
|
||
RETN
|
||
hires_changes:
|
||
mov sync_per_sec,71 ;?
|
||
retn
|
||
RESET_WAITLIST:
|
||
MOVE ES,DS
|
||
NIL AX
|
||
MOV DI,OFFSET WAITLIST
|
||
MOV CX,MAX_NO_OF_WAIT_SYNCS
|
||
REP STOSW ;CP!
|
||
RETN
|
||
|
||
WHEN_NEW_BALL_RESET:
|
||
MOV LASTCHECK,0
|
||
MOV SPRING_VALID,TRUE
|
||
MOV SHIFTPRESSED,FALSE
|
||
MOV KEYTASK,OFFSET DUMRET
|
||
MOV JINGLE_READY_ANIM,TRUE
|
||
MOV JINGLE_READY_LOGIC,TRUE
|
||
MOV INH_EFF,FALSE
|
||
MOV LOOSING,FALSE
|
||
MOV SPECIALMODE,FALSE
|
||
MOV INHIBIT_COUNT_DOWN,FALSE ;(PENETRATION OF SPECIAL MODE)
|
||
MOV DOT_READY,TRUE
|
||
CALL RESETFLASHLIST
|
||
CALL RESET_TASK_LIST
|
||
CALL RESET_WAITLIST
|
||
|
||
CMP PARTYFLASH,TRUE
|
||
JE NO_UPDAT_PLEASE
|
||
MOV MATRIX_IS_FLASHING,FALSE
|
||
call kill_flashor
|
||
;F”r att inte senaste spelarens score skall synas!!
|
||
CMP VISAKEYS,TRUE
|
||
JNE NONEWPL
|
||
MOV VISAKEYS,FALSE
|
||
; updat_score
|
||
; mov bx,offset newplayerTS
|
||
; call do_matrix
|
||
JMP REDIGRET
|
||
NONEWPL:
|
||
updat_score
|
||
mov bx,offset SHOWplayerSTS
|
||
call do_matrix
|
||
REDIGRET:
|
||
retn
|
||
NO_UPDAT_PLEASE:
|
||
RETN
|
||
|
||
RESET_TASK_LIST PROC NEAR
|
||
MOV AX,OFFSET DUMRET
|
||
MOV CX,NOOFTASKS
|
||
MOV BX,OFFSET TASKLIST
|
||
RESETNXTTASK:
|
||
MOV [BX],AX
|
||
ADD BX,2
|
||
LOOP RESETNXTTASK
|
||
RETN
|
||
RESET_TASK_LIST ENDP
|
||
|
||
WHEN_NEW_GAME_RESET:
|
||
MOV CS:KEYBOARD_ENABLED,TRUE
|
||
MOV AFTER_CHEAT,FALSE
|
||
MOV BALLS[11],1
|
||
MOV AL,BALLS[11]
|
||
ADD AL,'7' ;SEPEKOMPENSERING
|
||
MOV BALLSTEXT[5],AL
|
||
MOV PLAYER,1
|
||
MOV AL,PLAYER
|
||
ADD AL,'7' ;SEPEKOMPENSERING
|
||
if demover
|
||
else
|
||
MOV PLAYERSTEXT[7],AL
|
||
endif
|
||
;cpskydd MOV MAKE_BAD,true ;gnu urban
|
||
;************** CHECKSUMMA 1 AVKŽNNING ***************
|
||
MOV SI,OFFSET CHECK1_START
|
||
MOV CX,OFFSET CHECK1_END
|
||
SUB CX,SI
|
||
XOR AH,AH
|
||
MOVE DS,CODE
|
||
SVEN_BERTIL_TAUBE:
|
||
LODSB
|
||
ADD AH,AL
|
||
LOOP SVEN_BERTIL_TAUBE
|
||
MOVE DS,DATA
|
||
SUB AH,2
|
||
COMMENT\ ;* #CHK# kommentera bort...
|
||
PUSHA
|
||
MOV AL,AH
|
||
NIL AH
|
||
DCLS
|
||
DPRINTVAL AX," AX="
|
||
POPA
|
||
\
|
||
|
||
if (bana EQ 1)
|
||
CMP AH,197+7
|
||
endif
|
||
if (bana EQ 2)
|
||
CMP AH,165+7
|
||
endif
|
||
if (bana EQ 3)
|
||
CMP AH,37+7
|
||
endif
|
||
if (bana EQ 4)
|
||
CMP AH,83+7
|
||
endif
|
||
JnE WASnt_OKKK
|
||
MOV MAKE_BAD,false ;gnu urban
|
||
WASnt_OKKK:
|
||
MOV ADDPLAYERS,TRUE
|
||
MOV DOT_READY,TRUE
|
||
mov already_beaten,false
|
||
MOV VISAKEYS,TRUE
|
||
RETN
|
||
|
||
INIT_ERR:
|
||
SET_DS DATA
|
||
CALL UNINST_KEY
|
||
MOV AX,0
|
||
INT 66H
|
||
MOV AX,3
|
||
INT 10H
|
||
PRINTMESS "Can't init sound device!"
|
||
MOV AX,4C02H
|
||
INT 21H
|
||
|
||
errorloadingmod:
|
||
SET_DS DATA
|
||
CALL UNINST_KEY
|
||
MOV AX,0
|
||
INT 66H
|
||
MOV AX,3
|
||
INT 10H
|
||
PRINTMESS "Error loading module!"
|
||
MOV AX,4C04H
|
||
INT 21H
|
||
cantfindmod:
|
||
SET_DS DATA
|
||
CALL UNINST_KEY
|
||
if mongi_resiplay
|
||
else
|
||
MOV AX,0
|
||
INT 66H
|
||
endif
|
||
MOV AX,3
|
||
INT 10H
|
||
PRINTMESS "Can't find "
|
||
mova ds,data
|
||
mov dx,offset modul
|
||
mov ax,900h
|
||
int 21h
|
||
|
||
if mongi_resiplay
|
||
MOV AX,0
|
||
INT 66H
|
||
else
|
||
endif
|
||
|
||
MOV AX,4C04H
|
||
INT 21H
|
||
OUTOFMEMORY:
|
||
SET_DS DATA
|
||
CALL UNINST_KEY
|
||
MOV AX,0
|
||
INT 66H
|
||
MOV AX,3
|
||
INT 10H
|
||
PRINTMESS "Out of memory! The selected sounddriver requires more memory!",13,10,"Please refer to the manual!",13,10,13,10
|
||
MOV AX,4C01H
|
||
INT 21H
|
||
levin db false
|
||
ERRQUIT:
|
||
QUIT:
|
||
IF STAND_ALONE
|
||
ELSE
|
||
mov interrupts_on,false
|
||
mov cs:fading,true
|
||
call readpal
|
||
mov si,256
|
||
gosp: CMP SYNC_COUNTER,0
|
||
JZ GOSP
|
||
MOV SYNC_COUNTER,0
|
||
DEC SI
|
||
call faderut
|
||
push si
|
||
cmp cs:levin,true
|
||
je goga_dada
|
||
mova es,0
|
||
mov ax,8
|
||
pushf
|
||
call dword ptr es:[66h*4]
|
||
goga_dada:
|
||
pop si
|
||
or si,si
|
||
jg gosp
|
||
|
||
ENDIF
|
||
MOV AX,0
|
||
INT 66H ;DISINST SOUND
|
||
MOV AX,0
|
||
INT 33H ;RESET MOUSEDRIVER/CHECK IF MOUSE INSTALLED
|
||
|
||
CALL UNINST_KEY
|
||
IF DEMOVER
|
||
ELSE
|
||
CALL SAVE_HIGHS
|
||
ENDIF
|
||
IF STAND_ALONE
|
||
MOV AX,3
|
||
INT 10H
|
||
ENDIF
|
||
IF DEBUG
|
||
debugmess 0,1,"Thanx for playing!"
|
||
ENDIF
|
||
MOV AX,4C00H
|
||
INT 21H
|
||
|
||
|
||
jcall dw 0
|
||
JINGLE_HANDLER PROC FAR
|
||
IF DEBUG
|
||
inc cs:jcall
|
||
debugval 0,12,cs:jcall,"jinglecall no "
|
||
ENDIF
|
||
SET_DS DATA
|
||
cli
|
||
DEC JINGLEJUMPCNT
|
||
IF DEBUG
|
||
pushf
|
||
mov BL,LASTJINGLE
|
||
NIL BH
|
||
debugval 0,19,bx,"LASTJINGLE: "
|
||
mov bL,jinglejumpcnt
|
||
NIL BH
|
||
debugval 0,20,bx,"Jinglejumpcnt: "
|
||
; mov bL,LASTLOOPVAL
|
||
; NIL BH
|
||
; debugval 0,21,bx,"LASTLOOPVAL: "
|
||
popf
|
||
ENDIF
|
||
JZ JINGLEREADY
|
||
JL JINGLELOOP
|
||
jmp check_m_off
|
||
retf
|
||
JINGLELOOP:
|
||
MOV JINGLEJUMPCNT,0
|
||
jmp check_m_off
|
||
RETF
|
||
JINGLEREADY:
|
||
|
||
MOV AL,LASTPRIORITY
|
||
MOV CURRENT_PRIORITY,AL
|
||
; MOV AL,LASTLOOPVAL
|
||
MOV JINGLEJUMPCNT,0 ;AL
|
||
MOV AL,LASTJINGLE
|
||
muzikof:
|
||
MOV JINGLE_READY_ANIM,TRUE
|
||
MOV JINGLE_READY_LOGIC,TRUE
|
||
check_m_off:
|
||
sti
|
||
cmp muzik_off,false
|
||
je goretf
|
||
cmp al,lastmainpos
|
||
ja goretf
|
||
mov al,emptyjingle
|
||
goretf: RETF
|
||
ENDP
|
||
|
||
MASKS2GFX PROC NEAR
|
||
PUSH DS
|
||
mov bp,GFXMASK21_OFFSET
|
||
MOVA DS,MASK2_1
|
||
MOVA ES,0A000H
|
||
MOV DX,3C4H
|
||
MOV AL,2
|
||
MOV CX,4
|
||
MOV AH,10001B
|
||
BITPL: PUSH CX
|
||
OUT DX,AX
|
||
ROL AH,1
|
||
MOV DI,bp
|
||
MOV SI,CX
|
||
DEC SI
|
||
XOR SI,11B
|
||
MOV CX,510*40/4
|
||
FLYT: MOVSB
|
||
ADD SI,3
|
||
LOOP FLYT
|
||
POP CX
|
||
LOOP BITPL
|
||
MOV BP,DI
|
||
mova ds,data
|
||
mov GFXMASK23_OFFSET,di
|
||
PUSHA
|
||
PUSH ES
|
||
CALL INIT_FLIPPERS ;CP!?
|
||
POP ES
|
||
POPA
|
||
|
||
|
||
MOVA DS,MASK2_3
|
||
MOV DX,3C4H
|
||
MOV AL,2
|
||
MOV CX,4
|
||
MOV AH,10001B
|
||
BITPL2: PUSH CX
|
||
OUT DX,AX
|
||
ROL AH,1
|
||
MOV DI,BP ;FIRSTPOS
|
||
MOV SI,CX
|
||
DEC SI
|
||
XOR SI,11B
|
||
MOV CX,510*40/4
|
||
FLYT2: MOVSB
|
||
ADD SI,3
|
||
LOOP FLYT2
|
||
POP CX
|
||
LOOP BITPL2
|
||
MOV BP,DI
|
||
mova ds,data
|
||
mov GFXMASK13_OFFSET,di
|
||
MOVA DS,MASK1_3
|
||
MOV DX,3C4H
|
||
MOV AL,2
|
||
MOV CX,4
|
||
MOV AH,10001B
|
||
BITPL3: PUSH CX
|
||
OUT DX,AX
|
||
ROL AH,1
|
||
MOV DI,BP ;FIRSTPOS
|
||
MOV SI,CX
|
||
DEC SI
|
||
XOR SI,11B
|
||
ADD SI,230*40 ;RESTEN FINNS I MARGINALEN
|
||
MOV CX,(576-230)*40/4
|
||
FLYT3: MOVSB
|
||
ADD SI,3
|
||
LOOP FLYT3
|
||
POP CX
|
||
LOOP BITPL3
|
||
|
||
MOV DX,3C4H
|
||
MOV AL,2
|
||
MOV CX,4
|
||
MOV AH,10001B
|
||
BITPL4: PUSH CX
|
||
OUT DX,AX
|
||
ROL AH,1
|
||
MOV DI,SPLH*BPL+80 ;FIRSTPOS
|
||
MOV SI,CX
|
||
DEC SI
|
||
XOR SI,11B
|
||
MOV CX,575
|
||
FLYT4:
|
||
REPT 4
|
||
MOVSB
|
||
ADD SI,3
|
||
ENDM
|
||
ADD DI,80
|
||
LOOP FLYT4
|
||
POP CX
|
||
LOOP BITPL4
|
||
POP DS
|
||
RETN
|
||
ENDP
|
||
INIT_FLIPPERS PROC NEAR
|
||
mov si,offset adjusttable
|
||
mov cx,adjust*24
|
||
mov bx,adjust
|
||
makeadjust:
|
||
mov ax,adjust*24
|
||
sub ax,cx
|
||
xor dx,dx
|
||
div bx
|
||
mov [si],ax
|
||
add si,2
|
||
loop makeadjust
|
||
|
||
MOVE ES,0A000H
|
||
MOV DX,3C4H
|
||
MOV AX,0F02H
|
||
OUT DX,AX
|
||
MOV DI,0
|
||
MOV CX,SPLH*BPL
|
||
MOV AL,0
|
||
REP STOSB ;RENSA GRAFIKMINNET VID ARB. OMR<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 „r lagrad
|
||
mov ax,[si+bx+2]
|
||
stosw
|
||
|
||
jmp short orvar
|
||
|
||
DIDFIND:
|
||
pop si
|
||
orvar: pop cx
|
||
add bx,4
|
||
loop sorti
|
||
|
||
mov ax,di
|
||
sub ax,offset temptab
|
||
shr ax,2
|
||
shl bp,1
|
||
mov ds:[si+bp-9*2],ax ;lagra antal delta som hittats hitils
|
||
shr bp,1
|
||
|
||
pop si cx
|
||
loop sortera
|
||
deunika:
|
||
push si ;flytta in de som var helt unika sist
|
||
mov cx,[si-9*2]
|
||
desista:lodsw
|
||
cmp ax,-1
|
||
je nostor
|
||
stosw
|
||
movsw
|
||
sub si,2
|
||
nostor: add si,2
|
||
loop desista
|
||
pop si
|
||
|
||
mov cx,[si-9*2]
|
||
mov di,si
|
||
mov si,offset temptab
|
||
shl cx,1
|
||
rep movsw ;l„gg in den sorterade listan i orginalet
|
||
|
||
POP bx SI CX
|
||
ADD SI,CS:MAXDIFFAR
|
||
LOOP SORTDATA
|
||
MOVA DS,DATA
|
||
RETN
|
||
FINDWORD:
|
||
pusha
|
||
mov cx,CS:MAXDIFFAR ;Maxdifs-5
|
||
SHR CX,2
|
||
SUB CX,5
|
||
leta: cmp ds:[si],ax
|
||
je foudit
|
||
add si,4
|
||
loop leta
|
||
popa
|
||
stc
|
||
RETN
|
||
foudit: popa
|
||
clc
|
||
retn
|
||
ASSUME DS:DATA ;**********************************
|
||
ENDP
|
||
ENDIF
|
||
INIT_KEY PROC NEAR
|
||
SET_ES 0
|
||
CLI
|
||
MOV AX,OFFSET KEYINT
|
||
XCHG AX,ES:[9*4]
|
||
MOV CS:OLD9,AX
|
||
MOV AX,CS
|
||
XCHG AX,ES:[9*4+2]
|
||
MOV CS:OLD9+2,AX
|
||
MOV AX,OFFSET div0
|
||
XCHG AX,ES:[0*4]
|
||
MOV CS:OLD0,AX
|
||
MOV AX,CS
|
||
XCHG AX,ES:[0*4+2]
|
||
MOV CS:OLD0+2,AX
|
||
STI
|
||
RETN
|
||
OLD9 DW 0,0
|
||
old0 dw 0,0
|
||
ENDP
|
||
UNINST_KEY PROC NEAR
|
||
SET_ES 0
|
||
CLI
|
||
MOVE ES:[9*4],CS:OLD9
|
||
MOVE ES:[9*4+2],CS:OLD9+2
|
||
MOVE ES:[0*4],CS:OLD0
|
||
MOVE ES:[0*4+2],CS:OLD0+2
|
||
STI
|
||
RETN
|
||
ENDP
|
||
|
||
KEYINT PROC NEAR
|
||
PUSHA
|
||
PUSH DS
|
||
MOV AL,20H
|
||
OUT 20H,AL
|
||
MOVA DS,DATA
|
||
IN AL,60H
|
||
PUSH AX
|
||
IN AL,61H
|
||
OR AL,80H
|
||
OUT 61H,AL
|
||
AND AL,7FH
|
||
OUT 61H,AL
|
||
POP AX
|
||
STI
|
||
|
||
;DPRINTVAL AX," AX="
|
||
;DPRINT " "
|
||
|
||
test al,80h
|
||
jnz no_alfa_key
|
||
mov scan_code,al
|
||
MOV CS:SETTER,TA_TID
|
||
IF SAVEPAL
|
||
CMP AL,3
|
||
JNE NO_UBBE_KUKEN
|
||
MOVE ES:[9*4],CS:OLD9
|
||
MOVE ES:[9*4+2],CS:OLD9+2
|
||
NO_UBBE_KUKEN:
|
||
ENDIF
|
||
no_alfa_key:
|
||
|
||
CMP CS:E0,TRUE
|
||
JE DOE0
|
||
CMP AL,0E0H
|
||
JNE NOTE0
|
||
MOV CS:E0,TRUE
|
||
JMP KEYDONE
|
||
NOTE0:
|
||
CMP AL,57H ;F11
|
||
JNE NOTF11
|
||
MOV FFLAG,11
|
||
JMP KEYDONE
|
||
NOTF11:
|
||
CMP AL,58H ;F12
|
||
JNE NOTF12
|
||
MOV FFLAG,12
|
||
JMP KEYDONE
|
||
NOTF12:
|
||
CMP AL,2AH
|
||
JE DSSK
|
||
CMP AL,38H
|
||
JE DSSK
|
||
CMP AL,1DH
|
||
JE DSSK
|
||
JMP SHORT NOTLSDN
|
||
DSSK: TEST SHIFTKEYS,10B
|
||
JNZ NOTLSDN
|
||
OR SHIFTKEYS,10B
|
||
MOV SHIFTPRESSED,TRUE ;LEFT SHIFT KEY PRESSED
|
||
cmp allowflip,false
|
||
je keydone
|
||
soundeffect sflippupp,0
|
||
JMP KEYDONE
|
||
NOTLSDN:
|
||
CMP AL,36H
|
||
JE DSSKR
|
||
JMP SHORT NOTRSDN
|
||
DSSKR: TEST shiftkeys,1
|
||
jnz notrsdn
|
||
OR SHIFTKEYS,1
|
||
MOV SHIFTPRESSED,TRUE ;RIGHT SHIFT KEY PRESSED
|
||
cmp allowflip,false
|
||
je keydone
|
||
soundeffect sflippupp,0
|
||
JMP KEYDONE
|
||
NOTRSDN:
|
||
CMP AL,36H+80H
|
||
JE DSSKR2
|
||
JMP SHORT NOTRSUP
|
||
DSSKR2: AND SHIFTKEYS,0FEH
|
||
JMP KEYDONE
|
||
NOTRSUP:
|
||
|
||
CMP AL,2AH+80H
|
||
JE DSSK2
|
||
CMP AL,38H+80H
|
||
JE DSSK2
|
||
CMP AL,1DH+80H
|
||
JE DSSK2
|
||
JMP SHORT NOTLSup
|
||
DSSK2: AND SHIFTKEYS,11111101B
|
||
JMP KEYDONE
|
||
NOTLSUP:
|
||
|
||
CMP AL,57
|
||
JNE NOTSPC
|
||
CMP TILTKEY,TRUE
|
||
JE KEYDONE
|
||
MOV TILTKEY,TRUE
|
||
JMP KEYDONE
|
||
NOTSPC:
|
||
CMP AL,57+80H
|
||
JNE NOTSPCU
|
||
MOV TILTKEY,FALSE
|
||
MOV cs:TILTKEY2,FALSE
|
||
|
||
JMP KEYDONE
|
||
NOTSPCU:
|
||
COMMENT\
|
||
CMP AL,44
|
||
JNE NOTZ
|
||
MOV CURRENT_PRIORITY,101
|
||
JMP KEYDONE
|
||
NOTZ:
|
||
\
|
||
if arrowS
|
||
CMP AL,2
|
||
JNE NOT2
|
||
CLI
|
||
MOV INTERRUPTS_ON,FALSE
|
||
SET_ES 0A000H
|
||
MOV AX,0DH
|
||
INT 10H
|
||
MOV SI,0
|
||
SET_DS MASK2_2
|
||
MOV CX,200*40
|
||
MOV DI,0
|
||
REP MOVSB
|
||
cli
|
||
mov dx,3d4h
|
||
mov ax,0ch
|
||
out dx,ax
|
||
inc al
|
||
out dx,ax
|
||
JMP $
|
||
NOT2:
|
||
CMP AL,72
|
||
JNE NOTPUP
|
||
MOV Y_HAST,-1*PILHAST
|
||
MOV X_HAST,0
|
||
JMP KEYDONE
|
||
NOTPUP:
|
||
CMP AL,75
|
||
JNE NOTPL
|
||
MOV X_HAST,-1*PILHAST
|
||
MOV Y_HAST,0
|
||
JMP KEYDONE
|
||
NOTPL:
|
||
CMP AL,77
|
||
JNE NOTPR
|
||
MOV X_HAST,1*PILHAST
|
||
MOV Y_HAST,0
|
||
JMP KEYDONE
|
||
NOTPR:
|
||
CMP AL,80
|
||
JNE NOTPDN
|
||
MOV Y_HAST,1*PILHAST
|
||
MOV X_HAST,0
|
||
JMP KEYDONE
|
||
NOTPDN:
|
||
endif
|
||
KEYDONE:
|
||
POP DS
|
||
POPA
|
||
IRET
|
||
|
||
E0 DB FALSE
|
||
|
||
DOE0: MOV CS:E0,FALSE
|
||
CMP DEMOMODE,TRUE
|
||
JE DOE0_DEMO
|
||
|
||
CMP AL,49H
|
||
JNE NOT_PGUP
|
||
; AND SHIFTKEYS,11111011B
|
||
JMP KEYDONE
|
||
NOT_PGUP:
|
||
CMP AL,51H
|
||
JNE NOT_PGDN
|
||
; OR SHIFTKEYS,00000100B
|
||
JMP KEYDONE
|
||
NOT_PGDN:
|
||
|
||
CMP AL,50H ;(ARROW DOWN)
|
||
JNE NOTARD
|
||
MOV SPRINGTASK,OFFSET SPRINGSTEEN
|
||
MOV DNPRESSED,TRUE
|
||
JMP KEYDONE
|
||
NOTARD:
|
||
CMP AL,80h+50H ;(ARROW DOWN up)
|
||
JNE NOTARdu
|
||
MOV SPRINGTASK,OFFSET SPRINGUP
|
||
MOV DNPRESSED,FALSE
|
||
JMP KEYDONE
|
||
NOTARdu:
|
||
|
||
CMP AL,38H ;right alt
|
||
JE DSSKR
|
||
CMP AL,1DH ;right ctrl
|
||
JE DSSKR
|
||
CMP AL,38H+80h ;right alt up
|
||
JE DSSKR2
|
||
CMP AL,1DH+80h ;right ctrl up
|
||
JE DSSKR2
|
||
JMP KEYDONE
|
||
|
||
NOTE0_DEMO:
|
||
JMP KEYDONE
|
||
|
||
|
||
DOE0_DEMO:
|
||
CMP AL,49H
|
||
JNE NOT_PGUP2
|
||
AND SHIFTKEYS,11111011B
|
||
JMP KEYDONE
|
||
NOT_PGUP2:
|
||
CMP AL,51H
|
||
JNE NOT_PGDN2
|
||
OR SHIFTKEYS,00000100B
|
||
JMP KEYDONE
|
||
NOT_PGDN2:
|
||
JMP KEYDONE
|
||
|
||
KEYINT ENDP
|
||
|
||
|
||
|
||
MINIX DW ?
|
||
THESCRPOS DW ?
|
||
if create_flip_data
|
||
PUTFLIPPER PROC NEAR ;INPUT: BP=FLIP NO, DI=SCRPOS, AX=MINIX
|
||
MOV CS:THESCRPOS,DI
|
||
MOV CS:MINIX,AX
|
||
SET_ES FLIPSEG
|
||
MOV CX,FLIPHEIGHT ;CX=LINE COUNTER
|
||
MOV BX,0 ;BX=Y COORD
|
||
|
||
SCANFLIPY:
|
||
PUSH CX
|
||
MOV CX,FLIPWIDTH ;CX=ROW COUNTER
|
||
MOV AX,0 ;AX=X COORD
|
||
|
||
SCANFLIPX:
|
||
PUSH AX BX CX
|
||
MOV CX,BP
|
||
CALL READFLIPPIX
|
||
MOV BX,OFFSET BIT2COL
|
||
XLATB
|
||
OR AL,AL
|
||
JZ NOPUT
|
||
MOV DL,AL
|
||
POP CX BX AX
|
||
PUSH AX BX CX
|
||
|
||
MOV DI,CS:THESCRPOS
|
||
ADD AX,CS:MINIX
|
||
|
||
CALL PUTFLIPPIX
|
||
NOPUT: POP CX BX AX
|
||
INC AX
|
||
LOOP SCANFLIPX
|
||
|
||
INC BX
|
||
POP CX
|
||
LOOP SCANFLIPY
|
||
RETN
|
||
PUTFLIPPER ENDP
|
||
endif
|
||
SETSCREENSTART PROC NEAR
|
||
MOV BX,SC_Y
|
||
PUSH BP
|
||
MOV BP,(SH_LO-SPLH)/2-BALLH/2-AWAYFROMMIDDLE
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES3
|
||
MOV BP,(SH_HI-SPLH)/2-BALLH/2-AWAYFROMMIDDLE
|
||
NOTHIRES3:
|
||
SUB BX,BP
|
||
POP BP
|
||
JNL BXOK1
|
||
IF GLAPP_SIZE
|
||
MOV BX,-GLAPP_SIZE
|
||
ELSE
|
||
MOV BX,0
|
||
ENDIF
|
||
JMP SHORT BXOK2
|
||
BXOK1: PUSH AX
|
||
MOV AX,BANH-(SH_LO-SPLH)
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES4
|
||
MOV AX,BANH-(SH_HI-SPLH)
|
||
NOTHIRES4:
|
||
CMP BX,AX
|
||
POP AX
|
||
JB BXOK2
|
||
|
||
MOV BX,BANH-(SH_LO-SPLH)+GLAPP_SIZE
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES5
|
||
MOV BX,BANH-(SH_HI-SPLH)+GLAPP_SIZE
|
||
NOTHIRES5:
|
||
|
||
BXOK2: CMP SCREENFORCE,-1
|
||
JE NOSCREENFORCE
|
||
|
||
MOV BX,SCREENFORCE ;THIS IS THE POWERFUL SCREEN FORCE
|
||
ADD BX,SPLH
|
||
PUSH BX
|
||
IF RES600
|
||
MOV BX,2
|
||
ADD BX,SCREENPOSY
|
||
ENDIF
|
||
SETRASTERPOS bx
|
||
POP BX
|
||
PUSH BX
|
||
SHL BX,4
|
||
MOV RASTERPOS,BX
|
||
POP BX
|
||
SUB BX,SPLH
|
||
MOV START_RASTER,BX
|
||
RETN
|
||
|
||
NOSCREENFORCE:
|
||
cmp screenforce2,-1
|
||
je nosf
|
||
mov bx,screenforce2
|
||
nosf:
|
||
ADD BX,SPLH
|
||
PUSH BX
|
||
mov ax,bx
|
||
mov bx,rasterpos
|
||
sar bx,4
|
||
sub ax,bx
|
||
|
||
IF GLAPP_SIZE
|
||
PUSHF ;df
|
||
POP CX
|
||
CMP SCREENFORCE2,-1 ;INGET GLAPP OM SCREENFORCE!!!!!!!!!!!
|
||
JNE GLAPP_DONE
|
||
PUSH CX
|
||
POPF
|
||
JS MINSU
|
||
SUB AX,GLAPP_SIZE
|
||
JNS GLAPP_DONE
|
||
XOR AX,AX
|
||
JMP SHORT GLAPP_DONE
|
||
MINSU: ADD AX,GLAPP_SIZE
|
||
JS GLAPP_DONE
|
||
XOR AX,AX
|
||
ENDIF
|
||
GLAPP_DONE:
|
||
MOV BX,SLIME_FACTOR
|
||
IMUL BX
|
||
MOV BX,AX
|
||
SAR AX,2
|
||
|
||
add rasterpos,ax
|
||
POP BX
|
||
MOV AX,RASTERPOS
|
||
SAR AX,4
|
||
SUB BX,AX
|
||
JNS GAP_POS
|
||
|
||
PUSH BP
|
||
MOV BP,MAXGAPU_LO
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES10
|
||
MOV BP,MAXGAPU_HI
|
||
NOTHIRES10:
|
||
ADD BX,BP
|
||
POP BP
|
||
JG BX_OKI
|
||
SAL BX,4
|
||
ADD RASTERPOS,BX
|
||
JMP SHORT BX_OKI
|
||
GAP_POS:
|
||
|
||
PUSH BP
|
||
MOV BP,MAXGAPD_LO
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES11
|
||
MOV BP,MAXGAPD_HI
|
||
NOTHIRES11:
|
||
SUB BX,BP
|
||
POP BP
|
||
JL BX_OKI
|
||
SAL BX,4
|
||
ADD RASTERPOS,BX
|
||
BX_OKI:
|
||
|
||
mov bx,rasterpos
|
||
sar bx,4
|
||
ADD BX,SCREENPOSY
|
||
push bx
|
||
IF RES600
|
||
MOV BX,SCREENPOSY
|
||
ADD BX,2
|
||
ENDIF
|
||
; MOV BX,SPLH+BANH
|
||
SETRASTERPOS bx
|
||
pop bx
|
||
sub bx,splh
|
||
MOV START_RASTER,BX
|
||
RETN
|
||
SETSCREENSTART ENDP
|
||
|
||
|
||
|
||
PUTTHEBALL PROC NEAR ;FN: DELETES AND PUTS THE BALL.
|
||
;INPUT: VERYFIRSTPUT, PUTITBETWEEN, PUTF3BETWEEN
|
||
; IF XXBETWEEN=TRUE THE FLIPPER(S) ARE DELTA
|
||
; MOVED BETWEEN THE DELETING AND THE PUTTING
|
||
; OF THE BALL.
|
||
IF MARGIT
|
||
SETMARG 1
|
||
ENDIF
|
||
PUSHA
|
||
SET_ES 0A000H
|
||
CMP VERYFIRSTPUT,TRUE
|
||
JE DNDB
|
||
MOV DI,OLDPOS ;OLDPOS
|
||
MOV CX,OLDSHIFT ;OLDSHIFT
|
||
MOV SI,OFFSET UNDANSPR ;SAVEDDATA OFFSET
|
||
SET_DS HIDDEN1 ;SAVEDDATA SEGMENT
|
||
CALL DELBALL
|
||
SET_DS DATA
|
||
DNDB:
|
||
|
||
CMP PUTITBETWEEN,TRUE
|
||
JNE DNDLF
|
||
CALL DOFLIPPER
|
||
DNDLF:
|
||
CMP PUTF3BETWEEN,TRUE
|
||
JNE DNDLF2
|
||
CALL DOFLIPPER3
|
||
DNDLF2:
|
||
|
||
IF MARGIT
|
||
SETMARG 1
|
||
ENDIF
|
||
MOV VERYFIRSTPUT,FALSE
|
||
MOV DX,SC_X ;X POS
|
||
MOV SI,SC_Y ;Y POS
|
||
CMP HOLDSTILL,TRUE
|
||
JE NOTILTADD
|
||
ADD SI,SCREENPOSY
|
||
NOTILTADD:
|
||
ADD SI,SPLH
|
||
MOV DI,OFFSET UNDANSPR ;SAVEDDATA OFFSET
|
||
MOV BP,OFFSET HID1-SPLH*SW/8-576*2
|
||
SET_ES HIDDEN1 ;SAVEDDATA SEGMENT
|
||
CMP BALLHIGH,FALSE
|
||
JE BLHA
|
||
ADD BP,42*576
|
||
BLHA:
|
||
CALL PUTBALL
|
||
SET_DS DATA
|
||
MOV OLDPOS,SI ;OLDPOS
|
||
MOV OLDSHIFT,DX ;OLDSHIFT
|
||
|
||
POPA
|
||
IF MARGIT
|
||
SETMARG 0
|
||
ENDIF
|
||
RETN
|
||
PUTTHEBALL ENDP
|
||
|
||
|
||
VBLANK_INT:
|
||
MOVE DS,DATA
|
||
INC SYNC_COUNTER
|
||
MOV INT_WAS_HERE,TRUE
|
||
MOV INT_WAS_HERE2,TRUE
|
||
CMP INTERRUPTS_ON,TRUE
|
||
JE VBLANKOK
|
||
RETAF: MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG
|
||
RETF ;RET
|
||
VBLANKOK:
|
||
OR AX,AX
|
||
MOV TIME_LEFT,TRUE
|
||
JZ NO_MUSIC_CRISIS
|
||
MOV TIME_LEFT,FALSE
|
||
NO_MUSIC_CRISIS:
|
||
|
||
cmp calamares_delay,0 ;tryck inte p† pause f”r t„tt inp†!!
|
||
je docaldecc
|
||
dec calamares_delay
|
||
docaldecc:
|
||
ADD SLUMP_COUNTERN,1030
|
||
|
||
CMP DEMOMODE,TRUE
|
||
JE VBLANK_INT_DEMO
|
||
|
||
;********************* SPELETS RUTINER ***********************
|
||
|
||
INC SLOWCNT
|
||
AND SLOWCNT,SLOW
|
||
JNZ RETAF
|
||
|
||
CMP CS:LAST_WAS_VB,TRUE
|
||
JE RETAF
|
||
|
||
MOV AL,INSIDE_BALLHANDLER
|
||
MOV INSIDE_BALLHANDLER,TRUE
|
||
CMP AL,TRUE
|
||
JE RETAF
|
||
CMP AL,TRUE
|
||
JE RETAF
|
||
|
||
SAVEGFXREGS
|
||
MOV PUTF3BETWEEN,FALSE
|
||
MOV FORCELATEF3,FALSE
|
||
|
||
CMP SC_Y,F3TOP-BALLH+2 ;NO I: SC_Y + BALLH < F3TOP
|
||
JB NO_INTEFERRENCE
|
||
CMP SC_Y,F3TOP+F3HEIGHT-2 ;NO I: SC_Y > F3TOP + F3HEIGHT
|
||
JA NO_INTEFERRENCE
|
||
MOV PUTF3BETWEEN,TRUE
|
||
JMP KEEP_COOL
|
||
|
||
NO_INTEFERRENCE:
|
||
MOV AX,F3TOP+F3HEIGHT/2-SH_LO/2
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES6
|
||
MOV AX,F3TOP+F3HEIGHT/2-SH_HI/2
|
||
NOTHIRES6:
|
||
CMP START_RASTER,AX
|
||
JB F3_IS_LOW
|
||
MOV FORCELATEF3,TRUE
|
||
JMP HIGH_F3_DONE
|
||
F3_IS_LOW:
|
||
CALL DOFLIPPER3
|
||
HIGH_F3_DONE:
|
||
KEEP_COOL:
|
||
|
||
MOV AX,START_RASTER
|
||
PUSH BP
|
||
MOV BP,MIDDLE_RASTER_LO
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES8
|
||
MOV BP,MIDDLE_RASTER_HI
|
||
NOTHIRES8:
|
||
ADD AX,BP
|
||
POP BP
|
||
CMP SC_Y,AX
|
||
JB BALL_HIGH
|
||
|
||
BALL_LOW:
|
||
CMP STATUS,UPPER
|
||
JE BALL_LOW_STATUS_HIGH
|
||
|
||
BALL_LOW_STATUS_LOW:
|
||
MOV PUTITBETWEEN,TRUE ;PUT IT BETWEEN
|
||
CALL PUTTHEBALL ;PUT THIS SYNC
|
||
CALL KOLLAKULAN ;CALC NEXT SYNC
|
||
MOV LATEGFX,FALSE
|
||
JMP BALLREADY
|
||
|
||
BALL_LOW_STATUS_HIGH:
|
||
MOV STATUS,LOWER
|
||
CALL DOFLIPPER ;DO FLIPPER
|
||
CALL KOLLAKULAN ;CALC NEXT SYNC
|
||
MOV LATEGFX,FALSE
|
||
JMP BALLREADY
|
||
|
||
BALL_HIGH:
|
||
CMP STATUS,UPPER
|
||
JE BALL_HIGH_STATUS_HIGH
|
||
|
||
BALL_HIGH_STATUS_LOW:
|
||
MOV STATUS,UPPER
|
||
MOV LATEGFX,TRUE ;PUT NEXT SYNC LAST
|
||
MOV PUTITBETWEEN,TRUE ;PUT IT BETWEEN
|
||
CALL PUTTHEBALL ;PUT THIS SYNC
|
||
CALL KOLLAKULAN ;CALC NEXT SYNC
|
||
JMP BALLREADY
|
||
|
||
BALL_HIGH_STATUS_HIGH:
|
||
CALL DOFLIPPER ;DO FLIPPER
|
||
CALL KOLLAKULAN ;CALC NEXT SYNC
|
||
MOV LATEGFX,TRUE ;PUT NEXT SYNC LAST
|
||
|
||
MOV AX,START_RASTER
|
||
PUSH BP
|
||
MOV BP,MIDDLE_RASTER_LO+5 ;5=CPMARGINAL
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES9
|
||
MOV BP,MIDDLE_RASTER_HI+5 ;5=CPMARGINAL
|
||
NOTHIRES9:
|
||
ADD AX,BP
|
||
POP BP
|
||
CMP AX,F3TOP
|
||
JB F3ISLOW
|
||
JMP BALLREADY
|
||
|
||
F3ISLOW:
|
||
CALL DOFLIPPER3
|
||
|
||
BALLREADY:
|
||
CALL DO_PHYSICS ;LEVELS,RAMPER,MM
|
||
MOV INSIDE_BALLHANDLER,FALSE
|
||
CMP INSIDE_RESTOFVBLANK,FALSE
|
||
JE DO_THE_REST
|
||
RESTOREGFXREGS
|
||
MOV CS:LAST_WAS_VB,TRUE
|
||
MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG
|
||
RETF
|
||
|
||
DO_THE_REST:
|
||
MOV CS:LAST_WAS_VB,TRUE
|
||
MOV INSIDE_RESTOFVBLANK,TRUE
|
||
CALL UPDATE_COUNTERS
|
||
|
||
CALL DO_ELECTRONICS
|
||
CALL SPRINGTASK
|
||
IF MARGIT
|
||
SETMARG 14
|
||
ENDIF
|
||
|
||
cmp time_left,false
|
||
je skip_matrix ;no time left! Skip it!!
|
||
; mov time_left,false ;ok, time was left last time!
|
||
MOV AL,CS:INSIDE_MATRIX
|
||
MOV CS:INSIDE_MATRIX,TRUE
|
||
CMP AL,TRUE
|
||
JE SKIP_MATRIX
|
||
CALL DO_THE_DOTMATRIX ;updatera d† matrixen!
|
||
MOV CS:INSIDE_MATRIX,FALSE
|
||
skip_matrix:
|
||
CALL DOLIGHTS
|
||
|
||
IF MARGIT
|
||
RESTOREMARG
|
||
ENDIF
|
||
IF MARGIT
|
||
SETMARG 0
|
||
ENDIF
|
||
MOV INSIDE_RESTOFVBLANK,FALSE
|
||
RESTOREGFXREGS
|
||
MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG
|
||
RETF
|
||
|
||
INSIDE_MATRIX DB FALSE
|
||
LAST_WAS_VB DB FALSE
|
||
|
||
;******************************************************************************
|
||
|
||
|
||
DO_THE_DOTMATRIX PROC NEAR ;JOHANS TUNGA RUTINER!
|
||
CALL DO_THE_ANIMATIONS
|
||
MOV AX,AX_PRINT
|
||
MOV DI,DI_PRINT
|
||
CALL PRINTTASK
|
||
MOV PRINTTASK,OFFSET DUMRET
|
||
RETN
|
||
DO_THE_DOTMATRIX ENDP
|
||
|
||
|
||
DO_THE_ANIMATIONS PROC NEAR
|
||
cmp intflag,true ;gabriel vill ABSOLUT penetrera!!
|
||
je aterstallaren
|
||
laddanasta:
|
||
MOV DX,DOTRUT
|
||
MOV SI,SISA
|
||
CALL DX
|
||
MOVE DS,DATA
|
||
MOV SISA,SI
|
||
CMP SI,0
|
||
JNE NOTFREEYET ;JOBBAR P<> EN EFFEKT!
|
||
MOV DOTRUT,OFFSET CS:NODOT
|
||
MOV BX,NEXT_A
|
||
CMP BX,0
|
||
JE ts_slut ;NOMOREANIMS
|
||
CALL DO_SPEC_MATRIX ;ANIMATION SLUT, LADDA NŽSTA?
|
||
jmp nomoreanims
|
||
ts_slut:
|
||
; mov behovs_provad,true
|
||
CALL KILL_FLASHOR ;cp!!??
|
||
;d”da flashor
|
||
|
||
NOMOREANIMS:
|
||
MOV DOT_READY,TRUE
|
||
JMP HOPPA_FORBI
|
||
aterstallaren: ;(dan efter??)
|
||
mov intflag,false
|
||
jmp laddanasta
|
||
NOTFREEYET:
|
||
HOPPA_FORBI:
|
||
RETN
|
||
DO_THE_ANIMATIONS ENDP
|
||
|
||
|
||
|
||
DO_MATRIX:
|
||
call kill_flashor
|
||
MOV DOT_READY,FALSE
|
||
MOV NODOTCOUNT,0
|
||
MOV BEHOVS_PROVAD,TRUE
|
||
DO_SPEC_MATRIX:
|
||
UPDAT_SCORE
|
||
JMP [BX]
|
||
|
||
_ANIMATION:
|
||
STARTANIM [BX+2]
|
||
JMP NORMAL_END
|
||
_SCROLL:
|
||
STARTSCROLL [BX+2]
|
||
JMP NORMAL_END
|
||
_NUMBER:
|
||
MOVE SISA,[BX+2]
|
||
MOV DOTRUT,OFFSET SIFFRORRUT
|
||
JMP NORMAL_END
|
||
|
||
_FLASHON: ;BX NOT USED!
|
||
MOV AX,[BX+2] ;AX=FLASHSPEED
|
||
MOVE SISA,1 ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET WAITRUT
|
||
MOV MATRIX_SPEED,AX
|
||
MOV MATRIX_CNT,AX
|
||
MOV MATRIX_ONOFF,TRUE
|
||
MOV MATRIX_IS_FLASHING,TRUE
|
||
JMP NORMAL_END
|
||
|
||
print8_task:
|
||
|
||
call reset_numberbuf
|
||
mov si,si_siffror
|
||
mov di,di_siffror
|
||
mov hojd_1,8
|
||
mov hojd_add,bredd_1/4-sw*8*2/4
|
||
mov font_adr,offset font8
|
||
call print_number
|
||
retn
|
||
print11_task:
|
||
call reset_numberbuf
|
||
mov si,si_siffror
|
||
mov di,di_siffror
|
||
mov hojd_1,11
|
||
mov hojd_add,bredd_1/4-sw*11*2/4
|
||
mov font_adr,offset font11
|
||
call print_number
|
||
retn
|
||
print13_task:
|
||
call reset_numberbuf
|
||
mov si,si_siffror
|
||
mov di,di_siffror
|
||
mov hojd_1,13
|
||
mov hojd_add,bredd_1/4-sw*13*2/4
|
||
mov font_adr,offset font13
|
||
call print_number
|
||
retn
|
||
|
||
print5_task:
|
||
call reset_numberbuf
|
||
mov si,si_siffror
|
||
mov di,di_siffror
|
||
mov hojd_1,5
|
||
mov hojd_add,bredd_1/4-sw*5*2/4
|
||
mov font_adr,offset font5
|
||
call print_number
|
||
retn
|
||
|
||
_print11_number:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov tabort_diovre_fnt,0
|
||
PUSH [BX+2]
|
||
POP si_siffror
|
||
MOVE DI_siffror,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT11_task
|
||
jmp print_end
|
||
_print13_number:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov tabort_diovre_fnt,0
|
||
PUSH [BX+2]
|
||
POP si_siffror
|
||
MOVE DI_siffror,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT13_task
|
||
jmp print_end
|
||
_print8_number:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov tabort_diovre_fnt,0
|
||
PUSH [BX+2]
|
||
POP si_siffror
|
||
MOVE DI_siffror,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT8_task
|
||
jmp print_end
|
||
|
||
_print8_number_CENT:
|
||
MOV CENT,TRUE
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov tabort_diovre_fnt,0
|
||
PUSH [BX+2]
|
||
POP si_siffror
|
||
MOVE DI_siffror,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT8_task
|
||
jmp print_end
|
||
|
||
_print13_number_CENT:
|
||
MOV CENT,TRUE
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov tabort_diovre_fnt,0
|
||
PUSH [BX+2]
|
||
POP si_siffror
|
||
MOVE DI_siffror,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT13_task
|
||
jmp print_end
|
||
|
||
_print5_number:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov tabort_diovre_fnt,0
|
||
PUSH [BX+2]
|
||
POP si_siffror
|
||
MOVE DI_siffror,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT5_task
|
||
jmp print_end
|
||
|
||
_SOUND_EFFECT:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
|
||
MOV AX,[BX+2]
|
||
MOV CX,[BX+4]
|
||
PUSH BX
|
||
SOUNDEFFECT2 AX,CL
|
||
POP BX
|
||
|
||
JMP PRINT_END
|
||
_lastjingle:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov ax,[bx+2]
|
||
mov lastjingle,al
|
||
mov si,77 ;urko!
|
||
jmp normal_end
|
||
_JINGLE:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
|
||
MOV SI,[BX+2]
|
||
mov current_priority,0
|
||
mov jinglejumpcnt,1
|
||
; MOV AL,BYTE PTR [SI]
|
||
; MOV LASTJINGLE,AL
|
||
; MOV LASTLOOPVAL,1
|
||
PUSH BX
|
||
call DoplaYJINGLE ;JOHAN SOM HAR SKRIVIT?
|
||
POP BX
|
||
JMP NORMAL_END
|
||
_COUNTDOWNCONTINUE: ;INPUT: ?,?, VALUE TO PRINT
|
||
MOV SUPER_INIT,FALSE
|
||
MOV SISA,1
|
||
MOV DOTRUT,OFFSET COUNTDOWN
|
||
CALL RESET_NUMBERBUF
|
||
MOVE VAL_TO_PRINT,[BX+6]
|
||
MOV SYNC_LEFT,1
|
||
MOV INHIBIT_COUNT_DOWN,FALSE
|
||
JMP THREE_END
|
||
|
||
_countdown:
|
||
MEGA_RESET:
|
||
MOV SUPER_INIT,FALSE
|
||
;input: seconds, value to print
|
||
mov sisa,1
|
||
mov dotrut,offset countdown
|
||
call reset_numberbuf
|
||
move val_to_print,[bx+6]
|
||
mov sync_left,1
|
||
|
||
mov [sec_asc],'A'-10+0
|
||
mov [sec_asc+1],'A'-10+1
|
||
mov al,[bx+2]
|
||
add [sec_asc],al
|
||
mov al,[bx+4]
|
||
add [sec_asc+1],al
|
||
jmp three_end
|
||
|
||
_countdown2:
|
||
;input: ?, ? (update panel!)
|
||
CMP SUPER_INIT,TRUE
|
||
JE MEGA_RESET
|
||
mov sisa,1
|
||
mov dotrut,offset countdown
|
||
call reset_numberbuf
|
||
mov sync_left,1
|
||
jmp three_end
|
||
|
||
countdown:
|
||
CMP INHIBIT_COUNT_DOWN,TRUE
|
||
JE INH_CD
|
||
dec sync_left
|
||
jnz no_rez_this_sync
|
||
mova sync_left,sync_per_sec
|
||
|
||
cmp [sec_asc+1],'A'-10
|
||
jne over_it_again
|
||
cmp [sec_asc],'*'
|
||
je uninstall_count
|
||
over_it_again:
|
||
|
||
|
||
dec [sec_asc+1]
|
||
cmp [sec_asc+1],'A'-10-1
|
||
jnz ingen_fara
|
||
add [sec_asc+1],10
|
||
dec [sec_asc]
|
||
|
||
ingen_fara:
|
||
CMP [SEC_ASC],'A'-10
|
||
JNE NOT_ZERO
|
||
MOV [SEC_ASC],'*'
|
||
NOT_ZERO:
|
||
|
||
;[SEC_ASC] PEKAR P<> MSD, (0='*') [SEC_ASC+1] PEKAR P<> LSD
|
||
;LŽS AV BARA!
|
||
PUSHA ;CP!
|
||
CALL READ_SPECIAL_MODE_COUNTER
|
||
POPA
|
||
|
||
mov hojd_1,11
|
||
mov tabort_diovre,0
|
||
mov tabort_diovre_fnt,0
|
||
mov hojd_add,bredd_1/4-sw*11*2/4
|
||
mov font_adr,offset font11
|
||
push offset sec_asc
|
||
pop AX_PRINT
|
||
MOVE DI_PRINT,SW*6/4+16*18/4 ;cpw!
|
||
MOV PRINTTASK,OFFSET PRINT_TEXT
|
||
mov si,1
|
||
retn
|
||
no_rez_this_sync:
|
||
INH_CD:
|
||
mov tabort_diovre_fnt,0
|
||
move si_siffror,val_to_print
|
||
move di_siffror,SW*4/4+16*2/4 ;cpw!
|
||
mov printtask,offset print13_TASK
|
||
mov si,1
|
||
retn
|
||
uninstall_count:
|
||
|
||
; mov specialmode,false
|
||
mov sisa,0
|
||
mov si,0
|
||
retn
|
||
_rullgardin_upp:
|
||
mov dotrut,offset rullgardin_upp
|
||
move rulltext,[bx+2]
|
||
move stop_at_pos,[bx+4]
|
||
mov rull_pos,16
|
||
jmp print_end
|
||
|
||
_rullgardin_ned:
|
||
mov dotrut,offset rullgardin_ned
|
||
move rulltext,[bx+2]
|
||
move stop_at_pos,[bx+4]
|
||
mov rull_pos,-13
|
||
jmp print_end
|
||
|
||
rullgardin_upp:
|
||
;rull_pos startv„rde m†ste vara satt till 16!!!
|
||
dec rull_pos
|
||
|
||
cmp rull_pos,16-14
|
||
jg noradering_upp
|
||
mov ax,rull_pos
|
||
add ax,13
|
||
mov bx,sw*2/4
|
||
mul bx
|
||
mov clear_box_start,ax
|
||
add clear_box_start,2*sw/4
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,1
|
||
call clear_box2
|
||
|
||
noradering_upp:
|
||
|
||
mov hojd_1,13
|
||
mov hojd_add,bredd_1/4-sw*13*2/4
|
||
mov font_adr,offset font13
|
||
|
||
call putfont
|
||
mov ax,stop_at_pos
|
||
cmp rull_pos,ax
|
||
je rezzeta
|
||
mov si,1
|
||
retn
|
||
|
||
rullgardin_ned:
|
||
;rull_pos startv„rde m†ste vara satt till -13!!!
|
||
inc rull_pos
|
||
|
||
cmp rull_pos,1
|
||
jl noradering_ned
|
||
mov ax,rull_pos
|
||
sub ax,1
|
||
mov bx,sw*2/4
|
||
mul bx
|
||
mov clear_box_start,ax
|
||
add clear_box_start,2*sw/4
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,1
|
||
call clear_box2
|
||
|
||
noradering_ned:
|
||
mov hojd_1,13
|
||
mov hojd_add,bredd_1/4-sw*13*2/4
|
||
mov font_adr,offset font13
|
||
|
||
call putfont
|
||
mov ax,stop_at_pos
|
||
cmp rull_pos,ax
|
||
je rezzeta
|
||
mov si,1
|
||
retn
|
||
rezzeta:
|
||
mov si,0
|
||
mov tabort_diovre,0
|
||
mov tabort_diovre_fnt,0
|
||
retn
|
||
|
||
putfont:
|
||
mov ax,rull_pos
|
||
cmp ax,0
|
||
jge kapa_ej_overkant
|
||
|
||
;Kapa i ”verkant!
|
||
|
||
neg ax ;g”r ax positiv!
|
||
mov tabort_diovre,ax
|
||
mov tabort_diovre_fnt,ax ;s† mycket som skall kapas!
|
||
mov di,sw*2/4 ;”versta rastern
|
||
jmp print_it
|
||
|
||
kapa_ej_overkant:
|
||
|
||
cmp ax,16-13 ;matrixhojd-fonthojd
|
||
jle kapa_ej_nederkant
|
||
; neg ax ;-pos
|
||
; add ax,16 ;=> ax=16-pos
|
||
add ax,13-16
|
||
mov tabort_diovre,ax ;s† mycket som ska kapas!
|
||
mov tabort_diovre_fnt,0 ;men inget i ”vekant
|
||
mov ax,rull_pos
|
||
inc ax
|
||
mov bx,sw/4*2 ;di=rull_pos*sw*2/4
|
||
mul bx
|
||
mov di,ax
|
||
jmp print_it
|
||
|
||
kapa_ej_nederkant:
|
||
mov tabort_diovre,0 ;s„tt ut hela!
|
||
mov tabort_diovre_fnt,0
|
||
; mov ax,rull_pos
|
||
mov bx,sw/4*2 ;di=rull_pos*sw*2/4
|
||
mul bx
|
||
mov di,ax
|
||
add di,sw/4*2
|
||
print_it:
|
||
CMP TABORT_DIOVRE,13
|
||
JAE SKIPIT_PRINT
|
||
mov ax,rulltext
|
||
call print_text
|
||
SKIPIT_PRINT:
|
||
retn
|
||
|
||
|
||
clear_box2:
|
||
;obs EJ en taskig rutin!!
|
||
mov cx,clear_box_hojd
|
||
mov di,clear_box_start
|
||
move es,0a000h
|
||
|
||
doline_clear2:
|
||
push cx
|
||
mov cx,clear_box_bredd
|
||
push di
|
||
push cx
|
||
setwrite 1
|
||
mov al,matrixhi
|
||
rep stosb
|
||
pop cx
|
||
pop di
|
||
push di
|
||
setwrite 100b
|
||
mov al,matrixhi
|
||
rep stosb
|
||
pop di
|
||
pop cx
|
||
add di,sw*2/4
|
||
loop doline_clear2
|
||
|
||
retn
|
||
|
||
|
||
PP_DO_LINE PROC NEAR ;INPUT: ES:SI=SOURCE, LAGERARBETARNA=DEST
|
||
MOV CX,320/4
|
||
MOV DI,LAGERARBETAREN
|
||
MOV BYTE PTR DS:[DI],0
|
||
PP_NEXT_BYTE:
|
||
PUSH CX
|
||
NIL DH
|
||
CMP BYTE PTR ES:[SI],MATRIXLO
|
||
JNE ITS_GREY
|
||
NOT DH
|
||
ITS_GREY:
|
||
AND DH,LILLE_LAGERARBETAREN
|
||
OR DS:[DI],DH
|
||
INC SI
|
||
ROR LILLE_LAGERARBETAREN,1
|
||
JNC EJ_BYTE_AV_BYTE
|
||
INC DI
|
||
MOV BYTE PTR DS:[DI],0
|
||
EJ_BYTE_AV_BYTE:
|
||
POP CX
|
||
LOOP PP_NEXT_BYTE
|
||
MOV LAGERARBETAREN,DI
|
||
RETN
|
||
PP_DO_LINE ENDP
|
||
|
||
PP_DO_BITPLANE PROC NEAR ;INPUT: RŽTT BITPLAN SATT
|
||
MOV CX,16
|
||
MOV SI,SW*4/4/2
|
||
PP_NEXT_LINE:
|
||
PUSH CX SI
|
||
CALL PP_DO_LINE
|
||
POP SI CX
|
||
ADD SI,SW/4*2
|
||
LOOP PP_NEXT_LINE
|
||
RETN
|
||
PP_DO_BITPLANE ENDP
|
||
|
||
PRINT_PAUSE:
|
||
CALL MATRIXON_
|
||
CALL DOLIGHTS
|
||
MOV LAGERARBETAREN,OFFSET PAUSE_LAGRET
|
||
MOV LILLE_LAGERARBETAREN,10000000B
|
||
MOVE ES,0A000H
|
||
MOV CX,4
|
||
PP_NEXT_BITPLANE:
|
||
PUSH CX
|
||
MOV AL,4
|
||
SUB AL,CL
|
||
SETREAD AL
|
||
CALL PP_DO_BITPLANE
|
||
POP CX
|
||
DEC CX
|
||
LOOP PP_NEXT_BITPLANE
|
||
|
||
PUSH OFFSET PAUSE_TEXT
|
||
POP AX_PRINT
|
||
MOVE DI_PRINT,sw*4/4+16*0/4+4*5-2
|
||
call print_it_klux
|
||
CALL MATRIXON_
|
||
CALL DOLIGHTS
|
||
RETN
|
||
print_it_klux:
|
||
MOV CLEAR_BOX_START,SW/4*2
|
||
MOV CLEAR_BOX_BREDD,320/4
|
||
MOV CLEAR_BOX_HOJD,16
|
||
CALL CLEAR_BOX2
|
||
MOV HOJD_1,13
|
||
MOV HOJD_ADD,BREDD_1/4-SW*13*2/4
|
||
MOV FONT_ADR,OFFSET FONT13
|
||
MOV TABORT_DIOVRE,0
|
||
MOV TABORT_DIOVRE_FNT,0
|
||
MOV AX,AX_PRINT
|
||
MOV DI,DI_PRINT
|
||
CALL PRINT_TEXT
|
||
retn
|
||
PP_DO_LINE2 PROC NEAR ;INPUT: ES:DI=DEST, LAGERARBETARNA=SOURCE
|
||
MOV CX,320/4
|
||
MOV SI,LAGERARBETAREN
|
||
PP_NEXT_BYTE2:
|
||
PUSH CX
|
||
MOV AL,DS:[SI]
|
||
AND AL,LILLE_LAGERARBETAREN
|
||
MOV AL,MATRIXLO
|
||
JNZ ITS_YELLOW
|
||
MOV AL,MATRIXHI
|
||
ITS_YELLOW:
|
||
STOSB
|
||
ROR LILLE_LAGERARBETAREN,1
|
||
JNC EJ_BYTE_AV_BYTE2
|
||
INC SI
|
||
EJ_BYTE_AV_BYTE2:
|
||
POP CX
|
||
LOOP PP_NEXT_BYTE2
|
||
MOV LAGERARBETAREN,SI
|
||
RETN
|
||
PP_DO_LINE2 ENDP
|
||
|
||
PP_DO_BITPLANE2 PROC NEAR ;INPUT: RŽTT BITPLAN SATT
|
||
MOV CX,16
|
||
MOV DI,SW*4/4/2
|
||
PP_NEXT_LINE2:
|
||
PUSH CX DI
|
||
CALL PP_DO_LINE2
|
||
POP DI CX
|
||
ADD DI,SW/4*2
|
||
LOOP PP_NEXT_LINE2
|
||
RETN
|
||
PP_DO_BITPLANE2 ENDP
|
||
|
||
RESTORE_AFTER_PAUSE PROC NEAR
|
||
MOV LAGERARBETAREN,OFFSET PAUSE_LAGRET
|
||
MOV LILLE_LAGERARBETAREN,10000000B
|
||
MOVE ES,0A000H
|
||
MOV CX,2
|
||
MOV AL,1
|
||
PP_NEXT_BITPLANE2:
|
||
PUSH AX CX
|
||
SETWRITE AL
|
||
CALL PP_DO_BITPLANE2
|
||
POP CX AX
|
||
SHL AL,2
|
||
LOOP PP_NEXT_BITPLANE2
|
||
RETN
|
||
RESTORE_AFTER_PAUSE ENDP
|
||
|
||
_print13:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
MOV HOJD_1,13
|
||
MOV HOJD_ADD,BREDD_1/4-SW*13*2/4
|
||
MOV FONT_ADR,OFFSET FONT13
|
||
mov tabort_diovre,0
|
||
mov tabort_diovre_fnt,0
|
||
MOVE AX_PRINT,[BX+2]
|
||
MOVE DI_PRINT,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT_TEXT
|
||
jmp print_end
|
||
_print11:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov hojd_1,11
|
||
mov tabort_diovre,0
|
||
mov tabort_diovre_fnt,0
|
||
mov hojd_add,bredd_1/4-sw*11*2/4
|
||
mov font_adr,offset font11
|
||
MOVE AX_PRINT,[BX+2]
|
||
MOVE DI_PRINT,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT_TEXT
|
||
jmp print_end
|
||
_print8:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov hojd_1,8
|
||
mov tabort_diovre,0
|
||
mov tabort_diovre_fnt,0
|
||
mov hojd_add,bredd_1/4-sw*8*2/4
|
||
mov font_adr,offset font8
|
||
MOVE AX_PRINT,[BX+2]
|
||
MOVE DI_PRINT,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT_TEXT
|
||
jmp print_end
|
||
_print5:
|
||
move sisa,1
|
||
mov dotrut,offset waitrut
|
||
mov hojd_1,5
|
||
mov tabort_diovre,0
|
||
mov tabort_diovre_fnt,0
|
||
mov hojd_add,bredd_1/4-sw*5*2/4
|
||
mov font_adr,offset font5
|
||
MOVE AX_PRINT,[BX+2]
|
||
MOVE DI_PRINT,[BX+4]
|
||
MOV PRINTTASK,OFFSET PRINT_TEXT
|
||
jmp print_end
|
||
;******************************
|
||
print_END:
|
||
ADD BX,6
|
||
CMP WORD PTR [BX],0
|
||
JNE _NEXTp_
|
||
MOV BX,0
|
||
_NEXTp_:
|
||
MOV NEXT_A,BX
|
||
RETN
|
||
;******************************
|
||
three_end:
|
||
ADD BX,6+2
|
||
CMP WORD PTR [BX],0
|
||
JNE _NEXTp_Q
|
||
MOV BX,0
|
||
_NEXTp_Q:
|
||
MOV NEXT_A,BX
|
||
RETN
|
||
|
||
MATRIX_BLINKOR:
|
||
CMP MATRIX_IS_FLASHING,TRUE
|
||
JNE NOBLINKOR
|
||
DEC MATRIX_CNT
|
||
JNZ DUMRET
|
||
MOVE MATRIX_CNT,MATRIX_SPEED
|
||
MOV SI,OFFSET MATRIXOFF
|
||
XOR MATRIX_ONOFF,0FFH
|
||
JZ THE_OTHER
|
||
MOV SI,OFFSET MATRIXON
|
||
THE_OTHER:
|
||
MOVE ES,DS
|
||
MOV DI,RGBBUFPTR
|
||
;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR!
|
||
MOVSB ;START COL
|
||
LODSB ;AL=RGB LEN
|
||
STOSB
|
||
MOV CL,AL
|
||
NIL CH
|
||
REP MOVSB ;R,G,B ETC
|
||
MOV RGBBUFPTR,DI
|
||
NOBLINKOR:
|
||
RETN
|
||
|
||
MATRIXON_:
|
||
MOV SI,OFFSET MATRIXON
|
||
MOVE ES,DS
|
||
MOV DI,RGBBUFPTR
|
||
;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR!
|
||
MOVSB ;START COL
|
||
LODSB ;AL=RGB LEN
|
||
STOSB
|
||
MOV CL,AL
|
||
NIL CH
|
||
REP MOVSB ;R,G,B ETC
|
||
MOV RGBBUFPTR,DI
|
||
; CALL DOLIGHTS
|
||
RETN
|
||
|
||
MATRIXOFF_:
|
||
MOV SI,OFFSET MATRIXOFF
|
||
MOVE ES,DS
|
||
MOV DI,RGBBUFPTR
|
||
;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR!
|
||
MOVSB ;START COL
|
||
LODSB ;AL=RGB LEN
|
||
STOSB
|
||
MOV CL,AL
|
||
NIL CH
|
||
REP MOVSB ;R,G,B ETC
|
||
MOV RGBBUFPTR,DI
|
||
; CALL DOLIGHTS
|
||
RETN
|
||
|
||
|
||
_FLASHOFF:
|
||
MOVE SISA,1 ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET WAITRUT
|
||
CALL KILL_FLASHOR
|
||
JMP NORMAL_END
|
||
|
||
_MATRIXLGT:
|
||
MOVE SISA,1 ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET WAITRUT
|
||
CMP WORD PTR [BX+2],0
|
||
JE OFF_WITH_IT
|
||
CALL MATRIXON_
|
||
JMP BORT_LELLE_VAN
|
||
OFF_WITH_IT:
|
||
CALL MATRIXOFF_
|
||
BORT_LELLE_VAN:
|
||
JMP NORMAL_END
|
||
|
||
_SETDECCOR:
|
||
MOVE SISA,1 ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET WAITRUT
|
||
MOVE DECCOR,DS:[BX+2]
|
||
JMP NORMAL_END
|
||
|
||
KILL_FLASHOR PROC NEAR
|
||
pusha
|
||
MOV MATRIX_IS_FLASHING,FALSE
|
||
MOV SI,OFFSET MATRIXON
|
||
MOVE ES,DS
|
||
MOV DI,RGBBUFPTR
|
||
;FLYTTA [SI] TILL [DI] & UPPDAT RGBBUFPTR!
|
||
MOVSB ;START COL
|
||
LODSB ;AL=RGB LEN
|
||
STOSB
|
||
MOV CL,AL
|
||
NIL CH
|
||
REP MOVSB ;R,G,B ETC
|
||
MOV RGBBUFPTR,DI
|
||
popa
|
||
RETN
|
||
KILL_FLASHOR ENDP
|
||
|
||
_WAIT:
|
||
MOVE SISA,[BX+2] ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET WAITRUT
|
||
;galopp
|
||
JMP NORMAL_END
|
||
|
||
_WAITifmulti:
|
||
MOVE SISA,[BX+2] ;HUR M†NGA
|
||
cmp players,1
|
||
jne dowwe
|
||
mov sisa,2 ;cpgnu? venta inte om ej multiplayer
|
||
dowwe: MOV DOTRUT,OFFSET WAITRUT
|
||
;galopp
|
||
JMP NORMAL_END
|
||
_LOCK:
|
||
MOVE SISA,[BX+2] ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET LOCKRUT
|
||
;galopp
|
||
JMP NORMAL_END
|
||
LOCKRUT:
|
||
MOV SI,1
|
||
RETN
|
||
|
||
_WAIT_YN:
|
||
MOVE SISA,[BX+2] ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET WAITRUT_YN
|
||
;galopp
|
||
JMP NORMAL_END
|
||
endit:
|
||
ADD BX,2
|
||
CMP WORD PTR [BX],0
|
||
JNE _NEXT_hh
|
||
MOV BX,0
|
||
_NEXT_hh:
|
||
MOV NEXT_A,BX
|
||
RETN
|
||
clearend:
|
||
mov si,0
|
||
retn
|
||
|
||
_clear1: ;clear all matrix
|
||
MOVE SISA,1
|
||
MOV DOTRUT,OFFSET rclear1
|
||
mov clearval,0
|
||
jmp endit
|
||
rclear1:
|
||
add clearval,2*sw/4
|
||
move clear_box_start,clearval
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,16
|
||
call clear_box2
|
||
jmp clearend
|
||
|
||
_clear2: ;clear from top to bottom
|
||
MOVE SISA,1
|
||
MOV DOTRUT,OFFSET rclear2
|
||
mov clearval,0
|
||
jmp endit
|
||
rclear2:
|
||
add clearval,2*sw/4
|
||
cmp clearval,2*sw*18/4-2*SW/4
|
||
je clearend
|
||
move clear_box_start,clearval
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,1
|
||
call clear_box2
|
||
mov si,1
|
||
retn
|
||
_clear3: ;clear from left to right
|
||
MOVE SISA,1
|
||
MOV DOTRUT,OFFSET rclear3
|
||
mov clearval,sw*2/4-1
|
||
jmp endit
|
||
rclear3:
|
||
add clearval,1
|
||
cmp clearval,320/4+sw*2/4
|
||
je clearend
|
||
move clear_box_start,clearval
|
||
mov clear_box_bredd,1
|
||
mov clear_box_hojd,16
|
||
call clear_box2
|
||
mov si,1
|
||
retn
|
||
_clear4: ;clear 4 raster top to bottom
|
||
MOVE SISA,1
|
||
MOV DOTRUT,OFFSET rclear4
|
||
mov clearval,0
|
||
jmp endit
|
||
rclear4:
|
||
add clearval,2*sw/4
|
||
cmp clearval,2*sw*5/4
|
||
je clearend
|
||
|
||
move clear_box_start,clearval
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,1
|
||
call clear_box2
|
||
|
||
move clear_box_start,clearval
|
||
add clear_box_start,4*2*sw/4
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,1
|
||
call clear_box2
|
||
|
||
move clear_box_start,clearval
|
||
add clear_box_start,8*2*sw/4
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,1
|
||
call clear_box2
|
||
|
||
move clear_box_start,clearval
|
||
add clear_box_start,12*2*sw/4
|
||
mov clear_box_bredd,320/4
|
||
mov clear_box_hojd,1
|
||
call clear_box2
|
||
|
||
|
||
mov si,1
|
||
retn
|
||
|
||
|
||
_FADE:
|
||
MOVE SISA,[BX+2] ;HUR M†NGA
|
||
MOV DOTRUT,OFFSET FADERUT
|
||
PUSHA
|
||
PUSH ES
|
||
MOV CS:FADING,TRUE
|
||
CALL READPAL
|
||
POP ES
|
||
POPA
|
||
;galopp
|
||
JMP NORMAL_END
|
||
FADING DB FALSE
|
||
READPAL:
|
||
MOV DX,3C7H
|
||
MOV AL,0
|
||
OUT DX,AL
|
||
MOV DX,3C9H
|
||
MOV CX,3*256
|
||
MOVA ES,CS
|
||
MOV DI,OFFSET CS:PALLE
|
||
RPAL:
|
||
IN AL,DX
|
||
STOSB
|
||
LOOP RPAL
|
||
RETN
|
||
SETPAL:
|
||
MOV DX,3C8H
|
||
MOV AL,0
|
||
OUT DX,AL
|
||
MOV CX,3*256
|
||
MOV DI,OFFSET CS:PALLE
|
||
SPAL:
|
||
MOV AL,CS:[DI]
|
||
XOR AH,AH
|
||
MUL BX
|
||
MOV AL,AH
|
||
MOV DX,3C9H
|
||
OUT DX,AL
|
||
INC DI
|
||
LOOP SPAL
|
||
RETN
|
||
PALLE DB 3*256 DUP(32)
|
||
FADERUT:
|
||
DEC SI
|
||
PUSHA
|
||
PUSH ES
|
||
MOV CX,SI
|
||
TEST CX,15
|
||
JNZ NONEW16
|
||
MOV AL,6
|
||
INT 66H
|
||
NONEW16:MOV BX,CX
|
||
CALL SETPAL
|
||
POP ES
|
||
POPA
|
||
RETN
|
||
_WAITJINGLE:
|
||
MOV DOtRUT,OFFSET WAITJINGLE
|
||
JMP NORMAL_END
|
||
_WAITJINGLE2:
|
||
MOV DOtRUT,OFFSET WAITJINGLE2
|
||
JMP NORMAL_END
|
||
|
||
WAITRUT:
|
||
DEC SI
|
||
RETN
|
||
|
||
|
||
WAITRUT_YN:
|
||
mov al,scan_code
|
||
cmp al,-1
|
||
je feltecken_du2 ;ej tryckt!
|
||
mov scan_code,-1
|
||
mov bx,offset alfa_keys
|
||
xlat
|
||
cmp al,0
|
||
je feltecken_du2 ;felaktigt tecken!
|
||
CMP AL,'N'
|
||
JE NOKVTTER
|
||
CMP AL,'Y'
|
||
JE do_quit_mr
|
||
jmp nokvtter
|
||
do_quit_mr:
|
||
MOV CS:QUITTING,TRUE
|
||
NOKVTTER:
|
||
mov cs:already_quitting,false
|
||
mov cs:keyboard_enabled,true
|
||
MOV SI,0
|
||
RETN
|
||
feltecken_du2:
|
||
MOV SI,1
|
||
RETN
|
||
|
||
PARTYRUT:
|
||
; DEC SI
|
||
RETN
|
||
|
||
WAITJINGLE:
|
||
mov si,TRUE
|
||
CMP JINGLE_READY_ANIM,TRUE
|
||
JNE DUMRET
|
||
MOV SI,0
|
||
RETN
|
||
|
||
WAITJINGLE2: ;WAITJINGLE2 HAR EN SPECIALARE F™R NOSOUND
|
||
;OBS! DECCOR M<>STE VARA SATT INNAN DENNA RUT ANVŽNDS.
|
||
mov si,TRUE
|
||
PUSH ES
|
||
PUSHA
|
||
SET_ES 0
|
||
MOV AX,21
|
||
PUSHF
|
||
CALL DWORD PTR ES:[66H*4] ;TEST IF NOSOUND
|
||
TEST AL,1000B
|
||
JNZ ITWASNOSOUND
|
||
CMP JINGLE_READY_ANIM,TRUE
|
||
JNE QWJ2
|
||
JMP SHORT ENDOFIT
|
||
ITWASNOSOUND:
|
||
DEC DECCOR
|
||
JZ ENDOFIT
|
||
QWJ2: POPA
|
||
POP ES
|
||
RETN
|
||
ENDOFIT:
|
||
POPA
|
||
POP ES
|
||
NIL SI
|
||
RETN
|
||
|
||
PEKORB DW SCORE
|
||
DW CODE2
|
||
SIFFRORRUT:
|
||
PUSHA
|
||
MOV BX,SW*2/4-16*2/4 ;TJA, VAD<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 † skriva ut
|
||
mov si,si_siffror
|
||
mov di,di_siffror
|
||
mov hojd_1,5
|
||
mov hojd_add,bredd_1/4-sw*5*2/4
|
||
mov font_adr,offset font5
|
||
call print_number
|
||
|
||
|
||
print_siffror5: ;DETTA ŽR HŽRMED EN TASKRUTIN!!!
|
||
;print_numbers input e si=offset till bcd:n, di=pos † skriva ut
|
||
mov si,si_siffror
|
||
mov di,di_siffror
|
||
mov hojd_1,5
|
||
mov hojd_add,bredd_1/4-sw*5*2/4
|
||
mov font_adr,offset font5
|
||
call print_number
|
||
SUICIDE
|
||
|
||
print_siffror8: ;CP!
|
||
;print_numbers input e si=offset till bcd:n, di=pos † skriva ut
|
||
mov hojd_1,8
|
||
mov hojd_add,bredd_1/4-sw*8*2/4
|
||
mov font_adr,offset font8
|
||
call print_number
|
||
retn
|
||
print_siffror11:
|
||
;print_numbers input e si=offset till bcd:n, di=pos † skriva ut
|
||
mov hojd_1,11
|
||
mov hojd_add,bredd_1/4-sw*11*2/4
|
||
mov font_adr,offset font11
|
||
call print_number
|
||
retn
|
||
print_siffror13:
|
||
;print_numbers input e si=offset till bcd:n, di=pos † skriva ut
|
||
mov hojd_1,13
|
||
mov hojd_add,bredd_1/4-sw*13*2/4
|
||
mov font_adr,offset font13
|
||
call print_number
|
||
Retn
|
||
|
||
|
||
|
||
|
||
FLIPPRA:
|
||
IF DEBUG
|
||
mov cs:Reknare,0 ;cp! debugging info
|
||
; DEBUGVAL 0,5,[BX].LASTGFXFRAME,"LASTGFXFRAME: "
|
||
ENDIF
|
||
SET_ES 0A000H
|
||
MOV DX,3C4H
|
||
MOV AX,0F02H
|
||
OUT DX,AX ;;ALLA BITPLAN P<>
|
||
|
||
MOV DX,3CEH
|
||
MOV AX,4105H
|
||
OUT DX,AX ;ARONSSON ON
|
||
|
||
|
||
MOV AX,[BX].TOPY
|
||
ADD AX,SPLH
|
||
MOV DI,BPL
|
||
MUL DI
|
||
MOV DI,AX
|
||
MOV AX,[BX].LEFTX
|
||
SHR AX,2
|
||
ADD DI,AX
|
||
|
||
|
||
MOV AX,[BX].FLIPFRAME
|
||
MOV CX,AX
|
||
SUB CX,[BX].LASTGFXFRAME
|
||
XCHG [BX].LASTGFXFRAME,AX
|
||
JE NOMOVE ;;OM 0: INGET JAG KAN G™RA
|
||
JA WAYUP
|
||
NEG CX
|
||
MOV DX,[BX].FLIPDIFS
|
||
MUL DX
|
||
MOVE [BX].FLIPPEK,[BX].FLIPMAXPEK
|
||
SUB [BX].FLIPPEK,AX
|
||
JMP DANIM
|
||
reknare dw 0
|
||
maxreknare dw 0
|
||
WAYUP:
|
||
MOV DX,[BX].FLIPDIFS
|
||
MUL DX
|
||
ADD AX,[BX].FLIPTAB
|
||
MOV [BX].FLIPPEK,AX
|
||
DANIM:
|
||
PUSH 0
|
||
CMP CX,9
|
||
JBE DELTA_ANIMERA
|
||
POP AX ;DUMMY POP
|
||
MOV AX,CX
|
||
SUB AX,9
|
||
PUSH AX
|
||
MOV CX,9
|
||
DELTA_ANIMERA:
|
||
PUSH CX DI
|
||
PUSH BX
|
||
MOV BX,[BX].FLIPPEK
|
||
; debugclear
|
||
; debugval 10,10,bx,"="
|
||
; jmp quit
|
||
MOVA DS,DATAFLIP
|
||
mov si,cx
|
||
dec si
|
||
shl si,1
|
||
MOV CX,[BX+si] ;cp! ska va bx+si
|
||
jcxz nobytestoanim
|
||
IF DEBUG
|
||
add cs:reknare,cx
|
||
CMP CS:REKNARE,300
|
||
JB INGEN_HORSE
|
||
DEBUGVAL 0,4,BX,"BX VA="
|
||
DEBUGVAL 15,4,SI,"SI VA="
|
||
DEBUGVAL 35,4,[BX+SI],"[BX+SI] VA="
|
||
POP BX
|
||
MOVA DS,DATA
|
||
DEBUGVAL 20,5,[BX].LASTGFXFRAME,"NEW GFXFRAME: "
|
||
JMP QUIT
|
||
ENDIF
|
||
INGEN_HORSE:
|
||
ADD BX,2*9
|
||
CALL DELTANIM
|
||
nobytestoanim:
|
||
MOVA DS,DATA
|
||
POP BX
|
||
ADDA [BX].FLIPPEK,[BX].FLIPDIFS
|
||
POP DI CX
|
||
LOOP DELTA_ANIMERA
|
||
POP CX
|
||
IF DEBUG
|
||
mov cs:Reknare,0 ;cp! debugging info
|
||
ENDIF
|
||
OR CX,CX
|
||
PUSH 0
|
||
JNZ DELTA_ANIMERA
|
||
POP AX ;DUMMY POP
|
||
IF DEBUG
|
||
mov cx,cs:reknare
|
||
cmp cs:maxreknare,cx
|
||
ja nomove
|
||
mov cs:maxreknare,cx
|
||
debugval 0,3,cs:maxreknare,"max antal deltade bytes per frame: "
|
||
ENDIF
|
||
NOMOVE:
|
||
MOV DX,3CEH
|
||
MOV AX,4005H
|
||
OUT DX,AX ;ARONSSON OFF
|
||
RETN
|
||
|
||
DOFLIPPER:
|
||
IF MARGIT
|
||
SETMARG 31
|
||
ENDIF
|
||
MOV BX,OFFSET FLIPLINFO
|
||
CALL FLIPPRA
|
||
ADD BX,(SIZE FLIPSTRUC)
|
||
CALL FLIPPRA
|
||
IF MARGIT
|
||
SETMARG 0
|
||
ENDIF
|
||
RETN
|
||
DOFLIPPER3:
|
||
IF MARGIT
|
||
SETMARG 15
|
||
ENDIF
|
||
MOV BX,OFFSET FLIPLINFO+(SIZE FLIPSTRUC)*2
|
||
cmp byte ptr [bx],0
|
||
jz no_upper_flip
|
||
CALL FLIPPRA
|
||
no_upper_flip:
|
||
IF MARGIT
|
||
SETMARG 0
|
||
ENDIF
|
||
RETN
|
||
|
||
LATE_RASTER_INTERRUPT:
|
||
MOVE DS,DATA
|
||
MOV INT_WAS_HERE,TRUE
|
||
MOV INT_WAS_HERE2,TRUE
|
||
CMP SLOWCNT,0
|
||
JNZ RETTEF
|
||
CMP INTERRUPTS_ON,TRUE
|
||
JE LRINTOK
|
||
RETTEF:
|
||
MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG
|
||
RETF ;RET
|
||
LRINTOK:
|
||
MOV TIME_LEFT,TRUE
|
||
OR AX,AX
|
||
JZ NO_MUSIC_CRISIS3
|
||
MOV TIME_LEFT,FALSE
|
||
NO_MUSIC_CRISIS3:
|
||
CMP DEMOMODE,TRUE
|
||
JE LATE_RASTER_INTERRUPT_DEMO
|
||
|
||
;*********************** SPELETS RUTINER ****************************
|
||
|
||
CMP INSIDE_RASTINT,FALSE
|
||
JNE RETTEF
|
||
|
||
CMP CS:LAST_WAS_VB,TRUE
|
||
JNE RETTEF
|
||
|
||
CALL SETSCREENSTART
|
||
CMP INSIDE_BALLHANDLER,FALSE
|
||
JNE RETTEF
|
||
|
||
MOV INSIDE_RASTINT,TRUE
|
||
SAVEGFXREGS
|
||
CALL KOLLAKULAN ;G”R TV† BER„KNINGAR
|
||
CMP LATEGFX,TRUE
|
||
JNE NOLGFX
|
||
MOV PUTITBETWEEN,FALSE
|
||
CALL PUTTHEBALL
|
||
NOLGFX: CMP FORCELATEF3,TRUE
|
||
JNE NOFF3
|
||
CALL DOFLIPPER3
|
||
NOFF3:
|
||
|
||
MOV AL,F1F8_CODE ;TAR HAND OM F1F8_CODE I GAMEMODE
|
||
OR AL,AL
|
||
JZ NOF1F8_TODAY
|
||
MOV F1F8_CODE,0
|
||
SUB AL,3BH-1 ;3BH=CODE FOR F1
|
||
MOV PLAYERS,AL
|
||
ADD AL,'0'+7
|
||
MOV NO_OF_PLAYERS_TEXT[8],AL
|
||
MOV BX,OFFSET no_of_playersTS
|
||
CALL DO_MATRIX
|
||
SOUNDEFFECT S_ADDPLAYER2,0
|
||
mov addplayers,false
|
||
addtask allow_addpl
|
||
NOF1F8_TODAY:
|
||
RESTOREGFXREGS
|
||
MOV CS:LAST_WAS_VB,FALSE
|
||
MOV INSIDE_RASTINT,FALSE
|
||
MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG
|
||
RETF
|
||
|
||
DOLON PROC NEAR
|
||
REALON BL
|
||
RETN
|
||
DOLON ENDP
|
||
|
||
DOLOFF PROC NEAR
|
||
REALOFF BL
|
||
RETN
|
||
DOLOFF ENDP
|
||
|
||
DOSUICIDE PROC NEAR
|
||
MOV BX,SAVESOURCE
|
||
MOV DS:[BX],OFFSET DUMRET
|
||
DEC NO_OF_ACTIVE_TASKS
|
||
RETN
|
||
DOSUICIDE ENDP
|
||
|
||
DOWAITSYNCS PROC NEAR
|
||
CMP DS:[BX],DX
|
||
JE THISISIT
|
||
INC WORD PTR DS:[BX]
|
||
CLC
|
||
RETN
|
||
THISISIT:
|
||
MOV WORD PTR DS:[BX],0
|
||
STC
|
||
RETN
|
||
DOWAITSYNCS ENDP
|
||
|
||
DOLIGHTON PROC NEAR
|
||
NIL BH
|
||
MOV LIGHTSTATUS[BX],TRUE
|
||
LON BL
|
||
RETN
|
||
DOLIGHTON ENDP
|
||
|
||
DOLIGHTOFF PROC NEAR
|
||
NIL BH
|
||
MOV LIGHTSTATUS[BX],FALSE
|
||
LOFF BL
|
||
RETN
|
||
DOLIGHTOFF ENDP
|
||
|
||
DOLIGHTFLASH PROC NEAR
|
||
MOV BX,OFFSET REALFLASHLIST
|
||
NEXTFLASHPOST:
|
||
CMP [BX].LNUM,0
|
||
JE FOUNDFLASHPOST
|
||
ADD BX,SIZE FLASHSTRUC
|
||
CMP BX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC+OFFSET REALFLASHLIST
|
||
JNE NEXTFLASHPOST
|
||
JMP CP_MEN_OKEJ
|
||
FOUNDFLASHPOST:
|
||
MOV [BX].LNUM,DL
|
||
MOV [BX].FLASHCOUNTER,AL
|
||
MOV [BX].TURNOFF,DH
|
||
SHL DH,1
|
||
MOV [BX].RESETFC,DH
|
||
CP_MEN_OKEJ:
|
||
RETN
|
||
DOLIGHTFLASH ENDP
|
||
|
||
DOENDFLASH PROC NEAR
|
||
MOV BX,OFFSET REALFLASHLIST
|
||
NEXTFLASHPOST2:
|
||
CMP [BX].LNUM,DL
|
||
JNE WASNTTHISONE
|
||
MOV [BX].LNUM,0
|
||
JMP DONTBOTHER
|
||
WASNTTHISONE:
|
||
ADD BX,SIZE FLASHSTRUC
|
||
CMP BX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC+OFFSET REALFLASHLIST
|
||
JNE NEXTFLASHPOST2
|
||
DONTBOTHER:
|
||
RETN
|
||
DOENDFLASH ENDP
|
||
|
||
RESETFLASHLIST PROC NEAR
|
||
MOV CX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC
|
||
MOV DI,OFFSET REALFLASHLIST
|
||
MOVA ES,DS
|
||
NIL AL
|
||
REP STOSB
|
||
RETN
|
||
RESETFLASHLIST ENDP
|
||
|
||
|
||
FLASHTHELIGHTS PROC NEAR ;OBS! ŽNDRAR ENDAST PALETTEN, EJ STATUS!!!
|
||
MOV BX,OFFSET REALFLASHLIST
|
||
NEXTFLASHER:
|
||
CMP [BX].LNUM,0
|
||
JZ NOTTHISONE
|
||
CMP [BX].FLASHCOUNTER,0
|
||
JNZ NOTZEROISIT
|
||
GOTOZERO:
|
||
PUSH BX
|
||
LON [BX].LNUM
|
||
POP BX
|
||
JMP LETSINCIT
|
||
NOTZEROISIT:
|
||
MOV AL,[BX].TURNOFF
|
||
CMP [BX].FLASHCOUNTER,AL
|
||
JNE NOTOFFISIT
|
||
PUSH BX
|
||
LOFF [BX].LNUM
|
||
POP BX
|
||
JMP LETSINCIT
|
||
NOTOFFISIT:
|
||
MOV AL,[BX].RESETFC
|
||
CMP [BX].FLASHCOUNTER,AL
|
||
JNE NOTRESETISIT
|
||
MOV [BX].FLASHCOUNTER,0
|
||
JMP GOTOZERO
|
||
NOTRESETISIT:
|
||
LETSINCIT:
|
||
INC [BX].FLASHCOUNTER
|
||
NOTTHISONE:
|
||
ADD BX,SIZE FLASHSTRUC
|
||
CMP BX,MAX_NO_OF_LIGHTS_FLASHING*SIZE FLASHSTRUC+OFFSET REALFLASHLIST
|
||
JNE NEXTFLASHER
|
||
RETN
|
||
FLASHTHELIGHTS ENDP
|
||
|
||
RECALC_LIGHTS PROC NEAR ;FN: DPAINT RGB VALUES -> MCGA RGB VALUES
|
||
MOV SI,OFFSET LON1
|
||
MOV DI,OFFSET LON1
|
||
MOVE ES,DS
|
||
NEXTPOST:
|
||
LODSB ;START COL
|
||
OR AL,AL
|
||
JZ NOMOREPOSTS
|
||
STOSB
|
||
|
||
LODSB ;BLOCK LEN
|
||
MOV DL,3
|
||
MUL DL
|
||
MOV CX,AX
|
||
STOSB
|
||
|
||
NEXTCOLOR:
|
||
LODSB ;RECALC 0-100 -> 0-63
|
||
MOV DL,162 ;(63/100*256=161.28) AX=AL*162*256
|
||
MUL DL
|
||
MOV AL,AH
|
||
STOSB
|
||
LOOP NEXTCOLOR
|
||
JMP NEXTPOST
|
||
NOMOREPOSTS:
|
||
RETN
|
||
RECALC_LIGHTS ENDP
|
||
|
||
SLACK_LIGHTS PROC NEAR ;FN: TURNS OUT ALL LIGHTS
|
||
cmp uppstartad,true
|
||
jne dumret
|
||
MOV AX,1
|
||
SLAGAIN:PUSH AX
|
||
MOV BX,AX
|
||
MOV LIGHTSTATUS[BX],FALSE
|
||
MOV BL,AL
|
||
NIL BH
|
||
DEC BX
|
||
SHL BX,1
|
||
MOV SI,LONINDEX[BX]
|
||
MOVE ES,DS
|
||
|
||
CALL SLACK_THIS_LIGHT
|
||
|
||
POP AX
|
||
INC AX
|
||
CMP AX,NOOFLIGHTS
|
||
JBE SLAGAIN
|
||
RETN
|
||
SLACK_LIGHTS ENDP
|
||
SLACK_THIS_LIGHT PROC NEAR ;FN: SLŽCKER RGBPOST. KOLLAR ATT DET GICK BRA!
|
||
;INPUT: SI PEKAR P<> RGB-POSTEN
|
||
;OUTPUT: SI PEKAR P<> NŽSTA RGB-POST
|
||
PUSH AX BX CX DX BP
|
||
MOV BL,INTERRUPTS_ON
|
||
MOV INTERRUPTS_ON,FALSE
|
||
MOV BP,SI
|
||
TRY_IT_AGAIN2:
|
||
MOV INT_WAS_HERE2,FALSE
|
||
;G™R POSTEN [SI] FAST SLACK!
|
||
MOV DX,3C8H
|
||
LODSB ;AL=START COL
|
||
OUT DX,AL
|
||
INC DX
|
||
LODSB ;AL=RGB DATA LEN
|
||
MOV CL,AL
|
||
NIL CH
|
||
REPUTA: LODSB
|
||
SHR AL,1
|
||
OUT DX,AL
|
||
LOOP REPUTA
|
||
CMP INT_WAS_HERE2,FALSE
|
||
JE ITS_REALLY_OK2
|
||
MOV SI,BP
|
||
JMP TRY_IT_AGAIN2
|
||
ITS_REALLY_OK2:
|
||
MOV INTERRUPTS_ON,BL
|
||
POP BP DX CX BX AX
|
||
RETN
|
||
SLACK_THIS_LIGHT ENDP
|
||
SLACK_THIS_LIGHT_i_pelle PROC NEAR ;FN: SLŽCKER RGBPOST. KOLLAR ATT DET GICK BRA!
|
||
;INPUT: SI PEKAR P<> RGB-POSTEN
|
||
;OUTPUT: SI PEKAR P<> NŽSTA RGB-POST
|
||
PUSH AX BX CX DX BP
|
||
;G™R POSTEN [SI] FAST SLACK!
|
||
LODSB ;AL=START COL
|
||
mov ah,3
|
||
mul ah
|
||
add ax,offset cs:palle
|
||
mov di,ax
|
||
LODSB ;AL=RGB DATA LEN
|
||
MOV Cx,Ax
|
||
xor ch,ch
|
||
REPUTA7:LODSB
|
||
SHR AL,1
|
||
mov cs:[di],al
|
||
inc di
|
||
LOOP REPUTA7
|
||
POP BP DX CX BX AX
|
||
RETN
|
||
SLACK_THIS_LIGHT_i_pelle ENDP
|
||
|
||
SLACK_LIGHTS_i_pelle PROC NEAR ;FN: TURNS OUT ALL LIGHTS
|
||
MOV AX,1
|
||
SLAGAIN2:PUSH AX
|
||
MOV BX,AX
|
||
MOV LIGHTSTATUS[BX],FALSE
|
||
MOV BL,AL
|
||
NIL BH
|
||
DEC BX
|
||
SHL BX,1
|
||
MOV SI,LONINDEX[BX]
|
||
MOVE ES,DS
|
||
|
||
CALL SLACK_THIS_LIGHT_i_pelle
|
||
|
||
POP AX
|
||
INC AX
|
||
CMP AX,NOOFLIGHTS
|
||
JBE SLAGAIN2
|
||
RETN
|
||
SLACK_LIGHTS_i_pelle ENDP
|
||
|
||
DOLIGHTS PROC NEAR
|
||
CMP INSIDE_DOLIGHTS,TRUE
|
||
JE DONT_BOTHER
|
||
MOV INSIDE_DOLIGHTS,TRUE
|
||
CMP CS:FADING,TRUE
|
||
JE ITSFADING
|
||
|
||
MOV SI,OFFSET RGBBUFFER
|
||
DONEXTLIGHT:
|
||
CMP SI,RGBBUFPTR
|
||
JE DONOMORE
|
||
CALL DO_THIS_LIGHT
|
||
JMP DONEXTLIGHT
|
||
ITSFADING:
|
||
DONOMORE:
|
||
MOV RGBBUFPTR,OFFSET RGBBUFFER
|
||
MOV INSIDE_DOLIGHTS,FALSE
|
||
DONT_BOTHER:
|
||
RETN
|
||
DOLIGHTS ENDP
|
||
|
||
DO_THIS_LIGHT PROC NEAR ;FN: UTF™R RGBPOST. KOLLAR ATT DET GICK BRA!
|
||
;INPUT: SI PEKAR P<> RGB-POSTEN
|
||
;OUTPUT: SI PEKAR P<> NŽSTA RGB-POST
|
||
PUSH AX BX CX DX BP
|
||
MOV BL,INTERRUPTS_ON
|
||
MOV INTERRUPTS_ON,FALSE
|
||
MOV BP,SI
|
||
TRY_IT_AGAIN:
|
||
MOV INT_WAS_HERE,FALSE
|
||
;G™R POSTEN [SI]!
|
||
MOV DX,3C8H
|
||
LODSB ;AL=START COL
|
||
OUT DX,AL
|
||
INC DX
|
||
LODSB ;AL=RGB DATA LEN
|
||
MOV CL,AL
|
||
NIL CH
|
||
REP OUTSB
|
||
CMP INT_WAS_HERE,FALSE
|
||
JE ITS_REALLY_OK
|
||
MOV SI,BP
|
||
JMP TRY_IT_AGAIN
|
||
ITS_REALLY_OK:
|
||
MOV INTERRUPTS_ON,BL
|
||
POP BP DX CX BX AX
|
||
RETN
|
||
DO_THIS_LIGHT ENDP
|
||
|
||
|
||
|
||
DO_ELECTRONICS PROC NEAR ;EXEKVERAS VARJE UTRŽKNING, EJ VARJE SYNC
|
||
PUSHA
|
||
PUSH ES
|
||
if demover
|
||
INC MINUTE_5_COUNTER
|
||
CMP MINUTE_5_COUNTER,5*60*60-2
|
||
Jne NOLIMIT
|
||
mov fiveminutes,true
|
||
; MOV SPECIALMODE,FALSE
|
||
; MOV INH_EFF,FALSE
|
||
MOV HOLDSTILL,TRUE
|
||
PLAYJINGLE S_GAMEOVER2
|
||
MOV BX,OFFSET MINUTE5TS
|
||
CALL DO_MATRIX
|
||
; EFFECT MINUTE5
|
||
; MOV SPECIALMODE,TRUE
|
||
NOLIMIT:
|
||
endif
|
||
|
||
CALL CHECK_AREAS
|
||
CALL CHECK_TARGETS
|
||
CALL CHECK_SHIFTKEYS
|
||
CALL MATRIX_BLINKOR
|
||
; CALL DO_PHYSICS
|
||
|
||
CALL KEYTASK ;KEYTASK CHANGED BY KEYINT
|
||
MOV KEYTASK,OFFSET DUMRET
|
||
CALL DO_TASKS
|
||
CALL FLASHTHELIGHTS
|
||
POP ES
|
||
POPA
|
||
RETN
|
||
DO_ELECTRONICS ENDP
|
||
|
||
DO_PHYSICS PROC NEAR
|
||
CMP TILTCOUNTER,0
|
||
JZ NOTI
|
||
DEC TILTCOUNTER
|
||
NOTI: CALL CHECK_BUMPERS
|
||
CALL CHECK_RAMPS
|
||
CALL CHECK_LEVELS
|
||
CMP BALL_DOWN,TRUE
|
||
JNE DONT_LOOSE_BALL
|
||
CMP LOOSING,TRUE
|
||
JE DONT_LOOSE_BALL
|
||
CALL LOOSE_BALL
|
||
DONT_LOOSE_BALL:
|
||
RET
|
||
DO_PHYSICS ENDP
|
||
|
||
CHECK_RAMPS PROC NEAR
|
||
MOV SI,SC_X
|
||
ADD SI,8
|
||
SHR SI,3
|
||
MOV AX,SC_Y
|
||
ADD AX,8
|
||
MOV CX,40
|
||
MUL CX
|
||
ADD SI,AX
|
||
|
||
DEC SI
|
||
MOV CX,3
|
||
FINDRAMP:
|
||
PUSH SI CX
|
||
call get_hi_ramp_byte
|
||
CMP BALLHIGH,TRUE
|
||
Je GotLo
|
||
CALL GET_LO_RAMP_BYTE
|
||
GOTLO: POP CX SI
|
||
INC SI
|
||
OR AL,AL
|
||
JZ GETRAMP
|
||
LOOP FINDRAMP
|
||
JMP NORAMP
|
||
GETRAMP:
|
||
CMP BX,NO_OF_RAMPS
|
||
JAE NORAMP
|
||
SHL BX,2
|
||
cmp hi_res,true
|
||
je hiramp
|
||
MOVA GRAVX,ramptable[BX]
|
||
MOVA GRAVY,ramptable[BX+2]
|
||
NORAMP: RETN
|
||
hiramp:
|
||
MOVA GRAVX,ramptable_hi[BX]
|
||
MOVA GRAVY,ramptable_hi[BX+2]
|
||
retn
|
||
get_hi_ramp_byte:
|
||
push si
|
||
PUSH SI
|
||
MOV AX,SI
|
||
XCHG AH,AL
|
||
AND AH,11B
|
||
SHR SI,2
|
||
MOV AL,4
|
||
MOV DX,3CEH
|
||
OUT DX,AX
|
||
MOV BX,GFXMASK21_OFFSET
|
||
set_es 0a000h
|
||
MOV AL,BYTE PTR ES:[SI+BX]
|
||
POP SI
|
||
SET_ES MASK2_2
|
||
OR AL,BYTE PTR ES:[SI]
|
||
SET_ES 0A000H
|
||
SHR SI,2
|
||
ADD SI,GFXMASK23_OFFSET
|
||
MOV BL,ES:[SI]
|
||
AND BX,15
|
||
pop si
|
||
RETN
|
||
GET_LO_RAMP_BYTE:
|
||
push si
|
||
SET_ES MASK1_1
|
||
MOV AL,ES:[SI]
|
||
SET_ES MASK1_2
|
||
OR AL,ES:[SI]
|
||
PUSH AX
|
||
SET_ES 0A000H
|
||
CMP SI,230*40
|
||
JAE GO_STD
|
||
PUSH SI
|
||
MOV AX,SI
|
||
SHR AX,4
|
||
INC AX
|
||
MOV CX,80
|
||
MUL CX
|
||
SHR SI,2
|
||
ADD SI,AX
|
||
ADD SI,SPLH*BPL
|
||
MOV BL,ES:[SI]
|
||
POP SI
|
||
SHR SI,2
|
||
JMP DONE_WEIRD
|
||
GO_STD: SHR SI,2
|
||
ADD SI,GFXMASK13_OFFSET
|
||
MOV BL,ES:[SI-(9200/4)]
|
||
DONE_WEIRD:
|
||
POP AX
|
||
AND BX,15
|
||
pop si
|
||
RETN
|
||
ENDP
|
||
|
||
CHECK_BUMPERS PROC NEAR
|
||
CMP BUMPERWASHIT,FALSE
|
||
JE NOBUMPA
|
||
MOV BUMPERWASHIT,FALSE
|
||
MOV BX,HITPOINTER
|
||
LEA SI,[BX+2]
|
||
MOV DI,OFFSET SIFFRORNA
|
||
PUSH BX
|
||
CALL ADDSCOREBCD
|
||
POP BX
|
||
MOV SCORECHANGED,TRUE
|
||
MOV BP,DS:[BX]
|
||
SOUNDEFFECT DS:[BP],0
|
||
CALL BUMPER_WAS_HIT_PROC
|
||
NOBUMPA:
|
||
RETN
|
||
ENDP
|
||
|
||
|
||
|
||
DOADDTASK PROC NEAR ;INPUT:DX=OFFSET THETASK
|
||
MOV BX,OFFSET TASKLIST
|
||
HOWABOUTNEXTTASKTHEN:
|
||
CMP DS:[BX],OFFSET DUMRET
|
||
JE FOUNDFREETASK
|
||
ADD BX,2
|
||
CMP BX,NOOFTASKS*2+OFFSET TASKLIST
|
||
JNE HOWABOUTNEXTTASKTHEN
|
||
; DEBUGMESS 40,2,"MAX NO OF TASKS"
|
||
JMP ERRQUIT
|
||
FOUNDFREETASK:
|
||
INC NO_OF_ACTIVE_TASKS
|
||
MOV DS:[BX],DX
|
||
IF DEBUG
|
||
debugVAL 0,11,NO_OF_ACTIVE_TASKS,"No of active tasks="
|
||
ENDIF
|
||
RETN
|
||
DOADDTASK ENDP
|
||
|
||
DO_TASKS PROC NEAR
|
||
MOV CX,NOOFTASKS
|
||
MOV BX,OFFSET TASKLIST
|
||
DONXTTASK:
|
||
PUSH CX
|
||
PUSH BX
|
||
MOV SAVESOURCE,BX
|
||
CALL [BX] ;M<>STE VARA [BX]!
|
||
POP BX
|
||
POP CX
|
||
ADD BX,2
|
||
LOOP DONXTTASK
|
||
RETN
|
||
DO_TASKS ENDP
|
||
|
||
|
||
DOEFFECTBRACK PROC NEAR ;INPUT: SI=OFFSET EFFECT STRUCTURE
|
||
;OUTPUT: AL=1 IF TS DONE ELSE AL=0
|
||
LODSW ;OFFSET JINGLE STRUC
|
||
OR AX,AX
|
||
JZ NOJINGLE2
|
||
PUSH SI
|
||
PLAYJINGLE AX
|
||
POP SI
|
||
|
||
JUMP_2_JUMP_2:
|
||
UPDAT_INFOBAR
|
||
|
||
pusha
|
||
mov di,offset siffrorna ;hela scoren!!
|
||
call addscorebcd
|
||
MOV SCORECHANGED,TRUE
|
||
popa
|
||
add si,12 ;SCORE SIZE=12
|
||
pusha
|
||
mov di,offset BONUSsiffrorna
|
||
call addscorebcd
|
||
popa
|
||
add si,12 ;BONUS SIZE=12
|
||
|
||
LODSW ;OFFSET DOT STRUC
|
||
OR AX,AX
|
||
JZ NO_EFF_IT_IS_STAR_WARS
|
||
MOV BX,AX
|
||
CALL DO_MATRIX ;KALLA P<> JOHAN!
|
||
MOV AL,1
|
||
RETN
|
||
NO_EFF_IT_IS_STAR_WARS:
|
||
MOV AL,0
|
||
RETN
|
||
NOJINGLE2:
|
||
LODSB ;PRIORITY
|
||
JMP JUMP_2_JUMP_2
|
||
DOEFFECTBRACK ENDP
|
||
|
||
|
||
DOEFFECT PROC NEAR ;INPUT: SI=OFFSET EFFECT STRUCTURE
|
||
;OUTPUT: AL=1 IF TS DONE ELSE AL=0
|
||
LODSW ;OFFSET JINGLE STRUC
|
||
OR AX,AX
|
||
JZ NOJINGLE
|
||
CMP AL,BYTE PTR S_LOSTBALL ;CP!? (ANNARS H™RS INTE LOSTBALL!)
|
||
JE DOEFF
|
||
CMP INH_EFF,TRUE
|
||
JE NOEFF1
|
||
CMP SPECIALMODE,TRUE
|
||
JE NOEFF1
|
||
DOEFF: PUSH SI
|
||
PLAYJINGLE AX
|
||
POP SI
|
||
NOEFF1:
|
||
JUMP_2_JUMP:
|
||
PUSHF
|
||
|
||
;Gabriel! H„r „r hur man addar p† en score!!
|
||
;detta „r upp till dig att r”ja upp!
|
||
;(si pekar p† effektscoren!!)
|
||
;JAHAPP, MEN DET ŽR JU REDAN GJORT!
|
||
|
||
UPDAT_INFOBAR
|
||
|
||
pusha
|
||
mov di,offset siffrorna ;hela scoren!!
|
||
call addscorebcd
|
||
MOV SCORECHANGED,TRUE
|
||
popa
|
||
add si,12 ;SCORE SIZE=12
|
||
|
||
pusha
|
||
mov di,offset BONUSsiffrorna
|
||
call addscorebcd
|
||
popa
|
||
add si,12 ;BONUS SIZE=12
|
||
|
||
POPF
|
||
JC SORRY_MORE_IMPORTANT_STUFF_TO_DO
|
||
LODSW ;OFFSET DOT STRUC
|
||
OR AX,AX
|
||
JZ NO_EFF_IT_IS
|
||
CMP INH_EFF,TRUE
|
||
JE NOEFF2
|
||
CMP SPECIALMODE,TRUE
|
||
JE NOEFF2
|
||
MOV BX,AX
|
||
CALL DO_MATRIX ;KALLA P<> JOHAN!
|
||
MOV AL,1
|
||
RETN
|
||
NOEFF2:
|
||
NO_EFF_IT_IS:
|
||
SORRY_MORE_IMPORTANT_STUFF_TO_DO:
|
||
MOV EOTS,TRUE
|
||
MOV AL,0
|
||
RETN
|
||
NOJINGLE:
|
||
LODSB ;PRIORITY
|
||
CMP AL,CURRENT_PRIORITY
|
||
JMP JUMP_2_JUMP
|
||
DOEFFECT ENDP
|
||
|
||
DOPLAYJINGLE PROC NEAR ;INPUT: SI=OFFSET JINGLE STRUCTURE
|
||
OR SI,SI
|
||
JZ NOPLAYJINGLE
|
||
LODSB ;JINGLE NO
|
||
NIL AH
|
||
MOV BX,AX
|
||
LODSB ;REPEAT ??? ;CP?
|
||
;AL=REPEAT
|
||
push ax
|
||
xchg JINGLEJUMPCNT,AL
|
||
mov bp,ax
|
||
LODSB ;PRIORITY
|
||
CMP AL,CURRENT_PRIORITY
|
||
JB NOTNOW_ASHOLE ;SAME PRIORITY OVERRIDES!
|
||
MOV CURRENT_PRIORITY,AL
|
||
MOV AL,16
|
||
PUSH BX
|
||
INT 66H ;AL=FORCE POSITION, BX=THE POSITION
|
||
POP BX ;ret: AL=OLD POSITION
|
||
|
||
pop dx ; utifall att jinglehandlern har gjort
|
||
mov jinglejumpcnt,dl ; sitt under tiden.....
|
||
|
||
MOV JINGLE_READY_ANIM,FALSE
|
||
MOV JINGLE_READY_LOGIC,FALSE
|
||
IF DEBUG
|
||
DEBUGVAL 0,17,BX,"SENASTE BEORDRAD JINGLE: "
|
||
ENDIF
|
||
MOV BL,AL
|
||
XOR BH,BH
|
||
IF DEBUG
|
||
DEBUGVAL 0,15,BX,"RETURNED JINGLE POSITION: "
|
||
INC CS:JINGLEORDER
|
||
DEBUGVAL 0,16,CS:JINGLEORDER,"JINGLE ORDER NO: "
|
||
ENDIF
|
||
mov bx,bp
|
||
cmp bl,0
|
||
jg noplayjingle
|
||
CMP AL,62
|
||
JE NOPLAYJINGLE
|
||
MOV LASTJINGLE,AL
|
||
NOPLAYJINGLE:
|
||
CLC
|
||
RETN
|
||
NOTNOW_ASHOLE:
|
||
pop ax ;trash
|
||
STC
|
||
RETN
|
||
JINGLEORDER DW 0
|
||
DOPLAYJINGLE ENDP
|
||
|
||
|
||
;******************************************************************************
|
||
|
||
DOADVANCE PROC NEAR ;FN: LIGHT NEXT LIGHT IN LIST
|
||
;INPUT: SI=OFFSET TO THE LIST
|
||
; LIST STRUC: DB COUNTER,LNO1,LNO2,...,-1
|
||
;OUTPUT: -C- IF END OF LIST REACHED
|
||
PUSH SI
|
||
LODSB ;GET LIST COUNTER
|
||
NIL AH
|
||
ADD SI,AX
|
||
LODSB ;AL=LIGHT TO LIGHTED
|
||
PUSH SI
|
||
LIGHTON AL ;TURN ON CORRECT LIGHT
|
||
POP SI
|
||
LODSB ;AL=NEXT LIGHT, IF -1: END OF LIST
|
||
CMP AL,-1
|
||
JE REACHED_END_OF_LIST
|
||
POP SI
|
||
INC BYTE PTR [SI] ;INC LIST COUNTER
|
||
CLC
|
||
RETN
|
||
REACHED_END_OF_LIST:
|
||
POP SI
|
||
MOV BYTE PTR [SI],0 ;RESET LIST COUNTER
|
||
STC
|
||
RETN
|
||
DOADVANCE ENDP
|
||
|
||
CHECK_TARGETS PROC NEAR
|
||
CMP TILTFLAG,TRUE
|
||
JE QCT
|
||
CMP EXAHITX,0
|
||
JNZ ITSAHIT
|
||
CMP EXAHITY,0
|
||
JZ NOHIT
|
||
ITSAHIT:
|
||
MOV CX,EXAHITX
|
||
MOV DX,EXAHITY
|
||
ADD DX,SCREENPOSY ;CP!? DET SKA NOG VA S<> HŽR
|
||
MOV EXAHITX,0
|
||
MOV EXAHITY,0
|
||
MOV SI,OFFSET ZONLISTA_L
|
||
CMP BALLHIGH,TRUE
|
||
JE NOHIT
|
||
JMP STARTITHERE3
|
||
NASTAAREA3:
|
||
POP SI
|
||
ADD SI,5*2
|
||
STARTITHERE3:
|
||
PUSH SI
|
||
LODSW
|
||
OR AX,AX
|
||
JZ NOMOREAREAS3
|
||
CMP CX,AX
|
||
JB NASTAAREA3
|
||
LODSW
|
||
CMP DX,AX
|
||
JB NASTAAREA3
|
||
LODSW
|
||
CMP CX,AX
|
||
JA NASTAAREA3
|
||
LODSW
|
||
CMP DX,AX
|
||
JA NASTAAREA3
|
||
LODSW
|
||
CALL AX
|
||
NOMOREAREAS3:
|
||
POP SI
|
||
NOHit:
|
||
QCT: RETN
|
||
CHECK_TARGETS ENDP
|
||
|
||
CHECK_LEVELS PROC NEAR
|
||
MOV CX,SC_X
|
||
ADD CX,BALLH/2
|
||
MOV DX,SC_Y
|
||
ADD DX,BALLH/2
|
||
ADD DX,SCREENPOSY ;CP!? DET SKA NOG VA S<> HŽR
|
||
MOV SI,OFFSET LEVEL1LISTA
|
||
CMP BALLHIGH,TRUE
|
||
JE BALLHGH2
|
||
MOV SI,OFFSET LEVEL2LISTA
|
||
BALLHGH2:
|
||
JMP STARTITHERE2
|
||
NASTAAREA2:
|
||
POP SI
|
||
ADD SI,4*2
|
||
STARTITHERE2:
|
||
PUSH SI
|
||
LODSW
|
||
CMP AX,-1
|
||
JE NOMOREAREAS2
|
||
CMP CX,AX
|
||
JB NASTAAREA2
|
||
LODSW
|
||
CMP DX,AX
|
||
JB NASTAAREA2
|
||
LODSW
|
||
CMP CX,AX
|
||
JA NASTAAREA2
|
||
LODSW
|
||
CMP DX,AX
|
||
JA NASTAAREA2
|
||
NOT BALLHIGH
|
||
NOMOREAREAS2:
|
||
POP SI
|
||
RETN
|
||
CHECK_LEVELS ENDP
|
||
|
||
|
||
CHECK_AREAS PROC NEAR
|
||
MOV CX,SC_X
|
||
ADD CX,BALLH/2
|
||
MOV DX,SC_Y
|
||
ADD DX,BALLH/2
|
||
ADD DX,SCREENPOSY ;CP!? DET SKA NOG VA S<> HŽR
|
||
MOV SI,OFFSET AREALISTA_U
|
||
CMP BALLHIGH,TRUE
|
||
JE BALLHGH
|
||
MOV SI,OFFSET AREALISTA_L
|
||
BALLHGH:
|
||
CMP TILTFLAG,TRUE
|
||
JNE NOT_TILT_AREOR
|
||
MOV SI,OFFSET AREALISTA_U_T
|
||
CMP BALLHIGH,TRUE
|
||
JE BALLHGH3
|
||
MOV SI,OFFSET AREALISTA_L_T
|
||
BALLHGH3:
|
||
NOT_TILT_AREOR:
|
||
JMP STARTITHERE
|
||
NASTAAREA:
|
||
POP SI
|
||
ADD SI,5*2
|
||
STARTITHERE:
|
||
PUSH SI
|
||
LODSW
|
||
OR AX,AX
|
||
JZ NOMOREAREAS
|
||
CMP CX,AX
|
||
JB NASTAAREA
|
||
LODSW
|
||
CMP DX,AX
|
||
JB NASTAAREA
|
||
LODSW
|
||
CMP CX,AX
|
||
JA NASTAAREA
|
||
LODSW
|
||
CMP DX,AX
|
||
JA NASTAAREA
|
||
LODSW
|
||
CMP LASTCHECK,AX
|
||
JE CALLREADY
|
||
MOV LASTCHECK,AX
|
||
CALL AX
|
||
MOVE LASTAREA,LASTCHECK
|
||
JMP CALLREADY
|
||
NOMOREAREAS:
|
||
MOV LASTCHECK,0
|
||
CALLREADY:
|
||
POP SI
|
||
RETN
|
||
CHECK_AREAS ENDP
|
||
|
||
SPRINGIT: ;THIS not IS A TASK anymore, not TRIGGED BY KEYINT
|
||
CMP DNPRESSED,FALSE
|
||
JE NO_WAY
|
||
CMP SPRINGPOS,(SPRINGH-1)*2
|
||
JAE NO_WAY
|
||
INC SPRINGPOS
|
||
CALL PUTSPRING
|
||
NO_WAY: RETN
|
||
|
||
SPRINGSTEEN: ;BRUCE!
|
||
CMP MOUSEINSTALLED,TRUE
|
||
JNE NOT_OKIDOK
|
||
MOV AX,03H
|
||
INT 33H
|
||
CMP DL,MOUSEMIDDLE
|
||
JB MOVED_UP
|
||
JNA DIDNT_MOVE
|
||
|
||
CMP SPRINGPOS,(SPRINGH-1)*2
|
||
JAE _4GETIT
|
||
INC SPRINGPOS
|
||
JMP SPRINGPOS_CALCED
|
||
MOVED_UP:
|
||
CMP SPRINGPOS,0
|
||
JZ _4GETIT
|
||
DEC SPRINGPOS
|
||
SPRINGPOS_CALCED:
|
||
PUSH BX
|
||
CALL PUTSPRING
|
||
MOV CX,0
|
||
MOV DX,MOUSEMIDDLE
|
||
MOV AX,04H
|
||
INT 33H ;SET MOUSE YPOS TO MOUSEMIDDLE
|
||
POP BX
|
||
DIDNT_MOVE:
|
||
_4GETIT:
|
||
TEST BL,1
|
||
JZ NOSPRINGUP
|
||
MOV SPRINGTASK,OFFSET SPRINGUP
|
||
NOSPRINGUP:
|
||
NOT_OKIDOK:
|
||
CALL SPRINGIT
|
||
RETN
|
||
|
||
springup:
|
||
mov Cl,springpos
|
||
xor Ch,Ch
|
||
JCXZ NOUP
|
||
CMP SPRING_VALID,FALSE
|
||
JE DOUP2
|
||
cmp hi_res,true
|
||
je nilsbedrupp
|
||
mov ax,(-5000/15)/2*TT/NN
|
||
jmp kukenkarl
|
||
nilsbedrupp:
|
||
mov ax,(-5000/15)/2
|
||
kukenkarl:
|
||
imul Cx
|
||
mov bp,ax
|
||
mov ax,slump_countern
|
||
and ax,255
|
||
sub bp,ax
|
||
CMP MAKE_BAD,TRUE
|
||
JE BADDAREN
|
||
SETBALLSPEED 0,bp ;cp!
|
||
BADDAREN:
|
||
mova rotation,slump_countern
|
||
and rotation,15 ;cp!?
|
||
DOUP2:
|
||
MOV AL,SPRINGPOS
|
||
XOR AH,AH
|
||
SHL AX,6
|
||
MOV BL,(SPRINGH-1)*2
|
||
DIV BL ;AL=CALCULATED SPRING SOUND VOLUME
|
||
soundeffect sfjader,AL
|
||
mov springpos,0
|
||
call putspring
|
||
CMP MOUSEINSTALLED,TRUE
|
||
JNE NO_M_INST
|
||
MOV AX,04H
|
||
NIL CX
|
||
MOV DX,MOUSEMIDDLE
|
||
INT 33H ;SET MOUSE YPOS TILL MOUSEMIDDLE
|
||
NO_M_INST:
|
||
NOUP:
|
||
MOV SPRINGTASK,OFFSET SPRINGSTEEN ;INTE PRINCE
|
||
retn
|
||
|
||
INIT_MOUSE:
|
||
MOVE ES,0
|
||
CMP WORD PTR ES:[33H*4],0
|
||
JNE OKIDOK
|
||
CMP WORD PTR ES:[33H*4+2],0
|
||
JE NOT_OKIDOKI
|
||
OKIDOK: MOV MOUSEINSTALLED,TRUE
|
||
JMP OVERHOPP
|
||
NOT_OKIDOKI:
|
||
MOV MOUSEINSTALLED,FALSE
|
||
OVERHOPP:
|
||
MOVE ES,0A000H
|
||
MOV AX,0
|
||
INT 33H ;RESET MOUSEDRIVER/CHECK IF MOUSE INSTALLED
|
||
CMP AX,0
|
||
JE NOMOUSEINSTALLED
|
||
MOV AX,08H
|
||
MOV CX,0 ;MIN MOUSE POS
|
||
MOV DX,MOUSETOTAL ;MAX MOUSE POS
|
||
INT 33H
|
||
MOV AX,0FH
|
||
MOV CX,8
|
||
MOV DX,16*4
|
||
INT 33H ;SET MICKEY TO PIXEL RATIO
|
||
RETN
|
||
NOMOUSEINSTALLED:
|
||
MOV MOUSEINSTALLED,FALSE
|
||
RETN
|
||
|
||
GATE_STRUC STRUC
|
||
G_POS DW ?
|
||
G_NEG DW ?
|
||
G_WHERE DW ?
|
||
G_WIDTH DW ?
|
||
G_HEIGHT DW ?
|
||
ENDS
|
||
|
||
MOVE_MASK_DATA PROC NEAR ;FN: OPENS OR CLOSES GATES
|
||
;INPUT: DS:SI=SOURCE, ES:DI=DEST
|
||
; DX=WIDTH, CX=HEIGHT
|
||
NEXTLINE:
|
||
PUSH CX
|
||
MOV CX,DX
|
||
PUSH DI
|
||
REP MOVSB
|
||
POP DI
|
||
ADD DI,40
|
||
POP CX
|
||
LOOP NEXTLINE
|
||
RETN
|
||
MOVE_MASK_DATA ENDP
|
||
MOVE_MASK_DATA_b PROC NEAR ;FN: OPENS OR CLOSES GATES
|
||
;INPUT: DS:SI=SOURCE, ES:DI=DEST
|
||
; DX=WIDTH, CX=HEIGHT
|
||
NEXTLINE3:
|
||
PUSH CX
|
||
MOV CX,DX
|
||
PUSH DI
|
||
REP MOVSB
|
||
add si,dx
|
||
add si,dx
|
||
POP DI
|
||
ADD DI,40
|
||
POP CX
|
||
LOOP NEXTLINE3
|
||
RETN
|
||
MOVE_MASK_DATA_b ENDP
|
||
|
||
DO_PUT_GATE_POS_HIGH: ;INPUT BX=OFFS GATE
|
||
MOV SI,[BX].G_POS
|
||
MOV DI,[BX].G_WHERE
|
||
MOVE ES,MASK2_2
|
||
MOV DX,[BX].G_WIDTH
|
||
MOV CX,[BX].G_HEIGHT
|
||
ADD SI,DX
|
||
CALL MOVE_MASK_DATA_B
|
||
RETN
|
||
|
||
DO_PUT_GATE_NEG_HIGH: ;INPUT BX=OFFS GATE
|
||
MOV SI,[BX].G_NEG
|
||
MOV DI,[BX].G_WHERE
|
||
MOVE ES,MASK2_2
|
||
MOV DX,[BX].G_WIDTH
|
||
MOV CX,[BX].G_HEIGHT
|
||
ADD SI,DX
|
||
CALL MOVE_MASK_DATA_B
|
||
RETN
|
||
|
||
DO_PUT_GATE_POS_LOW: ;INPUT BX=OFFS GATE
|
||
MOV SI,[BX].G_POS
|
||
MOV DI,[BX].G_WHERE
|
||
MOVE ES,MASK1_2
|
||
MOV DX,[BX].G_WIDTH
|
||
MOV CX,[BX].G_HEIGHT
|
||
ADD SI,DX
|
||
CALL MOVE_MASK_DATA_B
|
||
RETN
|
||
|
||
DO_PUT_GATE_NEG_LOW: ;INPUT BX=OFFS GATE
|
||
MOV SI,[BX].G_NEG
|
||
MOV DI,[BX].G_WHERE
|
||
MOVE ES,MASK1_2
|
||
MOV DX,[BX].G_WIDTH
|
||
MOV CX,[BX].G_HEIGHT
|
||
ADD SI,DX
|
||
CALL MOVE_MASK_DATA_B
|
||
RETN
|
||
|
||
INIT_INTS PROC NEAR
|
||
MOV AX,11 ;INIT VBLANK INT
|
||
MOV BL,100
|
||
MOV DX,OFFSET VBLANK_INT
|
||
MOVE ES,CS
|
||
INT 66H
|
||
|
||
MOV CX,LATE_INTERRUPT_RASTER_LO*2
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES1
|
||
MOV CX,LATE_INTERRUPT_RASTER_HI*2
|
||
NOTHIRES1:
|
||
MOV DX,OFFSET LATE_RASTER_INTERRUPT
|
||
MOV BL,200
|
||
MOVE ES,CS
|
||
MOV AX,12 ;INIT RASTER INT
|
||
INT 66H
|
||
RETN
|
||
INIT_INTS ENDP
|
||
|
||
GO_GAME_MODE PROC NEAR ;TURNS OFF THE DEMO MODE AND STARTS THE GAME
|
||
MOV DEMOMODE,FALSE
|
||
RETN
|
||
GO_GAME_MODE ENDP
|
||
|
||
GO_DEMO_MODE PROC NEAR ;TURNS ON THE DEMO MODE
|
||
MOV CS:ALREADY_QUITTING,FALSE
|
||
MOV CS:KEYBOARD_ENABLED,TRUE
|
||
MOV DEMOMODE,TRUE
|
||
RETN
|
||
GO_DEMO_MODE ENDP
|
||
|
||
|
||
VBLANK_INT_DEMO:
|
||
MOVE DS,DATA
|
||
SAVEGFXREGS
|
||
|
||
CALL FLASH
|
||
CALL MATRIX_BLINKOR
|
||
|
||
IF MARGIT
|
||
SETMARG 14
|
||
ENDIF
|
||
|
||
cmp time_left,false
|
||
je skip_matrixD ;no time left! Skip it!!
|
||
; mov time_left,false ;ok, time was left last time!
|
||
|
||
MOV AL,CS:INSIDE_MATRIX
|
||
MOV CS:INSIDE_MATRIX,TRUE
|
||
CMP AL,TRUE
|
||
JE SKIP_MATRIXD
|
||
CALL DO_THE_DOTMATRIX ;updatera d† matrixen!
|
||
MOV CS:INSIDE_MATRIX,FALSE
|
||
skip_matrixD:
|
||
CALL DOLIGHTS
|
||
|
||
IF MARGIT
|
||
RESTOREMARG
|
||
ENDIF
|
||
IF MARGIT
|
||
SETMARG 0
|
||
ENDIF
|
||
|
||
RESTOREGFXREGS
|
||
MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG
|
||
RETF
|
||
|
||
|
||
LATE_RASTER_INTERRUPT_DEMO:
|
||
MOVE DS,DATA
|
||
CMP INTERRUPTS_ON,TRUE
|
||
JE LRINTOKD
|
||
MOV AX,0 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER F<>R HAN KLARA
|
||
RETF ;RET
|
||
LRINTOKD:
|
||
SAVEGFXREGS
|
||
MOV AX,BANH-(SH_LO-SPLH)
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES7
|
||
MOV AX,BANH-(SH_HI-SPLH)
|
||
NOTHIRES7:
|
||
CMP SCREENFORCE,AX
|
||
JL NOT_BOTTOM
|
||
MOV CARMEN,-1
|
||
NOT_BOTTOM:
|
||
CMP SCREENFORCE,0
|
||
JG NOT_TOP
|
||
MOV CARMEN,1
|
||
NOT_TOP:
|
||
MOV AX,CARMEN
|
||
ADD SCREENFORCE,AX
|
||
CALL SETSCREENSTART
|
||
|
||
CMP F1F8_CODE,0 ;TAR HAND OM F1F8_CODE I DEMOMODE
|
||
JZ NOF1F8
|
||
MOV AL,F1F8_CODE
|
||
MOV F1F8_CODE,0
|
||
SUB AL,3BH-1 ;3BH=CODE FOR F1
|
||
MOV PLAYERS,AL
|
||
ADD AL,'0'+7
|
||
MOV NO_OF_PLAYERS_TEXT[8],AL
|
||
MOV BX,OFFSET first_no_of_playersTS
|
||
CALL DO_MATRIX
|
||
SOUNDEFFECT S_ADDPLAYER2,0
|
||
|
||
MOV SCREENFORCE,-1
|
||
|
||
CALL GO_GAME_MODE ;TO GAME FROM DEMO
|
||
|
||
CALL WHEN_NEW_GAME_RESET
|
||
CALL WHEN_NEW_GAME_RESET_TABLE
|
||
|
||
CALL GAME_MUSIC
|
||
|
||
CALL NEW_BALL
|
||
|
||
MOV ADDPLAYERS,FALSE
|
||
ADDTASK ALLOW_ADDPL ;TILL†T INGA NYA ADDS F”RNS OM 30 SYNCAR
|
||
|
||
NOF1F8:
|
||
RESTOREGFXREGS
|
||
MOV AX,12345 ;MEDDELA TILL MUSIKRUTINEN ATT KRISER KLARAR JAG
|
||
RETF
|
||
|
||
ALLOW_ADDPL:
|
||
WAITSYNCS 15
|
||
MOV ADDPLAYERS,TRUE
|
||
SUICIDE
|
||
|
||
SNART_NEW_BALL:
|
||
WAITSYNCS 30
|
||
CALL NEW_BALL_PART_TWO
|
||
SUICIDE
|
||
|
||
;******************************************************************************
|
||
|
||
|
||
;*************************** Updatera alla spelares pstruc!!!! ***********
|
||
UPDATE_P_STRUC_4_ALL_PLAYERS:
|
||
MOV BX,0
|
||
MOV CX,8
|
||
THE_PLAYERS:
|
||
PUSH BX CX
|
||
MOV AX,SIZE PLAYER_STRUC
|
||
MUL BX
|
||
MOV BX,AX ;BX=INDEX TO CORRECT PLAYER DATA IN PLAYER_AREA
|
||
CALL VARS_2_P_STRUC_2
|
||
POP CX BX
|
||
INC BX
|
||
LOOP THE_PLAYERS
|
||
RETN
|
||
|
||
|
||
FLASH PROC NEAR
|
||
MOVE DS,DATA
|
||
MOV SI,OFFSET FLASHLIST
|
||
MOVE ES,DS
|
||
FLASHAGAIN:
|
||
CMP WORD PTR DS:[SI],-1
|
||
JZ NOMOREFLASHING
|
||
PUSH SI
|
||
CALL DOTHISFLASH
|
||
POP SI
|
||
ADD SI,10
|
||
JMP FLASHAGAIN
|
||
NOMOREFLASHING:
|
||
RETN
|
||
FLASH ENDP
|
||
|
||
DOTHISFLASH PROC NEAR ;INPUT:SI
|
||
MOV DI,SI
|
||
LODSW
|
||
INC AX
|
||
STOSW
|
||
MOV BP,AX
|
||
LODSW
|
||
MOV DI,AX
|
||
LODSW
|
||
CMP BP,AX
|
||
JE TURNITOFF
|
||
LODSW
|
||
CMP BP,AX
|
||
JE TURNITON
|
||
TURNBACK:
|
||
RETN
|
||
TURNITOFF:
|
||
LODSW
|
||
LODSW
|
||
LOFF AL
|
||
JMP TURNBACK
|
||
TURNITON:
|
||
LODSW
|
||
PUSH SI
|
||
PUSH DI
|
||
PUSH ES
|
||
LON AL
|
||
POP ES
|
||
POP AX
|
||
POP DI
|
||
SUB DI,10
|
||
STOSW
|
||
JMP TURNBACK
|
||
DOTHISFLASH ENDP
|
||
|
||
RECALCFLASHLIST PROC NEAR
|
||
MOVE ES,DS
|
||
MOV SI,OFFSET FLASHLIST
|
||
NEXTPOSTEN:
|
||
CMP WORD PTR DS:[SI],-1
|
||
JE NOMOREFPOSTS
|
||
PUSH SI
|
||
MOV DI,SI
|
||
MOVSW ;CNT
|
||
LODSW
|
||
STOSW ;1ST
|
||
MOV BX,AX
|
||
LODSW
|
||
ADD AX,BX
|
||
MOV BX,AX
|
||
STOSW ;OFF
|
||
LODSW
|
||
ADD AX,BX
|
||
STOSW ;ON
|
||
POP SI
|
||
ADD SI,10
|
||
JMP NEXTPOSTEN
|
||
NOMOREFPOSTS:
|
||
RETN
|
||
RECALCFLASHLIST ENDP
|
||
|
||
INIT_SOUND PROC NEAR
|
||
OPENFILE SOUNDCFG
|
||
JC NOSOUNDCFG
|
||
if musikkaos
|
||
else
|
||
READFILE BX,13,DRV ;get name of selected sound driver
|
||
endif
|
||
CLOSEFILE BX
|
||
|
||
MOV AX,DS
|
||
MOV ES,AX
|
||
MOV AX,4B00H ;fn 4b = load and execute exe file
|
||
MOV BX,OFFSET PARMS
|
||
MOV DX,OFFSET DRV
|
||
INT 21H ;LOAD DRIVER
|
||
|
||
MOV AL,19
|
||
MOV DX,OFFSET JINGLE_HANDLER
|
||
MOVE ES,CS
|
||
INT 66H
|
||
|
||
MOV AX,18 ;fn 18
|
||
MOV DX,OFFSET MODUL
|
||
INT 66H ;LOAD MODULE
|
||
IF_ERROR 1,outofmemory
|
||
IF_ERROR 3,cantfindmod
|
||
IF_ERROR 4,errorloadingmod
|
||
|
||
SLACKDRIVELED
|
||
CLC
|
||
RETN
|
||
NOSOUNDCFG:
|
||
MOV AX,3
|
||
INT 10H
|
||
PRINTMESS "Can't find sound configurations file."
|
||
STC
|
||
RETN
|
||
ENDP
|
||
INIT_HIGHS PROC NEAR ;READ HIGH-SCORES
|
||
OPENFILE HI_SCORE_FILE
|
||
JC NOFILE
|
||
READFILE BX,16*4,HI_SCORE_LIST
|
||
CLOSEFILE BX
|
||
NOFILE: RETN
|
||
INIT_HIGHS ENDP
|
||
SAVE_HIGHS PROC NEAR ;WRITE HIGH-SCORES
|
||
CREATEFILE HI_SCORE_FILE
|
||
JC NOFILE2
|
||
WRITEFILE BX,16*4,HI_SCORE_LIST
|
||
CLOSEFILE BX
|
||
NOFILE2:RETN
|
||
SAVE_HIGHS ENDP
|
||
INIT_MATRIX PROC NEAR
|
||
PUSHA
|
||
MOV DOTRUT,OFFSET NODOT
|
||
MOV SISA,0
|
||
MOV BX,OFFSET CLEARTS
|
||
CALL DO_MATRIX ;RENSA UPP LITE!!
|
||
|
||
UPDAT_SCORE
|
||
POPA
|
||
RETN
|
||
INIT_MATRIX ENDP
|
||
set_360x350:
|
||
mov ax,13h
|
||
int 10h ; Video display ah=functn 00h
|
||
; set display mode in al
|
||
mov dx,3C4h
|
||
mov al,4
|
||
out dx,al ; port 3C4h, EGA sequencr index
|
||
; al = 4, memory mode select
|
||
mov dx,3C5h
|
||
mov al,6
|
||
out dx,al ; port 3C5h, EGA sequencr func
|
||
mov dx,3C4h
|
||
mov al,2
|
||
out dx,al ; port 3C4h, EGA sequencr index
|
||
; al = 2, map mask register
|
||
mov dx,3C5h
|
||
mov al,0Fh
|
||
out dx,al ; port 3C5h, EGA sequencr func
|
||
|
||
mov ax,0A000h
|
||
mov es,ax
|
||
mov cx,0ffffh
|
||
mov al,0
|
||
mov di,0
|
||
cld
|
||
rep stosb
|
||
|
||
mov dx,3C2h
|
||
mov al,0A7H ;0E7h
|
||
out dx,al ; port 3C2h, EGA misl out reg
|
||
mov dx,3D4h
|
||
mov al,11h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 11h, light pen low
|
||
mov dx,3D5h
|
||
in al,dx ; port 3D5h, CGA/EGA indxd data
|
||
and al,7
|
||
push ax
|
||
mov dx,3D4h
|
||
mov al,11h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 11h, light pen low
|
||
pop ax
|
||
mov dx,3D5h
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
mov dx,3D4h
|
||
mov al,0
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 0, horiz char total
|
||
mov dx,3D5h
|
||
mov al,6Bh ; 'k'
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,1
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 1, horiz char display
|
||
mov dx,3D5h
|
||
mov al,59h ; 'Y'
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,2
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 2, horz sync position
|
||
mov dx,3D5h
|
||
mov al,5Ah ; 'Z'
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,3
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 3, horiz sync width
|
||
mov dx,3D5h
|
||
mov al,8Eh
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,4
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
|
||
mov dx,3D5h
|
||
mov al,5Eh-CENTSCREEN ; '^'
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
mov dx,3D4h
|
||
mov al,5
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 5, vert total adjust
|
||
mov dx,3D5h
|
||
mov al,8Ah-CENTSCREEN
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,6
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 6, vert char displayd
|
||
mov dx,3D5h
|
||
mov al,0BFH ;0Dh ;VERTICAL TOTAL
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
mov dx,3D4h
|
||
mov al,7
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 7, vert sync position
|
||
mov dx,3D5h
|
||
mov al,1FH ;3Eh ; '>'
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,9
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 9, max raster address
|
||
mov dx,3D5h
|
||
mov al,40h ; '@'
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,10h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 10h, light pen high
|
||
mov dx,3D5h
|
||
mov al,83H ;0EAh
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
mov dx,3D4h
|
||
mov al,12h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 12h, vert end scan line
|
||
mov dx,3D5h
|
||
mov al,05DH ;0DFh
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
mov dx,3D4h
|
||
mov al,13h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 13h, offset line width
|
||
mov dx,3D5h
|
||
mov al,BPL/2 ;2Dh ; '-'
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
mov dx,3D4h
|
||
mov al,14h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 14h, underline scan lin
|
||
mov dx,3D5h
|
||
mov al,0FH ;0
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,15h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 15h, vert start blankng
|
||
mov dx,3D5h
|
||
mov al,063H ;E7h
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,16h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 16h, vert end blanking
|
||
mov dx,3D5h
|
||
mov al,0BAH ;6
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
mov dx,3D4h
|
||
mov al,17h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 17h, mode control
|
||
mov dx,3D5h
|
||
mov al,0E3h
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
MOV DX,3D4H ;SET HORIZ END
|
||
MOV AL,01H
|
||
MOV AH,80-1 ;(DET MAN VILL HA GENOM 4)
|
||
OUT DX,AX
|
||
|
||
mov dx,3D4h
|
||
mov al,11h
|
||
out dx,al ; port 3D4h, CGA/EGA reg index
|
||
; al = 11h, light pen low
|
||
mov dx,3D5h
|
||
mov al,0A5H ;0ACh
|
||
out dx,al ; port 3D5h, CGA/EGA indxd data
|
||
|
||
|
||
retn
|
||
|
||
INIT_GFX PROC NEAR
|
||
CALL SET_MCGAB
|
||
CALL SET240
|
||
IF HZ50
|
||
call set50hz
|
||
ENDIF
|
||
|
||
MOVE DS,DATA
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES13
|
||
CALL SET_360X350
|
||
NOTHIRES13:
|
||
|
||
CALL SETSCREENSTART
|
||
IF RES600
|
||
ELSE
|
||
CALL SETSPLIT
|
||
ENDIF
|
||
|
||
mov bx,0
|
||
call setpal ;sl„ck sk„rmen SLŽCK
|
||
|
||
SET_ES 0A000H
|
||
MOV AX,STAGE1_1
|
||
MOV ES,AX
|
||
MOV AX,0 ;xpos
|
||
MOV BX,0+SPLH ;ypos
|
||
MOV CX,SW
|
||
MOV BP,10b ;bp=0: s„tt inte paletten
|
||
MOV DX,0 ;es:dx=adress till bild
|
||
CALL UNPKLBM
|
||
MOV AX,STAGE1_2
|
||
MOV ES,AX
|
||
MOV AX,0 ;xpos
|
||
MOV BX,144+SPLH ;ypos
|
||
MOV CX,SW
|
||
MOV BP,10b ;bp=0: s„tt inte paletten
|
||
MOV DX,0 ;es:dx=adress till bild
|
||
CALL UNPKLBM
|
||
MOV AX,STAGE1_3
|
||
MOV ES,AX
|
||
MOV AX,0 ;xpos
|
||
MOV BX,288+SPLH ;ypos
|
||
MOV CX,SW
|
||
MOV BP,10b ;bp=0: s„tt inte paletten
|
||
MOV DX,0 ;es:dx=adress till bild
|
||
CALL UNPKLBM
|
||
MOV AX,STAGE1_4
|
||
MOV ES,AX
|
||
MOV AX,0 ;xpos
|
||
MOV BX,432+SPLH ;ypos
|
||
MOV CX,SW
|
||
IFDEF HALFBRIGHT
|
||
MOV BP,110b ;bp=111: s„tt paletten, HALFBRIGHT
|
||
ELSE
|
||
MOV BP,10b ;bp=11: s„tt paletten, NO HALFBRIGHT
|
||
ENDIF
|
||
|
||
MOV DX,0 ;es:dx=adress till bild
|
||
CALL UNPKLBM
|
||
|
||
mov si,dx
|
||
mova ds,stage1_4
|
||
mov di,offset CS:PALLE ;tempor„r lagringsplats
|
||
mova es,CS
|
||
mov cx,768
|
||
rep movsb
|
||
mova ds,data
|
||
|
||
COMMENT\
|
||
MOV AX,1000H
|
||
MOV BL,10H
|
||
MOV BH,1
|
||
INT 10H
|
||
\
|
||
RETN
|
||
|
||
INIT_SPRING:
|
||
CALL PUTSPRINGINGFX
|
||
mov dx,3c4h
|
||
mov ax,0f02h
|
||
out dx,ax
|
||
set_es 0a000h
|
||
mov al,00
|
||
mov di,(splh+banh)*bpl
|
||
mov cx,bpl*4
|
||
rep stosb
|
||
call putspring
|
||
RETN
|
||
INIT_GFX ENDP
|
||
PUTSPRINGINGFX PROC NEAR
|
||
PUSH DS
|
||
MOVA DS,SPRINGSEG
|
||
MOVA ES,0A000H
|
||
MOV SI,0
|
||
MOV DI,SPRINGSOURCEADR
|
||
MOV DX,3C4H
|
||
MOV AL,2
|
||
MOV CX,23
|
||
SROW: PUSH CX
|
||
MOV AH,10001B
|
||
MOV CX,10
|
||
SPR: PUSH CX
|
||
OUT DX,AX
|
||
MOVSB
|
||
ROL AH,1
|
||
JC NEWBYTE
|
||
DEC DI
|
||
NEWBYTE:POP CX
|
||
LOOP SPR
|
||
INC DI
|
||
POP CX
|
||
LOOP SROW
|
||
POP DS
|
||
RETN
|
||
ENDP
|
||
putspring proc near
|
||
mov al,springpos
|
||
shr al,1
|
||
sub al,3
|
||
mov realpos,al
|
||
mov si,springsourceadr
|
||
jge goforit
|
||
mov realpos,0
|
||
mov bl,-3
|
||
imul bl
|
||
add si,ax
|
||
goforit:
|
||
|
||
push ds
|
||
mov ax,0a000h
|
||
mov es,ax
|
||
mov al,realpos
|
||
mov bl,bpl
|
||
mul bl
|
||
add ax,springdestadr
|
||
mov di,ax
|
||
mov dx,3c4h
|
||
mov ax,0f02h
|
||
out dx,ax
|
||
|
||
cmp realpos,0
|
||
jz noclear
|
||
sub di,bpl
|
||
XOR AX,AX
|
||
mov es:[di],ax
|
||
mov ax,0302h
|
||
out dx,ax
|
||
XOR AL,AL
|
||
mov es:[di+2],al
|
||
mov ax,0f02h
|
||
out dx,ax
|
||
add di,bpl
|
||
noclear:
|
||
MOV DX,3CEH
|
||
mov Ax,4105h
|
||
out dx,ax
|
||
mov cx,springh
|
||
sub cl,realpos
|
||
mov ax,es
|
||
mov ds,ax
|
||
|
||
push cx di SI
|
||
ritaspring:
|
||
movsb
|
||
movsb
|
||
INC SI
|
||
add di,bpl-2
|
||
loop ritaspring
|
||
pop SI di cx
|
||
mov dx,3c4h
|
||
mov ax,302h
|
||
out dx,ax
|
||
add di,2
|
||
ritaspring2:
|
||
ADD SI,2
|
||
movsb
|
||
add di,bpl-1
|
||
loop ritaspring2
|
||
|
||
mov dx,3ceh
|
||
mov ax,4005h
|
||
out dx,ax
|
||
|
||
pop ds
|
||
retn
|
||
putspring endp
|
||
Set50Hz proc near
|
||
mov dx,3d4h
|
||
mov ax,0011h
|
||
out dx,ax ;unprotect 0-7 in crtc!
|
||
|
||
mov ax,07006h
|
||
out dx,ax
|
||
mov ax,0ba07h ;3e
|
||
out dx,ax
|
||
mov ax,02510h ;ea
|
||
out dx,ax
|
||
mov ax,0011h ;let be!
|
||
out dx,ax
|
||
mov ax,0ff12h ;
|
||
out dx,ax
|
||
mov ax,0ff15h ;b7
|
||
out dx,ax
|
||
mov ax,01116h ;28
|
||
out dx,ax
|
||
mov dx,3c4h
|
||
mov ax,0100h ; synchronous reset
|
||
out dx,ax ;
|
||
mov dx,3c2h ;
|
||
mov al,0e3h ; use 25 mHz dot clock, 480 lines res.
|
||
out dx,al ;
|
||
mov dx,3c4h ;
|
||
mov ax,0300h ; restart sequencer
|
||
out dx,ax ; running again
|
||
retn
|
||
endp
|
||
setsplit PROC NEAR
|
||
vga: ;bit 0-8
|
||
MOV DX,3D4H
|
||
MOV AL,11H
|
||
OUT DX,AL
|
||
INC DX
|
||
IN AL,DX
|
||
AND AL,127
|
||
OUT DX,AL ;OSKRIVSKYDDA
|
||
;bit 0-8
|
||
mov dx,3d4h
|
||
mov al,18h
|
||
|
||
MOV SPLITLINE,(SH_LO-33)*2
|
||
CMP HI_RES,TRUE
|
||
JNE NOTHIRES12
|
||
MOV SPLITLINE,SH_HI-SPLH
|
||
NOTHIRES12:
|
||
|
||
mov ah,BYTE PTR SPLITLINE
|
||
DEC AH
|
||
out dx,ax
|
||
;bit 9
|
||
|
||
mov al,BYTE PTR SPLITLINE+1
|
||
and al,1
|
||
shL al,4
|
||
mov ah,al
|
||
|
||
mov al,07
|
||
out dx,al
|
||
inc dx
|
||
in al,dx
|
||
dec dx
|
||
and al,11101111b
|
||
or al,ah
|
||
mov ah,al
|
||
mov al,7
|
||
out dx,ax
|
||
;bit 10
|
||
mov dx,3d4h
|
||
mov al,09
|
||
out dx,al
|
||
inc dx
|
||
in al,dx
|
||
dec dx
|
||
and al,10111111b
|
||
mov ah,al
|
||
mov al,09
|
||
out dx,ax
|
||
;All 10 bits set
|
||
ret
|
||
|
||
SETSPLIT ENDP
|
||
BIOSDATA DB 64 DUP(0)
|
||
SET_MCGAB PROC NEAR
|
||
SET_ES CS
|
||
MOV AX,13H
|
||
IF HIRES
|
||
FINDMODE:
|
||
PUSH AX
|
||
INT 10H
|
||
MOV AH,1BH
|
||
MOV BX,0
|
||
MOV DI,OFFSET CS:BIOSDATA
|
||
INT 10H
|
||
POP AX
|
||
CMP WORD PTR BIOSDATA[27H],256
|
||
JNE NOTTHISMODE
|
||
IF RES600
|
||
CMP BYTE PTR BIOSDATA[2AH],5 ;600 LINJER
|
||
ELSE
|
||
CMP BYTE PTR BIOSDATA[2AH],3 ;480 LINJER
|
||
ENDIF
|
||
JE MODEFOUND
|
||
NOTTHISMODE:
|
||
INC AX
|
||
JMP FINDMODE
|
||
MODEFOUND:
|
||
ELSE
|
||
INT 10H
|
||
ENDIF
|
||
MOV BX,SW ;CALC BX (SET LINE LENGTH)
|
||
SHR BX,3
|
||
MOV CX,320 ;CALC CX (HORIZ END)
|
||
SHR CX,2
|
||
DEC CX
|
||
MOV DX,3D4H ;UNLOCK
|
||
MOV AL,11H
|
||
MOV AH,0
|
||
OUT DX,AX
|
||
|
||
MOV DX,3D4H ;SET HORIZ END
|
||
MOV AL,01H
|
||
MOV AH,CL ;(DET MAN VILL HA GENOM 4)
|
||
OUT DX,AX
|
||
|
||
MOV DX,3D4H ;SET LINE LENGTH (I MINNESUPPBYGGNADEN)
|
||
MOV AL,13H
|
||
MOV AH,BL
|
||
OUT DX,AX
|
||
|
||
MOV DX,3C4H ;SET MCGAB (NO CHAIN FOUR, USE 256KB)
|
||
MOV AL,04H
|
||
OUT DX,AL
|
||
INC DX
|
||
IN AL,DX
|
||
AND AL,11110110B
|
||
OUT DX,AL
|
||
if hires
|
||
IF RES600
|
||
else
|
||
JMP NO_1417
|
||
ENDIF
|
||
ENDIF
|
||
MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE
|
||
MOV AL,14H
|
||
OUT DX,AL
|
||
INC DX
|
||
IN AL,DX
|
||
AND AL,10111111B ;10011111B SVARAR MOT KOMMENTAREN
|
||
OUT DX,AL
|
||
MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE)
|
||
MOV AL,17H
|
||
MOV AH,11100011B
|
||
OUT DX,AX
|
||
NO_1417:
|
||
if hires
|
||
ELSE
|
||
MOV DX,3CCH
|
||
IN AL,DX
|
||
MOV DX,3C2H
|
||
OR AL,11000000B
|
||
OUT DX,AL ;s„tt 240-linjers sk„rmh”jd
|
||
endif
|
||
|
||
RETN
|
||
SET_MCGAB ENDP
|
||
SET240 PROC NEAR
|
||
mov dx,03d4h
|
||
mov al,11h
|
||
out dx,al
|
||
inc dx
|
||
in al,dx
|
||
and al,7fh
|
||
out dx,al
|
||
dec dx
|
||
cld
|
||
IF RES600
|
||
mov si,offset xparabl
|
||
mov cx,1
|
||
ELSE
|
||
MOV SI,OFFSET XPARABL2
|
||
MOV CX,10
|
||
ENDIF
|
||
xvploop:
|
||
mov ax,cs:[si]
|
||
add si,02h
|
||
out dx,ax
|
||
jmp $+2
|
||
|
||
loop xvploop
|
||
IF HIRES
|
||
MOV DX,3D4H
|
||
MOV AL,9
|
||
OUT DX,AL
|
||
INC DX
|
||
IN AL,DX
|
||
AND AL,01111111B
|
||
OUT DX,AL
|
||
ENDIF
|
||
|
||
RETN
|
||
|
||
xparabl db 14h,00h
|
||
|
||
xparabl2 db 06h,0Dh ,07h,03eh ,09h,40H+80H,10h,0EAh ,11h,0ch ,12h,0dfh ,14h,00h
|
||
db 15h,0eah,016h,06h,17h,0e3h
|
||
|
||
SET240 ENDP
|
||
READFLIPPIX PROC NEAR ;AX=X ;BX=Y ;CX=FLIP NO ;ES=SEGPTR TO FLIPS
|
||
PUSH AX
|
||
MOV AX,FLIPSTORLEK
|
||
MUL CX
|
||
MOV SI,AX ;SI=ADR TO FLIPPER AREA
|
||
MOV AX,FLIPLINESIZE
|
||
ADD AX,AX
|
||
ADD AX,FLIPLINESIZE
|
||
MUL BX
|
||
ADD SI,AX ;SI=ADR TO CORRECT LINE
|
||
POP AX
|
||
MOV CL,AL
|
||
SHR AX,3
|
||
ADD SI,AX ;SI=ADR TO BYTE CONTAINING FLIPPER PIXEL
|
||
AND CX,111B
|
||
MOV DL,128
|
||
JCXZ NOROR
|
||
SHR DL,CL ;DL=BITMASK IN BYTE
|
||
NOROR:
|
||
XOR AL,AL
|
||
TEST BYTE PTR ES:[SI],DL
|
||
JZ NOTB0
|
||
OR AL,1
|
||
NOTB0:
|
||
PUSH SI
|
||
ADD SI,FLIPLINESIZE
|
||
TEST BYTE PTR ES:[SI],DL
|
||
POP SI
|
||
JZ NOTB1
|
||
OR AL,10B
|
||
NOTB1:
|
||
PUSH SI
|
||
ADD SI,FLIPLINESIZE
|
||
ADD SI,FLIPLINESIZE
|
||
TEST BYTE PTR ES:[SI],DL
|
||
POP SI
|
||
JZ NOTB2
|
||
OR AL,100B
|
||
NOTB2:
|
||
RETN
|
||
ENDP
|
||
|
||
PUTFLIPPIX PROC NEAR ;DI=SKŽRM OFFSET ;AX,BX=X,Y ;DL=COLOR
|
||
PUSH ES
|
||
MOV CX,AX
|
||
MOV AL,BPL
|
||
MUL BL
|
||
ADD DI,AX
|
||
MOV AX,CX
|
||
SHR AX,2
|
||
ADD DI,AX
|
||
AND CX,11B
|
||
MOV AH,1
|
||
JZ NOSHL
|
||
SHL AH,CL
|
||
NOSHL: MOV AL,2
|
||
MOV CL,DL
|
||
MOV DX,3C4H
|
||
OUT DX,AX
|
||
SET_ES 0A000H
|
||
MOV ES:[DI],CL
|
||
POP ES
|
||
RETN
|
||
ENDP
|
||
COPYFLIPBGR PROC NEAR ;SI=ADR TO S<>S ;DI=ADR TO DEST
|
||
PUSH ES DS
|
||
SET_ES 0A000H
|
||
SET_DS ES
|
||
MOV DX,3C4H
|
||
MOV AX,0F02H
|
||
OUT DX,AX
|
||
MOV DX,3CEH
|
||
MOV AX,4105H
|
||
OUT DX,AX
|
||
MOV CX,53
|
||
COPPYA: PUSH CX
|
||
MOV CX,20
|
||
REP MOVSB
|
||
POP CX
|
||
ADD DI,BPL-20
|
||
ADD SI,BPL-20
|
||
LOOP COPPYA
|
||
MOV AX,4005H
|
||
OUT DX,AX
|
||
|
||
POP DS ES
|
||
RETN
|
||
ENDP
|
||
CMPFLIPBOX PROC NEAR ;DI=ADR TO NEW FLIPPER BOX ;BP=OFFSET FROM NEW TO OLD
|
||
;DS:SI=ADR TO ADR-AREA
|
||
MOV CS:DIFCNT,0
|
||
MOV CS:ORGDI,DI
|
||
PUSH DS SI
|
||
SET_DS DATAFLIP
|
||
SET_ES 0A000H
|
||
MOV DX,3C4H
|
||
MOV AX,0F02H
|
||
OUT DX,AX
|
||
MOV DX,3CEH
|
||
MOV AX,4105H
|
||
OUT DX,AX
|
||
MOV AX,4
|
||
MOV CX,53
|
||
CMPR: PUSH CX
|
||
MOV CX,16
|
||
CHECK4:
|
||
OUT DX,AX
|
||
MOV BL,ES:[DI+BP]
|
||
CMP BL,ES:[DI]
|
||
JE LIKA
|
||
SUB DI,CS:ORGDI
|
||
MOV DS:[SI+2*9],DI ;2*9 ŽR F™R DE WORD SOM TALAR OM
|
||
ADD DI,CS:ORGDI ;HUR MYCKET SOM BEH™VS F™R ETT S<> STORT HOPP
|
||
INC CS:DIFCNT
|
||
PUSH DI
|
||
CALL LOOK4BLOCK
|
||
JC COULDNTFIND
|
||
MOV DS:[SI+2*9+2],DI
|
||
ADD SI,4
|
||
POP DI
|
||
JMP SHORT NEXT4
|
||
COULDNTFIND:
|
||
MOV BL,ES:[DI] ;LADDA L<>SKRETSARNA MED DET MAN VILL HA
|
||
MOV DI,CS:DIFPTR
|
||
MOV DS:[SI+2*9+2],DI
|
||
ADD SI,4
|
||
STOSB
|
||
MOV CS:DIFPTR,DI
|
||
POP DI
|
||
JMP SHORT NEXT4
|
||
LIKA:
|
||
INC AH
|
||
AND AH,11B
|
||
JNZ CHECK4
|
||
NEXT4: MOV AH,0
|
||
INC DI
|
||
LOOP CHECK4
|
||
ADD DI,BPL-16
|
||
POP CX
|
||
LOOP CMPR
|
||
POP SI
|
||
MOVE DS:[SI],CS:DIFCNT
|
||
POP DS
|
||
MOV AX,4005H
|
||
OUT DX,AX
|
||
IF DEBUG
|
||
mov ax,cs:difcnt
|
||
cmp cs:maxdifcnt,ax
|
||
jae dumret
|
||
mov cs:maxdifcnt,ax
|
||
DEBUGVAL 0,23,CS:maxDIFCNT,"max ANTAL 4-BLOCK SOM SKILLDE: "
|
||
ENDIF
|
||
RETN
|
||
maxdifcnt dw 0
|
||
LOOK4BLOCK:
|
||
PUSH AX BX CX SI
|
||
MOV AX,4
|
||
OUT DX,AX
|
||
MOV BL,ES:[DI]
|
||
INC AH
|
||
OUT DX,AX
|
||
MOV BH,ES:[DI]
|
||
INC AH
|
||
OUT DX,AX
|
||
MOV CL,ES:[DI]
|
||
INC AH
|
||
OUT DX,AX
|
||
MOV CH,ES:[DI]
|
||
|
||
move ds,data
|
||
MOV SI,GFXADR_FOR_FLIP_ANIM_DATA
|
||
move ds,dataflip
|
||
|
||
|
||
NEXTBLOCK:
|
||
XOR AH,AH
|
||
OUT DX,AX
|
||
CMP BYTE PTR ES:[SI],BL
|
||
JNE NOTTHISBLOCK
|
||
INC AH
|
||
OUT DX,AX
|
||
CMP BYTE PTR ES:[SI],BH
|
||
JNE NOTTHISBLOCK
|
||
INC AH
|
||
OUT DX,AX
|
||
CMP BYTE PTR ES:[SI],CL
|
||
JNE NOTTHISBLOCK
|
||
INC AH
|
||
OUT DX,AX
|
||
CMP BYTE PTR ES:[SI],CH
|
||
JNE NOTTHISBLOCK
|
||
THISBLOCK: ;!
|
||
MOV DI,SI
|
||
CLC
|
||
UNIQUE: POP SI CX BX AX
|
||
RETN
|
||
NOTTHISBLOCK:
|
||
INC SI
|
||
CMP SI,CS:DIFPTR
|
||
JB NEXTBLOCK
|
||
STC
|
||
JMP UNIQUE
|
||
DIFCNT DW ?
|
||
DIFPTR DW GFXADR_FOR_FLIP_ANIM_DATA
|
||
ORGDI DW ?
|
||
ENDP
|
||
DELTANIM PROC NEAR ;BX=ADR TO ADR-LISTA ;SI=ADR TO GFXDELTA ;DI=ADR FOR OUTPUT
|
||
MOV AX,DI
|
||
DODELTA:
|
||
MOV DI,[BX]
|
||
ADD DI,AX ;CP! KAN G™RAS INNAN
|
||
MOV SI,[BX+2]
|
||
DB 26H ;ES:
|
||
MOVSB
|
||
ADD BX,4
|
||
LOOP DODELTA
|
||
RETN
|
||
ENDP
|
||
INIT_SIN:
|
||
MOV SI,OFFSET SIN
|
||
MOV CX,2048+2048/4
|
||
XCHGSIN:LODSB
|
||
MOV AH,AL
|
||
LODSB
|
||
MOV DS:[SI-2],AX
|
||
LOOP XCHGSIN
|
||
RETN
|
||
BREDDA_MASK:
|
||
PUSH DS
|
||
ASSUME DS:HIDDEN1
|
||
SET_DS HIDDEN1
|
||
SET_ES DS
|
||
MOV DI,OFFSET HIDDA
|
||
MOV SI,OFFSET HID1
|
||
CALL BREDDA
|
||
SET_DS HIDDEN2
|
||
SET_ES DS
|
||
MOV DI,OFFSET HIDDA2
|
||
MOV SI,OFFSET HID2
|
||
CALL BREDDA
|
||
ASSUME DS:DATA
|
||
POP DS
|
||
RETN
|
||
BREDDA:
|
||
MOV CX,576
|
||
LINE1: PUSH CX
|
||
MOV CX,40
|
||
REP MOVSB
|
||
ADD DI,2
|
||
POP CX
|
||
LOOP LINE1
|
||
RETN
|
||
DUMRET: RETN
|
||
pelle_2_bw proc near
|
||
mov si,offset cs:palle
|
||
mov ax,cs
|
||
mov es,ax
|
||
mov cx,256
|
||
xor bh,bh
|
||
bmw: mov bl,es:[si]
|
||
mov ax,bx
|
||
mov bl,es:[si+1]
|
||
add ax,bx
|
||
mov bl,es:[si+2]
|
||
add ax,bx
|
||
mov bl,3
|
||
div bl
|
||
mov es:[si],al
|
||
mov es:[si+1],al
|
||
mov es:[si+2],al
|
||
add si,3
|
||
loop bmw
|
||
retn
|
||
pelle_2_bw endp
|
||
|
||
COLOR_2_BW PROC NEAR ;FN: CONV PALETTE AND LIGHT RGB DATA TO BW
|
||
;WARNING! MUST BE RUN AFTER THE MAIN RGB DATA
|
||
;CONVERTER HAS FINISHED ITS JOB.
|
||
comment\
|
||
MOV BX,0 ;START WITH COLOR 0
|
||
MOV CX,256 ;256 COLORS
|
||
NEXT_COL:
|
||
PUSH CX
|
||
CALL GET_COLOR_DATA ;DH,CH,CL=COLOR DATA
|
||
|
||
MOV DL,DH
|
||
NIL DH
|
||
MOV AL,CH
|
||
NIL AH
|
||
ADD DX,AX
|
||
MOV AL,CL
|
||
ADD AX,DX
|
||
MOV CL,3
|
||
DIV CL
|
||
MOV CL,AL
|
||
|
||
CALL SET_COLOR_DATA_BW ;CL=COLOR DATA
|
||
INC BX
|
||
POP CX
|
||
LOOP NEXT_COL
|
||
\
|
||
;*** THAT WAS THE PALETTE. NOW LET'S CONVERT THE RGB DATA ***
|
||
|
||
MOVE ES,DS
|
||
MOV SI,OFFSET LON1
|
||
MOV CX,NOOFLIGHTS+1
|
||
CONV_NEXT_POST:
|
||
PUSH CX
|
||
INC SI
|
||
LODSB ;AL=RGB DATA LEN
|
||
NIL AH
|
||
MOV BL,3
|
||
DIV BL
|
||
MOV CX,AX
|
||
CONV_NEXT_RGB_BLOCK:
|
||
PUSH CX
|
||
MOV DI,SI
|
||
NIL AH
|
||
LODSB
|
||
MOV DX,AX
|
||
LODSB
|
||
ADD DX,AX
|
||
LODSB
|
||
ADD AX,DX
|
||
MOV BL,3
|
||
DIV BL
|
||
STOSB
|
||
STOSB
|
||
STOSB
|
||
POP CX
|
||
LOOP CONV_NEXT_RGB_BLOCK
|
||
|
||
POP CX
|
||
LOOP CONV_NEXT_POST
|
||
|
||
RETN
|
||
COLOR_2_BW ENDP
|
||
comment\
|
||
GET_COLOR_DATA PROC NEAR ;FN: READ SINGLE COLOR FROM PALETTE
|
||
;INPUT: BX=COLOR NO
|
||
;OUTPUT: DH,CH,CL=COLOR DATA, BX UNTOUCHED
|
||
;WARNING! USING BIOS!
|
||
PUSH BX
|
||
MOV AL,15H
|
||
MOV AH,10H
|
||
INT 10H
|
||
POP BX
|
||
RETN
|
||
GET_COLOR_DATA ENDP
|
||
|
||
SET_COLOR_DATA_BW PROC NEAR ;FN: WRITE SINGLE COLOR TO PALETTE
|
||
;INPUT: BL=COL NO, CL=BW COLOR DATA
|
||
;OUTPUT: BX UNTOUCHED
|
||
MOV DX,3C8H
|
||
MOV AL,BL
|
||
OUT DX,AL
|
||
INC DX
|
||
MOV AL,CL
|
||
OUT DX,AL ;OUT R
|
||
OUT DX,AL ;OUT G
|
||
OUT DX,AL ;OUT B
|
||
RETN
|
||
SET_COLOR_DATA_BW ENDP
|
||
\
|
||
FANTASIES ENDP
|
||
|
||
addscoreBCD:
|
||
;funkar typ: addbcd [di],[si], addera [di] med [si]
|
||
antalsiffror=11 ;(999.999.999.999)
|
||
mov al,[di+antalsiffror]
|
||
add al,[si+antalsiffror]
|
||
aaa
|
||
mov [di+antalsiffror],al
|
||
pos=1
|
||
rept (antalsiffror)
|
||
mov al,[di-pos+antalsiffror]
|
||
adc al,[si-pos+antalsiffror]
|
||
aaa
|
||
mov [di-pos+antalsiffror],al
|
||
pos=pos+1
|
||
endm
|
||
retn
|
||
|
||
DO_UPDATE_LIGHT PROC NEAR ;INPUT:AL=LINUM, AH=[STRUCADR]
|
||
CMP AH,TRUE
|
||
JE ITS_ON
|
||
LIGHTOFF AL
|
||
RETN
|
||
ITS_ON: LIGHTON AL
|
||
RETN
|
||
DO_UPDATE_LIGHT ENDP
|
||
|
||
DO_UPDATE_PSTRUC PROC NEAR ;INPUT:AL=LINUM, BX=STRUCADR
|
||
PUSH BX
|
||
MOV BL,AL
|
||
NIL BH
|
||
MOV AH,TRUE
|
||
CMP LIGHTSTATUS[BX],AH
|
||
POP BX
|
||
JE ITS_ON2
|
||
MOV BYTE PTR [BX],FALSE
|
||
RETN
|
||
ITS_ON2:
|
||
MOV BYTE PTR [BX],TRUE
|
||
RETN
|
||
DO_UPDATE_PSTRUC ENDP
|
||
TECHrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset TECHTS
|
||
call do_matrix
|
||
retn
|
||
TSPrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset TSPTS
|
||
call do_matrix
|
||
retn
|
||
JOHANrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset JOHANTS
|
||
call do_matrix
|
||
retn
|
||
DANIELrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset DANIELTS
|
||
call do_matrix
|
||
retn
|
||
GABRIELrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset GABRIELTS
|
||
call do_matrix
|
||
retn
|
||
CHEATrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset CHEATTS
|
||
call do_matrix
|
||
retn
|
||
TILTrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
MOV TILTDISABLED,TRUE
|
||
mov bx,offset QUAKETS
|
||
call do_matrix
|
||
retn
|
||
robbanrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset robbanTS
|
||
call do_matrix
|
||
retn
|
||
steinrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset steinTS
|
||
call do_matrix
|
||
retn
|
||
greetrut:
|
||
MOV AFTER_CHEAT,TRUE
|
||
mov bx,offset GREETTS
|
||
call do_matrix
|
||
retn
|
||
|
||
SNAILRUT:
|
||
MOV AFTER_CHEAT,TRUE
|
||
MOV BX,OFFSET SnailTS
|
||
CALL DO_MATRIX
|
||
OR SHIFTKEYS,00000100B
|
||
RETN
|
||
|
||
BALLSRUT:
|
||
MOV AFTER_CHEAT,TRUE
|
||
MOV BX,OFFSET BallsTS
|
||
CALL DO_MATRIX
|
||
MOV NO_OF_BALLS,5
|
||
RETN
|
||
|
||
FAIRPLAYRUT:
|
||
MOV AFTER_CHEAT,TRUE
|
||
MOV BX,OFFSET FairPlayTS
|
||
CALL DO_MATRIX
|
||
AND SHIFTKEYS,11111011B ;RESET SPEED
|
||
MOV TILTDISABLED,FALSE ;RESET TILT
|
||
MOV NO_OF_BALLS,3
|
||
RETN
|
||
|
||
include print.asm
|
||
;INCLUDE BALLCODE.ASM
|
||
INCLUDE SCROLL.ASM
|
||
INCLUDE ANIMA.ASM
|
||
INCLUDE SCORE.ASM
|
||
|
||
CODE ENDS
|
||
|
||
END FANTASIES
|
||
|
||
|
||
|
||
|