﻿//<!--
//正男色々パック
//var 09/03/07版
//
var sl_f	= false
var init_f	= false;		//  JavaApplet 起動時の初期化をしたかのフラグ
var w_strt	= 0;			//  処理用
var w_str_mx = 20;		//  風強さ増加最大値
var w_str_my = 20;		//  風強さ増加最大値
var w_str_tx = 0;		//  風強さ増加値
var w_str_ty = 0;		//  風強さ増加値
var web_f	= false;	//　金網につかまっているフラグ
var mApplet = null;	//  処理用
var sys_hp = false	//HPの画像表示
var sys_wp = false	//ワープシステム
var sys_wn = false	//風圧
var sys_ck = false	//チェックポイント
var sys_wb = false	//金網
var sys_sn = false	//サウンド
var sn_pl = -1		//再生中BGM
var sfile = new Array(4)//再生ファイル
var bgm = new Array(4)	//再生ファイル
var mute_f = 0		//消音フラグ

mcheck = new Array()
mcheck_x = new Array();
mcheck_y = new Array();
mcheck_g0 = new Array();
mcheck_g1 = new Array();
mwarp_x0 = new Array()
mwarp_y0 = new Array();
mwarp_x1 = new Array()
mwarp_y1 = new Array();
warp_c = 0
check_c = 0


if (window.addEventListener) { // IE以外のブラウザ
	window.addEventListener("unload",stopBGM,false);
}
else if (window.attachEvent && document.getElementById) { // IE5以上
	window.attachEvent("onunload",stopBGM)
}

//  JavaApplet から全てのモードで  描画直前に呼び出される
function userJS(Offscreen_g,mode,view_x,view_y) {

	//あまりスマートじゃないけど仕方ない
	if(!mApplet)mApplet = document.getElementById("Applet1");

	//  JavaApplet 起動時の初期化
	if(init_f == false) {
		init_f = true;
		//  JavaApplet 起動時の初期化
		userInitJS();
	}
	if(mode == 1) {
		//  タイトル画面
		//userTitleJS(Offscreen_g)
	}
	else if(mode >= 100  &&  mode < 200) {
		//  ゲーム中
		if(mApplet.getJSMes() == 1) {
			//  ゲーム開始
			mApplet.setJSMes(0)
			userGameStartJS(Offscreen_g)
		}

		//  JavaScript ゲーム中を呼び出す
		userGameJS(Offscreen_g,view_x,view_y,(mode==150?true:false));
	}
	else if(mode == 200) {
		//　ゲームオーバー
	}
	else if(mode == 300) {
		//　エンディング
	}
	if(sys_sn)m_sound(mode)
}

//  JavaApplet 起動時に JavaScript から１回だけ呼び出される
function userInitJS() {
	if(sys_sn){
		//ミュートフラグ
		if(location.search.indexOf("mute") >= 0)mute_f = 2
		if(mute_f == 0){
			Base = mApplet.getDocumentBase()
			//サウンド読み込み
			for(i=0;i<sfile.length;i++)bgm[i] = mApplet.getAudioClip(Base,sfile[i]);
		} else {
			mApplet.Offsound()
		}
	}
}

function m_sound(mode,df){
	if(m_key == 83){
		switchBGM()
	}
	df = (m_myX < 0?true:false)
	switch(mode){
		//タイトル
		case 1:
			if(sn_pl != 0)playBGM(0)
		break
		//プレイ中
		case 100:
		case 101:
		case 102:
		case 103:
			if(df){
				if(sn_pl != 3)playBGM(3)
			} else {
				if(sn_pl != 1)playBGM(1)
			}
		break
		//ボス
		case 150:
			if(df){
				if(sn_pl != 3)playBGM(3)
			} else {
				if(sn_pl != 2)playBGM(2)
			}
		break
		case 200:
			if(sn_pl != 3)playBGM(3)
		break
		default:
			stopBGM()
		break
	}
}

//BGM停止
function stopBGM(id){
	if(sn_pl > -1 && mute_f == 0 && bgm[sn_pl]){
		bgm[sn_pl].stop()
		return true
	} else {
		return false
	}
}

//BGM再生
function playBGM(id){
	if(mute_f != 0)return false
	if(sn_pl > -1 && bgm[sn_pl]){
		bgm[sn_pl].stop()
	}
	sn_pl = id
	if(!bgm[sn_pl])return false
	bgm[sn_pl].loop()
	return true
}

