NimotsuKun for WSC その2

ゲームプログラマになる前に覚えておきたい技術

http://www.shuwasystem.co.jp/support/7980html/2118.html

f:id:tanam:20171207085523p:image:w360

サンプルプログラムの荷物君にシーケンスをつけてみました。

http://www.geocities.jp/parallel_computer_inc/nimotsu.zip

gamelib.c

/*

  Nimotsu Kun for WSC
                               by tanam [2017]

  WonderWitch replacement lib for Wonderswan without using WonderWitch hardware
  Use Turbo C 2.01 and WSXLib by zalas

*/

#include "wwwlib.h"
#include "gamelib.h"
#include "nimotsu.h"

int stage, k;

void init( void ){
	wwc_set_color_mode(COLOR_MODE_4COLOR);
	wwc_palette_set_color(0, 0, 0x0000);	/* black */
	wwc_palette_set_color(0, 1, 0x0f00);	/* red */
	wwc_palette_set_color(0, 2, 0x00f0);	/* green */
	wwc_palette_set_color(0, 3, 0x000f);	/* blue */
	font_set_colordata(0,126, nimotsu_chr);
	display_control(DCM_SCR2);
	return;
}

void title( void ){
	drawascii( gStageData[4], gStageWidth, gStageHeight );
	screen_set_char(SCREEN2, 0, 0, 18, 17, screen);
	while (key_press_check() != KEY_START ) sys_wait(1);
	return;
}

int select( void ){
	drawascii( gStageData[5], gStageWidth, gStageHeight );
	screen_set_char(SCREEN2, 0, 0, 18, 17, screen);
	sys_wait(7);
	while (true) {
		k = key_press_check();
		if (k==KEY_LEFT1) {gStageData[5][18 + stage]=' ';if (stage>0) stage--;}
		if (k==KEY_RIGHT1) {gStageData[5][18 + stage]=' ';if (stage<4) stage++;}
		gStageData[5][18 + stage]='v';
		if (k==KEY_START) {gStageData[5][18 + stage]=' ';break;}
		drawascii( gStageData[5], gStageWidth, gStageHeight );
		screen_set_char(SCREEN2, 0, 0, 18, 9, screen);
		if (stage<4) initialize( state, gStageData[stage] );
		if (stage<4) draw( state, gStageWidth, gStageHeight );
		if (stage<4) screen_set_char(SCREEN2, 0, 10, 9, 7, screen);
		sys_wait(7);
	}
	return stage;
}

void load( void ){
	memset(screen, BLACK, 2048);
	drawascii( gStageData[6], gStageWidth, gStageHeight );
	screen_set_char(SCREEN2, 0, 0, 18, 17, screen);
	sys_wait(70);
	return;
}

void clear( void ){
	memset(screen, BLACK, 2048);
	drawascii( gStageData[7], gStageWidth, gStageHeight );
	screen_set_char(SCREEN2, 0, 0, 18, 17, screen);
	sys_wait(70);
	return;
}

int main(){
	 /* 初期化 */
	init();
	 /* タイトル画面 */
	title();
	 /* ステージセレクト */
	stage=0;
SELECT:
	if (4==select()) {
		sys_wait(7);
		return 0;
	}
	 /* スタート */
	load();
	for (; stage<4; stage++) {
		initialize( state, gStageData[stage] ); /* ステージ初期化 */
		/* メインループ */
		while ( true ){
			/* まず描画 */
			sys_wait(7);
			draw4x( state, gStageWidth, gStageHeight );
			screen_set_char(SCREEN2, 0, 0, 18, 18, screen);
			/* クリアチェック */
			if ( checkClear(state, gStageWidth, gStageHeight ) ){
				break; /* クリアチェック */
			}
			k=key_press_check();
			switch (k) {
			case KEY_START: goto SELECT;
			case KEY_UP1: k = UP;break;
			case KEY_DOWN1: k = DOWN;break;
			case KEY_LEFT1: k = LEFT;break;
			case KEY_RIGHT1: k = RIGHT;break;
			}
			update( state, k, gStageWidth, gStageHeight );
		}
	}
	 /* ゲームクリア */
	clear();
	return 0;
}