protocrystal

Picross

There was going to be a Picross minigame, as we saw in the Space World '97 demo ROMs. A separate Pokémon Picross game was also planned but canceled. The game's actual code is not available—its files, like piku.h, were completely removed—but should be possible to disassemble in pokegold-spaceworld.

Some unidentified labels in pokecrystal have to do with Picross.

Disasm Name Original Name Disasm File Original File Details
add_special ClearBGPalettesBufferScreen PRG_PlayPicross data/special_pointers.asm EVENT.DMG
ClearBGPalettesBufferScreen PlayPicross engine/events/specials.asm EVENT.DMG

This commented code in EVENT.DMG (corresponding to ClearBGPalettesBufferScreen in engine/events/specials.asm) would have called the Picross game. (The implementation of PikuGame was completely removed.)


;------------------------------------------------
; ピクロス
;------------------------------------------------
PlayPicross:
	call	pal_off_put_wait

	extern	bg_saver
	call	bg_saver

;	extern	PikuGame
;	BCALL	G_BANK38,PikuGame

	ret

This debug script in D_EVENT.DMG (after db 0 ; unused in engine/events/mom_phone.asm) would have tested the minigames including Picross.


  ifn	1

TestEvMiniGame:
	db	MSG_MODE_START

	db	E_PUSH_WIN
	dw	MiniGameSelWin

loop$:
	db	E_MSG
	dw	sel_msg$

	db	E_SELECT_WIN
	db	IF_JUMP,0
	dw	end$

	db	E_CALL
	dw	blanch_sub$

	db	E_JUMP
	dw	loop$

end$:
	db	E_POP_WIN
	db	MSG_MODE_END
	db	E_END

blanch_sub$:
	db	IF_JUMP,1
	dw	pazzle$
	db	IF_JUMP,2
	dw	slot$
	db	IF_JUMP,3
	dw	tranp$
	db	IF_JUMP,4
	dw	pairgame$
	db	IF_JUMP,5
	dw	picross$
	db	E_END
pazzle$:
	db	E_ID_PROGRAM
	dw	PRG_PlayPazzle
	db	E_END
slot$:
	db	E_ID_PROGRAM
	dw	PRG_PlaySlot
	db	E_END
tranp$:
	db	E_ID_PROGRAM
	dw	PRG_PlayTranp
	db	E_END
pairgame$:
	db	E_ID_PROGRAM
	dw	PRG_PlayPairGame
	db	E_END
picross$:
	db	E_ID_PROGRAM
	dw	PRG_PlayPicross
	db	E_RECOVER_MAP_DATA
	db	WIN_MODE_START
	db	E_END

