Skara Brae Disk Events C64

Discussions and help for the Bard's Tale Construction Set
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Skara Brae Disk Events C64

Post by Darendor »

ZeroZero has disassembled some of the city disk event files. I am posting them for study and such.


The bytes after ".BYTE" are coded text characters which can be deciphered to English thusly:

Code: Select all

Note: cf is used for both captial "O" and zero.

c0=?   c1=A   c2=B   c5=E   c6=F   c7=G   c8=H   cb=K cc=L   cf=0/0 cd=M   ce=N d0=P   d2=R   d3=S   d4=T   d9=Y   
00=[CR]a0=_   a1=!   a2="   a7='   a8=(   a9=)   ac=,   ad=-   ae=.   ba=:   bb=;   b1=1   b5=5
e1=a   e2=b   e3=c   e4=d   e5=e   e6=f   e7=g   e8=h   e9=i   ea=j   eb=k
ec=l   ed=m   ee=n   ef=o   f0=p   f2=r   f3=s   f4=t   f5=u   f6=v   f7=w   f8=x
f9=y   bf=?   db=[   dd=]   ff=>
                  
dc=[end]
Last edited by Darendor on Sun Feb 28, 2010 11:27 pm, edited 1 time in total.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

NMOC.PRG

Code: Select all

*= $B600 ;  Ã64

         LDX #$02 ; 2 + 50 = 52 ==> ÎÍ52
         JSR $0803 ; LOAD AND DISPLAY ÎÍ52
         JSR ENTERINN ; FIND OUT WHAT TAVERN AND ENTER IT
MAINMENU JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTMNU ; GET TEXT PTR FOR MAIN MENU
         LDX #<TXTMNU
         JSR $0809 ; PRINT MAIN MENU
MNUKEY   JSR $080F ; WAIT FOR KEY
         JSR $083F ; GET KEY PRESSED
         CMP #$CF ; IS "O"?
         BEQ DOORDER ; YES, HANDLE THE ORDER
         CMP #$D4 ; IS "T"?
         BNE ISE ; NO, TEST FOR "E"
         JMP DOTALK ; YES, HANDLE TALK TO BARKEEP

ISE      CMP #$C5 ; IS "E"?
         BNE MNUKEY ; ON NO TRY AGAIN TO GET A VALID KEY
         JSR EXITINN ; ON YES EXIT THE INN
         LDA #$00 ; ????
         STA $2F ; ???? VAR NEEDED IN AE00?
         JSR $0806 ; CLEAR TEXT WINDOW
         JMP $AE00 ; JUMP BACK INTO CITY HANDLING

DOORDER  JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTWHO ; LOAD PTR TO TEXT WHO WILL DRINK
         LDX #<TXTWHO
         JSR $0809 ; PRINT WHO WILL DRINK
         JSR $0896 ; GET PTR TO CHAR NAME CHOOSEN, OR SET CARRY IF NONE
         BCS MAINMENU ; IF ÅÓÃ BACK TO MAIN MENU
         STY $0F ; SAVE PTR TO CHAR'S ROSTER ENTRY
         STA $10
         LDY #$00 ; INDEX INTO CHAR NAME
         LDA ($0F),Y ; GET FIRST CHAR OF CHAR ÌÏÌ
         BEQ MAINMENU ; IS 0 IF NONE CHOOSEN, BACK TO MAIN MENU
         JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTSEAT ; LOAD TEXT ÓEAT THYSELF
         LDX #<TXTSEAT
         JSR $0809 ; PRINT TEXT
         LDX $0F ; LOAD CHAR NAME
         LDY $10
         JSR $0809 ; PRINT CHAR NAME
         LDY #>TXTDRINK ; LOAD TEXT ×E'VE GOT... AND DRINK MENU
         LDX #<TXTDRINK
         JSR $0809 ; PRINT TEXT
         LDA #$05 ; SET NUM OF DRINKS TO 5
         STA CNTDRINK+1 ; SELF MODIFYING FOR DRINK NUMBERS
         LDA $28 ; GET PRESENT Î COOR
         CMP #$05 ; IS Î COOR OF ÓCARLET ÂARD?
         BNE NOWINE ; NO, SO NO WINE TO SERVE
         LDA $29 ; GET PRESENT Å COOR
         CMP #$1C ; IS Å COOR OF ÓCARLET ÂARD?
         BNE NOWINE ; NO, SO NO WINE
         LDY #>TXTWINE ; HERE WE HAVE WINE, Î AND Å MATCHES ÓCARLET ÂARD
         LDX #<TXTWINE ; LOAD TEXT (×)INE
         JSR $0809 ; PRINT TEXT
         INC CNTDRINK+1 ; WITH WINE WE HAVE 6 DRINKS, SO INCREASE
NOWINE   LDY #>TXTWHAT ; TEXT ×HAT WILL IT BE?
         LDX #<TXTWHAT
         JSR $0809 ; PRINT TEXT
         JSR $080F ; WAIT FOR KEY
         JSR $083F ; GET KEY PRESSED
         STA KEYPRSSD ; SAVE KEY PRESSED
         LDX #$00 ; INDEX COUNTER FOR POSSIBLE KEYS
TESTKEY  CMP VLDKEYS,X ; THIS MY DRINK?
         BEQ MYKEY ; YES, HANDLE IT
         INX  ; NO, TEST NEXT
CNTDRINK CPX #$00
         BCC TESTKEY ; GO TO TEST KEY
         JMP MAINMENU ; NOT A VALID DRINK, BACK TO MAIN MENU

MYKEY    STX $DC ; SAVE POSITION OF FOUND DRINK
         LDA PRICES,X ; LOAD DRINK PRICE
         LDY #$0B ; STORE PRICE OF DRINK, ERRORNEOUS!!!
         STA $0380,Y
         LDA #$00
LOP1     STA $0380,Y ; OVERWRITES PRICE! ÄRINKS REALLY ARE ÆÒÅÅ. ÔHIS IS A BUG
         DEY 
         BPL LOP1
         LDY #$24 ; POINT TO GOLD IN CHARACTER ROSTER
         JSR $0860 ; CHECK IF ENOUGH GOLD
         BCC CANPAY ; IF ENOUGH, GO AHEAD
         LDY #>KEYPRSSD ; LOAD PRESSED KEY CHAR
         LDX #<KEYPRSSD
         JSR $0809 ; PRINT KEY
NOGOLD   LDY #$A6 ; TEXT ÎOT ENOUGH ÇOLD
         LDX #$B9
         JSR $0809 ; PRINT TEXT
         LDA #$08 ; ÐAUSE TIME 8 UNITS
         JSR $0857 ; MAKE A PAUSE
         JMP MAINMENU ; BACK TO MAIN MENU

CANPAY   LDY #>KEYPRSSD ; LOAD PRESSED KEY CHAR
         LDX #<KEYPRSSD
         JSR $0809 ; PRINT KEY
         LDY #$24 ; POINT TO GOLD IN CHARACTER ROSTER
         JSR $085D ; CASH IN THE DRINK
         LDA $DC ; LOAD DRINK POSITION
         CMP #$03 ; IS FOUL SPIRITS?
         BEQ SPIRITS
         CMP #$04 ; IS ÇINGER ÁLE?
         BEQ GINGALE
         CMP #$05 ; IS ×INE?
         BEQ CELLAR
         LDY #>TXTBURP ; OTHER DRINKS LOAD MESSAGE
         LDX #<TXTBURP ; ÎOT TOO BAD
         JSR $0809 ; PRINT TEXT
         JMP CHKBARD

SPIRITS  LDY #>TXTFEEL ; TEXT NO FEEL WELL
         LDX #<TXTFEEL
         JSR $0809 ; PRINT TEXT
         JMP CHKBARD ; TEST IF BARD

GINGALE  LDY #>TXTGIRL ; GIRLS WILL LAUGH ABOUT YOU
         LDX #<TXTGIRL
         JSR $0809 ; PRINT TEXT
         LDA #$08 ; PAUSE UNITS
         JSR $0857 ; MAKE PAUSE
         JMP MAINMENU ; NO BARD SONGS FOR GINGER ALE!

CELLAR   LDY #>TXTPICK ; LOAD TEXT DOWN TO CELLAR
         LDX #<TXTPICK
         JSR $0809 ; PRINT TEXT
         LDA #$08 ; PAUSE UNITS
         JSR $0857 ; MAKE PAUSE
         LDA #$00 ; ADDRESS LEVEL 0 = WINE CELLAR
         STA $E0 ; STORE INTO VAR
         LDA #$01 ; ADDRESS DISK #1 = DUNGEON DISK
         JMP $0890 ; ENTER DUNGEON

CHKBARD  LDY #$38 ; GET BYTE 56 FROM PRESENT CHAR
         LDA ($0F),Y ; LOAD IT FROM CHAR
         CMP #$06 ; IS IT CLASS 6 = ÂARD?
         BNE DRINKEND ; NO, END DRINK
         LDY #$23 ; LOAD LO-BYTE OF CURRENT LEVEL OF CHAR
         LDA ($0F),Y ; GET IT
         LDY #$49 ; ADDRESS REMAINING BARD SONGS
         STA ($0F),Y ; STORE LEVEL INTO REMAINING BARD SONGS
DRINKEND LDA #$08 ; PAUSE UNITS
         JSR $0857 ; MAKE PAUSE
EXITORDR JMP MAINMENU

DOTALK   JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTWHO2 ; LOAD TEXT TALK TO BARKEEP
         LDX #<TXTWHO2
         JSR $0809 ; PRINT TEXT
         JSR $0896 ; TEST FOR CHAR KEY 1-6
         BCS EXITORDR ; NO CHAR KEY, BACK TO MAIN MENU
         STY $0F ; STORE FOUND CHAR'S ROSTER POINTER
         STA $10
         LDY #$00 ; SET ROSTER INDEX TO NAME
         LDA ($0F),Y ; TEST FIRST CHAR NAME CHAR
         BEQ EXITORDR ; IF 0 THERE IS NO CHAR
         JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTCHEAP ; LOAD TEXT TALK AIN'T CHEAP
         LDX #<TXTCHEAP
         JSR $0809 ; PRINT TEXT
         JSR $081B ; GET AN INPUT LINE
         BCS EXITORDR ; ON NO INPUT
         CPX #$00 ; TEST # OF CHARS ENTERED
         BEQ EXITORDR ; IF EMPTY INPUT BACK TO MAIN MENU
         CPX #$04 ; TEST IF MORE THAN 999 GOLD
         BCS EXITORDR ; TIP TOO BIG, BACK TO MAIN MENU
         DEX  ; SETUP LOOP COUNTER
         LDY #$0B ; POINTER TO PRICE BUFFER
NEXTINP  LDA $0334,X ; GET INPUT CHAR AT X
         SEC  ; TEST NUMERIC
         SBC #$B0
         CMP #$0A
         BCS EXITORDR ; NOT A DIGIT 0-9, BACK TO MENU
         STA $0380,Y ; STORE IN PRICE BUFFER
         DEY  ; NEXT PRICE DIGIT
         DEX  ; NEXT INPUT CHAR
         BPL NEXTINP ; HANDLE NEXT INPUT CHAR
         LDA #$00 ; ZERO NOT USED PRICE BUFFER
ZEROOUT  STA $0380,Y
         DEY 
         BPL ZEROOUT ; MORE BUFFER TO FILL?
         LDY #$24 ; OFFSET TO CHARS GOLD
         JSR $0860 ; TEST FOR GOLD
         BCC HASGOLD ; IF NUFF GOLD BRANCH
         JSR $0836 ; LINEFEED
         JSR $0836 ; LINEFEED
         JMP NOGOLD

HASGOLD  LDY #$24 ; POINT TO CHARS GOLD IN HIS ROSTER
         JSR $085D ; CASH IN THE TIP
         LDY #$00 ; OFFSET INTO PRICE BUFFER
         LDX #$0B ; DIGIT POSITION, HOW BIG IS THE SUM?
NXTDGT   LDA $0380,Y ; LOAD PRICE DIGIT
         BNE NOT0 ; IF NOT A 0, CALC THE SUM
         DEX  ; DECREASE DIGIT POSITION FOR AMOUNT
         INY  ; NEXT PRICE DIGIT
         CPY #$0C ; OF COURSE MAX 12 DIGITS FOR GOLD
         BCC NXTDGT ; IF SOME LEFT, CHECK NEXT
         LDY #>TXTMONY ; LOAD TEXT MONEY TALKS
         LDX #<TXTMONY
         JSR $0809 ; PRINT TEXT
         LDA #$08 ; PAUSE UNITS
         JSR $0857 ; MAKE PAUSE
         JMP MAINMENU

NOT0     PHA  ; SAVE REGISTER Á
         TXA  ; MOVE PRICE DIGIT NUMBER TO A
         ASL A ; TIMES 2
         ASL A ; TIMES 2
         TAX  ; PUT A BACK TO X
         PLA  ; RESTORE REGISTER Á
         CMP #$05 ; TEST FOR VALUE OF HIGHEST DIGIT
         BCC GOON ; IF LESS THAN 5
         INX  ; ELSE ADD 2 TO X
         INX 
GOON     STX ADDVAL+1 ; SELF-MODIFY: STORE X VALUE
         JSR $082A ; CREATE TWO BYTE RANDOM NUMBER
         LDA $5A ; 5A AND 5B SET DURING PREV SUBROUTINE
         AND #$03 ; ISOLATE LOW 3 BITS
         CLC 
ADDVAL   ADC #$00 ; ADD THE MODIFIED X VALUE
         ASL A ; AGAIN TIMES 2
         TAX  ; BACK INTO X
         LDY TXTHINTS+1,X ; LOAD TEXT POINTER FROM TABLE
         LDA TXTHINTS,X
         TAX  ; MOVE TEXT POINTER TO X FOR 0809
         JSR $0806 ; CLEAR TEXT WINDOW
         JSR $0809 ; PRINT TEXT
         LDY #>TXTKEY ; LOAD TEXT PRESS A KEY
         LDX #<TXTKEY
         JSR $0809 ; PRINT TEXT
         JSR $080F ; WAIT KEY PRESSED
         JMP MAINMENU ; BACK TO MAIN MENU

ENTERINN LDX #$00 ; SET CNTR FOR TAVERN COORDINATES
TSTCOORS LDA $28 ; LOAD PARTY'S Î COOR
         CMP INNCOORS,X ; MATCHES TAVERN'S Î COOR?
         BNE NEXTCOOR ; NO, TRY NEXT Î COOR
         LDA $29 ; LOAD PARTY'S Å COOR
         CMP INNCOORS+1,X ; MATCHES TAVERN'S Å COOR?
         BEQ GOIN ; YES, GO INSIDE
NEXTCOOR INX  ; PREPARE TO LOAD NEXT Î OR Å COOR
         INX 
         CPX #$10 ; ALL 8 PAIRS CHECKED?
         BCC TSTCOORS ; NO, TRY NEXT
         LDX #$00 ; ALL CHECKED, NO MATCH, SET DEFAULT
GOIN     LDA PTRNAMES,X ; GET TAVERN NAME POINTER
         STA $58
         LDA PTRNAMES+1,X
         STA $59
         LDA INNDIRS,X ; LOAD DIRECTION FOR TAVERN
         STA $24
         JMP $080C ; CONTINUE WITH OUTTEXT, THAT CODE WILL RTS

EXITINN  LDA $24 ; GET PARTY'S PRESENT DIRECTION
         BEQ DIRN ; IS 0 = Î?
         CMP #$01 ; IS 1 = Å?
         BEQ DIRE ; ON YES MOVE EAST
         CMP #$02 ; IS 2 = Ó?
         BEQ DIRS ; ON YES MOVE SOUTH
DIRW     DEC $29 ; MUST BE 3 = × NOW, SO MOVE WEST
         RTS 

DIRN     INC $28
         RTS 

DIRS     DEC $28
         RTS 

DIRE     INC $29
         RTS 

