#include <sys/bios.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <resource.h>
#include "\WWitch\il\sound\il_sound.h"
#include <sys/fcntl.h>


#define LCD_CHAR_CX	28
#define LCD_CHAR_CY	18
#define PAL_IMAGE 0
#define PAL_IMAGE1 1

int level;      /*コンピュータのレヴェル*/
int nlevel;     /*コンピュータの間抜け度*/
int stage;      /*ステージ              */
int round;      /*ラウンド              */
int ban;        /*今、何を出せるのか    */
int dba;        /*今、場に出ているカード*/
int df;         /*ダウト成功フラグ      */
int hantei;     /*0=負け/1=勝ち         */
int maisuu;     /*カード表示枚数        */
int hmaisuu;    /*人間の持っている枚数  */
int cmaisuu;    /*コンピューターの枚数  */
int bmaisuu;    /*場に出ている枚数      */
int ldx;        /*カード表示ｘ座標      */
int ldy;        /*カード表示ｙ座標      */
int gcard;      /*表示するカード番号    */
int cpos;       /*操作するカード番号    */
int cdno;       /*ｺﾝﾋﾟｭｰﾀが出すｶｰﾄﾞ番号 */
int cstep;      /*カード表示間隔        */

typedef struct{
	unsigned char hajime[40];	/*はじめのメッセージ	*/
	unsigned char win[40];		/*勝ったときのメッセージ*/
	unsigned char lost[40];		/*負けたときのメッセージ*/
	unsigned char dy[40];		/*ダウト成功のメッセージ*/
	unsigned char dn[40];		/*ダウト失敗のメッセージ*/
	unsigned char cdy[40];		/*相手のダウト成功  〃  */
	unsigned char cdn[40];		/*相手のダウト失敗  〃  */
} tmess;
tmess umess;				/*ユーザーのメッセージ	*/
tmess cmess[4];			/*ＰＣ側のメッセージ	*/

typedef struct {
	int hito;
	int comp;
	int ba;
} tcard;
tcard card[13];

char *blank="　　　　　　　　　　　　　　　";

res_image_t far	*res_img[10];
res_music_t far	*res_bgm[10];
res_se_t far	*res_se[10];
res_voice_t far	*res_voice[10];
unsigned char far	*res_card[5];
unsigned char far	*res_ane[3];
unsigned char far	*res_kao[3];
unsigned char far	*res_gcp[3];


SoundIL soundIL;
SoundIL *soundILp = &soundIL;

void kill()
{
	/*おしまい*/
	sys_set_keepalive_int(0);
	sound_close();
	sounddrv_release();
	bios_exit();
}

void view_image(res_image_t far *res)
{
	/*全画面グラフィック表示。リソースの幅とかは全然見てないのでよろしく*/
	int i;
	WORD color = 0;

	/*データの先頭番地*/
	char far * data = (BYTE far *)(res+1);

	/*パレットをセット。このへんはimagerをガメガメ*/
	for(i=3; i>=0; i--)
		color = (color << 4) | (res->clrtable[i] >> 5);
	palette_set_color(PAL_IMAGE, color);
	
	/*セット♪*/
	font_set_colordata(0, 504, data);
}

void set_pal(res_image_t far *res)
{
	/*パレットだけセット*/
	int i;
	WORD color = 0;

	/*パレットをセット。このへんはimagerをガメガメ*/
	for(i=3; i>=0; i--)
		color = (color << 4) | (res->clrtable[i] >> 5);
	palette_set_color(PAL_IMAGE, color);
	
	/*PAL_IMAGE1に逆順のパレットをセット。*/
	color=0;
	for(i=0; i<=3; i++)
		color = (color << 4) | (res->clrtable[i] >> 5);
	palette_set_color(PAL_IMAGE1, color);
	
}

void set_rect_image(char far *data, int x, int y, int w, int h)
{
	/*矩形グラフィック表示。データ番地からx,y(左上隅)に幅w,高さy分だけ展開*/
	int i,start;

	/*データの位置を計算*/
	start=y*LCD_CHAR_CX+x;

	/*セット♪*/
	for (i=0;i<h;i++) {
		font_set_colordata(start, w, data);
		start+=LCD_CHAR_CX;
		data+=w*16;
	}
}


