377 lines
6.4 KiB
Plaintext
377 lines
6.4 KiB
Plaintext
;
|
|
; S:GREDIT4
|
|
;
|
|
; Print Shop Companion
|
|
;
|
|
; Creature Maker
|
|
;
|
|
; by Roland Gustafsson
|
|
; Copyright 1985
|
|
;
|
|
;
|
|
YPOS1 = 93
|
|
YPOS2 = 121
|
|
YPOS3 = 149
|
|
;
|
|
CRPART1 = 18
|
|
CRPART2 = 17
|
|
CRPART3 = 17
|
|
;
|
|
CREATURS = $6000
|
|
CRCOUNT = CREATURS
|
|
;
|
|
;
|
|
CRMAKER LDA #ESC
|
|
STA CRMOD
|
|
JSR SETMAX
|
|
JSR CLSCREEN
|
|
LDX #26
|
|
LDY #13
|
|
LDA #0
|
|
JSR SHOWAROW
|
|
;
|
|
JSR PRINT
|
|
BYT RTOSWITE,0,0,25,16
|
|
BYT PRCNTR,PRINVR
|
|
.DA #PRLOC,88,#4
|
|
.DA #PRSTR,TXTCMAKE,#CR
|
|
;
|
|
BYT PRNORM,PRRITE
|
|
BYT RTOSWITE,26,0,14,2
|
|
.DA #PRLOC,279,#11
|
|
BYT PRCSPACE,1,PRSPC,11
|
|
BYT 'USE UP &',CR
|
|
BYT 'DOWN TO',CR
|
|
BYT 'SELECT',CR
|
|
BYT 'PART. USE',CR
|
|
.DA #PRHTAB,231
|
|
BYT PRCSPACE,2
|
|
BYT PRCNTR
|
|
BYT 'LEFT & RIGHT',CR
|
|
BYT 'TO SELECT',CR
|
|
BYT 'CREATURE.',CR
|
|
;
|
|
BYT PRINVR
|
|
;
|
|
BYT RTOSWITE,26,YPOS1,14,2+11
|
|
BYT PRVTAB,YPOS1+3
|
|
BYT 'HEAD',CR
|
|
;
|
|
BYT RTOSWITE,26,YPOS2,14,2+11
|
|
BYT PRVTAB,YPOS2+3
|
|
BYT 'BODY',CR
|
|
;
|
|
BYT RTOSWITE,26,YPOS3,14,2+11
|
|
BYT PRVTAB,YPOS3+3
|
|
BYT 'LEGS',CR
|
|
;
|
|
BYT RTOSWITE,26,177,14,2
|
|
BRK
|
|
;
|
|
LDA PART
|
|
PHA
|
|
LDA #0
|
|
STA PART
|
|
JSR MOVEPIEC
|
|
INC PART
|
|
JSR MOVEPIEC
|
|
INC PART
|
|
JSR MOVEPIEC
|
|
PLA
|
|
STA PART
|
|
;
|
|
; Do the creature selection stuff
|
|
;
|
|
CRMAKER2 JSR BLAKBOTM
|
|
JSR PRINT
|
|
BYT PRCNTR
|
|
.DA #PRLOC,140,#185
|
|
.DA #PRSTR,TXTPRET
|
|
BYT ' '
|
|
.DA #PRSTR,TXTWD,#CR
|
|
BRK
|
|
JSR CRSELECT
|
|
;
|
|
ESC4CR LDA #1
|
|
JSR SAVESPEC
|
|
BCC >0
|
|
JMP CRMAKER
|
|
;
|
|
^0 JSR JMPVECTS
|
|
ADR CRSAVE
|
|
ADR GREDIT2
|
|
ADR MAINMENU
|
|
;-----------
|
|
;
|
|
; Save the creature!
|
|
;
|
|
CRSAVE JSR SETTYPE
|
|
BYT 'GRAPHIC',0
|
|
TXTCMAKE BYT 'CREATURE MAKER',0
|
|
BYT 0
|
|
BYT 4
|
|
ADR EDITBUFF
|
|
ADR $240
|
|
JSR SAVEFILE
|
|
JMP ESC4CR
|
|
;-----------
|
|
;
|
|
; Build a creature
|
|
;
|
|
CRSELECT JSR SHOWGR
|
|
CRSELEC1 LSR CRARROWF
|
|
;
|
|
CRSELEC2 JSR CRARROWT
|
|
JSR FLSHINIT
|
|
;
|
|
^0 JSR POLEBTN
|
|
BMI >1
|
|
DEC FLASHLO
|
|
BNE <0
|
|
DEC FLASHHI
|
|
BPL <0
|
|
BMI CRSELEC2
|
|
;
|
|
^1 PHA
|
|
JSR CRARROW0
|
|
PLA
|
|
LDX PART
|
|
LDY PART1,X
|
|
JSR >2
|
|
BCS CRSELECT
|
|
BCC CRSELEC1
|
|
;
|
|
^2 JSR PARSE
|
|
.DA #'I',CRUP
|
|
.DA #$0B,CRUP
|
|
.DA #'M',CRDOWN
|
|
.DA #$0A,CRDOWN
|
|
.DA #'J',CRLEFT
|
|
.DA #$08,CRLEFT
|
|
.DA #'K',CRRITE
|
|
.DA #$15,CRRITE
|
|
;
|
|
.DA #CR,CRDONE
|
|
.DA #ESC,CRESC
|
|
;
|
|
BRK
|
|
CLC
|
|
RTS
|
|
;
|
|
CRESC PLA
|
|
PLA
|
|
PLA
|
|
PLA
|
|
JSR CMDQUIT2
|
|
JMP CRMAKER2
|
|
;
|
|
CRDONE PLA
|
|
PLA
|
|
RTS
|
|
;
|
|
CRUP DEX
|
|
BPL >0
|
|
LDX #1
|
|
;
|
|
CRDOWN INX
|
|
CPX #3
|
|
BLT >0
|
|
LDX #0
|
|
^0 STX PART
|
|
CLC
|
|
RTS
|
|
;
|
|
CRLEFT DEY
|
|
BPL >0
|
|
LDY CRCOUNT
|
|
DEY
|
|
DEY
|
|
;
|
|
CRRITE INY
|
|
CPY CRCOUNT
|
|
BLT >0
|
|
LDY #0
|
|
^0 TYA
|
|
STA PART1,X
|
|
JSR MOVEPIEC
|
|
SEC
|
|
RTS
|
|
;-----------
|
|
;
|
|
; Move piece from CRDATA to EDITBUFF
|
|
; and print it's name.
|
|
;
|
|
; PART is given in PART
|
|
; PIECE 0-9 is given in PART1,2 or 3
|
|
;
|
|
MOVEPIEC LDY PART
|
|
LDA PART1,Y
|
|
ASL
|
|
TAX
|
|
LDA CRADR,X
|
|
ADC CROFFSTL,Y
|
|
STA TMP0
|
|
LDA CRADR+1,X
|
|
ADC CROFFSTH,Y
|
|
STA TMP1
|
|
;
|
|
LDA #EDITBUFF
|
|
ADC CROFFSTL,Y
|
|
STA TMP2
|
|
LDA /EDITBUFF
|
|
ADC CROFFSTH,Y
|
|
STA TMP3
|
|
;
|
|
LDA CRLENGTH,Y
|
|
TAY
|
|
;
|
|
; Move piece over to EDITBUFF
|
|
;
|
|
^0 DEY
|
|
CPY #$FF
|
|
BEQ >1
|
|
LDA (TMP0),Y
|
|
STA (TMP2),Y
|
|
BLT <0
|
|
;
|
|
; Now print name of that piece
|
|
;
|
|
; First get address of text
|
|
;
|
|
^1 LDA CRCOUNT
|
|
ASL
|
|
TAY
|
|
LDA CRADR,Y
|
|
STA TMP0
|
|
LDA CRADR+1,Y
|
|
STA TMP1
|
|
;
|
|
LDY PART
|
|
LDX PART1,Y
|
|
;
|
|
LDY #0
|
|
;
|
|
; Find text location
|
|
;
|
|
^0 DEX
|
|
BMI >2
|
|
^1 LDA (TMP0),Y
|
|
PHA
|
|
INC TMP0
|
|
BNE *+4
|
|
INC TMP1
|
|
PLA
|
|
BNE <1
|
|
BEQ <0
|
|
;
|
|
^2 LDY TMP0
|
|
LDA TMP1
|
|
STY >5+0
|
|
STA >5+1
|
|
;
|
|
JSR GETYPOS
|
|
ADC #17
|
|
STA >3+0
|
|
STA >4+0
|
|
JSR PRINT
|
|
BYT RTOSBLAK,29
|
|
^3 BYT 0,11,7
|
|
.DA #PRLOC,203
|
|
^4 HEX 00
|
|
BYT PRSTR
|
|
^5 .DA 0000,#CR,#0
|
|
RTS
|
|
;-----------
|
|
CRARROWF HEX 00
|
|
;
|
|
; Toggle arrow on or off
|
|
;
|
|
CRARROWT LDA CRARROWF
|
|
EOR #$80
|
|
STA CRARROWF
|
|
BMI CRARROW1
|
|
;
|
|
; Erase arrow
|
|
;
|
|
CRARROW0 JSR GETYPOS
|
|
ADC #16
|
|
STA >0+0
|
|
JSR PRINT
|
|
BYT RTOSBLAK
|
|
BYT 26
|
|
^0 BYT 0,3,9,0
|
|
RTS
|
|
;
|
|
; Draw arrow
|
|
;
|
|
CRARROW1 JSR GETYPOS
|
|
ADC #16
|
|
STA >0+0
|
|
JSR PICDRAW
|
|
BYT 26
|
|
^0 BYT 0,3,9
|
|
HEX 810E8238826001C207C21FC207816001
|
|
HEX 8138820E00
|
|
RTS
|
|
;-----------
|
|
;
|
|
; LOOKUP TABLES....
|
|
;
|
|
CLEN = 11*52
|
|
;
|
|
C = CREATURS+1
|
|
;
|
|
; Address of each piece
|
|
;
|
|
CRADR ADR C+0*CLEN
|
|
ADR C+1*CLEN
|
|
ADR C+2*CLEN
|
|
ADR C+3*CLEN
|
|
ADR C+4*CLEN
|
|
ADR C+5*CLEN
|
|
ADR C+6*CLEN
|
|
ADR C+7*CLEN
|
|
ADR C+8*CLEN
|
|
ADR C+9*CLEN
|
|
ADR C+10*CLEN
|
|
;-----------
|
|
;
|
|
; Offsets for each of the 3 parts
|
|
;
|
|
CROFF1 = 0
|
|
CROFF2 = 11*CRPART1
|
|
CROFF3 = 11*CRPART1+CRPART2
|
|
;
|
|
CROFFSTL BYT CROFF1,CROFF2,CROFF3
|
|
CROFFSTH HBY CROFF1,CROFF2,CROFF3
|
|
;
|
|
; Length of each part
|
|
;
|
|
CRLENGTH BYT 11*CRPART1
|
|
BYT 11*CRPART2
|
|
BYT 11*CRPART3
|
|
;-----------
|
|
;
|
|
; Y position for each part
|
|
;
|
|
GETYPOS LDY PART
|
|
LDA YPOS,Y
|
|
CLC
|
|
RTS
|
|
;
|
|
YPOS BYT YPOS1,YPOS2,YPOS3
|
|
;-----------
|
|
;
|
|
; DATA
|
|
;
|
|
PART HEX 00
|
|
PART1 BRK
|
|
PART2 BRK
|
|
PART3 BRK
|
|
;
|
|
;
|
|
;
|
|
USR "GREDIT,S4",ORG
|
|
;
|
|
ICL "S:COMMONEDIT"
|