sel_msg$:
	extern	sel_msg_016_D_event
	db	I_MSG2
	dw	sel_msg_016_D_event
	db	I_MSG2BNK0	;{mv_msgツール挿入 バンク#}
	db	EOM	;{mv_msgツール挿入}


MiniGameSelWin:
	db	WIN_SV_MODE
	db	0,0,12,10
	dw	content$
	db	1

content$:
	db	SEL_MODE
	db	5
	db	n1@,n5@,pa__,zu__,ru__,EOM
	db	su__,ro__,ttu__,to__,ma__,si__,n__,EOM
	db	po__,bou@,ka__,bou@,ge__,bou@,mu__,EOM
	db	pe__,a__,ge__,bou@,mu__,EOM
	db	pi__,ku__,ro__,su__,EOM

  endif

This commented data in EX_MOVE.DMG would have defined parts of the sprite animations for Picross.

The commented missing header file:


;	include	piku.h

The commented EXActorHeader data (corresponding to SpriteAnimSeqData in data/sprite_anims/sequences.asm):


EXActorHeader:
	ef_initequ

	[snip]

;	ef_equ_g	PikuGameActNo		;Cursor(Picros)
;	db	PikuGameAnmNo
;	db	EXPikuGameNo
;	db	EXPikuGameOBJNo

;	ef_equ_g	PikuAttackActNo		;Attack Effect(Picros)
;	db	PikuAttackAnmNo
;	db	EXMoveStopNo
;	db	EXPikuGameOBJNo

;	ef_equ_g	PIKU_MineActNo		;Mine(Picros)
;	db	PikuMine1AnmNo
;	db	EXPikuMineNo
;	db	OBJ_OPOBJ2No

The commented MoveTable data (corresponding to SpriteAnimSeqData in data/sprite_anims/sequences.asm):


MoveTable$:
	ef_initndw
	ef_ndw_g	MoveStop,EXMoveStopNo
	[snip]
;	ef_ndw		PikuGameOBJ,EXPikuGameNo
;	ef_ndw		PikuMineOBJ,EXPikuMineNo

 ifn 0
;-------------------------------;
;	Piku Game		;
;-------------------------------;
PikuGameOBJ:
	ld	hl,PIKU_CONT_STATUS
	ld	a,(hl)
	and	BT_U
	jr	nz,up$
	ld	a,(hl)
	and	BT_D
	jr	nz,down$
	ld	a,(hl)
	and	BT_L
	jr	nz,left$
	ld	a,(hl)
	and	BT_R
	jr	nz,right$
	ret
up$:
	E_HL	EX_ACTOR_Y
	ld	a,(hl)
	cp	40h
	ret	z
	sub	6
	jr	ret$
down$:
	E_HL	EX_ACTOR_Y
	ld	a,(hl)
	cp	9ah
	ret	z
	add	a,6
	jr	ret$
left$:
	E_HL	EX_ACTOR_X
	ld	a,(hl)
	cp	40h
	ret	z
	sub	6
	jr	ret$
right$:
	E_HL	EX_ACTOR_X
	ld	a,(hl)
	cp	09ah
	ret	z
	add	a,6
	jr	ret$
ret$:
	ld	(hl),a

	ld	a,8
	ld	(PIKU_CONT_WAIT),a
	ld	hl,cont_status
	ld	a,(hl)
	and	11111100b
	ld	(hl),a
	ret

PikuMineOBJ:
	ld	hl,PIKU_ANM_SW
	ld	a,(hl)
	and	a
	ret	z

	ld	(hl),00h
	ld	a,PikuMine2AnmNo
	call	EXAnmSet
	ret
 endif

The commented EXAnmTable data (corresponding to SpriteAnimFrameData in data/sprite_anims/framesets.asm):


EXAnmTable:
	ef_initndw
	[snip]
;	ef_ndw		PikuGameAnm,PikuGameAnmNo
;	ef_ndw		PikuAttackAnm,PikuAttackAnmNo
;	ef_ndw		PikuMine1Anm,PikuMine1AnmNo
;	ef_ndw		PikuMine2Anm,PikuMine2AnmNo

 ifn 0
PikuGameAnm:
	db	PikuGamePatNo,08h
	db	EXANMbanish,08h
	db	EXANMloop
PikuAttackAnm:
	db	PikuAttackPat1No,01h
	db	PikuAttackPat2No,01h
	db	EXANMdel
PikuMine2Anm:
	db	OBJPat2No,03h+EXANM_HREV
	db	OBJPat1No,03h
	db	OBJPat2No,03h+EXANM_HREV
PikuMine1Anm:
	db	OBJPat1No,08h
	db	EXANMstop
 endif

The commented EXPatTable data (corresponding to SpriteAnimOAMData in data/sprite_anims/oam.asm):


EXPatTable:
	ef_initndw
	db	0
	ef_ndw	PatOBJ,OBJPat1No
	db	4
	ef_ndw	PatOBJ,OBJPat2No
	[snip]
;	db	0
;	ef_ndw	PatSizePiku,PikuGamePatNo
;	db	1
;	ef_ndw	PatSize1,PikuAttackPat1No
;	db	2
;	ef_ndw	PatOBJ,PikuAttackPat2No

;PatSizePiku:
;	db	 001h
;	db	-001h,-001h,0,0

An entry in the dummied-out EX_ChrTable table (corresponding to BrokenStdGFXPointers in engine/gfx/sprites.asm) also corresponds to missing Picross graphics.


EX_ChrTable:
	ef_initndw

	db		80h,G_BANK01
	ef_ndw_g	dummy,OBJ_OPOBJ1No
	db		80h,G_BANK01
	ef_ndw_g	dummy,OBJ_OPOBJ2No
	db		80h,G_BANK01
	ef_ndw_g	dummy,OBJ_OPOBJ3No
	db		80h,G_BANK01
	ef_ndw_g	dummy,OBJ_TitleNo
	db		10h,G_BANK37
	ef_ndw_g	dummy,EXPikuGameOBJNo
	db		10h,G_BANK11
	ef_ndw_g	dummy,OBJ_ZukanNo
	db		10h,G_BANK39
	ef_ndw_g	dummy,GF_OBJNo
	db		10h,G_BANK24
	ef_ndw_g	dummy,SlotOBJNo
	db		10h,G_BANK21
	ef_ndw_g	dummy,PokerOBJNo

dummy: