We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!
Vex Block
Jump to navigation
Jump to search
Cleanup > To do
Games > Games by content > Games with uncompiled source code
Games > Games by developer > Games developed by Sachen
Games > Games by platform > Game Boy games
Games > Games by publisher > Games published by Commin
Games > Games by release date > Games released in 1993
Games > Unlicensed games > Unlicensed Game Boy games
| Vex Block |
|---|
|
Developer:
Sachen
|
Vex Block is a game by Sachen, under their moniker Commin. It is a clone of the arcade game Klax, which also received a Game Boy port, rendering this version useless. Beware the invisible blocks that make it impossible to complete the game!
| To do: Rip everything is beyond these invisible blocks. |
Source Code
There is uncompiled source code located in the game's ROM, beginning at hex address 51FF:
LD A,0
STA GAME_STAGE
JP START_SUB
CACULATE_MAKE_GAME:
LDA STAGE_OVER_DELAY
CP 0
JR Z,CAL_TOTAL_MAKE
JP OVER_MAKE
CAL_TOTAL_MAKE:
LDA STAGE_STATUS+0
CP 3
JR Z,CACULATE_HORIZON
CP 2
JR Z,CACULATE_DIAGON
CP 1
JR Z,CACULATE_CONTING
CACULATE_POINT:
LDA STAGE_STATUS+1
AND 0FH
STA TEMP4
LDA STAGE_STATUS+1
SWAPA
AND 0FH
STA TEMP5
LD HL,TEMP5
LDA STAGE_SCORE+3 ;SECOND VAL.
LD B,A
LDA TEMP4
SUB A,B
JR NC,PASS_INC
LD A,(HL)
CP 0
JR Z,OVER_SCORE
DEC (HL)
LDA TEMP4
ADD A,10
SUB A,B
PASS_INC:
AND 00001111B
STA TEMP4
LDA STAGE_SCORE+2 ; FIRST VAL.
LD B,A
LDA TEMP5
SUB A,B
BIT 7,A
JR Z,PASS_LAST
OVER_SCORE:
LD A,0
STA STAGE_STATUS+2
JR SET_OVER_DELAY
PASS_LAST:
AND 00001111B
SWAPA
LD HL,TEMP4
OR (HL)
JR Z,OVER_SCORE
STA STAGE_STATUS+2
RET
CACULATE_CONTING:
LDA STAGE_CONTING
LD B,A
CALL CACULATE_MAKE_SUBX
RET NZ
JR SET_OVER_DELAY
CACULATE_DIAGON:
LDA STAGE_DIAGON
LD B,A
CALL CACULATE_MAKE_SUBX
RET NZ
JR SET_OVER_DELAY
CACULATE_HORIZON:
LDA STAGE_HORIZON
LD B,A
CALL CACULATE_MAKE_SUBX
RET NZ
SET_OVER_DELAY:
LD A,20H
STA STAGE_OVER_DELAY
RET
CACULATE_MAKE_SUBX:
LDA STAGE_STATUS+1;CURRENT.
SUB B
STA STAGE_STATUS+2
RET
POINT_WORD: ;SCORE NUMBER.
DB 'YOU MUST',RTN
DB 'GET SCORE',RTN
DB 'TO PASS THIS STAGE!',END
CONTING_WORD:
DB 'YOU MUST',RTN
DB 'MAKE POINTS',RTN
DB 'TO PASS THIS STAGE!',END
DIAGON_WORD:
DB 'YOU MUST',RTN
DB 'GET DIAGONALS',RTN
DB 'TO PASS THIS STAGE!',END
HORIZON_WORD:
DB 'YOU MUST',RTN
DB 'GET HORIZONALS',RTN
DB 'TO PASS THIS STAGE!',END
ZERO_WORD:
DB '0000',0
PR_CONDICTION:
LDA STAGE_STATUS+0
CP 3
JP Z,PR_HORIZON
CP 2
JR Z,PR_DIAGON
CP 1
JR Z,PR_CONTING
PR_POINT:
LD A,0
STA CURSOR+0
LD A,10
STA CURSOR+1
LD HL,POINT_WORD
CALL WPRINT
LD A,6
STA CURSOR+0
LD A,11
STA CURSOR+1
LD HL,ZERO_WORD
CALL WPRINT
mSETHV 4,11
LDA STAGE_STATUS+1
PR_POINT_SUBX:
PUSH AF
SWAPA
CALL PRHEX
POP AF
JP PRHEX
PR_CONTING:
LD A,0
STA CURSOR+0
LD A,10
STA CURSOR+1
LD HL,CONTING_WORD
CALL WPRINT
mSETHV 5,11
LDA STAGE_STATUS+1
CALL HTOD
JP PRBYT
PR_DIAGON:
LD A,0
STA CURSOR+0
LD A,10
STA CURSOR+1
LD HL,DIAGON_WORD
CALL WPRINT
mSETHV 4,11
LDA STAGE_STATUS+1
CALL HTOD
JP PRBYT
PR_HORIZON:
LD A,0
STA CURSOR+0
LD A,10
STA CURSOR+1
LD HL,HORIZON_WORD
CALL WPRINT
mSETHV 4,11
LDA STAGE_STATUS+1
CALL HTOD
JP PRBYT
PRINT_STATUS:
LD A,17
STA CURSOR+0
LD A,7
STA CURSOR+1
LDA STAGE_STATUS+0
CP 3
JR Z,PR_HORIZON_PIC
CP 2
JR Z,PR_DIAGON_PIC
CP 1
JR Z,PR_CONTING_PIC
PR_POINT_PIC:
LD HL,POINT_PIC
JP WPRINT
PR_CONTING_PIC:
LD HL,MAKE_PIC
JP WPRINT
PR_DIAGON_PIC:
LD HL,DIAGON_PIC
JP WPRINT
PR_HORIZON_PIC:
LD HL,HORIZON_PIC
JP WPRINT
PRINT_STAGE_STATUS:
LDA STAGE_STATUS+0
CP 0
JR NZ,PR_NUMBER
PR_SCORE:
mSETHV 17,10
LDA STAGE_STATUS+2
CALL PR_POINT_SUBX
LD A,'0'
CALL PRASC
mSETHV 18,11
LD A,'K'
JP PRASC
PR_NUMBER:
mSETHV 17,10
LDA STAGE_STATUS+2
CALL HTOD
PR_NUMBER_SUB1:
CP 10
JR NC,PR_NUMBER_SUB2
PUSH AF
LD A,' '
CALL PRASC
POP AF
JP PRHEX
PR_NUMBER_SUB2:
JP PRBYT
;
; CACULATE FREE SPACE WHEN OVER STAGE.
;
OVER_MAKE:
LDA NEW_BLOCK_FLAG
CP -1
RET Z
LD HL,STAGE_OVER_DELAY
DEC (HL)
RET NZ
CALL CLSPR
LD A,3
STA MUSIC_NO
CALL INIT_MUSIC
LD A,3*60
CALL WAITSEC
CALL CACULATE_FREE_SPACE
LD A,4*60
CALL WAITSEC
POP AF
JP RE_START_POINT
CLEAR_TOTAL_SCORE:
LD HL,TOTAL_SCORE
LD E,8
LD A,0
LOOP DEFL $
LMAI
DEC E
JR NZ,LOOP
RET
LEVEL_BLOCK_VAL:
DB 5,8,13
SET_BLOCK_LEVEL:
LD HL,LEVEL_BLOCK_VAL
LDA GAME_LEVEL+0
LOOP DEFL $
DEC A
CP -1
JR Z,SET_LEVEL_BLOCK
INC HL
JR LOOP
SET_LEVEL_BLOCK:
LD A,(HL)
STA GAME_LEVEL+1
RET
CACULATE_FREE_SPACE:
LD HL,BLOCK_BOX
LD B,2 ; X
LD C,12 ; Y
LD E,7 ; X
LD D,5 ; Y
FREE_SPACE_SUB1:
LD A,B
STA CURSOR+0
LD A,C
STA CURSOR+1
CALL SETHV
LOOP DEFL $
LAMI
PUSH HL
PUSH BC
PUSH DE
CP -1
JR Z,PASS_PRINT_1
CALL SEARCH_BLOCK_PIC
LAMI
CALL PRASC
LAMI
CALL PRASC
JR PASS_PRINT_2
FREE_SCORE:
DB 0,0,0,0,0,0,3,0
PASS_PRINT_1:
LD A,0FAH ;
CALL PRASC ; SAMPLE PICTURE.
LD A,074H ;
CALL PRASC ;
LD BC,FREE_SCORE+7
LD HL,TOTAL_SCORE+7
CALL ADD_SCORE_TO_SCORE
LDA SCRADDR+0
STA TEMP7
LDA SCRADDR+1
STA TEMP6
CALL PRINT_SCORE
LDA TEMP6
STA SCRADDR+1
LDA TEMP7
STA SCRADDR+0
LD A,7
STA EFFECT1
LD A,15*1
CALL WAITSEC
PASS_PRINT_2:
POP DE
POP BC
POP HL
DEC E
JR NZ,LOOP
INC C
LD E,7
DEC D
JR NZ,FREE_SPACE_SUB1
RET
CACULATE_HARD:
LDA TEMP_LEVEL
CP 15
RET C
LD A,0
STA TEMP_LEVEL
LDA GAME_LEVEL+0
CP 2
RET Z
INC A
STA GAME_LEVEL+0
JP SET_BLOCK_LEVEL
Cleanup > To do
Games > Games by content > Games with uncompiled source code
Games > Games by developer > Games developed by Sachen
Games > Games by platform > Game Boy games
Games > Games by publisher > Games published by Commin
Games > Games by release date > Games released in 1993
Games > Unlicensed games > Unlicensed Game Boy games