;
; TEXT FOR MAIN MENU "ÈAIL, TRAVELERS..."
;
TXTMNU   .BYTE $C8,$E1,$E9,$EC,$AC,$A0
         .BYTE $F4,$F2,$E1,$F6,$E5,$EC
         .BYTE $E5,$F2,$F3,$A1,$A0,$D3
         .BYTE $F4,$E5,$F0,$A0,$F4,$EF
         .BYTE $A0,$F4,$E8,$E5,$A0,$E2
         .BYTE $E1,$F2,$A0,$E1,$EE,$E4
         .BYTE $A0,$C9,$A7,$EC,$EC,$A0
         .BYTE $E4,$F2,$E1,$F7,$A0,$F9
         .BYTE $EF,$F5,$A0,$E1,$A0,$F4
         .BYTE $E1,$EE,$EB,$E1,$F2,$E4
         .BYTE $AE,$00,$00,$D9,$EF,$F5
         .BYTE $A0,$E3,$E1,$EE,$BA,$00
         .BYTE $00,$A8,$CF,$A9,$F2,$E4
         .BYTE $E5,$F2,$A0,$E1,$A0,$E4
         .BYTE $F2,$E9,$EE,$EB,$00,$A8
         .BYTE $D4,$A9,$E1,$EC,$EB,$A0
         .BYTE $F4,$EF,$A0,$E2,$E1,$F2
         .BYTE $EB,$E5,$E5,$F0,$00,$A8
         .BYTE $C5,$A9,$F8,$E9,$F4,$A0
         .BYTE $F4,$E8,$E5,$A0,$F4,$E1
         .BYTE $F6,$E5,$F2,$EE,$FF

;
; TEXT "ÓEAT THYSELF, "
;
TXTSEAT  .BYTE $D3,$E5,$E1,$F4,$A0,$F4
         .BYTE $E8,$F9,$F3,$E5,$EC,$E6
         .BYTE $AC,$00,$FF

;
; TEXT ". ×E'VE GOT..." + DRINK MENU W/O WINE
;
TXTDRINK .BYTE $AE,$A0,$D7,$E5,$A7,$F6
         .BYTE $E5,$A0,$E7,$EF,$F4,$AE
         .BYTE $AE,$AE,$00,$00,$A8,$C1
         .BYTE $A9,$EC,$E5,$00,$A8,$C2
         .BYTE $A9,$E5,$E5,$F2,$00,$A8
         .BYTE $CD,$A9,$E5,$E1,$E4,$00
         .BYTE $A8,$C6,$A9,$EF,$F5,$EC
         .BYTE $A0,$F3,$F0,$E9,$F2,$E9
         .BYTE $F4,$F3,$00,$A8,$C7,$A9
         .BYTE $E9,$EE,$E7,$E5,$F2,$A0
         .BYTE $C1,$EC,$E5,$DC

;
; TEXT "(×)INE"
;
TXTWINE  .BYTE $00,$A8,$D7,$A9,$E9,$EE
         .BYTE $E5,$DC

;
; TEXT "ÔHE BARKEEP SAYS..."
;
TXTPICK  .BYTE $D4,$E8,$E5,$A0,$E2,$E1
         .BYTE $F2,$EB,$E5,$E5,$F0,$A0
         .BYTE $F3,$E1,$F9,$F3,$AC,$A0
         .BYTE $A2,$C7,$EF,$A0,$E4,$EF
         .BYTE $F7,$EE,$A0,$F4,$EF,$A0
         .BYTE $F4,$E8,$E5,$A0,$E3,$E5
         .BYTE $EC,$EC,$E1,$F2,$A0,$E1
         .BYTE $EE,$E4,$A0,$F0,$E9,$E3
         .BYTE $EB,$A0,$EF,$F5,$F4,$A0
         .BYTE $E1,$A0,$E2,$EF,$F4,$F4
         .BYTE $EC,$E5,$AE,$A2,$DC

;
; TEXT "ÔALK AIN'T CHEAP..."
;
TXTCHEAP .BYTE $A2,$D4,$E1,$EC,$EB,$A0
         .BYTE $E1,$E9,$EE,$A7,$F4,$A0
         .BYTE $E3,$E8,$E5,$E1,$F0,$AC
         .BYTE $A2,$A0,$F4,$E8,$E5,$A0
         .BYTE $E2,$E1,$F2,$EB,$E5,$E5
         .BYTE $F0,$A0,$F3,$E1,$F9,$F3
         .BYTE $AE,$00,$00,$C8,$EF,$F7
         .BYTE $A0,$ED,$F5,$E3,$E8,$A0
         .BYTE $F7,$E9,$EC,$EC,$A0,$F9
         .BYTE $EF,$F5,$A0,$F4,$E9,$F0
         .BYTE $A0,$E8,$E9,$ED,$BF,$00
         .BYTE $00,$FF

;
; TEXT "ÍONEY TALKS..."
;
TXTMONY  .BYTE $00,$00,$A2,$CD,$EF,$EE
         .BYTE $E5,$F9,$A0,$F4,$E1,$EC
         .BYTE $EB,$F3,$AC,$A0,$E2,$F5
         .BYTE $E4,$E4,$F9,$AC,$A2,$A0
         .BYTE $E8,$E5,$A0,$F3,$E1,$F9
         .BYTE $F3,$AE,$DC

;
; TEXT "(ÂURP!) ÎOT TOO BAD."
;
TXTBURP  .BYTE $A8,$C2,$F5,$F2,$F0,$A1
         .BYTE $A9,$A0,$CE,$EF,$F4,$A0
         .BYTE $F4,$EF,$EF,$A0,$E2,$E1
         .BYTE $E4,$AE,$DC

;
; TEXT "ÙOU DON'T FEEL TOO WELL."
;
TXTFEEL  .BYTE $D9,$EF,$F5,$A0,$E4,$EF
         .BYTE $EE,$A7,$F4,$A0,$E6,$E5
         .BYTE $E5,$EC,$A0,$F4,$EF,$EF
         .BYTE $A0,$F7,$E5,$EC,$EC,$AE
         .BYTE $DC

;
; TEXT "ÔHE GIRLS IN THE TAVERN..."
;
TXTGIRL  .BYTE $D4,$E8,$E5,$A0,$E7,$E9
         .BYTE $F2,$EC,$F3,$A0,$E9,$EE
         .BYTE $A0,$F4,$E8,$E5,$A0,$F4
         .BYTE $E1,$F6,$E5,$F2,$EE,$A0
         .BYTE $E1,$F2,$E5,$A0,$EE,$EF
         .BYTE $F4,$A0,$E9,$ED,$F0,$F2
         .BYTE $E5,$F3,$F3,$E5,$E4,$AE
         .BYTE $DC

;
; TEXT "×HO WILL DRINK [1-6]"
;
TXTWHO   .BYTE $D7,$E8,$EF,$A0,$F7,$E9
         .BYTE $EC,$EC,$A0,$E4,$F2,$E9
         .BYTE $EE,$EB,$BF,$A0,$DB,$B1
         .BYTE $AD,$B6,$DD,$DC

;
; TEXT "×HO WILL TALK TO..."
;
TXTWHO2  .BYTE $D7,$E8,$EF,$A0,$F7,$E9
         .BYTE $EC,$EC,$A0,$F4,$E1,$EC
         .BYTE $EB,$A0,$F4,$EF,$A0,$F4
         .BYTE $E8,$E5,$A0,$E2,$E1,$F2
         .BYTE $EB,$E5,$E5,$F0,$BF,$A0
         .BYTE $DB,$B1,$AD,$B6,$DD,$DC

;
; PRICE FOR THE CHOOSEN DRINK
;
PRICES   .BYTE $03,$02,$04,$06,$01,$03

;
; ÖALID KEYS FOR DRINKS CHOOSEN
;
VLDKEYS  .BYTE $C1,$C2,$CD,$C6,$C7,$D7

;
; TEXT "×HAT'LL IT BE?"
;
TXTWHAT  .BYTE $00,$00,$D7,$E8,$E1,$F4
         .BYTE $A7,$EC,$EC,$A0,$E9,$F4
         .BYTE $A0,$E2,$E5,$BF,$A0,$DC

;
; TEXT "ÐRESS A KEY..."
;
TXTKEY   .BYTE $00,$00,$D0,$F2,$E5,$F3
         .BYTE $F3,$A0,$E1,$A0,$EB,$E5
         .BYTE $F9,$AE,$AE,$AE,$DC

;
; STORES THE CHOOSEN DRINK
;
KEYPRSSD .BYTE $A0

;
; GARBAGE ???
;
TABLBA6B .BYTE $00,$00,$FF,$02,$03,$00
         .BYTE $01

