pinballfantasies/INTRO.ASM

4878 lines
82 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

;KOLLA P<> BUPPEN! (ILLEGAL SPARNING?)
;fADNINGAR GJORDA MED MACROT REPOUTSB, SOM E LITE SL”ARE, TILLR„CKLIGT?????
CHECK1NUM=4EH ;JŽMT!
finmenu=1
showall=0 ;visa mig ALLT! (Snuskigt???)
NOOFWORDS=64 ;OBS S™K SLUMPEN!
demover=0
keyhandler=65h
NOFILLIT=0
bpl=80
IF DEMOVER
trim=67000/16 ;i paragrafer
ELSE
trim=+67000/16 ;i paragrafer
ENDIF
pm_test=0
covtime=28
fl1storlek=110
THETRIM=22
checktrim=-223+14h+20h
checktrim2=24-52+24-138-3+24-61+24-96+24
firstpictime=1
t21sttime=349-28-THETRIM+3
vikingtime=658-17-THETRIM+1
fld_logotime=980-80+9+1-THETRIM+3
presenttime=0
fantasietime=50*30
infotime=0 ;60*25
GURKA=42
LINJEN=8
charwith=18
charheight=14
mellanrum=4
FONTW=18 ;"BOKSTAV-MED"
sdrsizze=35 ;ca sizen p† en sdr!!!
WORDLEN=8 ;EVEN NUMBER!!!!
mod1size=252868
pos1=3 ;mod1size/65536
pos2=56260 ;mod1size-pos1*65536
nosnd_needed=530-sdrsizze ;ska ha ca 2 k mer (start!!)
needed=573-sdrsizze ;ska ha ca 2 k mer (start!!)
lsize=300 ;obs!!!!! KOM I H<>G <20> KOLLA!!!
basememreq_cp=(needed-lsize) ;free mem required (size needed-size of intro+size of start.exe)
nosoundmemreq_cp=(nosnd_needed-lsize) ;if no music, or XMS detected
nosoundmemreq=basememreq_cp/16*1000+trim-38000/16 ;nosoundmemreq_cp/16*1000+trim
basememreq=basememreq_cp/16*1000+trim
DIST=10
musikkaos=0
menutime=9
texttime=7
intpic2pos=150
t21stpos=0
vikingpos=240
vikingadr=320/4*247
fld_logopos=246*2
nofcolors=64
TEXTCOLOR=60
clear_boxen macro vart_start,bredden,hojden
local lajban_laban_o_lajla_samt_det_lilla_spoket_laban
move es,0a000h
mov al,es:[128/8+3] ;d„r „r det svart min v„n!!
mov cx,hojden
mov di,vart_start
lajban_laban_o_lajla_samt_det_lilla_spoket_laban:
push cx
mov cx,bredden
rep stosb
add di,80
sub di,bredden
pop cx
loop lajban_laban_o_lajla_samt_det_lilla_spoket_laban
endm
repoutsb macro
local lerum
lerum:
outsb
jmp $+2
loop lerum ;n”dv„ndigt l†ngsam!!
endm
STRLEN MACRO DEST,TEXT ;DOES NOT INCLUDE ,0
LOCAL NXTCH,NOMRCC,TEMPCNT
PUSHA
MOV CS:TEMPCNT,0
MOV SI,OFFSET TEXT
NIL BX
NXTCH: LODSB
OR AL,AL
JZ NOMRCC
INC BX
JMP NXTCH
TEMPCNT DB ?
NOMRCC: MOV CS:TEMPCNT,BL
POPA
MOV DEST,CS:[OFFSET TEMPCNT]
ENDM
;SetWBPL <BPLmask> Set write BPL mask
SetWBPL macro BPLmask
mov dx,3c4h
mov ah,BPLmask
mov al,2
out dx,ax
endm
;-)
;SetRBPL <BPL#> Set read BPL# (remember: just ONE at the time)
SetRBPL macro BPLnr
mov dx,3ceh
mov ah,BPLnr
mov al,4
out dx,ax
endm
STRCOPY MACRO DEST,SOURCE
PUSHA
PUSH ES
PUSH OFFSET DEST
PUSH OFFSET SOURCE
POP SI
POP DI
MOVE ES,DS
STRLEN CL,SI
NIL CH
INC CX
REP MOVSB
POP ES
POPA
ENDM
STRCOPY2 MACRO DEST,SOURCE ;DOES NOT COPY ,0
PUSHA
PUSH ES
PUSH OFFSET DEST
PUSH OFFSET SOURCE
POP SI
POP DI
MOVE ES,DS
STRLEN CL,SI
NIL CH
REP MOVSB
POP ES
POPA
ENDM
SIMINT MACRO INTNO
MOVE ES,0
PUSHF
CALL DWORD PTR ES:[INTNO*4]
ENDM
savestack macro
move cs:s_s,ss
mov cs:s_p,sp
endm
restorestack macro
move ss,cs:s_s
mov sp,cs:s_p
endm
borland macro
push es di cx
mov ax,0700h
mov di,0
move es,0b800h
mov cx,160*25/2
rep stosw
pop cx di es
endm
HUGO MACRO NEBUL
LOCAL STRUMPA,FERTICH,SCHLUKA,DUNK
MOV DI,CS:PEKARN
MOV SI,OFFSET NEBUL
MOVE DS,DATA
MOVE ES,0B800H
STRUMPA:
LODSB
CMP AL,'$'
JE FERTICH
CMP AL,13
JE SCHLUKA
CMP AL,10
JE DUNK
STOSB
INC DI
JMP STRUMPA
SCHLUKA:
MOV AX,DI
NIL DX
MOV CX,160
DIV CX
mov bp,ax
MUL CX
mov di,ax
MOV Dx,Bp
mov dh,dl
add dh,2
MOV DL,0
XOR BX,BX
MOV AH,02H
INT 10H
JMP STRUMPA
DUNK:
ADD DI,160
JMP STRUMPA
FERTICH:
MOV CS:PEKARN,DI
ENDM
SPYMESS MACRO MESSAGE
LOCAL MESS,GNU,FERTICH,STRUMPA,schluka,dunk
JMP GNU
MESS DB MESSAGE,'$'
GNU: PUSHA
PUSH DS
MOV AX,CS
MOV DS,AX
MOV Dx,offset cs:mess
mov ax,900h
int 21h
pop ds
popa
ENDM
comment\
SPYMESS MACRO MESSAGE
LOCAL MESS,GNU,FERTICH,STRUMPA,schluka,dunk
JMP GNU
MESS DB MESSAGE,'$'
GNU: PUSHA
PUSH DS ES
MOV AX,CS
MOV DS,AX
MOV DI,CS:PEKARN
MOV SI,OFFSET CS:MESS
MOVE ES,0B800H
STRUMPA:
LODSB
CMP AL,'$'
JE FERTICH
CMP AL,13
JE SCHLUKA
CMP AL,10
JE DUNK
STOSB
INC DI
JMP STRUMPA
SCHLUKA:
MOV AX,DI
NIL DX
MOV CX,160
DIV CX
mov bp,ax
MUL CX
mov di,ax
MOV Dx,Bp
mov dh,dl
add dh,2
MOV DL,0
XOR BX,BX
MOV AH,02H
INT 10H
JMP STRUMPA
DUNK:
ADD DI,160
JMP STRUMPA
FERTICH:
MOV CS:PEKARN,DI
POP ES DS
POPA
ENDM
\
SetLores macro
mov dx,3d4h
mov ax,0c009h
out dx,ax
endm
SetHires macro
mov dx,3d4h
mov ax,4009h
out dx,ax
endm
SetVga macro
;sequencer!
mov dx,3c4h ;mcga
mov ax,0604h ;0e04h
out dx,ax ;chain 4
;CRTC!
mov dx,3d4h
mov ax,0c11h
out dx,ax ;unprotect 0-7 in crtc!
mov ax,5404h
out dx,ax ;Start Hor Retrc.
mov ax,0b06h
out dx,ax
mov ax,3e07h
out dx,ax
mov ax,4009h
out dx,ax
mov ax,590fh
out dx,ax
mov ax,0ea10h
out dx,ax
mov ax,8c11h
out dx,ax
mov ax,0df12h
out dx,ax
mov ax,0014h
out dx,ax
mov ax,0e715h
out dx,ax
mov ax,0416h
out dx,ax
mov ax,0e317h
out dx,ax
;Grapic controler
mov dx,3ceh
mov ax,0005h ;4005h
out dx,ax ;mode reg.
;attribute
mov dx,3dah
in al,dx
mov dx,3c0h
mov al,20h+10h
out dx,al
mov al,25h ;61h
out dx,al ; mode contr
endm
cleargfx macro
LOCAL TRULLE
mov dx,3c4h
mov ax,0f02h
out dx,ax
mova es,0a000h
mov cx,32760 ;vem vet, det kanske blir exception om den ”verskrider
xor ax,ax
mov di,ax
TRULLE: NOP
stosw
NOP
LOOP TRULLE ;TRULLSON ASS<53>!
endm
movpal macro sseg,source,dseg,dest
mov si,source
mov di,dest
push ds
move ds,sseg
move es,dseg
mov cx,16*3
rep movsb
pop ds
endm
checkquit macro
; in al,60h
; cmp al,cs:firstscan
; mov ax,1
; int 16h
; cmp al,01
; je choosern_init
if demover
cmp cs:laddaden,true
je space2
ELSE
cmp cs:laddaden,true
je skip_the_intro_bra_att_hoppa_till_da
endif
endm
FILLMUSICBUF MACRO
LOCAL FILLA
PUSHA
PUSH ES DS
MOV CX,100
FILLA: PUSH CX
MOVE ES,0
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
POP CX
LOOP FILLA
POP DS ES
POPA
ENDM
.286p
jumps
wait_sync macro times
local lo,ko,sko
mov cx,times
lo: push cx
synca
IF NOFILLIT
MOVE ES,0
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
pop cx
; in al,60h
; cmp al,cs:firstscan
mov ax,1
move es,0
pushf
call dword ptr es:[keyhandler*4]
if demover
cmp al,57
jne sko
mov cs:laddaden,true
sko:
endif
cmp al,57
je skip_the_intro_bra_att_hoppa_till_da
; je ko
loop lo
ko:
endm
wait_music macro times
local lo,ko,sko,TRO
lo:
MOVE ES,0
MOV AX,22
PUSHF
CALL DWORD PTR ES:[66H*4]
cmp ax,times
ja ko
PUSH AX
IF NOFILLIT
MOVE ES,0
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
mov ax,1
move es,0
pushf
call dword ptr es:[keyhandler*4]
POP BP
if demover
CMP AL,01
JE SPYAN_STEWART
cmp al,57
jne sko
mov cs:laddaden,true
JMP KO
ELSE
cmp al,57
jne sko
mov cs:laddaden,true
JMP KO
endif
JMP TRO
sko:
MOV AL,3
TRO:
cmp al,1
je SKO
cmp al,57
jne lo
if demover
; mov cs:laddaden,true
jmp lo ;space2
else
jmp LO ;skip_the_intro_bra_att_hoppa_till_da
endif
ko:
endm
wait_sync_spec macro times
local lo,ko,sko
mov cx,times
lo: push cx
synca
IF NOFILLIT
MOVE ES,0
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
pop cx
; in al,60h
; cmp al,cs:firstscan
mov ax,1
move es,0
pushf
call dword ptr es:[keyhandler*4]
if demover
cmp al,57
jne sko
mov cs:laddaden,true
sko:
endif
cmp al,57
; je skip_the_intro_bra_att_hoppa_till_da
je ko
loop lo
ko:
endm
wait_sync_spec2 macro times
local lo,ko,sko
mov cx,times
lo: push cx
synca
IF NOFILLIT
MOVE ES,0
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
pop cx
; in al,60h
; cmp al,cs:firstscan
mov ax,1
move es,0
pushf
call dword ptr es:[keyhandler*4]
if demover
cmp al,57
jne sko
mov cs:laddaden,true
sko:
endif
; cmp al,57
; je skip_the_intro_bra_att_hoppa_till_da
; je ko
loop lo
ko:
endm
wait_sync2 macro times
local lo,ko,moooo
mov cx,times
mov cs:menunext,false
lo: push cx
synca
IF NOFILLIT
MOVE ES,0
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
pop cx
mov ax,1
move es,0
pushf
call dword ptr es:[keyhandler*4]
cmp al,01
je moooo
cmp al,3bh ;f1
je f1t
cmp al,3ch ;f2
je f2t
if finmenu
cmp al,3dh ;f3
je f3t
cmp al,3eh ;f4
je f4t
endif
cmp al,3fh ;f5
je f5t
if finmenu
cmp al,28 ;enter
je moooo
else
cmp al,28 ;enter
je ko
endif
cmp al,57
je moooo
loop lo
jmp moooo
f5t:
mov cs:menunext,true
MOV CS:INFO_TEXT,OFFSET CS:OPTIONS_INFO
jmp moooo
ko:
xor banpek,10b
MOV TEXTLISTA[0],OFFSET HITEXT1
JZ NEDU2
MOV TEXTLISTA[0],OFFSET HITEXT2
NEDU2:
moooo:
endm
fade macro hast,pal1seg,pal1adr,pal2seg,pal2adr
local fada
mov cs:steg,hast
mov cL,cs:steg
; INC CL ;F™R ATT UNDVIKA BAJSET!!!
XOR CH,CH
fada: move ds,data
mov SI,pal2adr
MOV DI,pal1adr
MOVA ES,pal1seg
push ds
mova ds,pal2seg
CALL MAKE_PAL
pop ds
synca
CALL SET_PAL
PUSH ES
MOVE ES,0
IF NOFILLIT
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
POP ES
LOOP FADA
endm
fadeM macro hast,pal1seg,pal1adr,pal2seg,pal2adr
local fada,slut,nosetv,oldvol
mov cs:steg,hast
mov cL,cs:steg
XOR CH,CH
fada: move ds,data
mov SI,pal2adr
MOV DI,pal1adr
MOVA ES,pal1seg
push ds
mova ds,pal2seg
CALL MAKE_PAL
pop ds
synca
CALL SET_PAL
mov ax,cx
xchg al,ah
xor dx,dx
mov bx,hast
div bx
push cx
mov cx,ax
and ax,-16
cmp ax,cs:oldvol
je nosetV
mov cs:oldvol,ax
mov al,6
int 66h
nosetV: pop cx
PUSH ES
MOVE ES,0
IF NOFILLIT
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
POP ES
LOOP FADA
jmp slut
oldvol dw 0
slut:
endm
;***************
fade1 macro val,steg
mov al,val
mov bl,steg ;+1
sub bl,cl
mul bl
mov bl,steg
div bl
mov dx,3c9h
out dx,al
endm
fade1B macro val,steg
mov al,val
mov bl,steg-1
sub bl,cl
mul bl
mov bl,steg
div bl
mov dx,3c9h
out dx,al
endm
fade3 macro sped
local gnuor
mov cx,sped
gnuor:
mov dx,3c8h
mov al,1
out dx,al
fade1 52,sped
fade1 52,sped
fade1 62,sped
mov dx,3c8h
mov al,12
out dx,al
fade1 37,sped
fade1 37,sped
fade1 45,sped
mov dx,3c8h
mov al,14
out dx,al
fade1 17,sped
fade1 17,sped
fade1 25,sped
synca
loop gnuor
endm
fade3b macro sped
local gnuor
mov cx,0
gnuor:
mov dx,3c8h
mov al,1
out dx,al
fade1B 52,sped
fade1B 52,sped
fade1B 62,sped
mov dx,3c8h
mov al,12
out dx,al
fade1B 37,sped
fade1B 37,sped
fade1B 45,sped
mov dx,3c8h
mov al,14
out dx,al
fade1B 17,sped
fade1B 17,sped
fade1B 25,sped
synca
inc cx
cmp cx,sped
jne gnuor
endm
;************
fade256 macro hast,pal1seg,pal1adr,pal2seg,pal2adr
local fada
mov cs:steg,hast
mov cL,cs:steg
XOR CH,CH
fada: move ds,data
mov SI,pal2adr
MOV DI,pal1adr
MOVA ES,pal1seg
push ds
mova ds,pal2seg
CALL MAKE_PAL256
pop ds
synca
CALL SET_PAL256
PUSH ES
IF NOFILLIT
MOVE ES,0
MOV AX,8
PUSHF
CALL DWORD PTR ES:[66H*4]
ENDIF
POP ES
LOOP FADA
endm
movepic macro nisse,goran
local taljan
mov ax,0a000h
mov es,ax
mov ds,ax
mov cx,95 ;Bildh”jd
mov di,nisse
mov si,goran
taljan: push cx
mov cx,55 ;Linjebredd
rep movsb
add si,80-55
add di,80-55
pop cx
loop taljan
move ds,data
endm
SLACKA MACRO PLATS
MOV CS:FJUMPENS_BROR,PLATS
ENDM
slack macro fjumpen
LOCAL NOTHING_NEW
MOV CX,fjumpen ;CALC CX (HORIZ END)
CMP CX,CS:FJUMPENS_FARSA
JE NOTHING_NEW
SHR CX,2
DEC CX
MOV DX,3D4H ;UNLOCK
MOV AL,11H
MOV AH,0
OUT DX,AX
MOV DX,3D4H ;SET HORIZ END
MOV AL,01H
MOV AH,CL ;(DET MAN VILL HA GENOM 4)
OUT DX,AX
NOTHING_NEW:
endm
setscr macro pos
mov cx,pos
mov dx,3d4h
mov al,0dh
mov ah,cl
out dx,ax
mov ah,ch
dec al
out dx,ax
endm
stacken segment para stack 'stack'
dw 1024 dup (0)
stacken ends
;********************************************* D A T A S E G M E N T ********
data segment para public 'data'
pelle1 db 3*256 dup (0)
pelle2 db 3*256 dup (0)
SKIT DB 'NILSBEDRUP '
pellevin1 dw offset pelle1
pellevin2 dw offset pelle2
buppen_filen dw ?
chksum dw ?
rekord_tabell DB 0,1,11 DUP(0),0,8,1 DUP(0),'QWERTYUIOP',0,0,13,0,'ASDFGHJKL',0,0,0,0,0,'ZXCVBNM',6 dup (0),' ',(128-50-7) dup (0),20 dup (0)
PM_MESS DB 13,10,13,10,'WARNING: Protected mode has been detected!',13,10,13,10
db 'This is probably because you have a memory manager such as',13,10
db 'EMM386 or QEMM installed. Please uninstall this memory manager driver!',13,10
db 'Refer to your manual for further information.',13,10
db 13,10,'Press ESCape to quit or P to proceed...$'
comment\
notenoughmess db 'Pinball Fantasies requires at least 555 kbytes (568000) free base memory',13,10
db "or 520 kbytes (530000) for 'Gravis UltraSound' or 'nosound' drivers.",13,10
db 'Please look in Your manual how to free up DOS memory!',13,10,'$',0
\
notenoughmess label byte
db "You do not have enough free memory to run Pinball Fantasies.",13,10
db "You need to have at least 530K (542700 bytes) free to run ",13,10
db "the game if you are using a Gravis Ultrasound sound card or ",13,10
db "are planning to run the game with no sound at all.",13,10,13,10
db "If you want to have sound in the game, you will need at",13,10
db "least 560K (573440 bytes) free.",13,10,13,10
db "Please type CHKDSK or MEM (DOS 4 or higher) at the dos prompt",13,10
db "to display free memory.",13,10,13,10
db 'Please refer to the "troubleshooting" section in your',13,10
db "instruction manual for guidance on how to free your ",13,10
db "computers memory.",13,10,0,"$"
wordstruc struc
THELINE DB ?
CPVAL DW ?
THETEXT DW WORDLEN/2 DUP (?)
THEPAGE DB ?
CHKSUMA DB ?
THEWORD DB ?
ends
extrn ordlista:byte
THEPOST DW ?
lbredd=400
lhojd=40
loggasize=lbredd/2*lhojd
savearea1 db loggasize dup (?)
savearea2 db loggasize dup (?)
hi_score_file1 db 'table1.hi',0
hi_score_file2 db 'table2.hi',0
hi_score_file3 db 'table3.hi',0
hi_score_file4 db 'table4.hi',0
HI_SCORE_LIST LABEL BYTE
db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'TSP',0 ;FEST-LANDET
db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ICE',0
db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ANY',0
db 0,0,0, 0,0,5, 0,0,0, 0,0,0,'J L',0
HI_SCORE_LIST2 LABEL BYTE
db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 ;HASTIGHETSJŽVLARNA
db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'J L',0
db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ICE',0
db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ANY',0
HI_SCORE_LIST3 LABEL BYTE
db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 ;MILJARDVISNINGEN
db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'ANY',0
db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'J L',0
db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'ICE',0
HI_SCORE_LIST4 LABEL BYTE
db 0,0,0, 1,0,0, 0,0,0, 0,0,0,'TSP',0 ;STENAR&BEN
db 0,0,0, 0,5,0, 0,0,0, 0,0,0,'ICE',0
db 0,0,0, 0,2,5, 0,0,0, 0,0,0,'ANY',0
db 0,0,0, 0,1,0, 0,0,0, 0,0,0,'J L',0
;HŽR!
MENU_ITEMS LABEL WORD
DW L_BALLS
DW L_ANGLE
DW L_SCROLLING
DW L_IM
DW L_RESOLUTION
DW L_MODE
DW L_SAVE
LAST_ITEM LABEL WORD
HIGH_MENU=(LAST_ITEM-MENU_ITEMS)/2
MENU_ITEMS_UPDATES LABEL WORD
DW L_BALLS_UPDATE
DW L_ANGLE_UPDATE
DW L_SCROLLING_UPDATE
DW L_IM_UPDATE
DW L_RESOLUTION_UPDATE
DW L_MODE_UPDATE
DW DUMRET
TOGGLAR_STRUCEN STRUC
S_BALLS DB ?
S_ANGLE DB ?
S_SCROLLING DB ?
S_IM DB ?
S_RESOLUTION DB ?
S_MODE DB ?
ENDS
TOGGLAREN DB SIZE TOGGLAR_STRUCEN DUP (0)
TOGGLAR_NAME DB 'PINBALL.CFG',0
TEXTEN1 DB 'PLEASE ENTER WORD ',0,50 DUP (0)
TEXTEN2 DB ' ON',0
TEXTEN3 DB 'LINE ',0,20 DUP(0)
TEXTEN4 DB ' AT PAGE ',0
TEXTEN5 DB '.',0
TEMPTEXT DB 10 DUP(0)
reserv db 100 dup(0)
rensa_input db 20 dup (' '),0
ALIGN 16
HEXTBL DB "0123456789ABCDEF"
DB 16 DUP (1)
DB " HI HACKER! PLEASE DON'T CRACK THIS PROGRAM! IT WAS MADE BY"
DB " THE DEMO GROUP TSP. WE NEED THE MONEY TO BE ABLE TO KEEP ON"
DB " CODING GAMES FOR THE PC! THIS PROGRAM ISN'T HARD TO CRACK, SO"
DB " MAKE A DEMO INSTEAD TO PROVE YOUR SKILLS... IF YOU CRACK IT"
DB " WE WILL HATE YOU 4EVER! HAVE A NICE DAY! :-) "
DB 16 DUP (2)
TEXTLISTA LABEL WORD
DW HITEXT1 ;OBS!!! Higscore vill ligga h„r
;GNU
dw -1
dw -1
DW TEXT1
DW TEXT2
dw -1
dw -1
DW TEXT3
DW TEXT4
DW -1
DW -1
DW 0
DW 0
DW 0
DW 0
comment\
betatext db 0
DB 'THIS IS A BETA VERSION',0
DB 0
DB 'DO NOT SPREAD',0
DB 0
DB 'ONLY FOR',0
DB 'PETER ENGSTRAND',0
DB 0
DB 'HAVE FUN - WE DONT',0
DB 0
DB 'PS CHANGE TABLES',0
DB 'WITH ENTER DS',0
\
START_KEK LABEL BYTE ;CHECKSUMMA!!!!! ;-(
text1 db 'PINBALL FANTASIES PC',0
db 'BY FRONTLINE DESIGN',0
DB 0
db 'PROGRAMMING BY:',0
DB 'DANIEL FORSGREN',0
DB 'GABRIEL BERGQVIST',0
db 'JOHAN LUNDMARK',0
DB 0
STOP_KEK LABEL BYTE
DB 'PRODUCED BY:',0
DB 'BARRY SIMPSON',0
DB 'AND',0
DB 'STEWART GILRAY',0
TEXT2 DB 0
DB 0
DB 'ORIGINAL AMIGA GAME BY',0
DB 'DIGITAL ILLUSIONS',0
DB 0
DB 'ANDREAS AXELSSON',0
DB 'MARKUS NYSTROM',0
DB 'OLOF GUSTAVSSON',0
DB 'ULF MANDORFF',0
DB 'FREDRIK LILIEGREN',0
DB 0
DB 0
TEXT4 DB 0
DB 0
DB 0
DB 0
DB '-WINNERS-',0
DB '-DO NOT USE-',0
DB '-DRUGS-',0
DB 0
DB 0
DB 0
DB 0
DB 0
TEXT3 DB 'SELECTOR INSTRUCTIONS',0
DB 0
DB 'F1 - PARTYLAND ',0
DB 'F2 - SPEED DEVILS ',0
DB 'F3 - BILLION DOLLAR',0
DB 'F4 - STONES N BONES',0
DB 'F5 - OPTIONS MENU ',0
DB 0
DB 'SPACE TO SKIP',0
DB 'ESC TO QUIT',0
DB 0
DB 0
;HŽR!
TRE DB '3',0
FEM DB '5',0
NORMAL DB 'NORMAL',0
ZHIGH DB 'HIGH ',0
ZLOW DB 'LOW ',0
FIRM DB 'HARD ',0
SMOOTH DB 'MEDIUM',0
SLIME DB 'SOFT ',0
ZARINEN DW FIRM
DW SMOOTH
DW SLIME
ON DB 'ON ',0
OFF DB 'OFF',0
ZCOLOR DB 'COLOR',0
MONO DB 'MONO ',0
PIL DB '>',0
MENUtext DB 'OPTIONS MENU',0
DB 0
FIRSTCHOICE LABEL BYTE
T_BALLS DB ' BALLS: ' ;3, 5
T_ANGLE DB ' ANGLE: ' ;NORMAL, HIGH
T_SCROLLING DB ' SCROLLING: ' ;BRUTAL, FIRM, *SMOOTH*, SLIMY
T_IM DB ' INGAME MUSIC: ' ;ON, OFF
T_RESOLUTION DB ' RESOLUTION: ' ;NORMAL, HIGH
T_MODE DB ' COLOR MODE: ' ;COLOR, MONOCHROME
DB 0
DB ' SAVE AND EXIT '
DB 0
DB 0
DB 0
DB 0
DB 0
HITEXT1 LABEL BYTE
SPCS LABEL BYTE
DB ' '
DB ' PARTY LAND '
DB ' 1. - '
DB ' 2. - '
DB ' 3. - '
DB ' 4. - '
DB ' '
DB ' SPEED DEVILS '
DB ' 1. - '
DB ' 2. - '
DB ' 3. - '
DB ' 4. - '
HITEXT2 DB ' '
DB ' BILLION DOLLAR '
DB ' 1. - '
DB ' 2. - '
DB ' 3. - '
DB ' 4. - '
DB ' '
DB ' STONES N BONES '
DB ' 1. - '
DB ' 2. - '
DB ' 3. - '
DB ' 4. - '
DB " HI HACKER! READ THE NOTE ABOVE! "
PROTTXT DB 0,0,'MANUAL PROTECTION',0,0
WHATS_HAPPENING DB 24*2 DUP (' '),0 ,0,0,0
DB 24*2 DUP(0)
WORDTXT DB LINJEN DUP(0)
AFTER_PROT DB 24 DUP (' '),5 DUP (0)
DB 15 DUP (0)
soundcfg db 'Sound.Cfg',0,'$'
drv db '\mAsM\ds20\rEsIpLaY\rEsIpLaY.eXe',13 dup (0),'$'
parms db 20 dup (0)
intromod db 'Intro.Mod',0,'$'
if demover
intromod2 db 'Intro.Mod',0,'$'
else
intromod2 db 'Mod2.Mod',0,'$'
endif
vikingpaloff dw ?
t21stpaloff dw ?
T21ST_REAL_PAL DW ?
VIKING_REAL_PAL DW ?
intpic2paloff dw ?
demotext2paloff dw ?
fld_logopaloff dw ?
presentpaloff dw ?
blackpal db 256*3 dup(0)
whitepal db 256*3 dup (63)
blackpaloff=offset blackpal
whitepaloff=offset whitepal
egapal db 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0
banpek dw 0
if demover
VARTABELL DW 0+20
tabletabell dw new_cov2seg
else
vartabell dw 0,240,240+14*2,240+14*4,240+95+14*4,240+95*2+14*4,240+95*3+14*4
tabletabell dw table0
dw fontseg
dw fontseg2
dw table1
dw table2
dw table3
dw table4
endif
tablepaloff dw ?,?,?,?,?,?,?
nuvarande db 3*64 dup (0)
RASTATAB label byte
rastas=8 ;7
Cnt =-(rastas-1)*(rastas-1)
rept 95/rastas+rastas+1 ;trunk fel
gnu=cnt
rept rastas
if (gnu GT -1)
if (gnu LT 95)
db gnu
endif
endif
gnu=gnu+rastas-1
endm
db -1
cnt=cnt+rastas
endm
offret=0
fontlist label word
rept '-'
dw -1 ;240*80+80*14+4*19
endm
DW 38*4+80*13+240*80 ;-
DW 36*4+80*13+240*80 ;.
dw 240*80+80*14+4*19 ;\ (=SPACE)
rept 10 ;the siffers!!
dw offret+240*80
offret=offret+4
endm
DW 37*4+80*13+240*80 ;:
rept 'A'-'0'-10-1 ;the mellan bokstefhers!!
dw 39*4+80*13+240*80
endm
rept 10 ;the bokstefhers!!
dw offret+240*80
offret=offret+4
endm
rept 16
dw offret+80*13+240*80
offret=offret+4
endm
rept 255-'Z'
dw -1 ;240*80+80*14+4*19
endm
data ends
IF DEMOVER
fontseg segment para public 'data'
font DB ?
ends
fontseg2 segment para public 'data'
font2 DB ?
ends
ELSE
fontseg segment para public 'data'
extrn font:byte
ends
fontseg2 segment para public 'data'
extrn font2:byte
ends
ENDIF
intpic2seg segment para public 'data'
extrn intpic2:byte
ends
presentseg segment para public 'data'
extrn present:byte
ends
fl1seg segment para public 'data'
extrn fl1:byte
ends
fl2seg segment para public 'data'
extrn fl2:byte
ends
if demover
new_cov2seg segment para public 'data'
extrn new_cov2:byte
ends
table0 segment para public 'data'
table_0 db ?
ends
table1 segment para public 'data'
table_1 db ?
ends
table2 segment para public 'data'
table_2 db ?
ends
table3 segment para public 'data'
table_3 db ?
ends
table4 segment para public 'data'
table_4 db ?
ends
else
table0 segment para public 'data'
extrn table_0:byte
ends
table1 segment para public 'data'
extrn table_1:byte
ends
table2 segment para public 'data'
extrn table_2:byte
ends
table3 segment para public 'data'
extrn table_3:byte
ends
table4 segment para public 'data'
extrn table_4:byte
ends
endif
IF DEMOVER
hsl1seg segment para public 'data'
hsl1 DB ?
ends
hsl2seg segment para public 'data'
hsl2 DB ?
ends
ELSE
hsl1seg segment para public 'data'
extrn hsl1:byte
ends
hsl2seg segment para public 'data'
extrn hsl2:byte
ends
ENDIF
synca macro
local venta
push es DS
mov ax,40h
mov es,ax
MOV AX,0
MOV DS,AX
venta:
MOV AX,8
PUSHF
CALL DWORD PTR DS:[66H*4]
inc cs:slumpen
cmp byte ptr es:[76h],0
jz venta
mov byte ptr es:[76h],0
pop DS es
endm
include c:\source\macros1.asm
include fantasie.mac
include c:\source\macros3.asm
code segment para public 'code'
extrn unpklbm16:near
extrn unpklbm:near
firstscan db -1
start:
assume cs:code
assume ds:data
PUSHA
PUSH DS
;==============================================================================
PUSHA
PUSH DS ES
CALL LOAD_TOGGLAREN ;OPTIONS SCREEN SETUP
JNC TOGGLAREN_READY
MOV TOGGLAREN.S_SCROLLING,1
TOGGLAREN_READY:
MOV AH,2CH ;GET TIME
INT 21H
MOV CS:SLUMPEN,DX
POP ES DS
POPA
mov ax,0
int keyhandler ;kolla om f”rsta g†ngen . .
cmp ah,false
je notfirstime_SO_NO_PMTEST
;******************************************************************************
;* Test protected mode *
;******************************************************************************
if pm_test
SMSW AX
TEST AX,1
JZ NO_PROTECTED_MODE
JMP _PM
else
jmp NO_PROTECTED_MODE
endif
bannumber db 1
_PM: push ds
; debugmess 0,0,'pm detected'
pusha
push es ds
BorLand
Hugo PM_Mess
pop ds es
popa
pop ds
;***** check keyb
IN_OCH_UT_IGEN:
IN AL,60H
CMP AL,19H
je no_protected_mode
CMP AL,01
JNE IN_OCH_UT_IGEN
;**************
MOV AX,4C01H
INT 21H
NO_PROTECTED_MODE:
notfirstime_SO_NO_PMTEST:
;==============================================================================
POP DS
POPA
;******************************************************************************
; debugmess 0,0,'loading intro'
move es,ds
move ds,DATA
mov bx,es
mov cs:minneskillen,bx
mov ax,12h ;anders
int 10h
call set_mcgab
call set240
move es,ds
move ds,data
call set_pal ;sl„ck paletten
CALL UNPKPICS
mov bx,cs:minneskillen
mov es,bx
neg bx
if demover ;ingen ”verr„nning!!
add bx,qsune
else
add bx,dumpningsplats
endif
add bx,1024/16
mov ax,4a00h
int 21h ;shrink block
call init_sound
mov ah,48h
mov bx,0ffffh ;s† mycket minne har ingen!!
int 21h
PUSH BX
; debugval 0,5,bx,'Free mem after intro + SDR load'
mov ah,21
int 66h
test al,1 ;e de gus eller nosnd???
POP BX
jne gussan
cmp bx,basememreq
ja enough_mem
jmp not_enough
gussan:
cmp bx,nosoundmemreq
ja enough_mem
jmp not_enough
;
;******************** really intro ******************************************
;
enough_mem:
move es,ds
move ds,data
jmp minnesaron
minneskillen dw ?
minnesaron:
CALL MAKE_IT_NICE ;THE OPTIONS SCREEN
;******************** Om f”rsta g†ngen spela mod 1 ******************
mov ax,0
int keyhandler ;kolla om f”rsta g†ngen . .
cmp ah,false
je notfirstime_sonofirsttimemoduleplaying
MOV DX,OFFSET introMOD
jmp moduleloaded
notfirstime_sonofirsttimemoduleplaying:
MOV DX,OFFSET introMOD2
moduleloaded:
MOV AX,18 ;fn 18
INT 66H ;LOAD MODULE
IF_ERROR 1,outofmemory
IF_ERROR 3,cantfindmod
IF_ERROR 4,errorloadingmod
move ds,data
move es,data
mov dx,offset intromod
openfile2 dx
mov buppen_filen,bx
filepoint bx,pos1,pos2
usel=offset chksum
readfile bx,2,usel
CLC
;**************************** flyttad pga cp id!!!
CALL READ_HIGHS
mov ax,11
move es,cs
mov dx,offset dumretf
mov bl,255
int 66h ;ORDER VBLANK
mov ax,4
mov bx,11000
mov cx,0 ;config's rate
int 66h
IF_ERROR 1,OUTOFMEMORY
IF_ERROR 2,INIT_ERR
mov ax,12
move es,cs
mov dx,offset creatretf
mov cx,220+10
mov bl,255
int 66h ;ORDER RASTER
if demover
jmp firsttime_init
endif
mov banpek,00b
mov cs:textpek,2
mov ax,0
int keyhandler
cmp bl,3
jb no_high_bana
mov banpek,10b
mov cs:textpek,4
MOV TEXTLISTA[0],OFFSET HITEXT2
no_high_bana:
cmp ah,true
je firsttime_init
mov cx,banpek
if finmenu
else
MOV CS:TEXTPEK,2
endif
SYNCA
setvga
setlores
call set240
SYNCA
CALL SET_EGAPAL
jmp choosern_init
firsttime_init:
;320*240,256
setscr 0
wait_music firstpictime
ALL_OVER_AGAIN:
fade 20,data,blackpaloff,data,pellevin1
wait_music t21sttime
fade 20,data,pellevin1,data,blackpaloff
checkquit
setscr vikingadr
fade256 10,data,whitepaloff,data,pellevin2
wait_music vikingtime
fade256 20,data,pellevin2,data,blackpaloff
checkquit
fade256 1,data,blackpaloff,data,blackpaloff
setscr fld_logopos/4*320
fade256 10,data,whitepaloff,fl1seg,fld_logopaloff
wait_music fld_logotime
fade256 20,fl1seg,fld_logopaloff,data,blackpaloff
checkquit
setscr 0
mov dx,3c4h
mov ax,0f02h
out dx,ax
move es,0a000h
mov cx,320/4*240/2
mov di,0
mov ax,0
GNUOR: stosw
LOOP GNUOR
mova es,cs
mov di,offset cs:faded_pal
mov cx,256*3
xor al,al
rep stosb ;rensa pallen s† att set_pal sl„cker
CALL SET_PAL256
fillmusicbuf
mov ax,0
mov bx,0
mov cx,320
mov bp,10b
mov dx,0
move es,presentseg
call unpklbm
mov presentpaloff,dx
fade 8,data,blackpaloff,presentseg,presentpaloff
wait_music presenttime
fade 20,presentseg,presentpaloff,data,blackpaloff
checkquit
cleargfx
CALL BLANK_OFF
MOV AX,12H
INT 10H ;********************* 640*480,16 *******************
CALL BLANK_ON
; setvga
; sethires
FILLMUSICBUF
fade 1,data,blackpaloff,data,blackpaloff
FILLMUSICBUF
CALL BLANK_OFF
CALL SET_EGAPAL
CALL BLANK_ON
FILLMUSICBUF
mov ax,0
mov bx,intpic2pos
mov cx,640
mov bp,0b
mov dx,0
move es,intpic2seg
call unpklbm
mov intpic2paloff,dx
FILLMUSICBUF
fade 20,data,blackpaloff,intpic2seg,intpic2paloff
wait_music fantasietime
fade 20,intpic2seg,intpic2paloff,data,blackpaloff
;************ HŽRIFR<46>N
fillmusicbuf
checkquit
jmp trasselsudd
skip_the_intro_bra_att_hoppa_till_da:
fade 1,data,blackpaloff,data,blackpaloff
setvga
sethires
fade 1,data,blackpaloff,data,blackpaloff
trasselsudd: ;kan de bli r”rigare??
SYNCA
setvga
setlores
call set240
SYNCA
CALL SET_EGAPAL
;******************************************************************************
;* MANUAL SKYDDET *
;******************************************************************************
JMP SVEN_GURKA
GetKey:
read_again_my_friend:
move ds,data
mov ax,12h
int keyhandler ;report scancode 0=no key pressed cp! calla is„llet
push ax
synca
pop ax
cmp al,0
je read_again_my_friend
mov bx,offset rekord_tabell
xlatb
retn
GetKey2:
move ds,data
mov ax,12h
int keyhandler ;report scancode 0=no key pressed cp! calla is„llet
push ax
synca
pop ax
mov bx,offset rekord_tabell
xlatb
retn
PRINTA MACRO TEXT,SCR_DEST,COLOR
LOCAL TEXTEN,STARTA
JMP STARTA
TEXTEN DB TEXT,0
STARTA: PUSH SCR_DEST
PUSH OFFSET TEXTEN
MOV DL,COLOR
POP BX
POP DI
CALL NXTCHAR
ENDM
PRINTA2 MACRO TEXTOFFS,SCR_DEST,COLOR
PUSH SCR_DEST
LEA AX,TEXTOFFS
PUSH AX
MOV DL,COLOR
POP BX
POP DI
CALL NXTCHAR2
ENDM
INPUTA MACRO DATA_DEST,MAXLEN,SCR_DEST,COLOR
PUSH OFFSET DATA_DEST
PUSH SCR_DEST
MOV DH,MAXLEN
MOV DL,COLOR
POP DI
POP SI
CALL DOTHEINPUT
ENDM
NXTCHAR:MOV AL,CS:[BX]
OR AL,AL
JZ EOTXT
PUSH DI
PUSH BX
PUSH DX
CALL PUTCHAR2
POP DX
POP BX
POP DI
INC BX
ADD DI,FONTW
JMP NXTCHAR
EOTXT: RETN
NXTCHAR2:
MOV AL,DS:[BX]
OR AL,AL
JZ EOTXT
PUSH DI
PUSH BX
PUSH DX
CALL PUTCHAR2
POP DX
POP BX
POP DI
INC BX
ADD DI,FONTW
JMP NXTCHAR2
BLANK_ON:
PUSHA
FILLMUSICBUF
mov ax,24
mov bl,255
INT 66H ;order vblank
POPA
RETN
BLANK_OFF:
PUSHA
FILLMUSICBUF
MOV AX,24
MOV BL,0
INT 66H
POPA
RETN
ANDHAMTNING PROC NEAR
FILLMUSICBUF
PUSHA
MOV CX,20
KULO:
push es DS CX
mov ax,40h
mov es,ax
MOV AX,0
MOV DS,AX
ventaTT: MOV AX,8
PUSHF
CALL DWORD PTR DS:[66H*4]
cmp byte ptr es:[76h],0
MOPAR: ;EJ KORTA LOOPAR!
REPT 1000
NOP
ENDM
jz ventaTT
mov byte ptr es:[76h],0
pop CX DS es
LOOP KULO
POPA
RETN
ANDHAMTNING ENDP
PUTCHAR2 PROC NEAR ;INPUT:AL=CHAR,DI=SCR_DEST,DL=COLOR
MOV BL,AL
PUSH BX
PUSH DI
MOV AX,DI
NIL DX
MOV BX,320
DIV BX
MOV DX,AX
PUSH DX ;YPOS P<> STACKEN
MOV BX,320
MUL BX
POP DX
POP DI
SUB DI,AX
MOV AX,DI
POP BX
;* buf1 * ;visa sid 0, skriv sid 1
pusha
MOVE ES,0A000H
MOVE DS,DATA
MOV CS:SIDA,44580
MOV CS:FONTEN,0
XCHG AX,AX
XCHG AX,DX
XCHG DX,DX
CALL PUTCHAR
synca
setscr 44580
synca
popa
XCHG AX,AX
XCHG AX,DX
XCHG DX,DX
;* buf2 *
MOVE ES,0A000H
MOVE DS,DATA
MOV CS:SIDA,0
MOV CS:FONTEN,0
CALL PUTCHAR
synca
setscr 0
synca
RETN
comment\
SET_ES 0A000H
NIL AH
SHL AX,3
MOV BP,AX
ADD BP,OFFSET FONTMONO
MOV CX,8
NXTBYTE:PUSH DI
MOV AL,10000000B
NXTPIXL:MOV AH,DS:[BP]
AND AH,AL
JZ NTPIX
MOV BYTE PTR ES:[DI],DL
JMP PIXPUTREADY
NTPIX: MOV BYTE PTR ES:[DI],0
PIXPUTREADY:
INC DI
SHR AL,1
OR AL,AL
JNZ NXTPIXL
POP DI
ADD DI,320
INC BP
LOOP NXTBYTE
RETN
\
PUTCHAR2 ENDP
DOTHEINPUT:
MOV BP,SI
MOV CX,SI
ADD CL,DH
ADC CH,0
NXTINP:
CALL WINDOWS_PRINT
call GetKey ;INT 16H (n„stan)
CMP AL,13
JE ENTERT
CMP AL,8
JE BACKSPACE
CMP AL,32
JB NXTINP
CMP AL,122
JA NXTINP
CMP AL,96
JBE UCASE
SUB AL,32
UCASE: MOV BYTE PTR DS:[SI],AL
MOV BYTE PTR DS:[SI+1],0
; PUSHA
; CALL PUTCHAR2
; POPA
; ADD DI,FONTW
CMP SI,CX
JE NXTINP
INC SI
JMP NXTINP
ENTERT: MOV BYTE PTR DS:[SI],0
RETN
BACKSPACE:
CMP SI,BP
JE NXTINP
DEC SI
MOV WORD PTR DS:[SI],0
; SUB DI,FONTW
; PUSHA
; MOV AL,0 ;INTE DU MIN BRUTUS!
; CALL PUTCHAR2
; POPA
JMP NXTINP
VAL2DECASC MACRO STRINGEN,VALUE
PUSHA
PUSH OFFSET STRINGEN
PUSH VALUE
POP AX
POP DI
NIL DX
MOV BX,10000
DIV BX
PUSH DX
MOV BX,OFFSET HEXTBL
XLATB
MOV DS:[DI],AL
POP AX
NIL DX
MOV BX,1000
DIV BX
PUSH DX
MOV BX,OFFSET HEXTBL
XLATB
MOV DS:[DI+1],AL
POP AX
MOV BL,100
DIV BL
PUSH AX
MOV BX,OFFSET HEXTBL
XLATB
MOV DS:[DI+2],AL
POP AX
MOV AL,AH
NIL AH
MOV BL,10
DIV BL
PUSH AX
MOV BX,OFFSET HEXTBL
XLATB
MOV DS:[DI+3],AL
POP AX
MOV AL,AH
MOV BX,OFFSET HEXTBL
XLATB
MOV DS:[DI+4],AL
MOV BYTE PTR DS:[DI+5],0
POPA
ENDM
ARRLEFT MACRO STRINGEN,CHAREN
LOCAL NOMORE,NASTAC,NOBYTE,MOVSBL
PUSHA
PUSH ES
MOV DH,CHAREN
PUSH OFFSET STRINGEN
POP BX
PUSH BX
MOV SI,BX
NIL CX
NASTAC: LODSB
CMP AL,DH
JNE NOMORE
CMP BYTE PTR DS:[SI],0 ;SI-1 OM DET BLIR FEL
JZ NOMORE
INC CX
JMP NASTAC
NOMORE:
POP DI
JCXZ NOBYTE
MOVE ES,DS
MOV SI,DI
ADD SI,CX
MOVSBL: MOVSB
CMP BYTE PTR DS:[SI-1],0
JNZ MOVSBL
NOBYTE: POP ES
POPA
ENDM
STRADD MACRO DEST,SOURCE
PUSHA
PUSH OFFSET DEST
PUSH OFFSET SOURCE
POP SI
POP DI
STRLEN AL,DI
NIL AH
ADD DI,AX
STRCOPY DI,SI
POPA
ENDM
tudor:
pusha
move es,0b000h
mov si,offset ordlista
mov di,0
move ds,data
mov cx,2000
huko: movsb
inc di
loop huko
popa
retn
SVEN_GURKA:
fillmusicbuf
;*************** TILL HIT
mova es,cs
mov di,offset cs:faded_pal
mov cx,256*3
xor al,al
rep stosb ;rensa pallen s† att set_pal sl„cker
CALL SET_PAL256
choosern_init:
if demover
CALL BLANK_OFF
setvga
setlores
call set240
CALL BLANK_ON
; MOV AX,0EH
; SIMINT 10H ;640*200,16
endif
FILLMUSICBUF
cleargfx
if demover
fade 1,data,blackpaloff,data,blackpaloff
else
SETLORES ;************************ 640*240*16 *********************
fade 3,data,blackpaloff,data,blackpaloff
; slackA 320
; slack 1
endif
if demover
else
;************ checksum!!!!
mov si,offset cs:START_KEK2
mov al,checktrim2
mov cx,offset cs:stop_kek2-offset cs:start_kek2
liiirarn:
add ax,cs:[si]
inc si
loop liiirarn
nil ah
or ax,ax
; jne pinball_fantasies_integretet_ar_krankt
;*********************
;erbjud v„xling mellan 2 st 16-paletter
synca
mov dx,3dah
in al,dx
mov dx,3c0h
mov al,10h+20h
out dx,al
jmp $+2
inc dl
in al,dx
dec dl
or al,80h
out dx,al
endif
FILLMUSICBUF
IF DEMOVER
JMP JAGARN
ELSE
;setscr 240*80+95*3*80
;packa upp & spara bilderna R<>TT!!
mov ax,hsl1seg
call packa_upde
mov di,offset savearea1
call rave_party
mov ax,hsl2seg
call packa_upde
mov di,offset savearea2
call rave_party
jmp jagarn
packa_upde:
mov cx,640
mov bx,0
mov bp,0b
mov dx,0
mov es,ax
mov bx,0
mov ax,0
call unpklbm
ENDIF
retn
rave_party:
call aronsson_bort
mov bl,0
mov cx,4
move es,data
move ds,0a000h
ynkes:
push cx
setrbpl bl
mov si,0
mov cx,lhojd
lajlas_kusin:
push cx
mov cx,lbredd/8
rep movsb
add si,640/8-lbredd/8
pop cx
loop lajlas_kusin
inc bl
pop cx
loop ynkes
move ds,data
retn
put_the_hslogo1:
pusha
mov bx,cs:textpek
cmp textlista[bx-2],-1
jne nologga1
mov si,offset savearea2
mov bp,0+128/8+4+3
call perverted_rave_party
add cs:sida,80*10
nologga1:
popa
retn
put_the_hslogo2:
pusha
mov bx,cs:textpek
cmp textlista[bx-2],-1
jne nologga2
mov si,offset savearea1
mov bp,44580+128/8+4+3
pinball_fantasies_integretet_ar_krankt:
call perverted_rave_party
add cs:sida,80*10
nologga2:
popa
retn
perverted_rave_party:
call aronsson_bort ;jas† aronsson f†r inte va med p† rave
;bp = dest, si = s†s
mov bl,1
mov cx,4
move es,0a000h
ynke:
push cx
setwbpl bl
mov cx,loggasize
mov di,bp
mov cx,lhojd
lajlas_syssling:
push cx
mov cx,lbredd/8
rep movsb
add di,640/8-lbredd/8
pop cx
loop lajlas_syssling
shl bl,1
pop cx
loop ynke
retn
jagarn:
if demover
slackA 320
mov cx,1
else
slackA 130
SYNCA
mov cx,7 ;Fonten ligger p† slutet!! Inte l„ngre, de funkade ej!!
endif
mov bx,0
makefjups:
push cx
; mov cx,320
mov cx,640
CMP BX,6
JB NOCHG
MOV CX,55*8
NOCHG:
FILLMUSICBUF
mov bp,0b
mov dx,0
mov ax,tabletabell[bx]
mov es,ax
push bx
mov bx,vartabell[bx]
mov ax,0
call unpklbm
FILLMUSICBUF
pop bx
mov tablepaloff[bx],dx
add bx,2
pop cx
loop makefjups
IF DEMOVER
ELSE
call aronsson
call crunchpics
call movelogobar
call copy_pf_loggan
ENDIF
if demover
else
setscr 130/4/2
; fade 1,tabletabell[0],tablepaloff[0],tabletabell[0],tablepaloff[0] ;S„tt r„tt!!
endif
if demover
; mov al,0
; mov bx,8
; call julius
SETSCR 80*28
SYNCA
fade 40,data,blackpaloff,tabletabell[0],tablepaloff[0] ;S„tt r„tt!!
jmp demoversion
endif
SPRINTA MACRO THETEXT,THEPOS
LOCAL NXXXXT,ENDOFIT
LEA DI,THEPOS
MOVE ES,DS
LEA SI,THETEXT
NIL CH
NXXXXT: MOV CL,[SI]
JCXZ ENDOFIT
MOV [DI],CL
INC SI
INC DI
JMP SHORT NXXXXT
ENDOFIT:
MOVE ES,0A000H ;CP, OCH INTE N™DVŽNDIGT!
ENDM
;*******************************************************************
; debugmess 0,0,'yo man!'
fade 3,data,blackpaloff,data,blackpaloff
nuvaranden=offset nuvarande
mov al,16
mov bx,10
call julius ;Ceasar s„tter en palett!!
mov al,0
mov bx,10
call julius
movpal tabletabell[6],tablepaloff[6],data,nuvaranden+16*3
movpal tabletabell[8],tablepaloff[8],data,nuvaranden
MOV CS:CHANGE16PAL,TRUE
slacka 130
mov cx,4
loket:
push cx
synca
pop cx
loop loket
MOV CS:SIDOPEK,130/8
MOV CS:SIDOBAR,TRUE
wait_sync_spec2 20
slackA 320
;************************** HŽR E NYA SKYDDET!!!!!!!!!! ***********************
call aronsson
MOVE DS,DATA
MOVE ES,DATA
;****************** checksummat ******************
start_kek2:
mov al,2eh ;Get CMos checksum!
out 70h,al
in al,71h
mov bl,al
mov al,2fh
out 70h,al
in al,71h
mov bh,al
mov ax,chksum
XOR BX,10010000B
ROL BX,1
mov chksum,bx
SUB ax,bx
ADD CS:AVSLUTA_PSEUDO,AX
CMP CS:AVSLUTA_PSEUDO,OFFSET CS:SHOWMENU
MOV CS:AVSLUTA_PSEUDO,OFFSET CS:AVSLUTA
je no_skydd ;l†ter faligt!! „r „nnu farligare!!!
call getkey2 ;vill du se en stj„rna, se(mikolon) p† mig! (e de erroR flynn??)
MOVE ES,0A000H
NIL DX
MOV ax,CS:SLUMPEN ;ax=slump
COMMENT\
MOV BX,NOOFWORDS
DIV BX
MOV AX,DX
\
AND AX,63
mov bx,size wordstruc
mul bx
mov thepost,ax
mov si,thepost
mov al,ordlista[si].theword ;word
ror al,1
;stop_kek2:
xor al,10100010b
nil ah
VAL2DECASC TEMPTEXT,AX
ARRLEFT TEMPTEXT,'0'
STRADD TEXTEN1,TEMPTEXT
STRADD TEXTEN1,TEXTEN2
mov si,thepost
mov al,ordlista[si].theline ;line
ror al,1
xor al,10100010b
nil ah
VAL2DECASC TEMPTEXT,AX
ARRLEFT TEMPTEXT,'0'
STRADD TEXTEN3,TEMPTEXT
STRADD TEXTEN3,TEXTEN4
MOV SI,THEPOST
mov al,ordlista[si].thepage ;page
ror al,1
xor al,10100010b
nil ah
VAL2DECASC TEMPTEXT,AX
ARRLEFT TEMPTEXT,'0'
STRADD TEXTEN3,TEMPTEXT
; STRADD TEXTEN3,TEXTEN5 ;'.'!!!
; PRINTA2 TEXTEN1,90*320+8,TEXTCOLOR
; PRINTA2 TEXTEN2,100*320+8,TEXTCOLOR
STRLEN AL,TEXTEN1
NIL AH
INC AX ;NOLLAN OX<4F>!
MOV DI,OFFSET WHATS_HAPPENING
DATAMOV DI,TEXTEN1,AX
ADD DI,AX
STRLEN AL,TEXTEN3
NIL AH
INC AX
DATAMOV DI,TEXTEN3,AX
; SPRINTA TEXTEN1,PROTTXT+4*24
; SPRINTA TEXTEN3,PROTTXT+5*24
call aronsson
call showtext_prot
NO_SKYDD:
stop_kek2:
;********************************SLUT P<> SKYDD*********************************
;******************************************************************************
mov cs:menubaren_on,true
call aronsson
call rastraclear
mov cs:deccet,menutime*60
jmp showpics
;******************************************************************************
;* The Chooser *
;******************************************************************************
;
choosern:
mov cs:menubaren_on,true
call showtext
cmp cs:menunext,true
jne noshow
mov cs:menunext,false
call showmenu
noshow:
showpics:
wait_sync_spec 20
test banpek,10b
jne pics2
mov al,16
mov bx,6
call julius ;Ceasar s„tter en palett!!
mov al,0
mov bx,8
call julius
nuvaranden=offset nuvarande
movpal tabletabell[6],tablepaloff[6],data,nuvaranden+16*3
movpal tabletabell[8],tablepaloff[8],data,nuvaranden
;*********** set 2 palette modes (on rasterint) **************
MOV CS:CHANGE16PAL,TRUE
mov bp,0
call rastra
jmp keyread
pics2:
mov al,16
mov bx,10
call julius
mov al,0
mov bx,12
call julius
movpal tabletabell[10],tablepaloff[10],data,nuvaranden+16*3
movpal tabletabell[12],tablepaloff[12],data,nuvaranden
;*********** set 2 palette modes (on rasterint) **************
MOV CS:CHANGE16PAL,TRUE
mov bp,55*95*2
call rastra
mov cs:deccet,menutime*60
keyread:
synca
mov ax,1 ;Read key!!!
move es,0
pushf
call dword ptr es:[keyhandler*4]
cmp al,01
je quit_ing
cmp al,3bh ;f1
je f1
cmp al,3ch ;f2
je f2
if finmenu
cmp al,3dh ;f3
je f3
cmp al,3eh ;f4
je f4
endif
cmp al,3fh ;f5
je f5
cmp al,39h ;space
je space
;if finmenu
; cmp al,28 ;entera
; je space
;else
cmp al,28 ;entera
je entera
;endif
dec cs:deccet
jz WAITEND
jmp keyread
entera:
xor banpek,10b
; MOV CS:TEXTPEK,2
add cs:textpek,2
mov bx,cs:textpek
cmp word ptr [bx],0
jnz boxk
mov cs:textpek,offset textlista+2
boxk:
MOV TEXTLISTA[0],OFFSET HITEXT1
JZ NEDU
MOV TEXTLISTA[0],OFFSET HITEXT2
NEDU:
CALL RASTRACLEAR
mov cs:deccet,menutime*60
jmp SHOWPICS
space:
WAITEND:
xor banpek,10b
MOV TEXTLISTA[0],OFFSET HITEXT1
JNZ NEDU_DUDU
MOV TEXTLISTA[0],OFFSET HITEXT2
NEDU_DUDU:
MOV CS:DECCET,MENUTIME*60
JMP CHOOSERN
f5:
call showmenu ;jump into menu mode
jmp showpics ;when menu ready, show the pics again!
f1:
mov bl,1
jmp savebana
f2:
mov bl,2
jmp savebana
f3:
mov bl,3
jmp savebana
f4:
mov bl,4
jmp savebana
savebana:
mov bh,0
if finmenu
else
add bx,banpek
endif
mov ax,0ffffh
int keyhandler
MOV BX,OFFSET CS:AVSLUTA_PSEUDO-2
INC BX
INC BX
MOV AX,CS:[BX]
jmp AX
f1t:
mov bl,1
jmp savebana2
f2t:
mov bl,2
jmp savebana2
f3t:
mov bl,3
jmp savebana2
f4t:
mov bl,4
jmp savebana2
savebana2:
mov bh,0
if finmenu
else
add bx,banpek
endif
mov ax,0ffffh
int keyhandler
setscr 44580 ;b”r ligga p† rasterint
fade3b 20
call aronsson
call clearall
setscr 0 ;b”r ligga p† rasterint
MOV CS:CHANGE16PAL,true
pop ax ;retn tabort
MOV BX,OFFSET CS:AVSLUTA_PSEUDO-2
INC BX
INC BX
MOV AX,CS:[BX]
jmp AX
deccet dw ?
quit_ing:
grynet=offset nuvarande
fadeM 80,data,grynet,data,blackpaloff
SPYAN_STEWART:
cleargfx
CALL BLANK_OFF
MOV CS:CHANGE16PAL,FALSE
mov bx,0 ;Quitta helt † h†llet!!
mov ax,0ffffh
int keyhandler
; mov ax,3
; int 10h
;uninstall fn0
mov ax,0
int 66h
mov ax,3
int 10h
MOVE DS,DATA
MOV BX,BUPPEN_FILEN
CLOSEFILE BX
CALL SAVE_TOGGLAREN
CALL BEFORE_STARTING
; mov ah,48h
; mov bx,0ffffh
; int 21h
mov ax,4c00h
int 21h
avsluta:
if demover
else
fadeM 80,data,grynet,data,blackpaloff
endif
jmp quit
not_enough:
mov bx,0 ;Quitta helt † h†llet!!
mov ax,0ffffh
int keyhandler
;uninstall fn0
mov ax,0
int 66h ;UNINST MS
mov ax,3
int 10h
mov dx,offset notenoughmess
mov ax,900h
int 21h
MOVE DS,DATA
MOV BX,BUPPEN_FILEN
CLOSEFILE BX
CALL SAVE_TOGGLAREN
CALL BEFORE_STARTING
; mov ah,48h
; mov bx,0ffffh
; int 21h ;why?
mov ax,4c00h
int 21h
julius:
mov si,tablepaloff[bx]
push ds
mov ds,tabletABELL[bx]
MOV CX,16*3
mov dx,3c8h
;al „r: 0-15, 16-31
out dx,al
mov dx,3c9h
repoutsb
; rep outsb
pop ds
retn
SHIFTPAL MACRO NO,SEGGE,OFFE
LOCAL SHIFFE
MOV CX,NO*3
MOVA ES,SEGGE
MOVA SI,OFFE
SHIFFE: SHL BYTE PTR ES:[SI],2
INC SI
LOOP SHIFFE
ENDM
SHIFT_UP_PALETTES:
SHIFTPAL 32,t21st1seg,t21st_REAL_pal
SHIFTPAL 256,viking2seg,viking_REAL_pal
SHIFTPAL 256,fl1seg,fld_logopaloff
SHIFTPAL 256,presentseg,presentpaloff
SHIFTPAL 16,intpic2seg,intpic2paloff
IF DEMOVER
SHIFTPAL 16,new_cov2seg,tablepaloff
ENDIF
RETN
in al,60h
mov ah,al
feel_key:
push ax
FILLMUSICBUF
pop ax
in al,60h
cmp al,ah
jne fadedown
jmp feel_key
fadedown:
; fade 40,dtseg,demotext2paloff,data,blackpaloff
quit:
;uninstall fn0
mov ax,0
int 66h
MOVE DS,DATA
MOV BX,BUPPEN_FILEN
CLOSEFILE BX
CALL SAVE_TOGGLAREN
CALL BEFORE_STARTING
; mov ah,48h
; mov bx,0ffffh
; int 21h
mov ax,4c00h
int 21h
SET_MCGAB PROC NEAR
MOV AX,9876
MOV BL,NUMRET
INT keyhandler
MOV AX,13H
INT 10H
MOV DX,3D4H ;UNLOCK
MOV AL,11H
MOV AH,0
OUT DX,AX
MOV DX,3C4H ;SET MCGAB (NO CHAIN FOUR, USE 256KB)
MOV AL,04H
OUT DX,AL
INC DX
IN AL,DX
AND AL,11110110B
OUT DX,AL
MOV DX,3D4H ;COUNT BY FOUR AND NO DOUBLE WORD MODE
MOV AL,14H
OUT DX,AL
INC DX
IN AL,DX
AND AL,10111111B ;10011111B SVARAR MOT KOMMENTAREN
OUT DX,AL
MOV DX,3D4H ;MODE CONTROL (STANDARD ADRESSING MODE)
MOV AL,17H
MOV AH,11100011B
OUT DX,AX
NO_1417:
MOV DX,3CCH
IN AL,DX
MOV DX,3C2H
OR AL,11000000B
OUT DX,AL ;s„tt 240-linjers sk„rmh”jd
; CALL BLANK_ON
RETN
SET_MCGAB ENDP
SET240 PROC NEAR
mov dx,03d4h
mov al,11h
out dx,al
inc dx
in al,dx
and al,7fh
out dx,al
dec dx
cld
MOV SI,OFFSET XPARABL
MOV CX,10
xvploop:
mov ax,cs:[si]
add si,02h
out dx,ax
jmp $+2
loop xvploop
RETN
xparabl db 06h,0Dh ,07h,03eh ,09h,40H+80H,10h,0EAh ,11h,0ch ,12h,0dfh ,14h,00h
db 15h,0eah,016h,06h,17h,0e3h
SET240 ENDP
steg db 200
make_pal proc near
;ds:si=pal1
;es:di=pal2
;cl=pos
;(v1*(steg-pos)+v2*pos)/steg=v ;steg=antal steg † tona p†, pos=pos+1 v1=old v2=new
;cs:bx=destpal
mov bx,offset cs:faded_pal
tona_next:
lodsb ;ladda ax me v1
mov dl,cs:steg
sub dl,cl ;cl e pos
mul dl
mov bp,ax ;save v1*(steg-pos)
mov al,es:[di] ;ladda ax me v2
inc di
mul cl
add ax,bp
div cs:steg
mov cs:[bx],al
inc bx
cmp bx,offset cs:faded_pal+nofcolors*3
jb tona_next
retn
endp
make_pal1 proc near
;ds:si=pal1
;es:di=pal2
;cl=pos
pusha
;(v1*(steg-pos)+v2*pos)/steg=v ;steg=antal steg † tona p†, pos=pos+1 v1=old v2=new
;cs:bx=destpal
mov bx,offset cs:faded_pal
tona_next1:
lodsb ;ladda ax me v1
mov dl,cs:steg
sub dl,cl ;cl e pos
mul dl
mov bp,ax ;save v1*(steg-pos)
mov al,es:[di] ;ladda ax me v2
inc di
mul cl
add ax,bp
div cs:steg
mov cs:[bx],al
inc bx
cmp bx,offset cs:faded_pal+3
jb tona_next1
popa
retn
endp
set_pal proc near
push cx
mova ds,cs
mov dx,3c8h
mov al,0
out dx,al
inc dx
mov cx,nofcolors*3
mov si,offset cs:faded_pal
REPOUTSB
; rep outsb
pop cx
mova ds,data
retn
endp
set_pal1 proc near
push cx
mova ds,cs
mov dx,3c8h
mov al,0
out dx,al
inc dx
mov cx,3
mov si,offset cs:faded_pal
REPOUTSB
; rep outsb
pop cx
mova ds,data
retn
endp
make_pal256 proc near
;ds:si=pal1
;es:di=pal2
;cl=pos
;(v1*(steg-pos)+v2*pos)/steg=v ;steg=antal steg † tona p†, pos=pos+1 v1=old v2=new
;cs:bx=destpal
mov bx,offset cs:faded_pal
tona_next256:
lodsb ;ladda ax me v1
mov dl,cs:steg
sub dl,cl ;cl e pos
mul dl
mov bp,ax ;save v1*(steg-pos)
mov al,es:[di] ;ladda ax me v2
inc di
mul cl
add ax,bp
div cs:steg
mov cs:[bx],al
inc bx
cmp bx,offset cs:faded_pal+256*3
jb tona_next256
retn
endp
set_pal256 proc near
push cx
mova ds,cs
mov dx,3c8h
mov al,0
out dx,al
inc dx
mov cx,256*3
mov si,offset cs:faded_pal
REPOUTSB
; rep outsb
pop cx
mova ds,data
retn
endp
faded_pal db 256*3 dup(0)
unpkpics:
;packa upp bilderna
mov ax,0
mov bx,0+t21stpos
mov cx,320
mov bp,10b
mov dx,0
move es,t21st1seg
call unpklbm
MOVE DS,DATA
MOV T21ST_REAL_PAL,DX
mov t21stpaloff,offset pelle1
push es ds
move es,data
move ds,t21st1seg
mov cx,256*3
mov si,dx
mov di,offset pelle1
rep movsb
pop ds es
mov ax,0
mov bx,139+t21stpos
mov cx,320
mov bp,10b
mov dx,0
move es,t21st2seg
call unpklbm
MOVE DS,DATA
mov ax,0
mov bx,0+vikingpos
mov cx,320
mov bp,10b
mov dx,0
move es,viking2seg
call unpklbm16
MOVE DS,DATA
MOV VIKING_REAL_PAL,DX
mov vikingpaloff,offset pelle2
push es ds
move es,data
move ds,viking2seg
mov cx,256*3
mov si,dx
mov di,offset pelle2
rep movsb
pop ds es
mov ax,0
mov bx,125+vikingpos
mov cx,320
mov bp,10b
mov dx,0
move es,viking1seg ;ETT
call unpklbm ;16
MOVE DS,DATA
mov ax,0
mov bx,fld_logopos ;+20
mov cx,320
mov bp,10b
mov dx,0
move es,fl1seg
call unpklbm16
MOVE DS,DATA
mov fld_logopaloff,dx
mov ax,0
mov bx,fld_logopos+fl1storlek;+20
mov cx,320
mov bp,10b
mov dx,0
move es,fl2seg
call unpklbm
MOVE DS,DATA
retn
unpkpics2:
;packa upp bilderna
CALL ANDHAMTNING
mov ax,0
mov bx,0+t21stpos
mov cx,320
mov bp,10b
mov dx,0
move es,t21st1seg
call unpklbm
MOVE DS,DATA
CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten!
;(s†deles f”rhindra att datorn dyker!!!!)
mov ax,0
mov bx,139+t21stpos
mov cx,320
mov bp,10b
mov dx,0
move es,t21st2seg
call unpklbm
CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten!
;(s†deles f”rhindra att datorn dyker!!!!)
MOVE DS,DATA
mov ax,0
mov bx,0+vikingpos
mov cx,320
mov bp,10b
mov dx,0
move es,viking2seg
call unpklbm16
MOVE DS,DATA
CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten!
;(s†deles f”rhindra att datorn dyker!!!!)
mov ax,0
mov bx,125+vikingpos
mov cx,320
mov bp,10b
mov dx,0
move es,viking1seg ;ETT
call unpklbm ;16
MOVE DS,DATA
CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten!
;(s†deles f”rhindra att datorn dyker!!!!)
mov ax,0
mov bx,fld_logopos ;+20
mov cx,320
mov bp,10b
mov dx,0
move es,fl1seg
call unpklbm16
MOVE DS,DATA
CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten!
;(s†deles f”rhindra att datorn dyker!!!!)
mov ax,0
mov bx,fld_logopos+fl1storlek;+20
mov cx,320
mov bp,10b
mov dx,0
move es,fl2seg
call unpklbm
MOVE DS,DATA
CALL ANDHAMTNING ;Tag lyft f”r att †ter kunna dyka p† djupt vatten!
;(s†deles f”rhindra att datorn dyker!!!!)
retn
rastra:
move es,0a000h
mov bx,offset rastatab
next_raster:
mov al,[bx]
cmp al,-1
je next_sync
push ax
call putraster
pop ax
call putraster2
inc bx
jmp next_raster
next_sync:
inc bx
cmp byte ptr [bx],-1
je done_raster
synca
jmp next_raster
done_raster:
retn
rastraclear:
move es,0a000h
mov al,es:[128/8+3] ;d„r „r det svart min v„n!!
mov bx,offset rastatab
next_raster2:
mov al,[bx]
cmp al,-1
je next_sync2
push ax
call clearraster
pop ax
call clearraster2
inc bx
jmp next_raster2
next_sync2:
inc bx
cmp byte ptr [bx],-1
je done_raster2
synca
jmp next_raster2
done_raster2:
retn
putraster:
push ds
move ds,0a000h
push ax
mov cl,55
mul cl
mov di,80*dist+20
mov si,240*80+14*4*80
add si,bp
add si,ax
pop ax
mov cl,80
mul cl
add di,ax
mov cx,55
rep movsb
pop ds
retn
putraster2:
push ds
move ds,0a000h
mov cl,55
xchg al,ah
mov al,94
sub al,ah
push ax
mul cl
mov di,80*(240-dist-95)+20
mov si,240*80+55*95+14*4*80
add si,bp
add si,ax
pop ax
mov cl,80
mul cl
add di,ax
mov cx,55
rep movsb
pop ds
retn
clearraster:
push ds
move ds,0a000h
mov cl,80
xchg al,ah
mov al,94
sub al,ah
mul cl
mov di,80*dist+20
add di,ax
mov cx,55
rep stosb
pop ds
retn
clearraster2:
push ds
move ds,0a000h
mov cl,80
mul cl
mov di,80*(240-dist-95)+20
add di,ax
mov cx,55
rep stosb
pop ds
retn
clearall:
move es,0a000h
mov al,es:[128/8+3] ;d„r „r det svart min v„n!!
mov cx,240
mov di,128/8+4
lajban_lasse:
push cx
mov cx,55
rep stosb
add di,80-55
pop cx
loop lajban_lasse
mov cx,240
mov di,44580+128/8+4
lajban_laban:
push cx
mov cx,55
rep stosb
add di,80-55
pop cx
loop lajban_laban
retn
clearalmostall:
move es,0a000h
mov al,es:[128/8+3] ;d„r „r det svart min v„n!!
mov cx,240
mov di,44580+128/8+4
lajban_laban_o_lajla:
push cx
mov cx,55
rep stosb
add di,80-55
pop cx
loop lajban_laban_o_lajla
retn
clearalmostall2:
move es,0a000h
mov al,es:[128/8+3] ;d„r „r det svart min v„n!!
mov cx,CHARHEIGHT
mov di,128/8+4+80*2*18-80*4+80*(LINJEN-1)*18
lajban_laban_o_lajla2:
push cx
mov cx,55
rep stosb
add di,80-55
pop cx
loop lajban_laban_o_lajla2
retn
clearalmostall3:
move es,0a000h
mov al,es:[128/8+3] ;d„r „r det svart min v„n!! (NEGER)
mov cx,CHARHEIGHT
mov di,128/8+4+44580+80*2*18-80*4+80*(LINJEN-1)*18
lajban_laban_o_lajla3:
push cx
mov cx,55
rep stosb
add di,80-55
pop cx
loop lajban_laban_o_lajla3
retn
INIT_SOUND PROC NEAR
OPENFILE SOUNDCFG
JC NOSOUNDCFG
if musikkaos
else
READFILE BX,13,DRV ;get name of selected sound driver
endif
CLOSEFILE BX
savestack
MOV AX,DS
MOV ES,AX
MOV AX,4B00H ;fn 4b = load and execute exe file
MOV DX,OFFSET DRV
MOV BX,OFFSET PARMS
INT 21H ;LOAD DRIVER
restorestack
MOV DX,OFFSET DRV
; jc drv_not_found
mov ax,04d00h
int 21h
cmp al,7
je cantfindultrasndstring
RETN
NOSOUNDCFG:
MOV AX,3
INT 10H
missmess equ "The sound configuration file 'SOUND.CFG' is missing from the",13,10,"game directory. Please run the SETSOUND program so that the",13,10,"file can be created.",13,10
SPYMESS MiSSmess
MOV AX,4C04H ;CP!!! 4???
INT 21H
STC
RETN
ENDP
CHANGE16PAL DB FALSE
Tabort:
mov cs:SidoBar,false
jmp nosido
creatretf: ;RASTERINT
CMP CS:SIDOBAR,TRUE
JNE NOSIDO
Mov Bx,Cs:SidoPek
Dec cs:sidopek
Cmp bx,-1
Je TaBort
SetScr Bx
NOSIDO:
CMP CS:CHANGE16PAL,TRUE
JNE NOC16
cli
mov dx,3dah
l7: in al,dx
; test al,1
; jz l7
l8:; in al,dx
; test al,1
; jnz l8
rept 10
jmp $+2
endm
mov dl,0c0h
mov al,14h+20h
out dx,al
rept 10
jmp $+2
endm
mov al,0
out dx,al
sti
COMMENT\
IN AL,60H
CMP AL,15
JMP NOCUTTODO
MOV AL,CS:CUTADD
ADD CS:CUTLEN,AL
CMP CS:CUTLEN,20
JNE NOT20
NEG CS:CUTADD
NOT20: CMP CS:CUTLEN,-20
JNE NOT02
NEG CS:CUTADD
NOT02:
jmp doc17
doc16:
cmp cs:cutlen,0
jz nocuttodo
doc17:
linesync macro
local test1,test2
mov dx,3dah
test1: in al,dx
test al,1
jnz test1
test2: in al,dx
test al,1
jz test2
endm
cli
linesync
mov dx,3d4h
mov al,13h
mov ah,40
add ah,CS:cutlen
out dx,ax
linesync
linesync
mov dx,3d4h
mov al,13h
mov ah,40
out dx,ax
sti
mov al,0dh
mov ah,CS:cutlen
MOV AH,20
SUB AH,CS:CUTLEN
out dx,ax
nocuttodo:
\
NOC16:
retf
CUTLEN DB 0
CUTADD DB 1
FJUMPENS_BROR DW 0
FJUMPENS_FARSA DW 0
SLUMPEN DW ?
READREG MACRO PORT,INDEX
MOV DX,PORT
MOV AL,INDEX
OUT DX,AL
INC DX
IN AL,DX
ENDM
WRITEREG MACRO PORT,INDEX
MOV DX,PORT
MOV AH,AL
MOV AL,INDEX
OUT DX,AX
ENDM
SAVEGFXREGS MACRO
READREG 3C4H,2 ;BITPLANMASK
MOV AH,AL
READREG 3CEH,0 ;SET/RESET
PUSH AX
READREG 3CEH,1 ;ENABLE SET/RESET
MOV AH,AL
READREG 3CEH,4 ;READ MAP SELECT
PUSH AX
READREG 3CEH,5 ;WRITEMODE
MOV AH,AL
READREG 3CEH,8 ;BITMASK
PUSH AX
; MOV DX,3CEH
; MOV AX,0FF08H
; OUT DX,AX ;BITMASK OUTAD
PUSH ES 0A000H
POP ES
MOV ES:[-90*14-1],AL
POP ES
ENDM
RESTOREGFXREGS MACRO
POP AX
PUSH AX
MOV AL,AH
WRITEREG 3CEH,5
POP AX
WRITEREG 3CEH,8
POP AX
PUSH AX
WRITEREG 3CEH,4
POP AX
MOV AL,AH
WRITEREG 3CEH,1
POP AX
PUSH AX
WRITEREG 3CEH,0
POP AX
MOV AL,AH
WRITEREG 3C4H,2
PUSH ES 0A000H
POP ES
MOV AL,ES:[-90*14-1]
POP ES
ENDM
general_info label byte
db 'F1 - PARTY'
DB ' LAND'
DB 'F2 - SPEED'
DB ' DEVILS'
DB 'F3 - BILLION'
DB ' DOLLAR'
DB 'F4 - STONES'
DB " N'BONES"
DB 'F5 - OPTIONS'
DB 'SPACE - SKIP'
options_info label byte
db ' USE THE '
DB 'CURSOR KEYS '
DB 'TO SELECT AN'
DB ' OPTION '
DB ' '
DB 'TOGGLE WITH '
DB ' ENTER OR '
DB ' SPACEBAR '
DB ' '
DB 'ESCAPE QUITS'
loggatime = 60*8
infotime = 60*8
pfcounter dw loggatime
menubaren_on db false
info_text dw general_info
info_text_2_USE dw general_info
pftasken dw infot
pftask: dec pfcounter
cmp pfcounter,0
jg dumret
savegfxregs
jmp pftasken
loggan:
cmp pfcounter,-90
jg utmeloggan
mov pftasken,offset infot
mov pfcounter,loggatime
jmp endoftask
infot:
cmp pfcounter,-90
jg doclpf
cmp pfcounter,-90-12*10
jg prntchars
mov pftasken,offset loggan
mov pfcounter,infotime
endoftask:
restoregfxregs
retn
utmeloggan:
call aronsson
mova es,0a000h
mova ds,es
mov bp,pfcounter
neg bp
sub bp,89
mov ax,bp
mov si,-14
imul si
mov si,-90*14
add si,ax
mov di,95
sub di,bp
mov ax,bpl
mul di
mov di,ax
add di,2
mov ax,0
mov cx,14
push di si
rep movsb
pop si di
add di,44580
mov cx,14
rep movsb
mova ds,data
jmp endoftask
doclpf:
MOVA INFO_TEXT_2_USE,INFO_TEXT
call aronsson_bort
setwbpl 1111b
mov dx,3ceh
mov al,0
mov ah,10b
out dx,ax
inc al
mov ah,0fh
out dx,ax
MOV BP,3
LOC_LOOP1:
mova es,0a000h
mov di,95
sub di,pfcounter
mov ax,bpl
mul di
mov di,ax
inc di
mov ax,0
mov cx,7
push di
rep stosw
pop di
add di,44580
mov cx,7
rep stosw
DEC BP
JZ ENDOFTASK
DEC PFCOUNTER
JMP LOC_LOOP1
prntchars:
call aronsson_bort
mova es,0a000h
setwbpl 10b
MOV DI,97*BPL+2
MOV AX,PFCOUNTER
NEG AX
sub ax,90
MOV BL,12
DIV BL
MOV CX,AX
mov bl,9
MUL BL
MOV BL,80
MUL BL
ADD AL,CH
ADC AH,0
ADD DI,AX ;DI=ADR TO PUT CHAR
MOV AL,12
MUL CL
ADD AL,CH
ADC AH,0
MOV BX,AX
ADD BX,INFO_TEXT_2_USE
MOV AL,CS:[BX]
push di ax
CALL WRITEROMCHAR
pop ax di
add di,44580
call writeromchar
jmp endoftask
WRITEROMCHAR:
MOV CX,8
MOV BL,AL
XOR BH,BH
shl bx,3
MOVA DS,0F000H
ADD BX,0FA6EH
prntc:
MOV AL,DS:[BX]
not al
MOV ES:[DI],AL
ADD di,bpl
inc bx
loop prntc
mova ds,data
retn
copy_pf_loggan:
call aronsson
mov si,95*bpl+2
mov di,-90*14
mova ds,0a000h
mova es,ds
mov cx,90
rader: push cx
mov cx,14
rep movsb
add si,bpl-14
pop cx
loop rader
mova ds,data
; mov cs:menubaren_on,true
retn
DUMRET:RETN
dumretf: ;VBLANK
add CS:SLUMPEN,3 ;INTE FJUMPEN!!
SLACK CS:FJUMPENS_BROR
mova es,40h
mov byte ptr es:[76h],0ffh
CMP CS:CHANGE16PAL,TRUE
JNE NOC162
cli
mov dx,3dah
in al,dx
mov dx,3c0h
mov al,14h+20h
rept 10
jmp $+2
endm
out dx,al
rept 10
jmp $+2
endm
mov al,1
out dx,al
sti
noc162:
cmp menubaren_on,true
calle pftask
retf
s_p dw ?
s_s dw ?
sidobar DB FALSE
sIDOPEK DW ?
wbpl db ?
rbpl db ?
PUTCHAR: ;DX Points at X destination for char
;AX Points at Y destination for char
;BL Is the char
;Segments: ds=data es=0A000h
;cs:sida=adress till dest
;cs:fonten=adress till fonten
push dx
shr dx,3
mov di,dx
mov dx,0
mov cx,80
mul cx
add di,ax
pop dx
and dx,0111b
nil bh
shl bx,1 ;words pekare
mov si,fontlist[bx]
CMP SI,-1 ;240*80+80*14+4*19
JE DONT_PUT_SPACE_YOU_BLOODY_FOOL
add si,cs:fonten
move ds,0a000h
mov wbpl,1
mov rbpl,0
mov cx,4
add di,cs:sida
bipl: push cx si di
push dx
SETWBPL wbpl
SETRBPL rbpl
pop dx
shl wbpl,1
inc rbpl
mov cx,14 ;h”jd
nextchar:
push cx
mov cl,dl
mov al,[si]
mov ah,0
ror ax,cl
or [di],al
mov al,[si+1]
mov ch,ah
mov ah,0
ror ax,cl
or al,ch
or [di+1],al
mov al,[si+2]
mov ch,ah
mov ah,0
ror ax,cl
or al,ch
or [di+2],al
pop cx
add si,80
add di,80
loop nextchar
pop di si cx
loop bipl
DONT_PUT_SPACE_YOU_BLOODY_FOOL:
move ds,data
RETN
aronsson:
;set aronsson
mov dx,3ceh
mov ax,0105h
out dx,ax
;† bitplanen
mov dx,3c4h
mov ax,0f02h
out dx,ax
retn
aronsson_bort:
;set aronsson_bort
mov dx,3ceh
mov ax,0005h
out dx,ax
retn
sida dw ?
fonten dw ?
writepage:
;bx pekar p† textstarten!! ds skall sj„lvklart va data ;-)
mov cx,12
nextline:
push cx
mov cx,24
PUSH AX
MOVE ES,DATA
MOV DI,BX
MOV AL,0
REPne SCASB
MOV AX,CHARWITH
MUL CL
SHR AX,1
mov dx,128+charwith*2
ADD DX,AX
NEG CX
ADD CX,cs:kexchoklad2 ;24
POP AX
JCXZ NOLINE
nextcharS: ;bx points to asc char, ax=xpos dx=ypos of char
push ax cx bx dx
mov bl,[bx]
call putchar
pop dx bx cx ax
inc bx
add dx,charwith
loop nextcharS
add ax,(charheight+mellanrum)
pop cx
loop nextline
retn
NOLINE:
ADD AX,(charheight+mellanrum)
LOOP NEXTLINE
RETN
crunchpics:
push es ds
move ds,0a000h
move es,0a000h
mov di,240*80+14*4*80+55
mov si,240*80+14*4*80+80
mov cx,95*4-1
nasseslinje:
push cx
mov cx,55
rep movsb
pop cx
add si,80-55
loop nasseslinje
pop ds es
push ds
move ds,data ;checksumma!!!!
mov si,offset START_KEK
mov al,checktrim
mov cx,offset stop_kek-offset start_kek
liiir2: add al,byte ptr ds:[si]
inc si
loop liiir2
mov cs:kexchoklad,al ;SKA VA 14H+20H
pop ds
comment\
PUSHA
NIL AH
DCLS
DPRINTVAL AX," AX="
POPA
\
retn
kexchoklad db 0
movelogobar:
push es ds
move ds,0a000h
move es,0a000h
mov cx,240*80
mov si,0
mov di,44580 ;where the shit ends . . .
rep movsb
mov si,offset cs:START_KEK2
mov al,checktrim2
mov cx,offset cs:stop_kek2-offset cs:start_kek2
liiir: add ax,cs:[si]
inc si
loop liiir
nil ah
mov cs:kexchoklad2,ax
CALL UTSKRIVAREN
pop ds es
retn
kexchoklad2 dw 0
;*****************
showtext_prot:
call rastraclear
call aronsson_bort
mov al,0
mov bx,6
call julius
MOV CS:CHANGE16PAL,false
mov dx,3dah
in al,dx
mov dx,3c0h
mov al,14h+20h
jmp $+2
jmp $+2
jmp $+2
out dx,al
jmp $+2
jmp $+2
jmp $+2
mov al,0 ;v„lj 16 palette 0
out dx,al
mov dx,128+4+1
mov ax,14
mov bx,offset prottxt
mov cs:sida,44580
mov cs:fonten,80*14*2
call writepage
PUSHA
fade3B 5
SETSCR 44580
SYNCA
POPA
mov dx,128+4+1
mov ax,14
mov bx,offset PROTTXT
mov cs:sida,0
mov cs:fonten,0
call writepage
;h„r ska de 3 f„rgerna f„jdas . .
; slackA 320
synca
fade3 20
setscr 0 ;b”r ligga p† rasterint
synca
call aronsson
call clearalmostall
call aronsson_bort
mov dx,128+4+1
mov ax,14
mov cs:sida,44580
mov cs:fonten,0
mov bx,offset protTXT
call writepage ;flerf„rgsfont
call get_prot
SYNCA
SETSCR 0
SYNCA
call aronsson
call clearalmostall
call aronsson_bort
mov dx,128+4+1
mov ax,14
mov cs:sida,44580
mov cs:fonten,80*14*2
mov bx,offset WORDTXT
call writepage ;3 f„rgsfont
mov dx,128+4+1
mov ax,14
mov cs:sida,44580
mov cs:fonten,80*14*2
mov bx,offset PROTTXT
call writepage ;3 f„rgsfont
setscr 44580 ;b”r ligga p† rasterint
fade3b 20
call aronsson
call clearall
setscr 0 ;b”r ligga p† rasterint
MOV CS:CHANGE16PAL,true
retn
;*****************
showtext:
call rastraclear
call aronsson_bort
mov al,0
mov bx,6
call julius
; slackA 128/2
; setscr 44580 ;b”r ligga p† rasterint
; fade3b 5
MOV CS:CHANGE16PAL,false
mov dx,3dah
in al,dx
mov dx,3c0h
; mov al,14h+20h
;********************************
; checksumma
;********************************
mov al,cs:kexchoklad
cmp al,-10 ;14h+20h
je ok ;atrapp!
mov cx,22
ok:
;********************************
out dx,al
jmp $+2
mov al,0 ;v„lj 16 palette 0
out dx,al
mov dx,128+4+1
mov ax,14
bupper:
MOV BX,CS:TEXTPEK
ADD CS:TEXTPEK,2
mov bx,TEXTLISTA[BX] ;offset texten
cmp bx,-1
jne nohisorry
mov bx,textlista[0] ;highs!!
nohisorry:
CMP BX,0
JNE NOREZ
MOV CS:TEXTPEK,2
; mov bx,TEXTLISTA[2] ;offset texten
jmp bupper
NOREZ:
PUSH BX
mov cs:sida,44580
mov cs:fonten,80*14*2
call put_the_hslogo2 ;N„rd† d†??
call writepage
PUSHA
fade3B 5
SETSCR 44580
SYNCA
POPA
mov dx,128+4+1
mov ax,14
POP BX
mov cs:sida,0
mov cs:fonten,0
call put_the_hslogo1 ;N„rd† d†??
call writepage
;h„r ska de 3 f„rgerna f„jdas . .
; slackA 320
fade3 20
setscr 0 ;b”r ligga p† rasterint
wait_sync2 60*texttime ;v„nta med den snygga fonten p† . . .
setscr 44580 ;b”r ligga p† rasterint
fade3b 20
call aronsson
call clearall
setscr 0 ;b”r ligga p† rasterint
MOV CS:CHANGE16PAL,true
retn
if demover
demoversion:
fillmusicbuf
mov cs:mager,60*covtime
movpal tabletabell[0],tablepaloff[0],data,nuvaranden
keyread_demo:
mov ax,1 ;Read key!!!
move es,0
pushf
call dword ptr es:[keyhandler*4]
cmp al,01
je quit_ing
cmp al,39h ;space
je spruttan_bleble
synca
dec cs:mager
jnz keyread_demo
mov al,23
int 66H ;reset timer!!
jmp firsttime_again
spruttan_bleble:
fadeM 40,tabletabell[0],tablepaloff[0],data,blackpaloff ;S„tt r„tt!!
space2:
mov bx,1
mov banpek,0
jmp savebana
mager dw ?
firsttime_again:
fade 40,tabletabell[0],tablepaloff[0],data,blackpaloff ;S„tt r„tt!!
CALL BLANK_OFF
mov ax,12h ;anders
int 10h
call set_mcgab
call set240
call set_pal ;sl„ck paletten
CALL BLANK_ON
fade256 4,data,blackpaloff,data,blackpaloff ;S„tt r„tt!!
call shift_up_palettes
CALL UNPKPICS2
fade256 4,data,blackpaloff,data,blackpaloff
mov al,23
int 66H ;reset timer!!
jmp firsttime_init
endif
TEXTPEK DW 2
SET_EGAPAL:
mov si,offset egapal
mov dx,3dah
in al,dx
jmp $+2
jmp $+2
jmp $+2
mov dx,3c0h
mov cx,16
set_ega_pal:
mov al,16
sub al,cl
out dx,al
jmp $+2
jmp $+2
jmp $+2
outsb
jmp $+2
jmp $+2
jmp $+2
loop set_ega_pal
MOV al,20h
out dx,al
RETN
laddaden db false
READ_HIGHS PROC NEAR
OPENFILE HI_SCORE_FILE1
JC NOHI1
READFILE BX,16*4,HI_sCORE_LIST
CLOSEFILE BX
NOHI1: OPENFILE HI_SCORE_FILE2
JC NOHI2
READFILE BX,16*4,HI_sCORE_LIST+16*4*1
CLOSEFILE BX
NOHI2: OPENFILE HI_SCORE_FILE3
JC NOHI3
READFILE BX,16*4,HI_sCORE_LIST+16*4*2
CLOSEFILE BX
NOHI3: OPENFILE HI_SCORE_FILE4
JC NOHI4
READFILE BX,16*4,HI_sCORE_LIST+16*4*3
CLOSEFILE BX
NOHI4:
CALL MAKE_HI_TABLES
RETN
REPMOVSB MACRO DE,SO,BY
MOV SI,OFFSET SO
MOV DI,OFFSET DE
MOV CX,BY
REP MOVSB
ENDM
MOVSCORE MACRO DE,SO
LOCAL LODE,NOMORELED,LUDDE
MOV SI,OFFSET SO
MOV DI,OFFSET DE
MOV CX,12
LODE: LODSB
CMP AL,0
JNZ NOMORELED
MOV AL,' '
STOSB
LOOP LODE
NOMORELED:
ADD AL,'0'
STOSB
DEC CX
LUDDE: LODSB
ADD AL,'0'
STOSB
LOOP LUDDE
ENDM
TB=24
MAKE_HI_TABLES:
MOVA ES,DS
REPMOVSB HITEXT1+TB*2+5,HI_SCORE_LIST+12,3
REPMOVSB HITEXT1+TB*3+5,HI_SCORE_LIST+16+12,3
REPMOVSB HITEXT1+TB*4+5,HI_SCORE_LIST+2*16+12,3
REPMOVSB HITEXT1+TB*5+5,HI_SCORE_LIST+3*16+12,3
REPMOVSB HITEXT1+TB*8+5,HI_SCORE_LIST2+12,3
REPMOVSB HITEXT1+TB*9+5,HI_SCORE_LIST2+16+12,3
REPMOVSB HITEXT1+TB*10+5,HI_SCORE_LIST2+2*16+12,3
REPMOVSB HITEXT1+TB*11+5,HI_SCORE_LIST2+3*16+12,3
REPMOVSB HITEXT2+TB*2+5,HI_SCORE_LIST3+12,3
REPMOVSB HITEXT2+TB*3+5,HI_SCORE_LIST3+16+12,3
REPMOVSB HITEXT2+TB*4+5,HI_SCORE_LIST3+2*16+12,3
REPMOVSB HITEXT2+TB*5+5,HI_SCORE_LIST3+3*16+12,3
REPMOVSB HITEXT2+TB*8+5,HI_SCORE_LIST4+12,3
REPMOVSB HITEXT2+TB*9+5,HI_SCORE_LIST4+16+12,3
REPMOVSB HITEXT2+TB*10+5,HI_SCORE_LIST4+2*16+12,3
REPMOVSB HITEXT2+TB*11+5,HI_SCORE_LIST4+3*16+12,3
MOVSCORE HITEXT1+TB*2+11,HI_SCORE_LIST+0
MOVSCORE HITEXT1+TB*3+11,HI_SCORE_LIST+16
MOVSCORE HITEXT1+TB*4+11,HI_SCORE_LIST+16*2
MOVSCORE HITEXT1+TB*5+11,HI_SCORE_LIST+16*3
MOVSCORE HITEXT1+TB*8+11,HI_SCORE_LIST2+0
MOVSCORE HITEXT1+TB*9+11,HI_SCORE_LIST2+16
MOVSCORE HITEXT1+TB*10+11,HI_SCORE_LIST2+16*2
MOVSCORE HITEXT1+TB*11+11,HI_SCORE_LIST2+16*3
MOVSCORE HITEXT2+TB*2+11,HI_SCORE_LIST3+0
MOVSCORE HITEXT2+TB*3+11,HI_SCORE_LIST3+16
MOVSCORE HITEXT2+TB*4+11,HI_SCORE_LIST3+16*2
MOVSCORE HITEXT2+TB*5+11,HI_SCORE_LIST3+16*3
MOVSCORE HITEXT2+TB*8+11,HI_SCORE_LIST4+0
MOVSCORE HITEXT2+TB*9+11,HI_SCORE_LIST4+16
MOVSCORE HITEXT2+TB*10+11,HI_SCORE_LIST4+16*2
MOVSCORE HITEXT2+TB*11+11,HI_SCORE_LIST4+16*3
RETN
READ_HIGHS ENDP
INIT_ERR:
SET_DS DATA
MOV AX,3
INT 10H
cantimess equ "Pinball Fantasies cannot find the soundcard you selected in ",13,10,"the SETSOUND program. Please make sure the card is plugged ",13,10,"into your computer properly. If it is, please run the ",13,10,"SETSOUND program again and re-select your soundcard.",13,10
SPYMESS cantimess
MOV AX,0
INT 66H
MOV AX,4C02H
INT 21H
errorloadingmod:
SET_DS DATA
MOV AX,3
INT 10H
SPYMESS "Error loading module!"
MOV AX,0
INT 66H
MOV AX,4C04H
INT 21H
cantfindmod:
SET_DS DATA
MOV AX,3
INT 10H
cantfmess equ "Pinball Fantasies cannot find one of the music and sound",13,10,"effects files in the game directory. Please re-install the ",13,10,"game to make sure all the files are properly copied to your",13,10,"hard disk.",13,10
SPYMESS cantfmess
MOV AX,0
INT 66H
MOV AX,4C04H
INT 21H
OUTOFMEMORY:
SET_DS DATA
MOV AX,3
INT 10H
SPYMESS "Out of memory!"
MOV AX,0
INT 66H
MOV AX,4C01H
INT 21H
cantfindultrasndstring:
SET_DS DATA
MOV AX,3
INT 10H
envmess equ " Pinball Fantasies cannot find the information it needs to use",13,10," your Gravis Ultrasound card. Please refer to your Ultrasound ",13,10," user manual and install your card again before attempting to ",13,10," run the game. If you have any further problems, please read ",13,10,' the "troubleshooting" section in your Pinball Fantasies user',13,10," manual.",13,10,13,10,0,"$"
SPYMESS envmess
MOV AX,4C05H ;cp!?
INT 21H
get_prot:
nils_gurka:
input_pos=150*320+(80-55)*8
INPUTA AFTER_PROT,20,input_pos,TEXTCOLOR
; call tudor ;DET ANAR VI INTE! JOR<4F>, F™R HAN MEJJAR B000!
move ds,data
mov bx,offset AFTER_PROT
mov si,0 ;si pekar p† k†dposten (ej offset)!!!
mov si,thepost
lea si,ordlista[si].thetext
next_tst:
mov ah,byte ptr ds:[bx]
inc bx
lodsb
cmp bx,offset AFTER_PROT+8
jae klart_som_korvspad2
ror al,1
xor al,10100010b
cmp al,0
je klart_som_korvspad
cmp al,ah
je next_tst
nils_bedrup:
; mov chksum,0 ;Pajja keck summeringen f”r den fan! NEEEJ!!!
MOVE DS,DATA
MOVE ES,DATA
DATAMOV AFTER_PROT,SPCS,21
; PRINTA2 rensa_input,input_pos,TEXTCOLOR
jmp nils_gurka ;YO!
klart_som_korvspad:
cmp ah,0
jne nils_bedrup ;YO!
klart_som_korvspad2:
MOVE DS,DATA
MOVE ES,DATA
MOV BX,BUPPEN_FILEN
MOV AX,5700H
INT 21H ;GET TIME'N'DATE
PUSH CX DX
filepoint bx,pos1,pos2
writefile bx,2,usel
MOV AX,5701H
POP DX CX
INT 21H ;SET TIME'N'DATE
retn
FELVARDE DW 27643
WINDOWS_PRINT:
PUSHA
PUSH DS ES
;*
synca
setscr 0 ;b”r ligga p† rasterint
synca
call aronsson
call clearalmostall3
call aronsson_bort
mov dx,128+4+1
mov ax,14
mov cs:sida,44580
mov cs:fonten,0
mov bx,offset WORDtxt
call writepage ;flerf„rgsfont
synca
setscr 44580 ;b”r ligga p† rasterint
synca
call aronsson
call clearalmostall2
call aronsson_bort
mov dx,128+4+1
mov ax,14
mov cs:sida,0
mov cs:fonten,0
mov bx,offset WORDtxt
call writepage ;flerf„rgsfont
;*
POP ES DS
POPA
RETN
pilpos dw ?
menu:
MOV CS:LOOSER_BUT_SAVER,FALSE
mov cs:pilpos,0
put_pilen:
mov ax,cs:pilpos
cmp ax,high_menu-1
jne nope_notthelastone
inc ax ;s„tt den sista lite l„ngre ned!!!
nope_notthelastone:
mov cl,(charheight+mellanrum)
mul cl
add ax,50
push ax
call aronsson
clear_boxen 50*80+175/8,3,122+18
clear_boxen 50*80+175/8+44580,3,122+18
call aronsson_bort
pop ax
call putarrow
again_it:
CMP CS:LOOSER_BUT_SAVER,TRUE
JNE READ_again_my_friend_again
RETN
read_again_my_friend_again:
mov ax,12h
int keyhandler ;report scancode 0=no key pressed
push ax
synca
pop ax
cmp al,0
je read_again_my_friend_again
cmp al,1
je exitera_dig
cmp al,80
je pilned
cmp al,72
je pilupp ;PINUPP?
cmp al,39h
je space_pigs
cmp al,28
je space_pigs
jmp read_again_my_friend_again
pilupp:
dec cs:pilpos
cmp cs:pilpos,-1
jne put_pilen
mov cs:pilpos,high_menu-1 ;0
JMP PUT_PILEN
; jmp again_it ;no need to putit
pilned:
inc cs:pilpos
cmp cs:pilpos,high_menu+1-1
jb put_pilen
mov cs:pilpos,0 ;high_menu-1
JMP PUT_PILEN
; jmp again_it ;no need to putit
space_pigs:
mov bx,cs:pilpos
shl bx,1
pusha
call [bx+offset menu_items]
popa
jmp again_it
;****************************** the menu *************************************
;s”k menu items f”r att hitta menyn!!!
;kom i h†g att l„gg sparning av config vid quit (d† musik ej spelar!)
;radering i j„mna bytes!!! Kan beh”va trimmas!!!!!!!
;man kanske ska l„gga in texten i options texten, s† det ser snyggt ut d†
;det tonas (den anv„nds d†!)
;******************************************************************************
MAKE_IT_NICE PROC NEAR ;INITIATES THE TEXT
MOV CS:PILPOS,0
MOV CX,6
LEA BX,MENU_ITEMS_UPDATES
LOPPAN: PUSH CX BX
CALL [BX]
CALL UPDATE_TEXT
INC CS:PILPOS
POP BX CX
ADD BX,2
LOOP LOPPAN
MOV CS:PILPOS,0
RET
MAKE_IT_NICE ENDP
NUMRET DB CHECK1NUM
BEFORE_STARTING PROC NEAR ;UPDATES THE RESIDENT COPY OF TOGGLAREN!
MOVE ES,DS
LEA BX,TOGGLAREN
MOV AX,0100H
INT KEYHANDLER
RET
BEFORE_STARTING ENDP
LOAD_TOGGLAREN PROC NEAR ;LOADS THE SAVED COPY OF TOGGLAREN
MOVE DS,DATA
OPENFILE TOGGLAR_NAME
JC EQLT
HOWMUCH EQU SIZE TOGGLAR_STRUCEN
READFILE BX,HOWMUCH,TOGGLAREN
JC EQLT
CLOSEFILE BX
CLC
EQLT: RET
LOAD_TOGGLAREN ENDP
SAVE_TOGGLAREN PROC NEAR ;SAVES TOGGLAREN TO DISK
CMP CS:KEXCHOKLAD2,24
JE OVVVER
MOV AX,9876
MOV BX,CS:FELVARDE
INT KEYHANDLER
OVVVER:
MOVE DS,DATA
CREATEFILE TOGGLAR_NAME
JC EQST
HOWMUCH EQU SIZE TOGGLAR_STRUCEN
WRITEFILE BX,HOWMUCH,TOGGLAREN
; JC EQST
CLOSEFILE BX
CLC
EQST: RET
SAVE_TOGGLAREN ENDP
UPDATEIT PROC NEAR ;UPDATES THE SCREEN AND THE TEXT
;INPUT: BX=OFFSET TO STRING
; (CX=NUMBER OF CHARS IN ALTERNATIVE ("BALLS" => CX=5))
CALL UPDATE_TEXT
CALL UPDATE_SCREEN
RET
UPDATEIT ENDP
UPDATE_TEXT PROC NEAR
INC CX ;LŽGG P<> SPACE EFTER KOLON
MOV CX,13 ;TVINGA DUBBEL VŽNSTER-JUSTERING!
MOV DX,CS:PILPOS ;DX=RADEN (0-6)
MOV CS:CPLOSNING,BX
MOV AX,DX
MOV BX,24
MUL BX
ADD AX,CX
ADD AX,OFFSET FIRSTCHOICE+3 ;AX=OFFSET IN THE TEXT
MOV BX,CS:CPLOSNING
STRCOPY2 AX,BX ;UPDATE TEXT!
RET
UPDATE_TEXT ENDP
UPDATE_SCREEN PROC NEAR
MOV AX,(14+4)*640
MUL DX
MOV BP,AX
MOV AX,18
MUL CX
ADD BP,AX
ADD BP,308-5*18 ;BP=SCRPOS
MOV BX,CS:CPLOSNING
STRLEN AL,BX
XOR AH,AH
MOV BX,18
MUL BX
SHR AX,3
ADD AX,2 ;1 F™R MEJ OCH 1 F™R DEJ!
MOV CS:BREDDEN,AX ;CS:BREDDEN=SUDDBREDD
MOV BX,CS:CPLOSNING
CALL TJOLAHOPP
RET
CPLOSNING DW ?
UPDATE_SCREEN ENDP
;HŽR!
;******************************************************************************
L_BALLS:
XOR TOGGLAREN.S_BALLS,1
CALL L_BALLS_UPDATE
CALL UPDATEIT
RETN
L_BALLS_UPDATE:
MOV BX,OFFSET TRE ;BX=OFFSET STRING
CMP TOGGLAREN.S_BALLS,0
JZ IS_ZERO_1
MOV BX,OFFSET FEM ;BX=OFFSET STRING
IS_ZERO_1:
MOV CX,5
RETN
;******************************************************************************
L_ANGLE:
XOR TOGGLAREN.S_ANGLE,1
CALL L_ANGLE_UPDATE
CALL UPDATEIT
RETN
L_ANGLE_UPDATE:
MOV BX,OFFSET ZHIGH ;BX=OFFSET STRING
CMP TOGGLAREN.S_ANGLE,0
JZ IS_ZERO_2
MOV BX,OFFSET ZLOW ;BX=OFFSET STRING
IS_ZERO_2:
MOV CX,5
RETN
;******************************************************************************
L_SCROLLING:
INC TOGGLAREN.S_SCROLLING
CMP TOGGLAREN.S_SCROLLING,2
JNA ITSOKI
MOV TOGGLAREN.S_SCROLLING,0
ITSOKI: CALL L_SCROLLING_UPDATE
CALL UPDATEIT
RETN
L_SCROLLING_UPDATE:
MOV BL,TOGGLAREN.S_SCROLLING
XOR BH,BH
SHL BX,1
MOV BX,ZARINEN[BX] ;BX=OFFSET STRING
MOV CX,9
RETN
;******************************************************************************
L_RESOLUTION:
XOR TOGGLAREN.S_RESOLUTION,1
CALL L_RESOLUTION_UPDATE
CALL UPDATEIT
RETN
L_RESOLUTION_UPDATE:
MOV BX,OFFSET NORMAL ;BX=OFFSET STRING
CMP TOGGLAREN.S_RESOLUTION,0
JZ IS_ZERO_4
MOV BX,OFFSET ZHIGH ;BX=OFFSET STRING
IS_ZERO_4:
MOV CX,10
RETN
;******************************************************************************
L_MODE:
XOR TOGGLAREN.S_MODE,1
CALL L_MODE_UPDATE
CALL UPDATEIT
RETN
L_MODE_UPDATE:
MOV BX,OFFSET ZCOLOR ;BX=OFFSET STRING
CMP TOGGLAREN.S_MODE,0
JZ IS_ZERO_5
MOV BX,OFFSET MONO ;BX=OFFSET STRING
IS_ZERO_5:
MOV CX,4
RETN
;******************************************************************************
L_IM:
XOR TOGGLAREN.S_IM,1
CALL L_IM_UPDATE
CALL UPDATEIT
RETN
L_IM_UPDATE:
MOV BX,OFFSET ON ;BX=OFFSET STRING
CMP TOGGLAREN.S_IM,0
JZ IS_ZERO_6
MOV BX,OFFSET OFF ;BX=OFFSET STRING
IS_ZERO_6:
MOV CX,4
RETN
;******************************************************************************
;******************************************************************************
L_SAVE: ;save it temprory (but NOT on disk!)
MOV CS:LOOSER_BUT_SAVER,TRUE
retn
;*****************************************************************************
LOOSER_BUT_SAVER DB ?
bredden dw ?
tjolahopp:
mov ax,cs:pilpos
mov cl,(charheight+mellanrum)
mul cl
add ax,50
push bx ax bp
mov cx,80
mul cx
shr bp,3
add bp,ax ;bp=start i bytes
call aronsson
clear_boxen bp,cs:bredden,charheight
add bp,44580
clear_boxen bp,cs:bredden,charheight
call aronsson_bort
pop bp ax bx
mov dx,bp ;startpos i pixel
call print_it
retn
putarrow:
mov dx,175
mov bx,offset pil
call print_it
retn
exitera_dig:
retn
PRINT_IT:
PUSHA
PUSH DS ES
;bx=offset mess (0 terminated), ax=x, dx=y
;*
pusha
synca
setscr 0
synca
popa
pusha
mov cs:sida,44580
mov cs:fonten,0
call print_in_a_mess ;flerf„rgsfont
synca
setscr 44580
synca
popa
mov cs:sida,0
mov cs:fonten,0
call print_in_a_mess ;flerf„rgsfont
;*
POP ES DS
POPA
RETN
print_in_a_mess: ;until 0
move ds,data
move es,0a000h
nextchar__: ;bx points to asc char, ax=xpos dx=ypos of char
push ax cx bx dx
mov bl,[bx]
cmp bl,0
je endofmess
call putchar
pop dx bx cx ax
inc bx
add dx,charwith
jmp nextchar__
endofmess:
pop dx bx cx ax
retn
showmenu:
MOV CS:INFO_TEXT,OFFSET CS:OPTIONS_INFO
call rastraclear
call aronsson_bort
mov al,0
mov bx,6
call julius
MOV CS:CHANGE16PAL,false
mov dx,3dah
in al,dx
mov dx,3c0h
mov al,14h+20h
out dx,al
jmp $+2
mov al,0 ;v„lj 16 palette 0
out dx,al
mov dx,128+4+1
mov ax,14
mov bx,offset menutext
mov cs:sida,44580
mov cs:fonten,80*14*2
call writepage
PUSHA
fade3B 5
SETSCR 44580
SYNCA
POPA
mov dx,128+4+1
mov ax,14
mov bx,offset menuTeXT
mov cs:sida,0
mov cs:fonten,0
call writepage
;h„r ska de 3 f„rgerna f„jdas . .
; slackA 320
synca
fade3 40
setscr 0 ;b”r ligga p† rasterint
synca
call aronsson
call clearalmostall
call aronsson_bort
mov dx,128+4+1
mov ax,14
mov cs:sida,44580
mov cs:fonten,0
mov bx,offset menuTeXT
call writepage ;flerf„rgsfont
;***********************************
;menu logic
pusha
call menu
popa
;exit from menu
MOV CS:INFO_TEXT,OFFSET CS:GENERAL_INFO
;***********************************
if showall
;show all of it!!!!
mov cx,800
mov bx,0
lethal:
add bx,80
mov dx,3d4h
mov al,0dh
mov ah,bl
out dx,ax
dec al
mov ah,bh
out dx,ax
pusha
synca
popa
loop lethal
endif
SYNCA
SETSCR 0
SYNCA
call aronsson
call clearalmostall
call aronsson_bort
mov dx,128+4+1
mov ax,14
mov cs:sida,44580
mov cs:fonten,80*14*2
mov bx,offset menuteXT
call writepage ;3 f„rgsfont
mov dx,128+4+1
mov ax,14
mov cs:sida,44580
mov cs:fonten,80*14*2
mov bx,offset menuTeXT
call writepage ;3 f„rgsfont
setscr 44580 ;b”r ligga p† rasterint
fade3b 40
call aronsson
call clearall
setscr 0 ;b”r ligga p† rasterint
MOV CS:CHANGE16PAL,true
retn
menunext db 0
PEKARN DW 0
AVSLUTA_PSEUDO DW OFFSET CS:SHOWMENU
UTSKRIVAREN:
comment\
PUSHA
NIL AH
DCLS
DPRINTVAL AX," AX="
POPA
\
RETN
code ends
dumpningsplats segment
ends
t21st1seg segment para public 'dump'
extrn t21st1:byte
ends
t21st2seg segment para public 'dump'
extrn t21st2:byte
ends
viking1seg segment para public 'dump'
extrn viking1:byte
ends
viking2seg segment para public 'dump'
extrn viking2:byte
ends
qsune segment para public 'dump'
ends
end start
COMMENT\
item1:
;BALLS: 3,5
XOR TOGGLAREN.S_BALLS,1
jNz nike
mov bx,offset tre ;bx=OFFSET zeroterm. text
mov byte ptr ds:[offset i1+8],'3' ;CHANGE REALTEXT TOO!
jmp justdoit
nike:
mov bx,offset fem ;bx=OFFSET zeroterm. text
mov byte ptr ds:[offset i1+8],'5' ;CHANGE REALTEXT TOO!
justdoit:
mov cs:bredden,3 ;RADERINGSBREDD f”r radering (i bytes) (trimma!)
mov bp,308 ;RADERINGSSTART start i pixel (trimma!)
;FINA: BX,BP,CS:BREDDEN
call tjolahopp ;rensa † skriv ut!!! (PIPPI L<>NGSTRUMP!)
retn
\