use prerendered screen and remove sprite rotation
(cherry picked from commit 3783a98f95)
This commit is contained in:
BIN
assets/screen.ppm
Normal file
BIN
assets/screen.ppm
Normal file
Binary file not shown.
13
build.ts
13
build.ts
@@ -9,6 +9,10 @@ if (Deno.args.length !== 0) {
|
|||||||
|
|
||||||
import { TextLineStream } from "jsr:@std/streams@1.1.0";
|
import { TextLineStream } from "jsr:@std/streams@1.1.0";
|
||||||
|
|
||||||
|
const instructionLength = 4; // in bytes
|
||||||
|
const mapWidth = 15;
|
||||||
|
const spriteWidth = 5;
|
||||||
|
|
||||||
const asmFilePaths = [
|
const asmFilePaths = [
|
||||||
"src/consts/arch.asm",
|
"src/consts/arch.asm",
|
||||||
"src/consts/game.asm",
|
"src/consts/game.asm",
|
||||||
@@ -23,14 +27,10 @@ const asmFilePaths = [
|
|||||||
|
|
||||||
"src/lib/game.asm",
|
"src/lib/game.asm",
|
||||||
"src/lib/drawing.asm",
|
"src/lib/drawing.asm",
|
||||||
"src/lib/sprite_rotation.asm",
|
|
||||||
];
|
];
|
||||||
|
const initialScreenPath = 'assets/screen.ppm';
|
||||||
const reservedSpacePath = 'src/reserved_space.asm';
|
const reservedSpacePath = 'src/reserved_space.asm';
|
||||||
|
|
||||||
const instructionLength = 4; // in bytes
|
|
||||||
const mapWidth = 15;
|
|
||||||
const spriteWidth = 5;
|
|
||||||
|
|
||||||
const mapMatchingStrings = {
|
const mapMatchingStrings = {
|
||||||
0x00_00_00: '0', // Empty
|
0x00_00_00: '0', // Empty
|
||||||
0xFF_00_00: '1', // Wall
|
0xFF_00_00: '1', // Wall
|
||||||
@@ -104,6 +104,9 @@ console.log(`
|
|||||||
;
|
;
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
const screenBytes = await getDataFromPPM(initialScreenPath);
|
||||||
|
console.log(bytesToAsmConstU8('screen', screenBytes, spritesMatchingStrings, 1));
|
||||||
|
|
||||||
console.log(await Deno.readTextFile(reservedSpacePath))
|
console.log(await Deno.readTextFile(reservedSpacePath))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2,17 +2,9 @@ pub const sprites.width = 5
|
|||||||
pub const sprites.height = 5 ; unused as sprite are all square
|
pub const sprites.height = 5 ; unused as sprite are all square
|
||||||
pub const sprites.size = 25 ; height x width
|
pub const sprites.size = 25 ; height x width
|
||||||
|
|
||||||
pub const sprites.rotation_0 = 0
|
|
||||||
pub const sprites.rotation_90 = 1
|
|
||||||
pub const sprites.rotation_180 = 2
|
|
||||||
pub const sprites.rotation_270 = 3
|
|
||||||
|
|
||||||
pub const sprites.empty = 0
|
pub const sprites.empty = 0
|
||||||
pub const sprites.unimplemented = 1
|
pub const sprites.unimplemented = 1
|
||||||
pub const sprites.wall_end = 2
|
pub const sprites.robot = 2
|
||||||
pub const sprites.wall_straight = 3
|
pub const sprites.ghost = 3
|
||||||
pub const sprites.wall_corner = 4
|
pub const sprites.coin = 4
|
||||||
pub const sprites.robot = 5
|
pub const sprites.max = 4 ; for lookup table
|
||||||
pub const sprites.ghost = 6
|
|
||||||
pub const sprites.coin = 7
|
|
||||||
pub const sprites.max = 7 ; for lookup table
|
|
||||||
|
|||||||
20
src/init.asm
20
src/init.asm
@@ -17,24 +17,6 @@ lsl r2, r1, arch.instruction_increment_shift
|
|||||||
add r2, r2, ptr.textures_addresses
|
add r2, r2, ptr.textures_addresses
|
||||||
add r3, zr, sprite_unimplemented
|
add r3, zr, sprite_unimplemented
|
||||||
store_32 [r2], r3
|
store_32 [r2], r3
|
||||||
; sprite_wall_end
|
|
||||||
add r1, zr, sprites.wall_end
|
|
||||||
lsl r2, r1, arch.instruction_increment_shift
|
|
||||||
add r2, r2, ptr.textures_addresses
|
|
||||||
add r3, zr, sprite_wall_end
|
|
||||||
store_32 [r2], r3
|
|
||||||
; sprite_wall_straight
|
|
||||||
add r1, zr, sprites.wall_straight
|
|
||||||
lsl r2, r1, arch.instruction_increment_shift
|
|
||||||
add r2, r2, ptr.textures_addresses
|
|
||||||
add r3, zr, sprite_wall_straight
|
|
||||||
store_32 [r2], r3
|
|
||||||
; sprite_wall_corner
|
|
||||||
add r1, zr, sprites.wall_corner
|
|
||||||
lsl r2, r1, arch.instruction_increment_shift
|
|
||||||
add r2, r2, ptr.textures_addresses
|
|
||||||
add r3, zr, sprite_wall_corner
|
|
||||||
store_32 [r2], r3
|
|
||||||
; sprite_robot
|
; sprite_robot
|
||||||
add r1, zr, sprites.robot
|
add r1, zr, sprites.robot
|
||||||
lsl r2, r1, arch.instruction_increment_shift
|
lsl r2, r1, arch.instruction_increment_shift
|
||||||
@@ -63,7 +45,7 @@ mov r1, screen.mode_index
|
|||||||
screen r1, screen.mode_value
|
screen r1, screen.mode_value
|
||||||
|
|
||||||
mov r1, screen.offset_index
|
mov r1, screen.offset_index
|
||||||
add r2, zr, ptr.screen
|
add r2, zr, screen
|
||||||
screen r1, r2
|
screen r1, r2
|
||||||
|
|
||||||
mov r1, screen.resolution_index
|
mov r1, screen.resolution_index
|
||||||
|
|||||||
@@ -5,53 +5,6 @@ include ../consts/scene
|
|||||||
include ../consts/sprites
|
include ../consts/sprites
|
||||||
include sprite_rotation
|
include sprite_rotation
|
||||||
|
|
||||||
; /* Draw the whole (fill the screen memory with the values of the sprites based on the map)
|
|
||||||
|
|
||||||
; Inputs:
|
|
||||||
|
|
||||||
; Outputs:
|
|
||||||
|
|
||||||
; Locals:
|
|
||||||
; r1: x map coord
|
|
||||||
; r2: y map coord
|
|
||||||
; r3: sprite rotation
|
|
||||||
; r4: sprite id
|
|
||||||
; r12: rotation (returned by `sprite and rotation`)
|
|
||||||
; r13: sprite (returned by `get_sprite_id_and_rotation`)
|
|
||||||
; */
|
|
||||||
pub drawing.draw_whole_map:
|
|
||||||
push r1
|
|
||||||
push r2
|
|
||||||
push r3
|
|
||||||
push r4
|
|
||||||
push r12
|
|
||||||
push r13
|
|
||||||
|
|
||||||
mov r1, 0
|
|
||||||
mov r2, 0
|
|
||||||
|
|
||||||
draw_whole_map_loop:
|
|
||||||
call sprite_rotation.get_sprite_id_and_rotation
|
|
||||||
mov r3, r12
|
|
||||||
mov r4, r13
|
|
||||||
call drawing.draw_sprite_at_map_coord
|
|
||||||
add r1, r1, 1
|
|
||||||
cmp r1, map.width
|
|
||||||
jne draw_whole_map_loop
|
|
||||||
mov r1, 0
|
|
||||||
add r2, r2, 1
|
|
||||||
cmp r2, map.height
|
|
||||||
jne draw_whole_map_loop
|
|
||||||
|
|
||||||
pop r13
|
|
||||||
pop r12
|
|
||||||
pop r4
|
|
||||||
pop r3
|
|
||||||
pop r2
|
|
||||||
pop r1
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
; /* Return the top-left pixel address of the tile at the given map coordinates
|
; /* Return the top-left pixel address of the tile at the given map coordinates
|
||||||
|
|
||||||
; Inputs:
|
; Inputs:
|
||||||
@@ -77,7 +30,7 @@ get_tile_address:
|
|||||||
cmp r3, sprites.height
|
cmp r3, sprites.height
|
||||||
jne get_tile_address_offset_per_row_loop
|
jne get_tile_address_offset_per_row_loop
|
||||||
|
|
||||||
add r13, zr, ptr.screen
|
add r13, zr, screen
|
||||||
|
|
||||||
mov r3, 0
|
mov r3, 0
|
||||||
get_tile_address_margin_top_loop:
|
get_tile_address_margin_top_loop:
|
||||||
@@ -144,8 +97,7 @@ get_sprite_address:
|
|||||||
; Inputs:
|
; Inputs:
|
||||||
; r1: map x coord
|
; r1: map x coord
|
||||||
; r2: map y coord
|
; r2: map y coord
|
||||||
; r3: sprite rotation
|
; r3: sprite id
|
||||||
; r4: sprite id
|
|
||||||
|
|
||||||
; Outputs:
|
; Outputs:
|
||||||
|
|
||||||
@@ -158,22 +110,20 @@ pub drawing.draw_sprite_at_map_coord:
|
|||||||
push r1
|
push r1
|
||||||
push r2
|
push r2
|
||||||
push r3
|
push r3
|
||||||
push r4
|
|
||||||
push r13
|
push r13
|
||||||
|
|
||||||
call get_tile_address
|
call get_tile_address
|
||||||
mov r1, r13
|
push r13
|
||||||
push r1
|
|
||||||
|
|
||||||
mov r1, r4
|
mov r1, r3
|
||||||
call get_sprite_address
|
call get_sprite_address
|
||||||
mov r2, r13
|
|
||||||
pop r1
|
|
||||||
|
|
||||||
|
mov r2, r13
|
||||||
|
pop r13
|
||||||
|
mov r1, r13
|
||||||
call draw_sprite
|
call draw_sprite
|
||||||
|
|
||||||
pop r13
|
pop r13
|
||||||
pop r4
|
|
||||||
pop r3
|
pop r3
|
||||||
pop r2
|
pop r2
|
||||||
pop r1
|
pop r1
|
||||||
@@ -184,18 +134,15 @@ pub drawing.draw_sprite_at_map_coord:
|
|||||||
; Inputs:
|
; Inputs:
|
||||||
; r1: screen address
|
; r1: screen address
|
||||||
; r2: sprite address
|
; r2: sprite address
|
||||||
; r3: rotation
|
|
||||||
|
|
||||||
; Outputs:
|
; Outputs:
|
||||||
|
|
||||||
; Locals:
|
; Locals:
|
||||||
; r1: current screen pixel address
|
; r1: current screen pixel address
|
||||||
; r4: x
|
; r2: current sprite pixel address
|
||||||
; r5: y
|
; r3: x
|
||||||
; r6: current sprite pixel address
|
; r4: color
|
||||||
; r7: color
|
; r5: sprite last pixel address + 1
|
||||||
; r8: x increment
|
|
||||||
; r9: y increment
|
|
||||||
; */
|
; */
|
||||||
draw_sprite:
|
draw_sprite:
|
||||||
push r1
|
push r1
|
||||||
@@ -203,67 +150,25 @@ draw_sprite:
|
|||||||
push r3
|
push r3
|
||||||
push r4
|
push r4
|
||||||
push r5
|
push r5
|
||||||
push r6
|
|
||||||
push r7
|
|
||||||
push r8
|
|
||||||
push r9
|
|
||||||
|
|
||||||
mov r6, r2
|
|
||||||
|
|
||||||
; rotation
|
|
||||||
draw_sprite_cmp_rotation_0:
|
|
||||||
cmp r3, sprites.rotation_0
|
|
||||||
jne draw_sprite_cmp_rotation_90
|
|
||||||
mov r8, 1
|
|
||||||
mov r9, 0
|
|
||||||
jmp draw_sprite_loop_init
|
|
||||||
draw_sprite_cmp_rotation_90:
|
|
||||||
cmp r3, sprites.rotation_90
|
|
||||||
jne draw_sprite_cmp_rotation_180
|
|
||||||
add r6, r6, sprites.size
|
|
||||||
sub r6, r6, sprites.width
|
|
||||||
sub r8, zr, sprites.width
|
|
||||||
mov r9, sprites.size
|
|
||||||
add r9, r9, 1
|
|
||||||
jmp draw_sprite_loop_init
|
|
||||||
draw_sprite_cmp_rotation_180:
|
|
||||||
cmp r3, sprites.rotation_180
|
|
||||||
jne draw_sprite_cmp_rotation_270
|
|
||||||
add r6, r6, sprites.size
|
|
||||||
sub r6, r6, 1
|
|
||||||
sub r8, zr, 1
|
|
||||||
mov r9, 0
|
|
||||||
jmp draw_sprite_loop_init
|
|
||||||
draw_sprite_cmp_rotation_270:
|
|
||||||
add r6, r6, sprites.width
|
|
||||||
sub r6, r6, 1
|
|
||||||
mov r8, sprites.width
|
|
||||||
sub r9, zr, sprites.size
|
|
||||||
sub r9, r9, 1
|
|
||||||
|
|
||||||
draw_sprite_loop_init:
|
add r5, r2, sprites.size
|
||||||
mov r4, 0
|
|
||||||
mov r5, 0
|
mov r3, 0
|
||||||
draw_sprite_loop:
|
draw_sprite_loop:
|
||||||
load_8 r7, [r6]
|
load_8 r4, [r2]
|
||||||
store_8 [r1], r7
|
store_8 [r1], r4
|
||||||
add r4, r4, 1
|
|
||||||
add r1, r1, 1
|
add r1, r1, 1
|
||||||
add r6, r6, r8
|
add r2, r2, 1
|
||||||
cmp r4, sprites.width
|
add r3, r3, 1
|
||||||
|
cmp r3, sprites.width
|
||||||
jne draw_sprite_loop
|
jne draw_sprite_loop
|
||||||
mov r4, 0
|
mov r3, 0
|
||||||
add r6, r6, r9
|
|
||||||
add r1, r1, screen.width
|
add r1, r1, screen.width
|
||||||
sub r1, r1, sprites.width
|
sub r1, r1, sprites.width
|
||||||
add r5, r5, 1
|
cmp r5, r2
|
||||||
cmp r5, sprites.width
|
|
||||||
jne draw_sprite_loop
|
jne draw_sprite_loop
|
||||||
|
|
||||||
pop r9
|
|
||||||
pop r8
|
|
||||||
pop r7
|
|
||||||
pop r6
|
|
||||||
pop r5
|
pop r5
|
||||||
pop r4
|
pop r4
|
||||||
pop r3
|
pop r3
|
||||||
|
|||||||
@@ -1,171 +0,0 @@
|
|||||||
include ../consts/offsets
|
|
||||||
include ../consts/map
|
|
||||||
include ../consts/sprites
|
|
||||||
|
|
||||||
; /* Return the sprite id and rotation for the given map coordinates
|
|
||||||
|
|
||||||
; Inputs:
|
|
||||||
; r1: x map coord
|
|
||||||
; r2: y map coord
|
|
||||||
|
|
||||||
; Outputs:
|
|
||||||
; r12: sprite rotation
|
|
||||||
; r13: sprite id
|
|
||||||
|
|
||||||
; Locals:
|
|
||||||
; r3: tile id
|
|
||||||
; r4: map offset
|
|
||||||
; r5: counter
|
|
||||||
; r6: left tile id
|
|
||||||
; r7: up tile id
|
|
||||||
; r8: right tile id
|
|
||||||
; r9: down tile id
|
|
||||||
; */
|
|
||||||
pub sprite_rotation.get_sprite_id_and_rotation:
|
|
||||||
push r1
|
|
||||||
push r2
|
|
||||||
push r3
|
|
||||||
push r4
|
|
||||||
push r5
|
|
||||||
push r6
|
|
||||||
push r7
|
|
||||||
push r8
|
|
||||||
push r9
|
|
||||||
|
|
||||||
add r4, r1, map
|
|
||||||
mov r5, 0
|
|
||||||
get_sprite_id_and_rotation_map_row_loop:
|
|
||||||
cmp r5, r2
|
|
||||||
je get_sprite_id_and_rotation_map_row_loop_end
|
|
||||||
add r4, r4, map.width
|
|
||||||
add r5, r5, 1
|
|
||||||
jmp get_sprite_id_and_rotation_map_row_loop
|
|
||||||
get_sprite_id_and_rotation_map_row_loop_end:
|
|
||||||
|
|
||||||
mov r12, sprites.rotation_0 ; default rotation
|
|
||||||
|
|
||||||
load_8 r3, [r4]
|
|
||||||
lsl r3, r3, 3 ; 2*instruction_size = *8 = <<3
|
|
||||||
add r3, r3, get_sprite_id_and_rotation_jump_table
|
|
||||||
jmp r3
|
|
||||||
|
|
||||||
get_sprite_id_and_rotation_jump_table:
|
|
||||||
; tile_empty
|
|
||||||
mov r13, sprites.empty
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
; tiles_wall
|
|
||||||
jmp get_sprite_id_and_rotation_wall
|
|
||||||
nop
|
|
||||||
; tile_coin
|
|
||||||
mov r13, sprites.coin
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
|
|
||||||
get_sprite_id_and_rotation_wall:
|
|
||||||
mov r6, 0
|
|
||||||
mov r7, 0
|
|
||||||
mov r8, 0
|
|
||||||
mov r9, 0
|
|
||||||
|
|
||||||
get_sprite_id_and_rotation_cmp_left:
|
|
||||||
cmp r1, 0
|
|
||||||
je get_sprite_id_and_rotation_cmp_up
|
|
||||||
sub r4, r4, 1
|
|
||||||
load_8 r6, [r4]
|
|
||||||
add r4, r4, 1
|
|
||||||
get_sprite_id_and_rotation_cmp_up:
|
|
||||||
cmp r2, 0
|
|
||||||
je get_sprite_id_and_rotation_cmp_right
|
|
||||||
sub r4, r4, map.width
|
|
||||||
load_8 r7, [r4]
|
|
||||||
add r4, r4, map.width
|
|
||||||
get_sprite_id_and_rotation_cmp_right:
|
|
||||||
cmp r1, map.max_x
|
|
||||||
je get_sprite_id_and_rotation_cmp_down
|
|
||||||
add r4, r4, 1
|
|
||||||
load_8 r8, [r4]
|
|
||||||
sub r4, r4, 1
|
|
||||||
get_sprite_id_and_rotation_cmp_down:
|
|
||||||
cmp r2, map.max_y
|
|
||||||
je get_sprite_id_and_rotation_check_connections
|
|
||||||
add r4, r4, map.width
|
|
||||||
load_8 r9, [r4]
|
|
||||||
sub r4, r4, map.width
|
|
||||||
|
|
||||||
get_sprite_id_and_rotation_check_connections:
|
|
||||||
get_sprite_id_and_rotation_straight_0:
|
|
||||||
cmp r7, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_straight_90
|
|
||||||
cmp r9, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_straight_90
|
|
||||||
mov r12, sprites.rotation_0
|
|
||||||
mov r13, sprites.wall_straight
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
get_sprite_id_and_rotation_straight_90:
|
|
||||||
cmp r6, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_corner_0
|
|
||||||
cmp r8, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_corner_0
|
|
||||||
mov r12, sprites.rotation_90
|
|
||||||
mov r13, sprites.wall_straight
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
|
|
||||||
get_sprite_id_and_rotation_corner_0:
|
|
||||||
cmp r6, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_corner_180
|
|
||||||
cmp r9, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_corner_90
|
|
||||||
mov r12,sprites.rotation_0
|
|
||||||
mov r13, sprites.wall_corner
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
get_sprite_id_and_rotation_corner_90:
|
|
||||||
cmp r7, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_end_90
|
|
||||||
mov r12,sprites.rotation_90
|
|
||||||
mov r13, sprites.wall_corner
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
get_sprite_id_and_rotation_corner_180:
|
|
||||||
cmp r8, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_end_0
|
|
||||||
cmp r7, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_corner_270
|
|
||||||
mov r12,sprites.rotation_180
|
|
||||||
mov r13, sprites.wall_corner
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
get_sprite_id_and_rotation_corner_270:
|
|
||||||
cmp r9, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_end_270
|
|
||||||
mov r12,sprites.rotation_270
|
|
||||||
mov r13, sprites.wall_corner
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
|
|
||||||
get_sprite_id_and_rotation_end_0:
|
|
||||||
cmp r9, map.tiles.wall
|
|
||||||
jne get_sprite_id_and_rotation_end_180
|
|
||||||
mov r12,sprites.rotation_0
|
|
||||||
mov r13, sprites.wall_end
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
get_sprite_id_and_rotation_end_90:
|
|
||||||
mov r12,sprites.rotation_90
|
|
||||||
mov r13, sprites.wall_end
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
get_sprite_id_and_rotation_end_180:
|
|
||||||
mov r12,sprites.rotation_180
|
|
||||||
mov r13, sprites.wall_end
|
|
||||||
jmp get_sprite_id_and_rotation_return
|
|
||||||
get_sprite_id_and_rotation_end_270:
|
|
||||||
mov r12,sprites.rotation_270
|
|
||||||
mov r13, sprites.wall_end
|
|
||||||
;jmp get_sprite_id_and_rotation_return
|
|
||||||
|
|
||||||
get_sprite_id_and_rotation_return:
|
|
||||||
pop r9
|
|
||||||
pop r8
|
|
||||||
pop r7
|
|
||||||
pop r6
|
|
||||||
pop r5
|
|
||||||
pop r4
|
|
||||||
pop r3
|
|
||||||
pop r2
|
|
||||||
pop r1
|
|
||||||
|
|
||||||
ret
|
|
||||||
31
src/main.asm
31
src/main.asm
@@ -2,8 +2,6 @@ include consts/screen
|
|||||||
|
|
||||||
include init
|
include init
|
||||||
|
|
||||||
call drawing.draw_whole_map
|
|
||||||
|
|
||||||
;
|
;
|
||||||
; State initialization
|
; State initialization
|
||||||
;
|
;
|
||||||
@@ -22,8 +20,7 @@ store_8 [r6], r2
|
|||||||
add r6, r6, 1
|
add r6, r6, 1
|
||||||
store_8 [r6], r5
|
store_8 [r6], r5
|
||||||
|
|
||||||
mov r3, sprites.rotation_0
|
mov r3, sprites.robot
|
||||||
mov r4, sprites.robot
|
|
||||||
call drawing.draw_sprite_at_map_coord
|
call drawing.draw_sprite_at_map_coord
|
||||||
|
|
||||||
; Ghost
|
; Ghost
|
||||||
@@ -41,8 +38,7 @@ store_8 [r6], r2
|
|||||||
add r6, r6, 1
|
add r6, r6, 1
|
||||||
store_8 [r6], r5
|
store_8 [r6], r5
|
||||||
|
|
||||||
mov r3, sprites.rotation_0
|
mov r3, sprites.ghost
|
||||||
mov r4, sprites.ghost
|
|
||||||
call drawing.draw_sprite_at_map_coord
|
call drawing.draw_sprite_at_map_coord
|
||||||
|
|
||||||
;
|
;
|
||||||
@@ -229,15 +225,13 @@ game_loop:
|
|||||||
; clear old position
|
; clear old position
|
||||||
mov r1, r2
|
mov r1, r2
|
||||||
mov r2, r3
|
mov r2, r3
|
||||||
mov r3, sprites.rotation_0
|
mov r3, sprites.empty
|
||||||
mov r4, sprites.empty
|
|
||||||
call drawing.draw_sprite_at_map_coord
|
call drawing.draw_sprite_at_map_coord
|
||||||
|
|
||||||
; draw robot on new position
|
; draw robot on new position
|
||||||
mov r1, r5
|
mov r1, r5
|
||||||
mov r2, r6
|
mov r2, r6
|
||||||
mov r3, sprites.rotation_0
|
mov r3, sprites.robot
|
||||||
mov r4, sprites.robot
|
|
||||||
call drawing.draw_sprite_at_map_coord
|
call drawing.draw_sprite_at_map_coord
|
||||||
|
|
||||||
|
|
||||||
@@ -295,34 +289,27 @@ game_loop:
|
|||||||
store_8 [r1], r8
|
store_8 [r1], r8
|
||||||
|
|
||||||
; get tile at previous position
|
; get tile at previous position
|
||||||
push r2
|
|
||||||
mov r1, r2
|
mov r1, r2
|
||||||
mov r2, r3
|
mov r2, r3
|
||||||
call game.get_tile_address_from_map_coord
|
call game.get_tile_address_from_map_coord
|
||||||
mov r9, r13
|
load_8 r13, [r13]
|
||||||
pop r2
|
|
||||||
|
|
||||||
; draw tile at previous position
|
; draw tile at previous position
|
||||||
load_8 r1, [r9]
|
cmp r13, map.tiles.coin
|
||||||
cmp r1, map.tiles.coin
|
|
||||||
je game_loop_ghost_movement_old_tile_coin
|
je game_loop_ghost_movement_old_tile_coin
|
||||||
; old tile empty
|
; old tile empty
|
||||||
mov r4, sprites.empty
|
mov r3, sprites.empty
|
||||||
jmp game_loop_ghost_movement_draw_old_tile
|
jmp game_loop_ghost_movement_draw_old_tile
|
||||||
game_loop_ghost_movement_old_tile_coin:
|
game_loop_ghost_movement_old_tile_coin:
|
||||||
mov r4, sprites.coin
|
mov r3, sprites.coin
|
||||||
|
|
||||||
game_loop_ghost_movement_draw_old_tile:
|
game_loop_ghost_movement_draw_old_tile:
|
||||||
mov r1, r2
|
|
||||||
mov r2, r3
|
|
||||||
mov r3, sprites.rotation_0
|
|
||||||
call drawing.draw_sprite_at_map_coord
|
call drawing.draw_sprite_at_map_coord
|
||||||
|
|
||||||
; draw ghost on new position
|
; draw ghost on new position
|
||||||
mov r1, r7
|
mov r1, r7
|
||||||
mov r2, r8
|
mov r2, r8
|
||||||
mov r3, sprites.rotation_0
|
mov r3, sprites.ghost
|
||||||
mov r4, sprites.ghost
|
|
||||||
call drawing.draw_sprite_at_map_coord
|
call drawing.draw_sprite_at_map_coord
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|||||||
@@ -2,9 +2,6 @@
|
|||||||
pub ptr.textures_addresses:
|
pub ptr.textures_addresses:
|
||||||
U32 0 ; empty
|
U32 0 ; empty
|
||||||
U32 0 ; placeholder
|
U32 0 ; placeholder
|
||||||
U32 0 ; wall_end
|
|
||||||
U32 0 ; wall_straight
|
|
||||||
U32 0 ; wall_corner
|
|
||||||
U32 0 ; robot
|
U32 0 ; robot
|
||||||
U32 0 ; ghost
|
U32 0 ; ghost
|
||||||
U32 0 ; coin
|
U32 0 ; coin
|
||||||
@@ -31,5 +28,3 @@ U8 0 ; x coord
|
|||||||
U8 0 ; y coord
|
U8 0 ; y coord
|
||||||
U8 0 ; direction
|
U8 0 ; direction
|
||||||
U8 0 ; [padding]
|
U8 0 ; [padding]
|
||||||
|
|
||||||
pub ptr.screen:
|
|
||||||
Reference in New Issue
Block a user