-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPLAYER.X68
More file actions
140 lines (121 loc) · 5.61 KB
/
PLAYER.X68
File metadata and controls
140 lines (121 loc) · 5.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
; =============================================================================
; PLAYER MANAGEMENT
; =============================================================================
; -----------------------------------------------------------------------------
PLRINIT
; INITIALIZES THE PLAYER
; INPUT - NONE
; OUTPUT - NONE
; MODIFIES - NONE
; -----------------------------------------------------------------------------
MOVE.W #PLRSTNM,PLRSTAT ; NORMAL MODE
MOVE.W #PLRXINI,(PLRPOSX) ; INITIAL X
MOVE.W #PLRYINI,(PLRPOSY) ; INITIAL Y
MOVE.W #PLRFACED,(PLRFACE) ; INITIALLY LOOKING DOWN
MOVE.W #PLRSPEDC,(PLRSPED) ; X AND Y SPEED WHEN MOVING
MOVE.L #PLRFACEL<<16+PLRFACER,(PLRFRMH) ; PREPARE GRAPHIC
MOVE.L #PLRFACEU<<16+PLRFACED,(PLRFRMV) ; FRAME DATA
CLR.B (PLRMOT) ; NO DESIRED MOTION
MOVE.W #PLRLIFEI,(PLRLIFE) ; INITIAL LIFE
MOVE.B #$FF,(PLRTYPE) ; FIXED TYPE
RTS
; -----------------------------------------------------------------------------
PLRUPD
; UPDATES THE PLAYER MOTION
; INPUT - NONE (ACCESSES KBDVAL AND KBDEDGE)
; OUTPUT - NONE (MODIFIES PLAYER DATA)
; MODIFIES - NONE
; -----------------------------------------------------------------------------
MOVEM.L D0-D6/A2,-(A7)
LEA PLRDBLK,A2 ; GET PLAYER DATA BLOCK
MOVE.B (KBDVAL),D0 ; PREPARE MOTION COMMAND BY USING THE
AND.B #(KBDMSKLF+KBDMSKUP+KBDMSKRT+KBDMSKDN),D0 ; ARROW KEYS FROM KBDVAL
MOVE.B D0,(PLRMOT)
JSR AGNMOVE ; MOVE HORIZONTALLY OR VERTICALLY
BTST.B #KBDBITF1,(KBDEDGE)
BEQ .NORMAL
MOVE.W PLRPOSX,D1
ADD.W #AGNWIDTH/2,D1
ADD.W #AGNHEIGH/2,D2
MOVE.W PLRPOSY,D2
JSR BOMBINIT
.NORMAL MOVE.W (PLRPOSX),D5
MOVE.W (PLRPOSY),D6
ADD.W #AGNWIDTH/2,D5
ADD.W #AGNHEIGH/2,D6
JSR BOMBRNG ; PLAYER IN EXPLOSION RANGE?
CMP.B #BOMBNIR,D7
BEQ .CHKGM ; IF NOT, CONTINUE
MOVE.W #BOMBDMG,D0
JSR PLRSUBLF
.CHKGM MOVE.W PLRSTAT,D0
CMP.W #PLRSTGM,D0 ; IS GHOST MODE ON?
BNE .END ; NO: END
MOVE.B PLRTIM,D0 ; YES: CHECK IF TIME IS OVER
ADD.B #PLRGMTIM,D0
CMP.B GENFRMCT,D0
BNE .END ; IF NOT, END
MOVE.W #PLRSTNM,PLRSTAT ; ELSE, END GHOST MODE
CLR.B PLRTIM
.END MOVEM.L (A7)+,D0-D6/A2
RTS
; -----------------------------------------------------------------------------
PLRPLOT
; PLOTS THE PLAYER AND ITS LIFE
; INPUT - NONE
; OUTPUT - NONE
; MODIFIES - NONE
; -----------------------------------------------------------------------------
MOVEM.L D0-D4/A2,-(A7)
LEA PLRDBLK,A2 ; GET THE AGENT POINTER
MOVE.W PLRSTAT,D0 ; CHECK IF GHOST MODE ON
CMP.W #PLRSTNM,D0
BEQ .NOGM ; IF NO GHOST MODE, CONTINUE
MOVE.B #92,D0 ; SET TRANSPARENT MODE (OR)
MOVE.B #10,D1
TRAP #15
.NOGM JSR AGNPLOT ; PLOT THE AGENT
MOVE.B #92,D0 ; RETURN TO NORMAL MODE
MOVE.B #4,D1
TRAP #15
MOVE.B #80,D0 ; SET PEN COLOR
MOVE.L #PLRSCOCB,D1 ; BLACK
TRAP #15
ADDQ.B #1,D0 ; SET FILL COLOR
MOVE.L #$000000FF,D1 ; RED
TRAP #15
MOVE.B #87,D0 ; DRAW RED RECTANGLE
MOVE.W #(MAPWIDTH-1)*MAPTILEW,D1 ;LEFT X
MOVE.W #0,D2 ; UPPER Y
MOVE.W #MAPWIDTH*MAPTILEW,D3 ; RIGHT X
MOVE.W #MAPHEIGH*MAPTILEH,D4 ; LOWER Y
TRAP #15
MOVE.B #81,D0 ; SET FILL COLOR
MOVE.L #PLRSCOCF,D1 ; GREEN
TRAP #15
MOVE.B #87,D0 ; PLOT LIFE
MOVE.W #(MAPWIDTH-1)*MAPTILEW,D1 ; LEFT X
MOVE.W #PLRLIFEI,D2 ; PREPARE CALCULATION
SUB.W PLRLIFE,D2 ; UPPER Y
MOVE.W #MAPWIDTH*MAPTILEW,D3 ; RIGHT X
MOVE.W #MAPHEIGH*MAPTILEH,D4 ; LOWER Y
TRAP #15
MOVEM.L (A7)+,D0-D4/A2
RTS
; -----------------------------------------------------------------------------
PLRSUBLF
; SUBSTRACTS LIFE TO THE PLAYER AND ENABLES GHOST MODE
; INPUT - D0.W AMOUNT TO SUBSTRACT
; OUTPUT - NONE
; MODIFIES - NONE
; -----------------------------------------------------------------------------
TST.W PLRSTAT ; CHECK IF NORMAL MODE ON
BNE .END ; IF NOT, END
MOVE.W #PLRSTGM,PLRSTAT ; SET GHOST MODE ON
MOVE.B GENFRMCT,PLRTIM ; SAVE INITIAL TIME
SUB.W D0,PLRLIFE ; SUBSTRACT LIFE
.END RTS
*~Font name~Courier New~
*~Font size~10~
*~Tab type~0~
*~Tab size~4~