function switchBGM(){
	if(mute_f == 0){
		mApplet.Offsound()
		stopBGM()
		sn_pl = -1
		mute_f = 1
	} else if(mute_f == 1){
		mApplet.Onsound()
		mute_f = 0
	}
}

//チェックポイントの処理
function m_check(firstf){
	for(i=0;i < mcheck.length;i++){
		//取得チェックと処理
		if(!mcheck[i] && m_myX == mcheck_x[i] && m_myY == mcheck_y[i]){
			mcheck[i] = true
			mApplet.setMapchip2(mcheck_x[i],mcheck_y[i],mcheck_g1[i])
		}
	}
}
//HP表示処理
function m_hp(nhp){
	nhp = mApplet.getMyHP()
	if(nhp <= 0)	mApplet.drawPattern(hp_b_x,hp_b_y,hp_b_md,1)
	else	if(nhp <= hp_b_d)mApplet.drawPattern(hp_b_x,hp_b_y,hp_b_mt,1)
	else	mApplet.drawPattern(hp_b_x,hp_b_y,hp_b_m,1)
	for(i=hp_max;i>0;i--){
		if(i <= nhp)	mApplet.drawPattern(hp_b_x+i*hp_b_m+32,hp_b_y,hp_b_h,1)
		else			mApplet.drawPattern(hp_b_x+i*hp_b_m+32,hp_b_y,hp_b_hd,1)
	}
}
//ワープポイントの処理
function m_warp(){
	for(i=0;i<mwarp_x0.length;i++){
		if((m_key == 38 || m_key == 104)&& m_myX == mwarp_x0[i] && m_myY == mwarp_y0[i]){
			mApplet.setMyPosition(mwarp_x1[i],mwarp_y1[i]);
		}
	}
}

//金網ここから
function m_web(){
	if(web_f){
		mApplet.setMyVX(0)
		mApplet.setMyVY(-20)
		if(mApplet.isPressUpKey()){
			if(mApplet.getMapchip2(m_myX,Math.floor((my_y-6)/32)-10) == web_m){
				//　速度の変更
				mApplet.setMyVY(-80)
				web_a++
			}
			//mApplet.setMyYReal(my_y - 8)
		} else if(mApplet.isPressDownKey()){
			if(mApplet.getMapchip2(m_myX,Math.floor((my_y+8)/32)-10) == web_m){
				//　速度の変更
				mApplet.setMyVY(40)
				//　アニメーションカウンタの増加
				web_a++
			} else {
			}
		}
		if(mApplet.isPressRightKey()){
			if(mApplet.getMapchip2(Math.floor((my_x+6)/32)-1,m_myY) == web_m){
				//　速度の変更
				mApplet.setMyVX(40)
				//　アニメーションカウンタの増加
				web_a++
			} else {
				mApplet.setMyVX(-10)
			}
		
		} else if(mApplet.isPressLeftKey()){
			if(mApplet.getMapchip2(Math.floor((my_x-6)/32)-1,m_myY) == web_m){
				//　速度の変更
				mApplet.setMyVX(-40)
				//　アニメーションカウンタの増加
				web_a++
			} else {
				mApplet.setMyVX(10)
			}
		}
		//　パターンの置き換え
		mApplet.setMyObjectPattern(210 + Math.floor(web_a/2)%2)
		mApplet.drawSystemObject(1)
		//金網から離れる
		if(mApplet.isPressZKey() || m_key == 32){
			//飛び上がりチェック
			if(mApplet.isPressDownKey())	mApplet.setMyVY(0)
			else					mApplet.setMyVY(-150)
			web_f = false;
			mApplet.setSystemDrawMode(1)
		} else if(my_chip2 != web_m){
			web_f = false;
			mApplet.setSystemDrawMode(1)
		}
	} else if(!web_f && my_chip2 == web_m && mApplet.isPressUpKey() == 1){
		web_f = true
		mApplet.setSystemDrawMode(2)
		mApplet.setMyObjectPattern(210)
		mApplet.drawSystemObject(1)
	}
}