void rotatecard(res_image_t far *res)
{
	int i;
	
	/*データの先頭番地*/
	char far * data = (BYTE far *)(res+1);
	for(i=0;i<13;i++) {
		set_rect_image(data,18,0,8,9);
		data+=1152;
		sys_wait(5);
	}
	for(i=0;i<13;i++) {
		data-=1152;
		set_rect_image(data,18,0,8,9);
		sys_wait(5);
	}
}

void xor_rect(int x, int y, int w, int h)
{
	/*矩形画面反転。データ番地からx,y(左上隅)に幅w,高さy分だけ反転*/
	int i,j;
	unsigned int static data[1];

	/*一個づつプチプチとパレットをセット*/
	for (i=0;i<h;i++) {
		for (j=0;j<w;j++) {
			screen_get_char(SCREEN2, x+j, y+i ,1,1,data);
			if((data[0] & 0x0200) != 0x0200)
				data[0] |= 0x0200;
			else
				data[0] &= 0xFDFF;
			screen_set_char(SCREEN2, x+j, y+i ,1,1,data);
		}
	}
}

void cls_rect(int x, int y, int w, int h)
{
	/*矩形画面消去。データ番地からx,y(左上隅)に幅w,高さy分だけ消去*/
	unsigned char static data[] = {0,0,0,0,0,0,0,0};
	int i,j,start;

	/*データの位置を計算*/
	start=y*LCD_CHAR_CX+x;

	/*一個づつプチプチ消す*/
	for (i=0;i<h;i++) {
		for (j=0;j<w;j++) {
			font_set_monodata(start+(i*LCD_CHAR_CX)+j,1,data);
		}
	}
}

void cls()
{
	/*全画面消去*/
	unsigned char static data[] = {0,0,0,0,0,0,0,0};
	int i;
	for(i=0;i<504;i++) {
		font_set_monodata(i,1,data);
	}
}

void getcard()
{
	/*カードのデータを定義する*/
	int i;
	
	/*データの先頭番地*/
	char far * data = (BYTE far *)(res_img[2]+1);
	for(i=0;i<5;i++) {
		res_card[i] = data;
		data += 384;
	}
}

void getkao()
{
	/*顔のデータを定義する*/
	int i;
	
	/*データの先頭番地*/
	char far * data = (BYTE far *)(res_img[3]+1);
	for(i=0;i<4;i++) {
		res_kao[i] = data;
		data += 864;
	}
}

void getgcp()
{
	/*グーチョキパー表示のデータを定義する*/
	int i;
	
	/*データの先頭番地*/
	char far * data = (BYTE far *)(res_img[4]+1);
	for(i=0;i<3;i++) {
		res_gcp[i] = data;
		data += 144;
	}
}

void getane()
{
	/*今回は未使用*/
	/*おねえさんのデータを定義する*/
	int i;
	char far * data;
	
	/*データの先頭番地*/
	for(i=0;i<3;i++) {
		data = (BYTE far *)(res_img[3+i]+1);
		res_ane[i] = data;
	}
}

void gfx_init()
{
	/*SCREEN2と１を初期化。表示される範囲の504個を順に並べておく*/
	int code[504];
	int i;

	display_control(0x002f);
	for(i=0;i<504;i++) {
		code[i]=i;
	}
	screen_set_char(SCREEN2, 0, 0 ,28,18,code);
	screen_set_char(SCREEN1, 0, 0 ,28,18,code);
	cls();
}

void getres()
{
	/*リソースを定義*/
	int i=0;
	int j=0;
	int k=0;
	int l=0;
	res_t far *pvRes = _pc->_resource;

	/*今回はmusicとimgしかありませんな*/
	while(pvRes->magic == RESID){
		if(pvRes->type == RESID_MUSIC){
			res_bgm[i] = (res_music_t far *)pvRes;
			i++;
		}

		if(pvRes->type == RESID_IMAGE){
			res_img[j] = (res_image_t far *)pvRes;
			j++;
		}

		if(pvRes->type == RESID_SE){
			res_se[k] = (res_se_t far *)pvRes;
			k++;
		}

		if(pvRes->type == RESID_VOICE){
			res_voice[l] = (res_voice_t far *)pvRes;
			l++;
		}
		pvRes = (BYTE far *)pvRes + (pvRes->size << 4);
	}
}

