mirror of
https://github.com/badvision/lawless-legends.git
synced 2024-12-26 19:29:27 +00:00
Can now navigate using the plasma main loop.
This commit is contained in:
parent
ca45c71605
commit
6ca538f33f
@ -229,6 +229,23 @@ asm renderFrame
|
|||||||
rts
|
rts
|
||||||
end
|
end
|
||||||
|
|
||||||
|
asm isBlocked
|
||||||
|
txa
|
||||||
|
pha
|
||||||
|
bit setROM
|
||||||
|
jsr $6006
|
||||||
|
tay
|
||||||
|
pla
|
||||||
|
tax
|
||||||
|
dex
|
||||||
|
tya
|
||||||
|
sta evalStkL,x
|
||||||
|
lda #0
|
||||||
|
sta evalStkH,x
|
||||||
|
bit setLcRW+lcBank2
|
||||||
|
rts
|
||||||
|
end
|
||||||
|
|
||||||
asm goMon
|
asm goMon
|
||||||
bit setROM
|
bit setROM
|
||||||
jmp $FF69
|
jmp $FF69
|
||||||
@ -246,20 +263,42 @@ end
|
|||||||
def moveForward()
|
def moveForward()
|
||||||
*playerX = *playerX + walkDirs[^playerDir * 2]
|
*playerX = *playerX + walkDirs[^playerDir * 2]
|
||||||
*playerY = *playerY + walkDirs[^playerDir * 2 + 1]
|
*playerY = *playerY + walkDirs[^playerDir * 2 + 1]
|
||||||
|
if isBlocked()
|
||||||
|
moveBackward()
|
||||||
|
fin
|
||||||
|
end
|
||||||
|
|
||||||
|
def adjustDir(n)
|
||||||
|
^playerDir = (^playerDir + n) & $F
|
||||||
end
|
end
|
||||||
|
|
||||||
def moveBackward()
|
def moveBackward()
|
||||||
^playerDir = (^playerDir + 8) & $F
|
adjustDir(8)
|
||||||
moveForward()
|
moveForward()
|
||||||
^playerDir = (^playerDir + 8) & $F
|
adjustDir(8)
|
||||||
|
if isBlocked()
|
||||||
|
moveForward()
|
||||||
|
fin
|
||||||
end
|
end
|
||||||
|
|
||||||
def rotateLeft()
|
def rotateLeft()
|
||||||
^playerDir = (^playerDir - 1) & $F
|
adjustDir(-1)
|
||||||
end
|
end
|
||||||
|
|
||||||
def rotateRight()
|
def rotateRight()
|
||||||
^playerDir = (^playerDir + 1) & $F
|
adjustDir(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def strafeRight()
|
||||||
|
adjustDir(4)
|
||||||
|
moveForward()
|
||||||
|
adjustDir(-4)
|
||||||
|
end
|
||||||
|
|
||||||
|
def strafeLeft()
|
||||||
|
adjustDir(-4)
|
||||||
|
moveForward()
|
||||||
|
adjustDir(4)
|
||||||
end
|
end
|
||||||
|
|
||||||
def kbdLoop()
|
def kbdLoop()
|
||||||
@ -334,11 +373,17 @@ initCmd('W', @moveForward)
|
|||||||
initCmd('A', @rotateLeft)
|
initCmd('A', @rotateLeft)
|
||||||
initCmd('D', @rotateRight)
|
initCmd('D', @rotateRight)
|
||||||
initCmd('S', @moveBackward)
|
initCmd('S', @moveBackward)
|
||||||
|
initCmd('X', @moveBackward)
|
||||||
|
initCmd('Z', @strafeLeft)
|
||||||
|
initCmd('C', @strafeRight)
|
||||||
|
|
||||||
initCmd('I', @moveForward)
|
initCmd('I', @moveForward)
|
||||||
initCmd('J', @rotateLeft)
|
initCmd('J', @rotateLeft)
|
||||||
initCmd('L', @rotateRight)
|
initCmd('L', @rotateRight)
|
||||||
initCmd('K', @moveBackward)
|
initCmd('K', @moveBackward)
|
||||||
|
initCmd(',', @moveBackward)
|
||||||
|
initCmd('M', @strafeLeft)
|
||||||
|
initCmd('.', @strafeRight)
|
||||||
|
|
||||||
; Draw the first frame
|
; Draw the first frame
|
||||||
renderFrame()
|
renderFrame()
|
||||||
|
@ -11,6 +11,7 @@ start:
|
|||||||
; code is at the very end. We jump to it now.
|
; code is at the very end. We jump to it now.
|
||||||
jmp initMap
|
jmp initMap
|
||||||
jmp renderFrame
|
jmp renderFrame
|
||||||
|
jmp getMapCell
|
||||||
|
|
||||||
; Conditional assembly flags
|
; Conditional assembly flags
|
||||||
DOUBLE_BUFFER = 1 ; whether to double-buffer
|
DOUBLE_BUFFER = 1 ; whether to double-buffer
|
||||||
@ -3225,26 +3226,6 @@ firstLink: !fill NUM_COLS
|
|||||||
mapSpriteL !fill MAX_SPRITES
|
mapSpriteL !fill MAX_SPRITES
|
||||||
mapSpriteH !fill MAX_SPRITES
|
mapSpriteH !fill MAX_SPRITES
|
||||||
|
|
||||||
; Movement amounts when walking at each angle
|
|
||||||
; Each entry consists of an X bump and a Y bump, in 8.8 fixed point
|
|
||||||
walkDirs:
|
|
||||||
!word $0040, $0000
|
|
||||||
!word $003B, $0018
|
|
||||||
!word $002D, $002D
|
|
||||||
!word $0018, $003B
|
|
||||||
!word $0000, $0040
|
|
||||||
!word $FFE8, $003B
|
|
||||||
!word $FFD3, $002D
|
|
||||||
!word $FFC5, $0018
|
|
||||||
!word $FFC0, $0000
|
|
||||||
!word $FFC5, $FFE8
|
|
||||||
!word $FFD3, $FFD3
|
|
||||||
!word $FFE8, $FFC5
|
|
||||||
!word $0000, $FFC0
|
|
||||||
!word $0018, $FFC5
|
|
||||||
!word $002D, $FFD3
|
|
||||||
!word $003B, $FFE8
|
|
||||||
|
|
||||||
; Sin of each angle, in log8.8 format plus the high bit being the sign (0x8000 = negative)
|
; Sin of each angle, in log8.8 format plus the high bit being the sign (0x8000 = negative)
|
||||||
sinTbl !word $0000, $8699, $877F, $87E1, $8800, $87E1, $877F, $8699
|
sinTbl !word $0000, $8699, $877F, $87E1, $8800, $87E1, $877F, $8699
|
||||||
!word $8195, $0699, $077F, $07E1, $0800, $07E1, $077F, $0699
|
!word $8195, $0699, $077F, $07E1, $0800, $07E1, $077F, $0699
|
||||||
|
Loading…
Reference in New Issue
Block a user