//風の処理
function m_wind(){
	my_vy = mApplet.getMyVY()
	if(my_chip2 == w_chip_r || my_chip2 == w_chip2_r){//右向き
		if(my_chip2 == w_chip_r)w_strt = w_str
		else				w_strt = w_str2
		if(w_str_tx < 2)		w_str_tx++ 
		//移動先チップのチェック
		mchip = mApplet.getMapchip(Math.floor((my_x + w_strt)/32)-1,Math.floor(my_y/32)-10)
		mchip2= mApplet.getMapchip(Math.floor((my_x + w_strt)/32)-1,Math.floor((my_y+15)/32)-10)
		//共に背景なら移動
		if(mchip < 10 && mchip2 < 10){
			mApplet.setMyXReal(my_x + w_strt - 16)
		}
	} else if(my_chip2 == w_chip_l||my_chip2 == w_chip2_l){//左向き
		if(my_chip2 == w_chip_l)w_strt = w_str
		else				w_strt = w_str2
		if(w_str_tx > -2)		w_str_tx--
		//移動先チップのチェック
		mchip = mApplet.getMapchip(Math.floor((my_x - w_strt)/32)-1,Math.floor(my_y/32)-10)
		mchip2= mApplet.getMapchip(Math.floor((my_x - w_strt)/32)-1,Math.floor((my_y+15)/32)-10)
		//共に背景なら移動
		if(mchip < 10 && mchip2 < 10){
			mApplet.setMyXReal(my_x - w_strt - 16)
		}
	} else if(my_chip2 == w_chip_d||my_chip2 == w_chip2_d){//↓向き
		if(my_chip2 == w_chip_d)w_strt = w_str
		else				w_strt = w_str2
		if(w_str_ty < 3)		w_str_ty++
		mApplet.setMyVY(my_vy + w_str_ty*w_strt)
	} else if(my_chip2 == w_chip_u||my_chip2 == w_chip2_u){//↑向き
		if(my_chip2 == w_chip_u)w_strt = w_str
		else				w_strt = w_str2
		if(w_str_ty > -3)		w_str_ty--
		mApplet.setMyVY(my_vy + w_str_ty*w_strt)
	} else {
		w_str_tx = w_str_ty = 0
	}
}

//  ゲーム開始時に JavaScript から１回だけ呼び出される
function userGameStartJS(Offscreen_g) {
	//　変数の初期化
	my_x		= 0;
	my_y		= 0;
	my_chip2		= -1;
	mchip		= -1
	mchip2	= -1
	w_str_tx	= 0;	//  風強さ増加値
	w_str_ty	= 0;	//  風強さ増加値
	if(sys_wb){
		web_f = false;
		web_a = 0
		mApplet.setSystemDrawMode(1)
	}
	if(sys_hp)mApplet.setMyMaxHP(hp_max)
	if(sys_ck){
		//　初回チェックフラグ
		for(i = 0;i < mcheck.length;i++){
			if(mcheck[i]){
				mApplet.setMyPosition(mcheck_x[i],mcheck_y[i]);
			}
			//描画
			if(!mcheck[i]){//未取得
				mApplet.setMapchip2(mcheck_x[i],mcheck_y[i],mcheck_g0[i])
			} else {//取得済み
				mApplet.setMapchip2(mcheck_x[i],mcheck_y[i],mcheck_g1[i])
			}
		}
	}
}

//  ゲーム中    描画直前に JavaScript から呼び出される
function userGameJS(Offscreen_g,view_x,view_y,boss_f) {
	my_x = mApplet.getMyXReal()+16
	my_y = mApplet.getMyYReal()+16
	//my_vx = mApplet.getMyVX()
	//my_gr	=	(mApplet.isRideGround()==1?true:false)
	m_myX = mApplet.getMyX()
	m_myY = mApplet.getMyY()
	my_chip2=	mApplet.getMapchip2(m_myX,m_myY)
	//押下ボタン取得
	m_key = mApplet.getKeyCode();mApplet.resetKeyCode()
	//正男位置取得
	//各処理部分へジャンプ
	if(sys_ck)m_check()
	if(sys_wp)m_warp()
	if(sys_wn)m_wind()
	if(sys_hp)m_hp()
	if(sys_wb)m_web()
}

//チェックポイントの設置
function init_check(x,y,g0,g1){
	mcheck[check_c] = false
	mcheck_x[check_c] = x
	mcheck_y[check_c] = y
	mcheck_g0[check_c] = g0
	mcheck_g1[check_c] = g1
	check_c++
}

//ワープポイントの設置
function init_warp(x,y,xx,yy){
	mwarp_x0[warp_c] = x
	mwarp_y0[warp_c] = y
	mwarp_x1[warp_c] = xx
	mwarp_y1[warp_c] = yy
	warp_c++
}

//-->
