mirror of https://github.com/jeremysrand/BuGS.git
161 lines
3.0 KiB
ArmAsm
161 lines
3.0 KiB
ArmAsm
;
|
|
; gamePlayer.s
|
|
; BuGS
|
|
;
|
|
; Created by Jeremy Rand on 2020-10-28.
|
|
;Copyright © 2020 Jeremy Rand. All rights reserved.
|
|
;
|
|
|
|
case on
|
|
mcopy gamePlayer.macros
|
|
keep gamePlayer
|
|
|
|
gamePlayer start
|
|
using globalData
|
|
using tileData
|
|
|
|
PLAYER_TILES_HIGH equ 7
|
|
|
|
MOUSE_MAX_X equ GAME_NUM_TILES_WIDE*TILE_PIXEL_WIDTH-TILE_PIXEL_WIDTH
|
|
MOUSE_MAX_Y equ GAME_NUM_TILES_TALL*TILE_PIXEL_HEIGHT-TILE_PIXEL_HEIGHT
|
|
|
|
STARTING_MOUSE_X equ GAME_NUM_TILES_WIDE*TILE_PIXEL_WIDTH/2
|
|
STARTING_MOUSE_Y equ MOUSE_MAX_Y
|
|
|
|
initPlayer entry
|
|
lda #STARTING_MOUSE_X
|
|
sta mouseX
|
|
lda #STARTING_MOUSE_Y
|
|
sta mouseY
|
|
rtl
|
|
|
|
|
|
updatePlayer entry
|
|
lda gameRunning
|
|
beq updatePlayer_gameRunning
|
|
rtl
|
|
updatePlayer_gameRunning anop
|
|
ldx #0
|
|
ldy #0
|
|
; This code for reading the mouse data is based on some code which John Brooks helpfully provided, although I did things
|
|
; quite differently because I have different needs. But this is about as low cost as can be made for reading the position
|
|
; of the mouse.
|
|
short i,m
|
|
phb
|
|
lda #$e0
|
|
pha
|
|
plb
|
|
lda MOUSE_STATUS
|
|
bpl updatePlayer_noMousePoll
|
|
and #2
|
|
bne updatePlayer_mouseYOnly
|
|
ldx MOUSE_DATA_REG
|
|
updatePlayer_mouseYOnly anop
|
|
ldy MOUSE_DATA_REG
|
|
updatePlayer_doneMousePoll anop
|
|
plb
|
|
long i,m
|
|
bra updatePlayer_handleDeltas
|
|
|
|
updatePlayer_noMousePoll anop
|
|
plb
|
|
long i,m
|
|
jmp updatePlayer_skipDeltas
|
|
|
|
updatePlayer_handleDeltas anop
|
|
; The X register has the deltaX
|
|
txa
|
|
bit #$40
|
|
bne updatePlayer_negX
|
|
and #$3f
|
|
clc
|
|
adc mouseX
|
|
cmp #MOUSE_MAX_X
|
|
blt updatePlayer_doneX
|
|
lda #MOUSE_MAX_X-1
|
|
bra updatePlayer_doneX
|
|
updatePlayer_negX anop
|
|
ora #$ffc0
|
|
clc
|
|
adc mouseX
|
|
bpl updatePlayer_doneX
|
|
lda #0
|
|
updatePlayer_doneX anop
|
|
sta mouseX
|
|
|
|
; The Y register has the deltaY
|
|
tya
|
|
bit #$40
|
|
bne updatePlayer_negY
|
|
and #$3f
|
|
clc
|
|
adc mouseY
|
|
cmp #MOUSE_MAX_Y
|
|
blt updatePlayer_doneY
|
|
lda #MOUSE_MAX_Y-1
|
|
bra updatePlayer_doneY
|
|
updatePlayer_negY anop
|
|
ora #$ffc0
|
|
clc
|
|
adc mouseY
|
|
bpl updatePlayer_doneY
|
|
lda #0
|
|
updatePlayer_doneY anop
|
|
sta mouseY
|
|
|
|
; The Y register also has a bit in it which indicates whether the
|
|
; mouse is down or not.
|
|
tya
|
|
and #$0080
|
|
sta mouseDown
|
|
|
|
updatePlayer_skipDeltas anop
|
|
lda mouseX
|
|
lsr a
|
|
bcs updatePlayer_shift
|
|
adc #$9834
|
|
tay
|
|
jsl drawShip
|
|
bra updatePlayer_dirty
|
|
|
|
updatePlayer_shift anop
|
|
adc #$9833
|
|
tay
|
|
jsl drawShipShift
|
|
bra updatePlayer_dirty
|
|
|
|
updatePlayer_dirty anop
|
|
lda #TILE_STATE_DIRTY
|
|
sta tileDirty+1200
|
|
sta tileDirty+1202
|
|
sta tileDirty+1204
|
|
sta tileDirty+1206
|
|
sta tileDirty+1208
|
|
sta tileDirty+1210
|
|
sta tileDirty+1212
|
|
sta tileDirty+1214
|
|
sta tileDirty+1216
|
|
sta tileDirty+1218
|
|
sta tileDirty+1220
|
|
sta tileDirty+1222
|
|
sta tileDirty+1224
|
|
sta tileDirty+1226
|
|
sta tileDirty+1228
|
|
sta tileDirty+1230
|
|
sta tileDirty+1232
|
|
sta tileDirty+1234
|
|
sta tileDirty+1236
|
|
sta tileDirty+1238
|
|
sta tileDirty+1240
|
|
sta tileDirty+1242
|
|
sta tileDirty+1244
|
|
sta tileDirty+1246
|
|
sta tileDirty+1248
|
|
rtl
|
|
|
|
mouseX dc i2'0'
|
|
mouseY dc i2'0'
|
|
mouseDown dc i2'0'
|
|
|
|
end
|