;
; POINTERS TO HINT TEXTS, DEPENDING ON TIP
;
TXTHINTS .BYTE $9A,$BA,$9A,$BA,$CD,$BA
         .BYTE $CD,$BA,$14,$BB,$14,$BB
         .BYTE $59,$BB,$59,$BB,$AC,$BB
         .BYTE $AC,$BB,$EE,$BB,$EE,$BB
         .BYTE $59,$BB,$59,$BB,$59,$BB
         .BYTE $59,$BB,$59,$BB,$59,$BB
         .BYTE $59,$BB,$59,$BB

;
; TEXT "ÔHE GUARDIANS..."
;
HNTGUAR  .BYTE $A2,$D4,$E8,$E5,$A0,$E7
         .BYTE $F5,$E1,$F2,$E4,$E9,$E1
         .BYTE $EE,$F3,$A0,$E3,$E1,$EE
         .BYTE $A0,$E2,$E5,$A0,$E4,$E5
         .BYTE $E1,$E4,$EC,$F9,$AC,$A2
         .BYTE $A0,$F4,$E8,$E5,$A0,$E2
         .BYTE $E1,$F2,$EB,$E5,$E5,$F0
         .BYTE $A0,$F3,$ED,$E9,$F2,$EB
         .BYTE $F3,$AE,$DC

;
; TEXT "Á TASTE OF WINE..."
;
HNTWINE  .BYTE $A2,$C1,$A0,$F4,$E1,$F3
         .BYTE $F4,$E5,$A0,$EF,$E6,$A0
         .BYTE $F7,$E9,$EE,$E5,$A0,$ED
         .BYTE $E9,$E7,$E8,$F4,$A0,$F4
         .BYTE $F5,$F2,$EE,$A0,$F4,$EF
         .BYTE $A0,$F2,$E5,$E1,$E4,$F9
         .BYTE $A0,$E1,$E4,$F6,$E5,$EE
         .BYTE $F4,$F5,$F2,$E5,$AC,$A2
         .BYTE $A0,$F4,$E8,$E5,$A0,$E2
         .BYTE $E1,$F2,$EB,$E5,$E5,$F0
         .BYTE $A0,$E3,$E8,$F5,$E3,$EB
         .BYTE $EC,$E5,$F3,$AE,$DC

;
; TEXT "ÌOOK FOR THE ÒEVIEW ÂOARD..."
;
HNTRB    .BYTE $A2,$CC,$EF,$EF,$EB,$A0
         .BYTE $E6,$EF,$F2,$A0,$F4,$E8
         .BYTE $E5,$A0,$D2,$E5,$F6,$E9
         .BYTE $E5,$F7,$A0,$C2,$EF,$E1
         .BYTE $F2,$E4,$A0,$EF,$EE,$A0
         .BYTE $D4,$F2,$F5,$ED,$F0,$E5
         .BYTE $F4,$A0,$D3,$F4,$F2,$E5
         .BYTE $E5,$F4,$AC,$A2,$A0,$F4
         .BYTE $E8,$E5,$A0,$E2,$E1,$F2
         .BYTE $EB,$E5,$E5,$F0,$A0,$F7
         .BYTE $E8,$E9,$F3,$F0,$E5,$F2
         .BYTE $F3,$AE,$DC

;
; TEXT "ÔHE GATES CANNOT BE SCALED..."
;
HNTGATE  .BYTE $A2,$D4,$E8,$E5,$A0,$E7
         .BYTE $E1,$F4,$E5,$F3,$A0,$E3
         .BYTE $E1,$EE,$EE,$EF,$F4,$A0
         .BYTE $E2,$E5,$A0,$F3,$E3,$E1
         .BYTE $EC,$E5,$E4,$AC,$A0,$E2
         .BYTE $F5,$F4,$A0,$E1,$EE,$A0
         .BYTE $E5,$EE,$F4,$F2,$E1,$EE
         .BYTE $E3,$E5,$A0,$E1,$EC,$F7
         .BYTE $E1,$F9,$F3,$A0,$E5,$F8
         .BYTE $E9,$F3,$F4,$F3,$AC,$A2
         .BYTE $A0,$F4,$E8,$E5,$A0,$E2
         .BYTE $E1,$F2,$EB,$E5,$E5,$F0
         .BYTE $A0,$F3,$F4,$F5,$F4,$F4
         .BYTE $E5,$F2,$F3,$AE,$DC

;
; TEXT "ÔHE ÓTONE ÇOLEM..."
;
HNTGOLEM .BYTE $A2,$D4,$E8,$E5,$A0,$D3
         .BYTE $F4,$EF,$EE,$E5,$A0,$C7
         .BYTE $EF,$EC,$E5,$ED,$A0,$E8
         .BYTE $E1,$F3,$A0,$E2,$E5,$E5
         .BYTE $EE,$A0,$F3,$F0,$EF,$EB
         .BYTE $E5,$EE,$A0,$EF,$E6,$A0
         .BYTE $F4,$F7,$EF,$E6,$EF,$EC
         .BYTE $E4,$AC,$A2,$A0,$F4,$E8
         .BYTE $E5,$A0,$E2,$E1,$F2,$EB
         .BYTE $E5,$E5,$F0,$A0,$F3,$ED
         .BYTE $E9,$EC,$E5,$F3,$AE,$DC

;
; TEXT "ÔHE ÓPECTRE ÓNARE..."
;
HNTSNARE .BYTE $A2,$D4,$E8,$E5,$A0,$D3
         .BYTE $F0,$E5,$E3,$F4,$F2,$E5
         .BYTE $A0,$D3,$EE,$E1,$F2,$E5
         .BYTE $A0,$E3,$E1,$EE,$A0,$E4
         .BYTE $F2,$E1,$F7,$A0,$E9,$EE
         .BYTE $A0,$E5,$F6,$E5,$EE,$A0
         .BYTE $F4,$E8,$E5,$A0,$ED,$E9
         .BYTE $E7,$E8,$F4,$E9,$E5,$F3
         .BYTE $F4,$AC,$A2,$A0,$F4,$E8
         .BYTE $E5,$A0,$E2,$E1,$F2,$EB
         .BYTE $E5,$E5,$F0,$A0,$E7,$F2
         .BYTE $F5,$ED,$E2,$EC,$E5,$F3
         .BYTE $AE,$DC

;
; 8 PAIRS OF TAVERN COORS IN ÓKARA ÂRAE MAP
;
INNCOORS .BYTE $FF,$FF,$05,$1C,$13,$17
         .BYTE $07,$15,$06,$14,$01,$14
         .BYTE $08,$01,$12,$0B

;
; 8 POINTERS TO TAVERN NAMES TEXTS (DOWN HERE)
;
PTRNAMES .BYTE $68,$BC,$6F,$BC,$7C,$BC
         .BYTE $89,$BC,$96,$BC,$A3,$BC
         .BYTE $B0,$BC,$BD,$BC

;
; DIRECTIONS FOR RETURN FROM TAVERN INTO CITY
;
INNDIRS  .BYTE $00,$00,$03,$00,$03,$00
         .BYTE $00,$00,$02,$00,$00,$00
         .BYTE $02,$00,$03,$00

;
; NAME FOR UNKNOWN TAVERNS "ÔAVERN"
;
NAMDEF   .BYTE $D4,$E1,$F6,$E5,$F2,$EE
         .BYTE $DC

;
; NAME "ÓCARLET ÂARD"
;
NAMSB    .BYTE $D3,$E3,$E1,$F2,$EC,$E5
         .BYTE $F4,$A0,$C2,$E1,$F2,$E4
         .BYTE $DC

;
; NAME "ÓINISTER ÉNN"
;
NAMSI    .BYTE $D3,$E9,$EE,$E9,$F3,$F4
         .BYTE $E5,$F2,$A0,$C9,$EE,$EE
         .BYTE $DC

;
; NAME "ÄRAGONBREATH"
;
NAMDRBR  .BYTE $C4,$F2,$E1,$E7,$EF,$EE
         .BYTE $E2,$F2,$E5,$E1,$F4,$E8
         .BYTE $DC

;
; NAME "ÁSK Ù'ÍOTHER"
;
NAMAYM   .BYTE $C1,$F3,$EB,$A0,$D9,$A7
         .BYTE $CD,$EF,$F4,$E8,$E5,$F2
         .BYTE $DC

;
; NAME "ÁRCHMAGE ÉNN"
;
NAMAI    .BYTE $C1,$F2,$E3,$E8,$ED,$E1
         .BYTE $E7,$E5,$A0,$C9,$EE,$EE
         .BYTE $DC

