jewel-of-kaldun/castles.s

376 lines
10 KiB
ArmAsm
Executable File

********************************
* Draw CASTLE1, CASTLE2, and *
* lower the drawbridge for *
* castle #1. *
* Uses: GENERAL.MAC *
********************************
********************************
* Draw King Aradeas' castle *
********************************
CASTLE1 ENT
LDX #5
JSR HCOLOR ; HCOLOR = 5
MOVB #159;EY ; set starting points:
NILW EX ; HPLOT 0,? TO 0,159
NILW SX
MOVB #5;CTR0
:0 JSR PARAPET1 ; draw 5 sets of parapets
DEC CTR0
BNE :0
MOVB #10;SY ; draw a bar 10 pixels wide
JSR PARAPET0 ; !
MOVB #0;SY ; !
JSR PARAPET0 ; !
MOVB #10;SY ; !
JSR PARAPET0 ; finished tower
MOVW #90;SX ; prepare for sloped left
MOVW #90;EX ; side of tower
MOVB #0;SY
MOVB #20;EY
JSR SLOPDOWN
MOVW #130;SX ; prepare for sloped right
MOVW #130;EX ; side of tower
MOVB #0;SY
JSR SLOPUP
LDX #7 ; HCOLOR = 7
JSR HCOLOR
MOVB #40;SY ; and prepare for drawing the
NILW SX ; outline of castle
MOVW #10;EX
MOVB #40;EY
MOVB #5;CTR0
:1 JSR OUTLINE1 ; draw outline of parapets
DEC CTR0
BNE :1
MOVW #100;SX ; begin outlining the tower
MOVB #159;SY
MOVW #100;EX
MOVB #30;EY
JSR DRAWLINE
MOVW #90;EX
MOVB #20;EY
JSR LINETO
MOVB #0;EY
JSR LINETO
MOVB #0;SY
MOVW #90;SX
MOVW #100;EX
MOVB #2;CTR0
:4 JSR OUTLINE1 ; now outlining upper parapets
DEC CTR0 ; of the tower
BNE :4
MOVW #140;EX ; and finish off the tower.
JSR LINETO
MOVB #20;EY
JSR LINETO
MOVW #130;EX
MOVB #31;EY
JSR LINETO
MOVB #159;EY
JSR LINETO
NILW SX ; draw the bottom line.
MOVB #159;SY
MOVW #279;EX
JSR DRAWLINE
RTS
********************************
* Draw the Castle of Kaldun. *
********************************
CASTLE2 LDX #5
JSR HCOLOR
MOVB #159;EY
MOVW #80;EX
MOVB #70;SY
MOVW #80;SX
JSR PARAPET0
MOVB #60;SY
JSR PARAPET0
MOVB #70;SY
JSR PARAPET0
MOVB #100;SY
JSR PARAPET0
JSR PARAPET0
MOVB #5;CTR0
:0 JSR PARAPET2
DEC CTR0
BNE :0
MOVW #70;SX
MOVW #70;EX
MOVB #60;SY
MOVB #80;EY
JSR SLOPDOWN
MOVB #90;EY
MOVW #110;SX
MOVW #110;EX
JSR SLOPUP
LDX #7
JSR HCOLOR
MOVB #159;SY
MOVB #159;EY
NILW SX
MOVW #279;EX
JSR DRAWLINE
MOVW #45;SX
MOVB #125;EY
MOVW #80;EX
JSR DRAWLINE
MOVB #159;SY
MOVW #80;SX
MOVW #80;EX
MOVB #90;EY
JSR DRAWLINE
MOVW #70;EX
MOVB #80;EY
JSR LINETO
MOVB #60;EY
JSR LINETO
MOVW #70;SX
MOVB #60;SY
MOVW #80;EX
JSR OUTLINE1
JSR OUTLINE1
MOVW #120;EX
JSR LINETO
MOVB #80;EY
JSR LINETO
MOVW #110;EX
MOVB #90;EY
JSR LINETO
MOVB #100;EY
JSR LINETO
MOVW #130;EX
JSR LINETO
MOVW #130;SX
MOVB #100;SY
MOVW #130;EX
MOVB #90;EY
MOVB #5;CTR0
:1 JSR OUTLINE2
DEC CTR0
BNE :1
MOVW #80;SX
MOVB #155;SY
MOVW #279;EX
MOVB #155;EY
MOVB #11;CTR0
:2 JSR LAYERS2
DEC CTR0
BNE :2
MOVW #110;EX
JSR LAYERS2
JSR LAYERS2
JSR LAYERS2
MOVW #75;SX
MOVW #115;EX
JSR LAYERS2
MOVW #70;SX
MOVW #120;EX
JSR LAYERS2
JSR LAYERS2
MOVW #80;SX
MOVB #81;SY
MOVW #80;EX
MOVB #84;EY
JSR BRICKS2
MOVW #90;SX
MOVB #76;SY
MOVW #90;EX
MOVB #79;EY
JSR BRICKS2
MOVW #100;SX
MOVB #81;SY
MOVW #100;EX
MOVB #84;EY
JSR BRICKS2
MOVW #110;SX
MOVB #76;SY
MOVW #110;EX
MOVB #79;EY
JSR DRAWLINE
MOVB #9;CTR0
:3 MOVB #106;SY
MOVB #109;EY
JSR BRICKS2
ADDW SX;#10;SX
MOVW SX;EX
MOVB #111;SY
MOVB #114;EY
JSR BRICKS2
ADDW SX;#10;SX
MOVW SX;EX
DEC CTR0
BNE :3
RTS
********************************
* General subroutines used by *
* castle drawing routines. *
********************************
BRICKS2 JSR DRAWLINE
ADDB SY;#10;SY
ADDB EY;#10;EY
LDA EY
CMP #160
BLT BRICKS2
RTS
LAYERS2 JSR DRAWLINE
SUBB SY;#5;SY
SUBB EY;#5;EY
RTS
OUTLINE2 JSR DRAWLINE
SUBB SY;#10;SY ; SY=SY-10
ADDW EX;#20;EX ; EX=EX+20
JSR DRAWLINE
ADDW SX;#20;SX ; SX=SX+20
ADDB EY;#10;EY ; EY=EY+10
JSR DRAWLINE
ADDB SY;#10;SY ; SY=SY+10
ADDW EX;#9;EX ; EX=EX+9 (not off page..)
JSR DRAWLINE
ADDW EX;#1;EX ; EX=EX+1 (correct ^^^)
ADDW SX;#10;SX ; SX=SX+10
SUBB EY;#10;EY ; EY=EY-10
RTS
OUTLINE1 JSR DRAWLINE
ADDB #10;SX;SX ; SX=SX+10
ADDB #10;EY;EY ; EY=EY+10
JSR DRAWLINE
ADDB #10;SY;SY ; SY=SY+10
ADDB #10;EX;EX ; EX=EX+10
JSR DRAWLINE
ADDB #10;SX;SX ; SX=SX+10
SUBB EY;#10;EY ; EY=EY-10
JSR DRAWLINE
SUBB SY;#10;SY ; SY=SY-10
ADDB #10;EX;EX ; EX=EX+10
RTS
DRAWLINE ENT
LDA SY ; draws a hi-res line
LDX SX ; using the AppleSoft
LDY SX+1 ; routines:
JSR HPOSN ; HPLOT SX,SY TO EX,EY
LINETO LDY EY
LDA EX
LDX EX+1
JSR HPLOTTO
RTS
PARAPET1 MOVB #40;SY ; draw the high part of
JSR PARAPET0 ; a parapet and then the
MOVB #50;SY ; low part of it.
JMP PARAPET0 ; (King Aradeas' castle)
PARAPET2 MOVB #90;SY ; draw parapets for
JSR PARAPET0 ; Kalduns' castle.
JSR PARAPET0
MOVB #100;SY
PARAPET0 MOVB #10;CTR1 ; draw a block of 10 lines
:0 JSR DRAWLINE ; (vertical)
JSR INCX
DEC CTR1
BNE :0
RTS
SLOPDOWN MOVB #10;CTR0
:0 JSR DRAWLINE
JSR INCX
INC EY
DEC CTR0
BNE :0
RTS
SLOPUP MOVB #10;CTR0
:0 JSR DRAWLINE
JSR INCX
DEC EY
DEC CTR0
BNE :0
RTS
INCX INC SX ; increase both
BNE :0 ; SX and EX by one.
INC SX+1
:0 INC EX
BNE :1
INC EX+1
:1 RTS
********************************
* Variables used by the Castle *
* drawing routines. *
********************************
SX ENT
HEX 0000
SY ENT
HEX 00
EX ENT
HEX 0000
EY ENT
HEX 00
CTR0 HEX 00
CTR1 HEX 00
********************************
* Lower King Aradeas' *
* drawbridge: *
********************************
DRAWBRID MOVB #0;CTR0
NILW SX
NILW EX
MOVB #131;SX
:0 LDX #7
JSR DISPLAYB
LDA #100
JSR MONWAIT
LDX #4
JSR DISPLAYB
INC CTR0
LDA CTR0
CMP #27
BLT :0
DEC CTR0 ; fall through to Display
LDX #7 ; Bridge routine...
DISPLAYB JSR HCOLOR
MOVB #159;SY
LDY CTR0
MOVB BRIDGEX,Y;EX
MOVB BRIDGEY,Y;EY
JSR DRAWLINE
MOVB #120;SY
LDY CTR0
MOVB CHAINX,Y;EX
MOVB CHAINY,Y;EY
JSR DRAWLINE
RTS
********************************
* Drawbridge points: *
********************************
BRIDGEX DFB 131,133,136,139,142,145,148,151,154
DFB 156,159,161,163,166,168,170,171,173
DFB 175,176,177,178,179,180,180,180,180
BRIDGEY DFB 109,109,109,109,110,111,112,113,114
DFB 116,117,119,121,123,125,127,130,132
DFB 135,138,140,143,146,149,152,155,159
CHAINX DFB 131,133,135,138,140,142,145,147,149
DFB 151,153,155,157,159,160,162,163,165
DFB 166,167,168,169,169,170,170,170,170
CHAINY DFB 119,119,119,119,120,120,121,122,123
DFB 124,125,127,128,130,132,134,136,138
DFB 140,142,144,146,149,151,153,156,159