void aneroll(int ane)
{
	/*今回は未使用*/
	/*おねえさんのデータをスクロールして表示する。ひどいロジックのわりには、わりと使える速さ*/
	int i,j;
	unsigned char far	*res_aned[3];
	
	for(i=0;i<3;i++) {
		res_aned[i] = res_ane[i];
	}

	i=ane-1;
	key_wait();
	set_rect_image(res_ane[i],0,0,28,18);
	key_wait();
	for(j=0;j<17;j++) {
		res_aned[i] +=448;
		set_rect_image(res_aned[i],0,0,28,18);
	}
	key_wait();
	for(j=0;j<17;j++) {
		res_aned[i] -=448;
		set_rect_image(res_aned[i],0,0,28,18);
	}
}

int getrandom(int a,int b)
{
	/*これって必要ですよね。*/
	int c,d;
	c=b-a;
	d=a+(rand() % c);
	d++;
	return d;
}

void mesout(int x,int y, char *c)
{
	/*移植だから♪*/
	text_put_string(x,y,c);
}

sort()
{
	/*カードをソートする*/
	int i,j,k;
	for(i=1;i<13;i++) {
		for(j=i;j<13;j++) {
			if(card[i].ba>card[j].ba) {
				k=card[i].ba;
				card[i].ba=card[j].ba;
				card[j].ba=k;
			}
			if(card[i].hito>card[j].hito) {
				k=card[i].hito;
				card[i].hito=card[j].hito;
				card[j].hito=k;
			}
			if(card[i].comp>card[j].comp) {
				k=card[i].comp;
				card[i].comp=card[j].comp;
				card[j].comp=k;
			}
		}
	}
}

dspcdhito()
{
	/*プレイヤーのカードを表示する*/
	int i;
	if(maisuu>0) cstep=(28/maisuu);
	if(cstep>4) cstep=4;
	sort();
	for(i=maisuu;i>0;i--) {
		/*外してもいいんですがね*/
		sys_wait(3);
		
		ldx=(cstep*maisuu)-(i*cstep);
		gcard=card[i].hito;
		set_rect_image(res_card[gcard],ldx,12,4,6);
	}
}

dspcdcomp()
{
	/*コンピュータ側のカードを表示*/
	int i;
	gcard=4;
	if(maisuu>0) cstep=(28/maisuu);
	if(cstep>4) cstep=4;
	for(i=maisuu;i>0;i--) {
		ldx=(cstep*maisuu)-(i*cstep);
		set_rect_image(res_card[gcard],ldx,0,4,6);
	}
}

calmaisuu()
{
	/*枚数を数える*/
	int i;
	hmaisuu=0;
	cmaisuu=0;
	bmaisuu=0;
	for(i=1;i<13;i++) {
		if(card[i].hito<3) hmaisuu++;
		if(card[i].comp<3) cmaisuu++;
		if(card[i].ba<3) bmaisuu++;
	}
}

dspcdput()
{
	/*カードを表示 つうかこんな関数わざわざ作る必要もないんですけど、移植だから♪*/
	set_rect_image(res_card[gcard],ldx,ldy,4,6);
}

dspelscb()
{
	/*場をきれいにする*/
	cls_rect(0,6,4,6);
}
dspelscc()
{
	/*コンピュータ側のカード表示域をクリア*/
	cls_rect(0,0,28,6);
}
dspelsch()
{
	/*プレイヤー側のカード表示域をクリア*/
	cls_rect(0,12,28,6);
}

dautcomp()
{
	/*コンピュータ側のダウトを掛けるルーチン*/
	int i;

	calmaisuu();
	if(bmaisuu!=0) {
		mesout(4,9,"ダウト！");
		key_wait();
		mesout(4,11,blank);

		ldx=0;
		ldy=6;
		gcard=dba;
		dspcdput();

		switch(df) {
		case 1:
			mesout(4,11,umess.cdy);
			mesout(4,9,cmess[stage].dy);
			key_wait();
			mesout(4,11,blank);
			mesout(4,9,blank);

			sort();
			calmaisuu();
			for(i=1;i<bmaisuu+1;i++) {
				card[hmaisuu+i].hito=card[i].ba;
				card[i].ba=3;
			}
			sort();
			calmaisuu();
			dspelscb();
			dspelsch();
			maisuu=hmaisuu;
			dspcdhito();
			maisuu=cmaisuu;
			break;

		case 0:
			mesout(4,11,umess.cdn);
			mesout(4,9,cmess[stage].dn);
			key_wait();
			mesout(4,11,blank);
			mesout(4,9,blank);

			sort();
			calmaisuu();
			for(i=1;i<bmaisuu+1;i++) {
				card[cmaisuu+i].comp=card[i].ba;
				card[i].ba=3;
			}
			sort();
			calmaisuu();
			dspelscb();
			dspelscc();
			maisuu=cmaisuu;
			dspcdcomp();
			break;
		}
	}
}