;
; NAME "ÓKULL TAVERN"
;
NAMST    .BYTE $D3,$EB,$F5,$EC,$EC,$A0
         .BYTE $D4,$E1,$F6,$E5,$F2,$EE
         .BYTE $DC

;
; NAME "ÄRAWNBLADE"
;
NAMDRBL  .BYTE $C4,$F2,$E1,$F7,$EE,$E2
         .BYTE $EC,$E1,$E4,$E5,$DC

;
; GARBAGE
;
TABLBCC8 .BYTE $04,$00,$00,$20,$10,$10
         .BYTE $10,$10,$03,$08,$05,$02
         .BYTE $01,$00,$01,$00,$00,$00
         .BYTE $02,$00,$01,$03,$50,$00
         .BYTE $00,$01,$03,$00,$00,$00
         .BYTE $40,$00,$10,$10,$03,$30
         .BYTE $00,$00,$00,$00,$02,$01
         .BYTE $01,$01,$00,$00,$18,$00
         .BYTE $00,$00,$01,$01,$FF,$FF
         .BYTE $00

.END
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

NM0F.PRG

Code: Select all

*= $B600 ;  Ã64

         JSR $082A ; MAKE RANDOM NUMBER
         LDA $5A ; GET LO BYTE OF IT
         AND #$03 ; ONLY VALUES 0 - 3
         BNE ISEMPTY ; IF > 0 NO FIGHT
         LDA #$00 ; FIGHT TYPE 0 = MONSTERS
         STA $E1 ; SET FOR SUB
         JSR $0893 ; START A RANDOM FIGHT
ISEMPTY  LDA $0398 ; GET HOUSE TYPE
         AND #$07 ; ONLY VALUES 0 - 7
         TAY  ; INTO Y AS INDEX
         LDX GFXHOUSE,Y ; LOAD GFX NUMBER FOR HOUSE (+50)
         JSR $0803 ; PAINT INHOUSE GFX
         LDA #>TXTGFX ; LOAD GFX CAPTION "ÂUILDING"
         STA $59
         LDA #<TXTGFX
         STA $58
         JSR $080C ; PRINT GFX CAPTION
         JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTMENU ; LOAD TEXT "ÙOU ARE..."
         LDX #<TXTMENU
         JSR $0809 ; PRINT TEXT
TRYAGAIN JSR $080F ; WAIT FOR KEY
         JSR $083F ; GET KEY PRESSED
         CMP #$C5 ; IS "E"?
         BNE TRYAGAIN ; NO, TRY AGAIN
         LDX $24 ; LOAD PARTY'S DIRECTION
         LDA MAPDIRS,X ; LOAD REVERSE DIRECTION
         STA $24 ; AND STORE FOR FUTURE USE
         JSR EXITHOUS ; EXIT THE HOUSE
         LDA #$00 ; ????
         STA $2F ; ????
         JSR $0806 ; CLEAR TEXT WINDOW
         JMP $AE00 ; JUMP BACK INTO CITY HANDLING

EXITHOUS LDA $24 ; LOAD DIRECTION
         BEQ DIRN ; IS Î?
         CMP #$01 ; COMPARE TO Å
         BEQ DIRE ; IS Å?
         CMP #$02 ; COMPARE TO Ó
         BEQ DIRS ; IS Ó?
DIRW     DEC $29 ; ALL NO, SO IT IS ×
         RTS 

DIRN     INC $28
         RTS 

DIRS     DEC $28
         RTS 

DIRE     INC $29
         RTS 

;
; TEXT "ÂUILDING", CAPTION UNDER GFX
;
TXTGFX   .BYTE $C2,$F5,$E9,$EC,$E4,$E9
         .BYTE $EE,$E7,$DC

;
; TEXT "ÙOU ARE IN AN EMPTY..."
;
TXTMENU  .BYTE $D9,$EF,$F5,$A0,$E1,$F2
         .BYTE $E5,$A0,$E9,$EE,$A0,$E1
         .BYTE $EE,$A0,$E5,$ED,$F0,$F4
         .BYTE $F9,$A0,$E2,$F5,$E9,$EC
         .BYTE $E4,$E9,$EE,$E7,$AE,$00
         .BYTE $00,$A8,$C5,$A9,$F8,$E9
         .BYTE $F4,$A0,$E2,$F5,$E9,$EC
         .BYTE $E4,$E9,$EE,$E7,$FF

;
; TABLE TO REVERT PARTY'S DIRECTION
;
MAPDIRS  .BYTE $02,$03,$00,$01

;
; OFFSETS FOR INHOUSE GFX FILE NAME, THE 0 WILL NEVER BE USED
;
GFXHOUSE .BYTE $00,$05,$33,$34,$35

;
; GARBAGE, UNUSED
;
TABLB6A8 .BYTE $BD,$C7,$B4,$8D,$D2,$B5
         .BYTE $BD,$C8,$B4,$8D,$C2,$B5
         .BYTE $8D,$F6,$B5,$BD,$E7,$B4
         .BYTE $8D,$EE,$B5,$BD,$E8,$B4
         .BYTE $8D,$EF,$B5,$8E,$D9,$B5
         .BYTE $A9,$FF,$8D,$E0,$B5,$8D
         .BYTE $E1,$B5,$AD,$E2,$B3,$8D
         .BYTE $DA,$B5,$18,$4C,$5E,$AF
         .BYTE $A9,$00,$AA,$9D,$D1,$B5
         .BYTE $E8,$E0,$2D,$D0,$F8,$AD
         .BYTE $BF,$B5,$49,$FF,$8D,$F9
         .BYTE $B5,$AD,$C0,$B5,$8D,$F8
         .BYTE $B5,$AD,$C1,$B5,$0A,$0A
         .BYTE $0A,$0A,$AA,$8E,$F7,$B5
         .BYTE $FF,$FF,$00

.END
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

NM1A.PRG

Code: Select all

*= $B600 ;  Ã64

         LDA #>TXTGATE ; LOAD TEXT "ÃITY ÇATE"
         STA $59
         LDA #<TXTGATE
         STA $58
         JSR $080C ; PRINT GFX CAPTION
         JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTINFO ; LOAD INFO TEXT
         LDX #<TXTINFO
         JSR $0809 ; PRINT TEXT
         JSR $080F ; WAIT KEY
         LDA #$01 ; LOAD COOR
         STA $29 ; STORE IN PARTY'S Å
         JSR $0806 ; CLEAR TEXT WINDOW
         JMP $AE00 ; BACK INTO CITY HANDLING

;
; TEXT "ÃITY ÇATE"
;
TXTGATE  .BYTE $C3,$E9,$F4,$F9,$A0,$C7
         .BYTE $E1,$F4,$E5,$DC

;
; TEXT "ÙOU STAND BEFORE THE CITY GATES..."
;
TXTINFO  .BYTE $D9,$EF,$F5,$A0,$F3,$F4
         .BYTE $E1,$EE,$E4,$A0,$E2,$E5
         .BYTE $E6,$EF,$F2,$E5,$A0,$F4
         .BYTE $E8,$E5,$A0,$E3,$E9,$F4
         .BYTE $F9,$A0,$E7,$E1,$F4,$E5
         .BYTE $F3,$AC,$A0,$F7,$E8,$E9
         .BYTE $E3,$E8,$A0,$E1,$F2,$E5
         .BYTE $A0,$E2,$EC,$EF,$E3,$EB
         .BYTE $E5,$E4,$A0,$E2,$F9,$A0
         .BYTE $E1,$A0,$E7,$E9,$E7,$E1
         .BYTE $EE,$F4,$E9,$E3,$A0,$F3
         .BYTE $EE,$EF,$F7,$A0,$E4,$F2
         .BYTE $E9,$E6,$F4,$AE,$A0,$D0
         .BYTE $F2,$E5,$F3,$F3,$A0,$E1
         .BYTE $A0,$EB,$E5,$F9,$A0,$F4
         .BYTE $EF,$A0,$E8,$E5,$E1,$E4
         .BYTE $A0,$E2,$E1,$E3,$EB,$AE
         .BYTE $DC

