ping-pong game.S
This commit is contained in:
parent
216ee53089
commit
1aa7ead513
@ -6,61 +6,222 @@
|
|||||||
.set noat
|
.set noat
|
||||||
|
|
||||||
|
|
||||||
|
.section .rodata
|
||||||
|
.p2align 2
|
||||||
|
|
||||||
|
pause:
|
||||||
|
.asciz "pause\n"
|
||||||
|
|
||||||
|
|
||||||
.section .bss
|
.section .bss
|
||||||
.p2align 2
|
.p2align 2
|
||||||
|
|
||||||
|
.word 0
|
||||||
|
.word 0
|
||||||
|
kb_buffer:
|
||||||
|
.rept 32
|
||||||
|
.word 0
|
||||||
|
.endr
|
||||||
|
score:
|
||||||
|
.word 0
|
||||||
|
button_state:
|
||||||
|
.word 0
|
||||||
|
.global pause_state
|
||||||
|
pause_state:
|
||||||
|
.word 0
|
||||||
|
|
||||||
|
|
||||||
.section .text
|
.section .text
|
||||||
.p2align 2
|
.p2align 2
|
||||||
|
|
||||||
.global GAME_START
|
.global GAME_START
|
||||||
GAME_START:
|
GAME_START:
|
||||||
|
li t6, 1
|
||||||
|
lui t0, %hi(SWITCH) + 1
|
||||||
|
lui t1, %hi(BUTTON) + 1
|
||||||
|
lw t2, %lo(SWITCH)(t0)
|
||||||
|
beqz t2, 1f
|
||||||
|
lw t3, %lo(BUTTON)(t1)
|
||||||
|
lui t0, %hi(pause_state)
|
||||||
|
li t2, 0x1
|
||||||
|
sw t2, %lo(pause_state)(t0)
|
||||||
|
la a0, UART0
|
||||||
|
la a1, pause
|
||||||
|
jal PRINT
|
||||||
nop
|
nop
|
||||||
|
lui t0, %hi(next_thread)
|
||||||
|
la t1, SUPV_TCB
|
||||||
|
sw t1, %lo(t0)
|
||||||
|
syscall
|
||||||
|
1:
|
||||||
|
lui t0, %hi(button_state)
|
||||||
|
lw t2, %lo(button_state)(t0)
|
||||||
|
xor t2, t2, zero
|
||||||
|
sw t3, %lo(button_state)(t0)
|
||||||
|
and t3, t2, t3
|
||||||
|
andi t0, t3, 0x1
|
||||||
|
andi t1, t3, 0x2
|
||||||
|
slti t2, player1_y, HEIGHT - 1
|
||||||
|
beqz t0, 2f
|
||||||
|
slt t3, t6, player1_y
|
||||||
|
add player1_y, player1_y, t2
|
||||||
|
2:
|
||||||
|
beqz t1, 3f
|
||||||
|
sltu t0, ball_cntx, ball_spx
|
||||||
|
sub player1_y, player1_y, t3
|
||||||
|
3:
|
||||||
|
bnez t0, 4f
|
||||||
|
sltu t1, ball_cnty, ball_spy
|
||||||
|
add ball_x, ball_x, ball_dx
|
||||||
|
li ball_cntx, 0
|
||||||
|
slt t2, t6, ball_x
|
||||||
|
slti t3, ball_x, HEIGHT
|
||||||
|
and t0, t2, t3
|
||||||
|
sll t0, t0, 1
|
||||||
|
addiu t0, t0, -2
|
||||||
|
xor ball_dx, ball_dx, t0
|
||||||
|
4:
|
||||||
|
bnez t1, 5f
|
||||||
nop
|
nop
|
||||||
|
add ball_y, ball_y, ball_dy
|
||||||
|
li ball_cnty, 0
|
||||||
|
sltiu t1, ball_dy, 1
|
||||||
|
slt t2, t6, ball_y
|
||||||
|
slti t3, ball_y, HEIGHT
|
||||||
|
and t0, t2, t3
|
||||||
|
or t0, t1, t0
|
||||||
|
sll t0, t0, 1
|
||||||
|
addiu t0, t0, -2
|
||||||
|
xor ball_dy, ball_dy, t0
|
||||||
|
5:
|
||||||
|
la t0, kb_buffer
|
||||||
|
lw t2, -8(t0)
|
||||||
|
lw t3, -4(t0)
|
||||||
|
beq t2, t3, 8f
|
||||||
|
addiu t1, t0, t2
|
||||||
|
j kb_readbuffer
|
||||||
|
lw t5, 0(t1)
|
||||||
|
kb_readbuffer_loop:
|
||||||
|
andi t2, t2, 0x7c
|
||||||
|
beq t2, t3, 8f
|
||||||
|
addiu t1, t0, t2
|
||||||
|
lw t5, 0(t1)
|
||||||
|
kb_readbuffer:
|
||||||
|
li t1, KB_PAUSE
|
||||||
|
bne t5, t1, 6f
|
||||||
nop
|
nop
|
||||||
|
lui v0, %hi(pause_state)
|
||||||
|
li t1, 0x2
|
||||||
|
sw t1, %lo(pause_state)(v0)
|
||||||
|
la a0, UART0
|
||||||
|
la a1, pause
|
||||||
|
jal PRINT
|
||||||
nop
|
nop
|
||||||
|
lui v0, %hi(next_thread)
|
||||||
|
la t1, SUPV_TCB
|
||||||
|
sw t1, %lo(v0)
|
||||||
|
syscall
|
||||||
|
j kb_readbuffer_loop
|
||||||
|
addiu t2, t2, 4
|
||||||
|
6:
|
||||||
|
li t1, KB_UP
|
||||||
|
bne t5, t1, 7f
|
||||||
|
slti t1, player2_y, HEIGHT - 1
|
||||||
|
beqz t1, kb_readbuffer_loop
|
||||||
|
addiu t2, t2, 4
|
||||||
|
j kb_readbuffer_loop
|
||||||
|
add player2_y, player2_y, t1
|
||||||
|
7:
|
||||||
|
li t1, KB_DOWN
|
||||||
|
bne t5, t1, kb_readbuffer_loop
|
||||||
|
addiu t2, t2, 4
|
||||||
|
slt t1, t6, player2_y
|
||||||
|
beqz t1, kb_readbuffer_loop
|
||||||
nop
|
nop
|
||||||
nop
|
j kb_readbuffer_loop
|
||||||
nop
|
sub player2_y, player2_y, t1
|
||||||
nop
|
8:
|
||||||
|
sw t2, -8(t0)
|
||||||
|
// TODO
|
||||||
j GAME_START
|
j GAME_START
|
||||||
nop
|
nop
|
||||||
|
|
||||||
.global GAME_TIMER
|
.global GAME_TIMER
|
||||||
GAME_TIMER:
|
GAME_TIMER:
|
||||||
j RESTART
|
addi sp, sp, -16
|
||||||
|
sw ra, 12(sp)
|
||||||
|
sw a1, 8(sp)
|
||||||
|
sw a0, 4(sp)
|
||||||
|
sw v0, 0(sp)
|
||||||
|
addiu ball_cntx, ball_cntx, 1
|
||||||
|
addiu ball_cnty, ball_cnty, 1
|
||||||
|
la a0, UART0
|
||||||
|
ori a1, player1_y, 0x80
|
||||||
|
jal WRITESERIAL
|
||||||
nop
|
nop
|
||||||
|
ori a1, player2_y, 0x80
|
||||||
.global GAME_KB0
|
jal WRITESERIAL
|
||||||
GAME_KB0:
|
|
||||||
j RESTART
|
|
||||||
nop
|
nop
|
||||||
|
ori a1, ball_x, 0x80
|
||||||
|
jal WRITESERIAL
|
||||||
|
nop
|
||||||
|
ori a1, ball_y, 0x80
|
||||||
|
jal WRITESERIAL
|
||||||
|
nop
|
||||||
|
li a1, 0x0A // '\n'
|
||||||
|
jal WRITESERIAL
|
||||||
|
nop
|
||||||
|
mtc0 zero, CP0_COUNT
|
||||||
|
lw v0, 0(sp)
|
||||||
|
lw a0, 4(sp)
|
||||||
|
lw a1, 8(sp)
|
||||||
|
lw ra, 12(sp)
|
||||||
|
j RESTART
|
||||||
|
addi sp, sp, 16
|
||||||
|
|
||||||
.global GAME_KB1
|
.global GAME_KB1
|
||||||
GAME_KB1:
|
GAME_KB1:
|
||||||
addi sp, sp, -16
|
addi sp, sp, -24
|
||||||
sw ra, 12(sp)
|
sw ra, 20(sp)
|
||||||
|
sw t1, 16(sp)
|
||||||
|
sw t0, 12(sp)
|
||||||
sw a0, 8(sp)
|
sw a0, 8(sp)
|
||||||
sw v1, 4(sp)
|
sw v1, 4(sp)
|
||||||
sw v0, 0(sp)
|
sw v0, 0(sp)
|
||||||
la k0, RESTART
|
|
||||||
|
|
||||||
la a0, UART1
|
la a0, UART1
|
||||||
0:
|
la t0, kb_buffer
|
||||||
|
lw k0, -8(t0)
|
||||||
|
lw k1, -4(t0)
|
||||||
|
kb_writebuffer:
|
||||||
|
addiu k1, k1, 4
|
||||||
|
andi k1, k1, 0x7c
|
||||||
|
beq k0, k1, 1f
|
||||||
|
nop
|
||||||
jal TRYREADSERIAL
|
jal TRYREADSERIAL
|
||||||
nop
|
nop
|
||||||
beqz v1, 1f
|
beqz v1, 2f
|
||||||
nop
|
addiu t1, t0, k0
|
||||||
|
sw v0, 0(t1)
|
||||||
j 0b
|
j kb_writebuffer
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
|
jal TRYREADSERIAL
|
||||||
|
nop
|
||||||
|
bnez v1, 1b
|
||||||
|
nop
|
||||||
|
2:
|
||||||
|
addiu k1, k1, -4
|
||||||
lw v0, 0(sp)
|
lw v0, 0(sp)
|
||||||
|
andi k1, k1, 0x7c
|
||||||
lw v1, 4(sp)
|
lw v1, 4(sp)
|
||||||
|
sw k1, -4(t0)
|
||||||
lw a0, 8(sp)
|
lw a0, 8(sp)
|
||||||
lw ra, 12(sp)
|
lw t0, 12(sp)
|
||||||
jr k0
|
lw t1, 16(sp)
|
||||||
addi sp, sp, 16
|
lw ra, 20(sp)
|
||||||
|
j RESTART
|
||||||
|
addi sp, sp, 24
|
||||||
|
|
||||||
|
|
||||||
.set reorder
|
.set reorder
|
||||||
|
@ -5,6 +5,9 @@ OUTPUT_FORMAT("elf32-tradlittlemips")
|
|||||||
|
|
||||||
PROVIDE(SPVR_STACK_INIT = 0x807E0000);
|
PROVIDE(SPVR_STACK_INIT = 0x807E0000);
|
||||||
PROVIDE(GAME_STACK_INIT = 0x807F0000);
|
PROVIDE(GAME_STACK_INIT = 0x807F0000);
|
||||||
|
PROVIDE(SEG7 = 0xBFAFF010);
|
||||||
|
PROVIDE(SWITCH = 0xBFAFF020);
|
||||||
|
PROVIDE(BUTTON = 0xBFAFF028);
|
||||||
PROVIDE(UART0 = 0xBFE40000);
|
PROVIDE(UART0 = 0xBFE40000);
|
||||||
PROVIDE(UART1 = 0xBFE40010);
|
PROVIDE(UART1 = 0xBFE40010);
|
||||||
SECTIONS
|
SECTIONS
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include <regdef.h>
|
#include <regdef.h>
|
||||||
#include <mipsregs.h>
|
#include <mipsregs.h>
|
||||||
#include <exception.h>
|
#include <exception.h>
|
||||||
|
#include <game.h>
|
||||||
|
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.set noat
|
.set noat
|
||||||
@ -9,8 +10,8 @@
|
|||||||
.section .rodata
|
.section .rodata
|
||||||
.p2align 2
|
.p2align 2
|
||||||
|
|
||||||
pingpong_hello:
|
pingpong:
|
||||||
.asciz "Ping Pong."
|
.asciz "Ping Pong.\n"
|
||||||
|
|
||||||
|
|
||||||
.section .data
|
.section .data
|
||||||
@ -78,17 +79,9 @@ GAME_TCB:
|
|||||||
.word DEFAULT_INT_HANDLER
|
.word DEFAULT_INT_HANDLER
|
||||||
.word DEFAULT_INT_HANDLER
|
.word DEFAULT_INT_HANDLER
|
||||||
.word DEFAULT_INT_HANDLER
|
.word DEFAULT_INT_HANDLER
|
||||||
|
.word GAME_KB1
|
||||||
.word DEFAULT_INT_HANDLER
|
.word DEFAULT_INT_HANDLER
|
||||||
.word DEFAULT_INT_HANDLER
|
.word GAME_TIMER
|
||||||
.word DEFAULT_INT_HANDLER
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
|
||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
@ -103,8 +96,27 @@ GAME_TCB:
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
// random
|
||||||
|
.word 0xBFC00380
|
||||||
|
// player1
|
||||||
|
.word center_y
|
||||||
|
// player2
|
||||||
|
.word center_y
|
||||||
|
// ball_x
|
||||||
|
.word center_x
|
||||||
|
// ball_y
|
||||||
|
.word center_y
|
||||||
|
// ball_cntx
|
||||||
.word 0
|
.word 0
|
||||||
|
// ball_cnty
|
||||||
.word 0
|
.word 0
|
||||||
|
// ball_spx
|
||||||
|
.word x_sp3
|
||||||
|
// ball_spy
|
||||||
|
.word y_sp3
|
||||||
|
// ball_dx
|
||||||
|
.word -1
|
||||||
|
// ball_dy
|
||||||
.word 0
|
.word 0
|
||||||
// gp
|
// gp
|
||||||
.word 0
|
.word 0
|
||||||
@ -117,9 +129,9 @@ GAME_TCB:
|
|||||||
// Count
|
// Count
|
||||||
.word 0
|
.word 0
|
||||||
// Compare
|
// Compare
|
||||||
.word 33000000 / 2
|
.word 16500000 / fps
|
||||||
// STATUS
|
// STATUS
|
||||||
.word STATUSF_IP7 | STATUSF_IP5 | STATUSF_IP4 | ST0_IE
|
.word IE_IRQ5 | IE_IRQ3 | IE_IRQ2 | ST0_IE
|
||||||
// EPC
|
// EPC
|
||||||
.word GAME_START
|
.word GAME_START
|
||||||
|
|
||||||
@ -178,7 +190,7 @@ bss_init_done:
|
|||||||
sb t1, 2(t0) // FIFO
|
sb t1, 2(t0) // FIFO
|
||||||
li t1, 0x80 // CFCR_DLAB, divisor latch
|
li t1, 0x80 // CFCR_DLAB, divisor latch
|
||||||
sb t1, 3(t0) // CFCR
|
sb t1, 3(t0) // CFCR
|
||||||
li t1, 0x23 // modify Baud 57600
|
li t1, 0x1b // modify Baud 76388.89
|
||||||
sb t1, 0(t0) // DATA
|
sb t1, 0(t0) // DATA
|
||||||
srl t1, 8
|
srl t1, 8
|
||||||
sb t1, 1(t0) // IER
|
sb t1, 1(t0) // IER
|
||||||
@ -191,14 +203,9 @@ bss_init_done:
|
|||||||
li t1, 0x1 // IRxE
|
li t1, 0x1 // IRxE
|
||||||
sb t1, 1(t0) // IER
|
sb t1, 1(t0) // IER
|
||||||
|
|
||||||
la s0, pingpong_hello
|
|
||||||
la a0, UART0
|
la a0, UART0
|
||||||
lb a1, 0(s0)
|
la a1, pingpong
|
||||||
0:
|
jal PRINT
|
||||||
jal WRITESERIAL
|
|
||||||
addiu s0, s0, 0x1
|
|
||||||
lb a0, 0(s0)
|
|
||||||
bne a0, zero, 0b
|
|
||||||
nop
|
nop
|
||||||
|
|
||||||
j RESTART_LOAD
|
j RESTART_LOAD
|
||||||
|
@ -19,13 +19,13 @@
|
|||||||
sw k1, TF_STATUS(k0)
|
sw k1, TF_STATUS(k0)
|
||||||
|
|
||||||
mfc0 k0, CP0_CAUSE
|
mfc0 k0, CP0_CAUSE
|
||||||
andi k1, k0, 0x00FC
|
andi k1, k0, CAUSEF_EXCCODE
|
||||||
bnez k1, SYSCALL
|
bnez k1, SYSCALL
|
||||||
nop
|
nop
|
||||||
mfc0 k1, CP0_STATUS
|
mfc0 k1, CP0_STATUS
|
||||||
and k0, k0, k1
|
and k0, k0, k1
|
||||||
7:
|
7:
|
||||||
andi k1, k0, CAUSEF_IP7
|
andi k1, k0, C_IRQ5
|
||||||
beqz k1, 6f
|
beqz k1, 6f
|
||||||
nop
|
nop
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -34,7 +34,7 @@
|
|||||||
jr k1
|
jr k1
|
||||||
nop
|
nop
|
||||||
6:
|
6:
|
||||||
andi k1, k0, CAUSEF_IP6
|
andi k1, k0, C_IRQ4
|
||||||
beqz k1, 5f
|
beqz k1, 5f
|
||||||
nop
|
nop
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -43,7 +43,7 @@
|
|||||||
jr k1
|
jr k1
|
||||||
nop
|
nop
|
||||||
5:
|
5:
|
||||||
andi k1, k0, CAUSEF_IP5
|
andi k1, k0, C_IRQ3
|
||||||
beqz k1, 4f
|
beqz k1, 4f
|
||||||
nop
|
nop
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -52,7 +52,7 @@
|
|||||||
jr k1
|
jr k1
|
||||||
nop
|
nop
|
||||||
4:
|
4:
|
||||||
andi k1, k0, CAUSEF_IP4
|
andi k1, k0, C_IRQ2
|
||||||
beqz k1, 3f
|
beqz k1, 3f
|
||||||
nop
|
nop
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -61,7 +61,7 @@
|
|||||||
jr k1
|
jr k1
|
||||||
nop
|
nop
|
||||||
3:
|
3:
|
||||||
andi k1, k0, CAUSEF_IP3
|
andi k1, k0, C_IRQ1
|
||||||
beqz k1, 2f
|
beqz k1, 2f
|
||||||
nop
|
nop
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -70,7 +70,7 @@
|
|||||||
jr k1
|
jr k1
|
||||||
nop
|
nop
|
||||||
2:
|
2:
|
||||||
andi k1, k0, CAUSEF_IP2
|
andi k1, k0, C_IRQ0
|
||||||
beqz k1, 1f
|
beqz k1, 1f
|
||||||
nop
|
nop
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -79,7 +79,7 @@
|
|||||||
jr k1
|
jr k1
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
andi k1, k0, CAUSEF_IP1
|
andi k1, k0, C_SW1
|
||||||
beqz k1, 0f
|
beqz k1, 0f
|
||||||
nop
|
nop
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -102,11 +102,6 @@ SYSCALL:
|
|||||||
addiu k1, k1, 0x4
|
addiu k1, k1, 0x4
|
||||||
mtc0 k1, CP0_EPC
|
mtc0 k1, CP0_EPC
|
||||||
|
|
||||||
.global DEFAULT_INT_HANDLER
|
|
||||||
DEFAULT_INT_HANDLER:
|
|
||||||
j RESTART
|
|
||||||
nop
|
|
||||||
|
|
||||||
.global RESTART_SAVE
|
.global RESTART_SAVE
|
||||||
RESTART_SAVE:
|
RESTART_SAVE:
|
||||||
lui k0, %hi(current_thread)
|
lui k0, %hi(current_thread)
|
||||||
@ -198,6 +193,11 @@ RESTART:
|
|||||||
j RESTART
|
j RESTART
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
.global DEFAULT_INT_HANDLER
|
||||||
|
DEFAULT_INT_HANDLER:
|
||||||
|
j RESTART
|
||||||
|
nop
|
||||||
|
|
||||||
|
|
||||||
.set reorder
|
.set reorder
|
||||||
.set at
|
.set at
|
||||||
|
@ -10,20 +10,33 @@
|
|||||||
.global WRITESERIAL
|
.global WRITESERIAL
|
||||||
WRITESERIAL:
|
WRITESERIAL:
|
||||||
1:
|
1:
|
||||||
lb t0, 5(a0)
|
lb v0, 5(a0)
|
||||||
andi t0, t0, 0x20
|
andi v0, v0, 0x20
|
||||||
beqz t0, 1b
|
beqz v0, 1b
|
||||||
nop
|
nop
|
||||||
sb a1, 0(a0)
|
sb a1, 0(a0)
|
||||||
jr ra
|
jr ra
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
.global PRINT
|
||||||
|
PRINT:
|
||||||
|
move v1, a1
|
||||||
|
lb a1, 0(a1)
|
||||||
|
1:
|
||||||
|
jal WRITESERIAL
|
||||||
|
addiu v1, v1, 0x1
|
||||||
|
lb a1, 0(v1)
|
||||||
|
bne a1, zero, 1b
|
||||||
|
nop
|
||||||
|
jr ra
|
||||||
|
nop
|
||||||
|
|
||||||
.global READSERIAL
|
.global READSERIAL
|
||||||
READSERIAL:
|
READSERIAL:
|
||||||
1:
|
1:
|
||||||
lb t0, 5(a0)
|
lb v0, 5(a0)
|
||||||
andi t0, t0, 0x01
|
andi v0, v0, 0x01
|
||||||
beqz t0, 1b
|
beqz v0, 1b
|
||||||
nop
|
nop
|
||||||
lb v0, 0(a0)
|
lb v0, 0(a0)
|
||||||
jr ra
|
jr ra
|
||||||
|
@ -8,4 +8,38 @@
|
|||||||
#define KB_SCORE 0xEB
|
#define KB_SCORE 0xEB
|
||||||
#define KB_RESET 0xF3
|
#define KB_RESET 0xF3
|
||||||
|
|
||||||
|
#define fps 30
|
||||||
|
|
||||||
|
#define x_sp0 10
|
||||||
|
#define x_sp1 20
|
||||||
|
#define x_sp2 30
|
||||||
|
#define x_sp3 45
|
||||||
|
#define x_sp4 60
|
||||||
|
|
||||||
|
#define y_sp0 30
|
||||||
|
#define y_sp1 60
|
||||||
|
#define y_sp2 90
|
||||||
|
#define y_sp3 120
|
||||||
|
#define y_sp4 150
|
||||||
|
|
||||||
|
#define WIDTH 81
|
||||||
|
#define HEIGHT 25
|
||||||
|
#define center_x 40
|
||||||
|
#define center_y 13
|
||||||
|
|
||||||
|
#define player1_x 5
|
||||||
|
#define player2_x (WIDTH - player1_x + 1)
|
||||||
|
|
||||||
|
#define random $15
|
||||||
|
#define player1_y $16
|
||||||
|
#define player2_y $17
|
||||||
|
#define ball_x $18
|
||||||
|
#define ball_y $19
|
||||||
|
#define ball_cntx $20
|
||||||
|
#define ball_cnty $21
|
||||||
|
#define ball_spx $22
|
||||||
|
#define ball_spy $23
|
||||||
|
#define ball_dx $24
|
||||||
|
#define ball_dy $25
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user