dasucomp()
{
	/*コンピュータ側のカードを出すルーチン*/
	if(ban==card[cdno].comp) df=0;
	else df=1;
	dba=card[cdno].comp;
	card[12].ba=card[cdno].comp;
	card[cdno].comp=3;
	gcard=4;
	ldx=0;
	ldy=6;
	dspcdput();
	sort();
	calmaisuu();
	maisuu=cmaisuu;
	dspelscc();
	if(maisuu==0) hantei=0;
	dspcdcomp();
}

dispcdrev()
{
	/*選択しているカードを反転させる*/
	int xb,yl;
	if(maisuu>0) cstep=(28/maisuu);
	if(cstep>4) cstep=4;
	ldx=cstep*(maisuu-cpos);
	ldy=12;
	if(cpos>1) xb=cstep;
	else xb=4;
	yl=6;
	xor_rect(ldx,ldy,xb,yl);
}

dauthito()
{
	/*プレイヤー側のダウトを掛けるルーチン*/
	int i;

	calmaisuu();
	if(bmaisuu!=0) {
		mesout(4,11,"ダウト！");
		key_wait();
		mesout(4,11,blank);

		ldx=0;
		ldy=6;
		gcard=dba;
		dspcdput();

		switch(df) {
		case 1:
			mesout(4,11,umess.dy);
			mesout(4,9,cmess[stage].cdy);
			key_wait();
			mesout(4,11,blank);
			mesout(4,9,blank);

			sort();
			calmaisuu();
			for(i=1;i<bmaisuu+1;i++) {
				card[cmaisuu+i].comp=card[i].ba;
				card[i].ba=3;
			}
			sort();
			calmaisuu();
			dspelscb();
			dspelscc();
			maisuu=cmaisuu;
			dspcdcomp();
			maisuu=hmaisuu;
			break;

		case 0:
			mesout(4,11,umess.dn);
			mesout(4,9,cmess[stage].cdn);
			key_wait();
			mesout(4,11,blank);
			mesout(4,9,blank);

			sort();
			calmaisuu();
			for(i=1;i<bmaisuu+1;i++) {
				card[hmaisuu+i].hito=card[i].ba;
				card[i].ba=3;
			}
			sort();
			calmaisuu();
			dspelscb();
			dspelsch();
			maisuu=hmaisuu;
			dspcdhito();
			break;
		}
	}
}

dasuhito()
{
	/*プレイヤー側のカードを出すルーチン*/
	if(ban==card[cpos].hito) df=0;
	else df=1;
	dba=card[cpos].hito;
	card[12].ba=card[cpos].hito;
	card[cpos].hito=3;
	gcard=3;
	ldx=0;
	ldy=6;
	dspcdput();
	sort();
	calmaisuu();
	maisuu=hmaisuu;
	dspelsch();
	if(maisuu==0) hantei=1;
	dspcdhito();
}