;
; GARBAGE, UNUSED
;
TABLB693 .BYTE $E0,$A9,$01,$4C,$90,$08
         .BYTE $D4,$E8,$E5,$A0,$D4,$EF
         .BYTE $F7,$E5,$F2,$DC,$CD,$E1
         .BYTE $E7,$E9,$E3,$A0,$ED,$EF
         .BYTE $F5,$F4,$E8,$DC,$C1,$A0
         .BYTE $ED,$E1,$E7,$E9,$E3,$A0
         .BYTE $ED,$EF,$F5,$F4,$E8,$A0
         .BYTE $EF,$EE,$A0,$F4,$E8,$E5
         .BYTE $A0,$F7,$E1,$EC,$EC,$A0
         .BYTE $F3,$F0,$E5,$E1,$EB,$F3
         .BYTE $A0,$F4,$EF,$A0,$F9,$EF
         .BYTE $F5,$BA,$A0,$A2,$C4,$E5
         .BYTE $F3,$F0,$E9,$F3,$E5,$E4
         .BYTE $A0,$EF,$EE,$E5,$F3,$AC
         .BYTE $A0,$EE,$EF,$EE,$E5,$A0
         .BYTE $F3,$E1,$F6,$E5,$A0,$CD
         .BYTE $E1,$EE,$E7,$E1,$F2,$A0
         .BYTE $ED,$E1,$F9,$A0,$E5,$EE

.END
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

NM12.PRG

Code: Select all

*= $B600 ;  Ã64

         LDX #$00 ; COOR INDEX
         LDY #$00 ; HOLDS GATE NUMBER
TSTCOOR  LDA $28 ; LOAD PARTY N COOR
         CMP GATECOOR,X ; COMPARE TO GATE N COOR
         BNE TRYNEXT ; IF NOT SAME, TRY NEXT
         LDA $29 ; ELSE LOAD PARTY E COOR
         CMP GATECOOR+1,X ; COMPARE TO GATE E COOR
         BEQ GOTGATE ; IF ALSO EQUAL, FOUND A GATE
TRYNEXT  INX  ; NEXT COOR PAIR
         INX 
         INY  ; UPDATE GATE NUMBER
         CPX #$08 ; 8 COORS? 4 N 4 E?
         BCC TSTCOOR ; IF NO TEST NEXT
GOTGATE  LDA GATENO,Y ; GET GATE NO
         STA SAVGATE+1 ; SELF MOD GATE NO
         INC $C1 ; ????
         LDA $EB ; GET DAY/NITE
         BEQ DAYTIME ; LOAD DAY GFX
         LDX #$40 ; LOAD NM90
         JSR $0803 ; PRINT GFX
         JMP GOON1 ; GO ON

DAYTIME  LDX #$26 ; LOAD NM76
         JSR $0803 ; PRINT GFX
GOON1    LDA #>CAPGATE ; LOAD CAPTION
         STA $59
         LDA #<CAPGATE
         STA $58
         JSR $080C ; PRINT CAPTION
         JSR $0806 ; CLEAR TEXT
         LDA $28 ; LOAD PARTY N
         CMP #$0E ; IS 14?
         BCS NOTMANGR ; IF BIGGER, NOT MANGAR
         LDY #>TXTMANGR ; LOAD MANGAR TEXT
         LDX #<TXTMANGR
         JSR $0809 ; PRINT TEXT
         JMP EXIT ; DONE

NOTMANGR LDY #>TXTKYLEA ; LOAD KYLEARAN TEXT
         LDX #<TXTKYLEA
         JSR $0809 ; PRINT TEXT
EXIT     JSR $080F ; WAIT KEY
         JSR SAVGATE ; PUSH BACK PARTY
         JSR $0806 ; CLEAR TEXT
         JMP $AE00 ; BACK TO CITY

SAVGATE  LDA #$00 ; !HAS STORED GATE NUMBER
         BEQ DIRN ; IF N
         CMP #$03 ; COMPARE W
         BEQ DIRW ; IF W
         CMP #$02 ; COMPARE S
         BEQ DIRS ; IF S
DIRE     INC $29 ; ELSE IS E
         RTS 

DIRN     INC $28
         RTS 

DIRS     DEC $28
         RTS 

DIRW     DEC $29
         RTS 

;
; CAPTION IRON GATE
;
CAPGATE  .BYTE $C9,$F2,$EF,$EE,$A0,$C7
         .BYTE $E1,$F4,$E5,$DC

;
; TEXT FOR MANGAR'S TOWER
;
TXTMANGR .BYTE $D9,$EF,$F5,$A0,$F3,$F4
         .BYTE $E1,$EE,$E4,$A0,$E2,$E5
         .BYTE $E6,$EF,$F2,$E5,$A0,$E1
         .BYTE $EE,$A0,$E9,$F2,$EF,$EE
         .BYTE $A0,$E7,$E1,$F4,$E5,$AC
         .BYTE $A0,$E2,$E5,$F9,$EF,$EE
         .BYTE $E4,$A0,$F7,$E8,$E9,$E3
         .BYTE $E8,$A0,$F3,$F4,$E1,$EE
         .BYTE $E4,$F3,$A0,$CD,$E1,$EE
         .BYTE $E7,$E1,$F2,$A7,$F3,$A0
         .BYTE $F4,$EF,$F7,$E5,$F2,$AE
         .BYTE $A0,$D0,$F2,$E5,$F3,$F3
         .BYTE $A0,$E1,$A0,$EB,$E5,$F9
         .BYTE $A0,$F4,$EF,$A0,$E8,$E5
         .BYTE $E1,$E4,$A0,$E2,$E1,$E3
         .BYTE $EB,$AE,$DC

;
; TEXT FOR KYLEARAN'S TOWER
;
TXTKYLEA .BYTE $D9,$EF,$F5,$A0,$F3,$F4
         .BYTE $E1,$EE,$E4,$A0,$E2,$E5
         .BYTE $E6,$EF,$F2,$E5,$A0,$E1
         .BYTE $EE,$A0,$E9,$F2,$EF,$EE
         .BYTE $A0,$E7,$E1,$F4,$E5,$AC
         .BYTE $A0,$E2,$E5,$F9,$EF,$EE
         .BYTE $E4,$A0,$F7,$E8,$E9,$E3
         .BYTE $E8,$A0,$F3,$F4,$E1,$EE
         .BYTE $E4,$F3,$A0,$CB,$F9,$EC
         .BYTE $E5,$E1,$F2,$E1,$EE,$A7
         .BYTE $F3,$A0,$F4,$EF,$F7,$E5
         .BYTE $F2,$AE,$A0,$D0,$F2,$E5
         .BYTE $F3,$F3,$A0,$E1,$A0,$EB
         .BYTE $E5,$F9,$A0,$F4,$EF,$A0
         .BYTE $E8,$E5,$E1,$E4,$A0,$E2
         .BYTE $E1,$E3,$EB,$AE,$DC

;
; GATE COORS IN CITY
;
GATECOOR .BYTE $04,$02,$02,$04,$1B,$19
         .BYTE $19,$1B

;
; GATE NUMBERS
;
GATENO   .BYTE $00,$01,$03,$02

;
; UNUSED GARBAGE
;
TABLB74D .BYTE $A0,$F3,$F4,$E1,$EE,$E4
         .BYTE $A0,$E2,$E5,$E6,$EF,$F2
         .BYTE $E5,$A0,$E1,$A0,$E7,$E1
         .BYTE $F4,$E5,$AC,$A0,$F7,$E8
         .BYTE $E9,$E3,$E8,$A0,$E9,$F3
         .BYTE $A0,$E7,$F5,$E1,$F2,$E4
         .BYTE $E5,$E4,$A0,$E2,$F9,$A0
         .BYTE $F4,$E8,$E5,$A0,$F3,$F4
         .BYTE $E1,$F4,$F5,$E5,$A0,$EF
         .BYTE $E6,$A0,$E1,$A0,$D3,$E1
         .BYTE $ED,$F5,$F2,$E1,$E9,$A0
         .BYTE $F7,$E1,$F2,$F2,$E9,$EF
         .BYTE $F2,$AE,$A0,$D9,$EF,$F5
         .BYTE $A0,$E3,$E1,$EE,$BA,$DC
         .BYTE $D9,$EF,$F5,$A0,$F3,$F4
         .BYTE $E1,$EE,$E4,$A0,$E2,$E5
         .BYTE $E6,$EF,$F2,$E5,$A0,$E1
         .BYTE $A0,$E7,$E1,$F4,$E5,$AC
         .BYTE $A0,$F7,$E8,$E9,$E3,$E8
         .BYTE $A0,$E9,$F3,$A0,$E7,$F5
         .BYTE $E1,$F2,$E4,$E5,$E4,$A0
         .BYTE $E2,$F9,$A0,$F4,$E8,$E5
         .BYTE $A0,$F3,$F4,$E1,$F4,$F5
         .BYTE $E5,$A0,$EF,$E6,$A0,$E1
         .BYTE $A0,$D3,$F4,$EF,$EE,$E5
         .BYTE $A0,$E7,$E9,$E1,$EE,$F4
         .BYTE $AE,$A0,$D9,$EF,$F5,$A0
         .BYTE $E3,$E1,$EE,$BA,$DC,$D9
         .BYTE $EF,$F5,$A0,$F3,$F4,$E1
         .BYTE $EE,$A9,$DC,$00

