81 lines
2.5 KiB
OpenEdge ABL
81 lines
2.5 KiB
OpenEdge ABL
; spawn new tetromino
|
|
spawnTetromino LD tetrominoNext ; index points to 2byte entries so *2
|
|
ANDI 0x07
|
|
LSLW
|
|
STW index
|
|
|
|
LD tetrominoNext ; rotation points to 16byte entries so *16
|
|
ANDI 0x30
|
|
STW rotation
|
|
PUSH
|
|
CALL updateTetromino
|
|
POP
|
|
|
|
LDWI 0xFF ; y = -1
|
|
STW ty
|
|
|
|
; this will break if you modify TETRIS_XEXT, (xTetris)
|
|
LDWI xTetris ; approximates x = rand() % (TETRIS_XEXT - w - 1) - u;
|
|
SUBW tw
|
|
SUBI 0x01
|
|
STW scratch
|
|
LD giga_rand1 ; rand = {1..8}
|
|
ANDI 0x07
|
|
ADDI 0x01
|
|
STW rand
|
|
SUBW scratch
|
|
STW scratch ; scratch = rand - (TETRIS_XEXT - w - 1)
|
|
BLE spawnT_tx ; if(rand <= (TETRIS_XEXT - w - 1)) goto spawnT_tx
|
|
|
|
LDW rand ; rand = rand - scratch
|
|
SUBW scratch
|
|
STW rand
|
|
spawnT_tx LDW rand ; tx = rand - tu
|
|
SUBW tu
|
|
STW tx
|
|
|
|
PUSH
|
|
CALL checkLines
|
|
POP
|
|
|
|
PUSH
|
|
CALL eraseTrCorner
|
|
POP
|
|
PUSH
|
|
CALL nextTetromino
|
|
POP
|
|
PUSH
|
|
CALL drawNextTet
|
|
POP
|
|
|
|
LD numLines
|
|
BNE spawnT_score
|
|
RET
|
|
|
|
spawnT_score PUSH
|
|
CALL updateScore
|
|
POP
|
|
PUSH
|
|
CALL updateHighScore
|
|
POP
|
|
RET
|
|
|
|
|
|
updateTetromino GetTetrominoBase index rotation
|
|
GetTetrominoData 0x02 tw
|
|
GetTetrominoData 0x03 th
|
|
GetTetrominoData 0x04 tu
|
|
GetTetrominoData 0x05 tv
|
|
RET
|
|
|
|
nextTetromino LD giga_rand1 ; setup next tetromino
|
|
ST tetrominoNext
|
|
ANDI 0x07
|
|
LSLW
|
|
STW indexNext
|
|
|
|
LD tetrominoNext ; rotation points to 16byte entries so *16
|
|
ANDI 0x30
|
|
STW rotationNext
|
|
RET
|