void game2()
{

	/*ゲームの本体*/

	int i,kbd;
	hantei=2;
	for(i=1;i<13;i++) {
		card[i].hito=3;
		card[i].comp=3;
		card[i].ba=3;
	}
	for(i=1;i<13;i++) card[i].ba=getrandom(-1,2);
	for(i=1;i<7;i++) {
		card[i].hito=card[i*2].ba;
		card[i*2].ba=3;
		card[i].comp=card[i*2-1].ba;
		card[i*2-1].ba=3;
	}

	set_rect_image(res_kao[stage-1],19,6,9,6);
	set_pal(res_img[3]);

/*これっていらないのかなあ*/
/*	screen2_set_window(4,9,15,3);
*/
	if(round==1) {
		mesout(4,9,cmess[stage].hajime);
		key_wait();
		mesout(4,9,blank);
	}
	maisuu=6;

	dspcdhito();
	dspcdcomp();
	ban=0;
	df=0;
	while(1) {
		calmaisuu();

		if((df==1)&&(getrandom(0,100)<level)) dautcomp();
		else if(getrandom(0,100)<nlevel) dautcomp();

		set_rect_image(res_gcp[ban],4,6,3,3);
		if(ban==0) cdno=((int)(getrandom(0,100)*(cmaisuu/2))/100)+1;
		if(ban==1) cdno=(int)(cmaisuu/2)+1;
		if(ban==2) cdno=cmaisuu-((int)(getrandom(0,100)*(cmaisuu/2))/100);

		dasucomp();

		if(hantei==0) break;

		calmaisuu();
		maisuu=hmaisuu;
		cpos=1;

		dispcdrev();
		kbd=0;
		while(kbd!=KEY_A) {
			kbd=key_wait();
			if(kbd==KEY_START) {
				kill();
			}
			if(kbd==KEY_LEFT1) {
				se_play_n(0);
				dispcdrev();
				cpos++;
				if(cpos>maisuu) cpos=1;
				dispcdrev();
			}
			if(kbd==KEY_RIGHT1) {
				se_play_n(1);
				dispcdrev();
				cpos--;
				if(cpos==0) cpos=maisuu;
				dispcdrev();
			}
			if(kbd==KEY_B) {
				se_play_n(2);
				dispcdrev();
				dauthito();
				dispcdrev();
			}
		}
		se_play_n(2);
		dispcdrev();
		dasuhito();

		if(hantei==1) break;

		ban++;
		if(ban==3) ban=0;
	}
	if(hantei==0) {
		mesout(4,9,cmess[stage].win);
		mesout(4,11,umess.lost);
		bgm_play(res_bgm[3], PLAY_SINGLE);
	}
	if(hantei==1) {
		mesout(4,9,cmess[stage].lost);
		mesout(4,11,umess.win);
		bgm_play(res_bgm[4], PLAY_SINGLE);
	}
	key_wait();
	mesout(4,9,blank);
	mesout(4,11,blank);
}

ending()
{
	/*しどいエンディング*/
	mesout(4,9,"メインプログラム");
	mesout(4,11,"　鯱ソフトウェア");
	sys_wait(450);
	mesout(4,9,"ＣＧ　　　　　　");
	mesout(4,11,"　　ＡＶＥ．　　");
	sys_wait(450);
	mesout(4,9,"サブプログラム　");
	mesout(4,11,"　　ＵＮＡ　　　");
	sys_wait(450);
	mesout(4,9,"Ｗｉｔｃｈ版　　");
	mesout(4,11,"　　ＵＮＡ　　　");
	sys_wait(450);
	mesout(4,9,"（Ｃ）１９９４　　");
	mesout(4,10,"　　　　〜２０００");
	mesout(4,11,"Ｓ．Ｓ．ＡＵＴＯ　");
}

void gover()
{
	char far * data = (BYTE far *)(res_img[5]+1);
	cls();
	set_rect_image(data,15,0,13,18);
	mesout(2,7,"残念でしたな(T_T)/");
	mesout(2,9,"（Ｃ）１９９４　　");
	mesout(2,10,"　　　　〜２０００");
	mesout(2,11,"Ｓ．Ｓ．ＡＵＴＯ　");
	bgm_stop();
	voice_play(res_voice[0], 0);
}

void game()
{

	/*ゲームのメインループ*/

	stage=1;
	round=1;

	while (stage<=3) {
		bgm_play(res_bgm[1], PLAY_LOOP);
		/*Bridge.mml*/

		/*おねえさんを２画面スクロールで表示する*/
		/*aneroll(stage);*/

		while(round<=2) {
			level=(stage*20)+(round*4);
			nlevel=77-level;

			bgm_play(res_bgm[2], PLAY_LOOP);
			/*gamec2.mml*/

			game2();

			if(hantei==0) {
				round--;
				if(round<2) break;

				/*↓要移植*/
				/*おねえさんを表示する*/
				/*disp400(stage,round-1);*/
			} else {

				bgm_play(res_bgm[0], PLAY_LOOP);
				/*gamec2.mml*/

				/*↓要移植*/
				/*おねえさんを表示する*/
				/*disp400(stage,round);*/
				round++;
			}
		}
		if(round<2) {
 
			/*↓要移植*/
			/*残念でした♪*/
			gover();
			break;
		} else {
			stage++;
			round=1;
		}
	}
	if(stage==4) {

		/*↓要移植*/
		ending();
	}
}