.END
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

NM13.PRG

Code: Select all

*= $B600 ;  Ã64

         JSR $AE03 ; UPDATE PARTY'S POSITION
         LDA #$00 ; ????
         STA $0D ; ????
         JSR $AE06 ; UPDATE VIEW OF CITY
         JSR $0806 ; CLEAR TEXT WINDOW
         LDA #>TXT_PORT ; LOAD TEXT "ÐORTAL..."
         STA $59
         LDA #<TXT_PORT
         STA $58
         JSR $080C ; PRINT GFX CAPTION
         LDY #>TXT_SEWR ; LOAD TEXT "ÅNTRANCE"
         LDX #<TXT_SEWR
         JSR $0809 ; PRINT TEXT
GET_KEY  JSR $080F ; WAIT FOR KEY
         JSR $083F ; GET KEY PRESSED
         CMP #$D9 ; IS "Y"?
         BEQ GO_SEWER ; IF Y GOTO INTO SEWERS
         CMP #$CE ; IS "N"?
         BNE GET_KEY ; IF NO VALID KEY TRY AGAIN
         JSR $0806 ; CLEAR TEXT WINDOW
         LDA #$02 ; SET COOR TO 2
         STA $28 ; STORE IN PARTY'S Î
         JMP $AE00 ; BACK INTO CITY HANDLING

GO_SEWER LDA #$03 ; LOAD DUNGEON LEVEL (3 = SEWERS LEVEL 3)
         STA $E0 ; STORE IN VAR FOR ÂÔ SYSTEM
         LDA #$01 ; ADDRESS DUNGEON DISK
         JMP $0890 ; ENTER DUNGEON

;
; TEXT "ÐORTAL..."
;
TXT_PORT .BYTE $D0,$EF,$F2,$F4,$E1,$EC,$AE,$AE,$AE,$DC

;
; TEXT "ÔHERE IS AN ENTRANCE..."
;
TXT_SEWR .BYTE $D4,$E8,$E5,$F2,$E5,$A0,$E9,$F3,$A0,$E1
         .BYTE $EE,$A0,$E5,$EE,$F4,$F2,$E1,$EE,$E3,$E5
         .BYTE $A0,$F4,$EF,$A0,$F4,$E8,$E5,$A0,$E3,$E9
         .BYTE $F4,$F9,$A0,$F3,$E5,$F7,$E5,$F2,$F3,$A0
         .BYTE $E8,$E5,$F2,$E5,$AE,$A0,$C4,$EF,$A0,$F9
         .BYTE $EF,$F5,$A0,$F7,$E9,$F3,$E8,$A0,$F4,$EF
         .BYTE $A0,$F4,$E1,$EB,$E5,$A0,$E9,$F4,$BF,$A0
         .BYTE $DB,$D9,$AD,$CE,$DD,$DC

;
; GARBAGE, UNUSED
;
TABLB696 .BYTE $4C,$90,$08,$D4,$E8,$E5,$A0,$D4,$EF,$F7
         .BYTE $E5,$F2,$DC,$CD,$E1,$E7,$E9,$E3,$A0,$ED
         .BYTE $EF,$F5,$F4,$E8,$DC,$C1,$A0,$ED,$E1,$E7
         .BYTE $E9,$E3,$A0,$ED,$EF,$F5,$F4,$E8,$A0,$EF
         .BYTE $EE,$A0,$F4,$E8,$E5,$A0,$F7,$E1,$EC,$EC
         .BYTE $A0,$F3,$F0,$E5,$E1,$EB,$F3,$A0,$F4,$EF
         .BYTE $A0,$F9,$EF,$F5,$BA,$A0,$A2,$C4,$E5,$F3
         .BYTE $F0,$E9,$F3,$E5,$E4,$A0,$EF,$EE,$E5,$F3
         .BYTE $AC,$A0,$EE,$EF,$EE,$E5,$A0,$F3,$E1,$F6
         .BYTE $E5,$A0,$CD,$E1,$EE,$E7,$E1,$F2,$A0,$ED
         .BYTE $E1,$F9,$A0,$E5,$EE

.END
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

NM15.PRG

Code: Select all

*= $B600 ;  Ã64

         INC $C1 ; ????
         LDX #$05 ; ADDRESS NM55
         JSR $0803 ; LOAD GFX
         LDA #>TXTCASTL ; LOAD CAPTION
         STA $59
         LDA #<TXTCASTL
         STA $58
         JSR $080C ; PRINT CAPTION
         JSR $0806 ; CLEAR TEXT
         LDY #>TXTINFO
         LDX #<TXTINFO
         JSR $0809 ; PRINT TEXT
INPUT    JSR $080F ; WAIT KEY
         JSR $083F ; GET KEY
         CMP #$D4 ; IS T?
         BEQ GOCASTLE ; IF YES GO CASTLE
         CMP #$C5 ; IS E?
         BNE INPUT ; IF NO TRY AGAIN
         LDA #$01 ; LOAD EAST
         STA $24 ; INTO PARTY DIR
         INC $29 ; MOVE 1 EAST
         LDA #$00 ; ????
         STA $8F ; ????
         JSR $0806 ; CLEAR TEXT
         JMP $AE00 ; BACK TO CITY

GOCASTLE LDA #$07 ; LOAD LEVEL 7
         STA $E0 ; SAVE FOR ENGINE
         LDA #$01 ; DUNG DISK
         JMP $0890 ; ENTER DUNGEON

;
; TEXT GFX CAPTION "CASTLE"
;
TXTCASTL .BYTE $C3,$E1,$F3,$F4,$EC,$E5
         .BYTE $DC

;
; INFO TEXT AT HARKYNS
;
TXTINFO  .BYTE $D4,$E8,$E9,$F3,$A0,$E9
         .BYTE $F3,$A0,$F4,$E8,$E5,$A0
         .BYTE $E5,$EE,$F4,$F2,$F9,$A0
         .BYTE $E3,$E8,$E1,$ED,$E2,$E5
         .BYTE $F2,$A0,$F4,$EF,$A0,$C8
         .BYTE $E1,$F2,$EB,$F9,$EE,$A7
         .BYTE $F3,$A0,$C3,$E1,$F3,$F4
         .BYTE $EC,$E5,$AE,$A0,$C9,$F4
         .BYTE $A0,$E9,$F3,$A0,$EE,$EF
         .BYTE $F4,$A0,$E7,$F5,$E1,$F2
         .BYTE $E4,$E5,$E4,$AC,$A0,$E2
         .BYTE $F5,$F4,$A0,$E1,$A0,$F3
         .BYTE $E9,$E7,$EE,$A0,$F4,$E8
         .BYTE $F2,$E5,$E1,$F4,$E5,$EE
         .BYTE $F3,$A0,$F4,$F2,$E5,$F3
         .BYTE $F0,$E1,$F3,$F3,$E5,$F2
         .BYTE $F3,$A0,$F7,$E9,$F4,$E8
         .BYTE $A0,$E4,$E5,$E1,$F4,$E8
         .BYTE $AE,$A0,$D9,$EF,$F5,$A0
         .BYTE $E3,$E1,$EE,$00,$00,$A8
         .BYTE $D4,$A9,$E1,$EB,$E5,$A0
         .BYTE $F3,$F4,$E1,$E9,$F2,$F3
         .BYTE $A0,$F5,$F0,$00,$A8,$C5
         .BYTE $A9,$F8,$E9,$F4,$A0,$F4
         .BYTE $E8,$E5,$A0,$E3,$E1,$F3
         .BYTE $F4,$EC,$E5,$DC

;
; UNUSED GARBAGE
;
TABLB6E4 .BYTE $A9,$F8,$E9,$F4,$A0,$F4
         .BYTE $E8,$E5,$A0,$F4,$E5,$ED
         .BYTE $F0,$EC,$E5,$DC,$A2,$CF
         .BYTE $EE,$EC,$F9,$A0,$F4,$E8
         .BYTE $A0,$A6,$A2

.END
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

NM18.PRG

Code: Select all

*= $B600 ;  Ã64

         INC $C1 ; ????
         LDX #$05 ; ADDRESS GFX ÎÍ55 (5 + 50)
         JSR $0803 ; LOAD AND SHOW EMPTY HOUSE Á
         LDA #>TXTAMBR ; LOAD CAPTION "ÁMBER ÔOWER"
         STA $59
         LDA #<TXTAMBR
         STA $58
         JSR $080C ; PRINT GFX CAPTION
         JSR $0806 ; CLEAR TEXT WINDOW
         LDY #>TXTMENU ; LOAD MENU TEXT
         LDX #<TXTMENU
         JSR $0809 ; PRINT TEXT
TRYAGAIN JSR $080F ; WAIT FOR KEY
         JSR $083F ; GET KEY PRESSED
         CMP #$D4 ; IS "T"?
         BEQ GOTOWER ; IF YES GOTO TOWER
         CMP #$C5 ; IS "E"?
         BNE TRYAGAIN ; IF NOT "E", INVALID KEY. TRY AGAIN
         LDX $24 ; GET PARTY'S DIRECTION
         LDA MAPDIRS,X ; READ REVERSE DIR FROM TABLE
         STA $24 ; AND STORE FOR ÂÔ SYSTEM
         JSR EXITCCOR ; GET EXIT COORDINATE
         LDA #$00 ; ????
         STA $8F ; ????
         JSR $0806 ; CLEAR TEXT WINDOW
         JMP $AE00 ; BACK INTO CITY HANDLING

EXITCCOR LDA $02 ; LOAD PARTY'S DIR
         BEQ DIRN ; IF Î
         CMP #$01 ; CMP Å
         BEQ DIRE ; IF Å
         CMP #$02 ; CMP Ó
         BEQ DIRS ; IF Ó
DIRW     DEC $29 ; NONE OF THE ABOVE = ×
         RTS 

DIRN     INC $28
         RTS 

DIRS     DEC $28
         RTS 

DIRE     INC $29
         RTS 

GOTOWER  LDA #$0A ; LOAD DUNGEON LEVEL (Á=10=ËYLEARAN'S TOWER)
         STA $E0 ; STORE FOR ÂÔ SYSTEM
         LDA #$01 ; ADDRESS DUNGEON DISK
         JMP $0890 ; GOT DUNGEON

;
; TEXT "ÁMBER ÔOWER"
;
TXTAMBR  .BYTE $C1,$ED,$E2,$E5,$F2,$A0
         .BYTE $D4,$EF,$F7,$E5,$F2,$DC

;
; TEXT "ÔHIS IS THE ENTRY CHAMBER..."
;
TXTMENU  .BYTE $D4,$E8,$E9,$F3,$A0,$E9
         .BYTE $F3,$A0,$F4,$E8,$E5,$A0
         .BYTE $E5,$EE,$F4,$F2,$F9,$A0
         .BYTE $E3,$E8,$E1,$ED,$E2,$E5
         .BYTE $F2,$A0,$F4,$EF,$A0,$CB
         .BYTE $F9,$EC,$E5,$E1,$F2,$E1
         .BYTE $EE,$A7,$F3,$A0,$C1,$ED
         .BYTE $E2,$E5,$F2,$A0,$D4,$EF
         .BYTE $F7,$E5,$F2,$AE,$A0,$C1
         .BYTE $A0,$F3,$F4,$E1,$E9,$F2
         .BYTE $F7,$E5,$EC,$EC,$A0,$EC
         .BYTE $E5,$E1,$E4,$F3,$A0,$F5
         .BYTE $F0,$A0,$F4,$EF,$A0,$E1
         .BYTE $A0,$EC,$EF,$E6,$F4,$F9
         .BYTE $A0,$EC,$E5,$F6,$E5,$EC
         .BYTE $A0,$EF,$E6,$A0,$E3,$E8
         .BYTE $E1,$ED,$E2,$E5,$F2,$F3
         .BYTE $AE,$A0,$D9,$EF,$F5,$A0
         .BYTE $E3,$E1,$EE,$00,$00,$A8
         .BYTE $D4,$A9,$E1,$EB,$E5,$A0
         .BYTE $F3,$F4,$E1,$E9,$F2,$F3
         .BYTE $00,$A8,$C5,$A9,$F8,$E9
         .BYTE $F4,$A0,$F4,$EF,$F7,$E5
         .BYTE $F2,$DC

;
; REVERSE DIRECTION TABLE FOR PARTY EXIT
;
MAPDIRS  .BYTE $02,$03,$00,$01

;
; GARBAGE, UNUSED
;
TABLB6FB .BYTE $08,$EC,$F9,$A0

.END
User avatar
ZeroZero
Posts: 286
Joined: Tue Mar 10, 2009 9:10 pm
Location: Germany

Post by ZeroZero »

Well these are disassembled for CBM char set, thus the strange chars.
Also I didn't yet replace the offset tables with symbolic addresses, so these listings cannot be reassembled, if changed, and if they contain an offset table.
Example: event nm0c for the taverns has a string pointer table for the tavern names. The byte values should be replaced by symbolic addresses like "<namsb, >namsb" for the Scarlet Bard string.
Ihave the DOS listings also containg the addresses and bytes.
I was using the excellent 64copy and its MARVELLOUS disassembler included (Version 4.44 or higher strongest recommended!)

E D I T:

64copy can be found here:
http://ist.uwaterloo.ca/~schepers/personal.html
Last edited by ZeroZero on Tue Mar 02, 2010 6:34 pm, edited 1 time in total.
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

<namsb, >namsb
What the hell do those mean?


Anyway, we should all get 64Copy.
User avatar
ZeroZero
Posts: 286
Joined: Tue Mar 10, 2009 9:10 pm
Location: Germany

Post by ZeroZero »

These are labels defined within the source of nm0c
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

Code: Select all

LDA #$0A ; LOAD DUNGEON LEVEL (Á=10=ËYLEARAN'S TOWER)
         STA $E0 ; STORE FOR ÂÔ SYSTEM
         LDA #$01 ; ADDRESS DUNGEON DISK
         JMP $0890 ; GOT DUNGEON 
So it seems $0890 is the part where it sends the party to a dungeon level as directed by $E0. Since #$0A is hex for 10 it loads NM10.PRG which is Kylearan's Tower.
User avatar
ZeroZero
Posts: 286
Joined: Tue Mar 10, 2009 9:10 pm
Location: Germany

Post by ZeroZero »

Yes, $e0 is the var that is used to check, what dungeon to load. But remember, that the dungeon files start at NMa0, so it will load NMA0+$0A = NMAA, which is Kylearans tower, see the filelist.

The accu must contain a 1 for the dungeon disk, if there were a 2, it would ask to insert the character disk (city disk).

0890 is the BT systems entry point to load a dungeon file and handle dungeon action. I sent you all the stuff I have, looking up the texts file there should have shown you ;)
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

ZeroZero wrote:Yes, $e0 is the var that is used to check, what dungeon to load. But remember, that the dungeon files start at NMa0, so it will load NMA0+$0A = NMAA, which is Kylearans tower, see the filelist.

The accu must contain a 1 for the dungeon disk, if there were a 2, it would ask to insert the character disk (city disk).

0890 is the BT systems entry point to load a dungeon file and handle dungeon action. I sent you all the stuff I have, looking up the texts file there should have shown you ;)


Which texts file? You've sent me thousands of stuff. :?

I really would like to organize all the C64 stuff on BTI that everyone has done - me, ZeroZero, Horpner, Twoflower...everyone who has contributed thus far. I have all these files but they're scattered all over the hard drive of a computer which I don't even own. :?

I'm not organized. :?
User avatar
Darendor
Posts: 1502
Joined: Wed Jan 14, 2009 1:53 am
Location: Red Deer, Alberta, Canada

Post by Darendor »

Send more braaaaaiiinnns - er, I mean, disassembled events.
Post Reply