void opening()
{
	/*ガメンヲミマスカ Y)es / N)o*/
	view_image(res_img[0]);
	key_wait();

	rotatecard(res_img[1]);

	/*サウンド再生*/
	bgm_play(res_bgm[0], PLAY_LOOP);

	/*startボタンが押されるまでループ*/
	for(;;) {
		WORD key = key_wait();
		if(key == KEY_START)
			break;
		if(key == KEY_A)
			rotatecard(res_img[1]);
	}

	/*bgmをとめる*/
	bgm_stop();
	cls();

}

void setmes()
{
	/*表示するメッセージを定義*/
	/*人間側*/
	strcpy(umess.win,      "どうやら私の勝ちのようだね");
	strcpy(umess.lost,     "おぼえてろぉぉぉぉぉぉ");
	strcpy(umess.dy,       "いかさまはいけないな");
	strcpy(umess.dn,       "小僧め");
	strcpy(umess.cdy,      "ぎょゑ");
	strcpy(umess.cdn,      "無駄なことを");
	/*機械側*/
	/*ステージ１*/
	strcpy(cmess[1].hajime,"ハーイ、ユミです。ヨロシク！");
	strcpy(cmess[1].win,   "ラッキー！やったねっ。");
	strcpy(cmess[1].lost,  "えー！？負けちゃったぁ‥‥");
	strcpy(cmess[1].dy,    "ラッキー！");
	strcpy(cmess[1].dn,    "えへへへ、失敗、失敗。");
	strcpy(cmess[1].cdy,   "ドッギャァァァァン！！");
	strcpy(cmess[1].cdn,   "カモーン、ポルポルく〜ん（笑）");
	/*ステージ２*/
	strcpy(cmess[2].hajime,"マユミです。よろしくね。");
	strcpy(cmess[2].win,   "やったぁ。私の勝ちね。");
	strcpy(cmess[2].lost,  "ざんねん、負けちゃったわ。");
	strcpy(cmess[2].dy,    "うふふふっ");
	strcpy(cmess[2].dn,    "うっ‥‥‥");
	strcpy(cmess[2].cdy,   "ああっ‥‥バレちゃったぁ。");
	strcpy(cmess[2].cdn,   "ハズレでーす。");
	/*ステージ３*/
	strcpy(cmess[3].hajime,"ヨウコっていいます。");
	strcpy(cmess[3].win,   "まだまだ甘いわね。");
	strcpy(cmess[3].lost,  "今日のこのへんで勘弁してあげる");
	strcpy(cmess[3].dy,    "あなたって、うそつきね。");
	strcpy(cmess[3].dn,    "ひどい‥‥あたしをだましたのね");
	strcpy(cmess[3].cdy,   "女には、ヒミツがあるものよ");
	strcpy(cmess[3].cdn,   "あたしを、信じてないのね‥‥");
}

void main()
{
	/*画面の初期化*/
	text_screen_init();
	text_set_screen(0);
	
	gfx_init();

	/*メッセージの設定*/
	setmes();

	/*サウンドドライバの存在チェック*/
	if(open_sound_il(&soundIL) != E_FS_SUCCESS) {
		text_put_string(0, 0, "sound driver not found");
		key_wait();
		return;
	}

	/*サウンドの初期化*/
	sounddrv_init();
	sound_open();
	sys_set_keepalive_int(0x80);
	
	/*リソースを取得*/
	getres();

	/*seを初期化*/
	se_play(res_se[0], -1);

	/*オープニング*/
	opening();

	/*カードのデータをゲット*/
	/*グーチョキパーのデータをゲット*/
	/*おねえさんのデータをゲット*/
	/*getane();*/
	getcard();

	getgcp();

	getkao();

	/*移植済み↓正しいかどうかのチェックはまだ*/
	srand(timer_get_count(0) + rtc_get_second());

	set_pal(res_img[3]);

	game();	
	key_wait();

	/*おしまい*/
	sys_set_keepalive_int(0);
	sound_close();
	sounddrv_release();

}
