テスト ソース1

Last-modified: 2008-02-09 (土) 16:19:14

共同目的ゲーム制作室1/スクリプトの標準化で議論しながら、このソースを変えていこうと考えてます

ソース

ブラウザFirefoxで見るとスクロールバーが勝手が表示、行番号のずれなど
ちょっとわかりませんorz
ペンマークからだと編集画面に全てのソースが表示されません

#include

//screen
	screenw = 640 : screenh = 480
	screen 0, screenw, screenh, 1
	title "X:ジャンプ V:カメラ回りこみ 大きい棺に向かいジャンプ+↑キー:縁をつかむ"

//初期化
;	E3DEnableDbgFile
	E3DInit 0, -1, 0, 16, 0, scid1

//file のpath 用のバッファーの作成
	pathlen = 2048
	sdim mediadir, pathlen
	;ステージ読み込み
	mediadir = dir_cur + "\\stage"
	sdim pathbuf, pathlen, 2
	pathbuf.0 = mediadir + "\\kojou_0.mqo"
	E3DLoadMQOFileAsGround pathbuf.0, 15.0, toti1
;	pathbuf.0 = mediadir + "\\huti.mqo"
;	E3DLoadMQOFileAsGround pathbuf.0,15.0,huti

	pathbuf.0 = mediadir + "\\ugoku.mqo"
	E3DLoadMQOFileAsGround pathbuf.0, 40.0, toti2

	;壁データ読み込み
	pathbuf.0 = mediadir + "\\wall.mqo"
	E3DLoadMQOFileAsMovableArea pathbuf.0,15.0,wall

	pathbuf.0 = mediadir + "\\huti.mqo"
	E3DLoadMQOFileAsMovableArea pathbuf.0,15.0,huti

	pathbuf.0 = mediadir + "\\ugowall.mqo"
	E3DLoadMQOFileAsMovableArea pathbuf.0, 15.0,wall2


//プレイヤー読み込み
	mediadir = dir_cur + "\\PC"
	sdim pathbuf, pathlen, 2
	;プレイヤー
	pathbuf.0 = mediadir + "\\vega.sig"
	E3DSigLoad pathbuf.0, vega,,1.0
	;プレイヤー
	pathbuf.0 = mediadir + "\\da.sig"
	E3DSigLoad pathbuf.0, da,,1.0

	;MOAの読み込み
	pathbuf.0 = mediadir + "\\vega.moa"
	E3DLoadMOAFile vega, pathbuf.0, 5
	PC=vega
//カメラの初期化
	camposx = 0.0 : camposy = 1500.0 : camposz = -2000.0
	E3DSetPos da,camposx, camposy, camposz
	camdegxz = 0.0 : camdegy = 0.0
	E3DSetCameraDeg camdegxz, camdegy
	E3DSetCameraTarget 0,0,0
	proj_near = 10.0 : proj_far = 30000.0 : proj_fov = 60.0
	E3DSetProjection proj_near, proj_far, proj_fov

//ライトの作成
	lightdirx1 = 0.0
	lightdiry1 = -1.0
	lightdirz1 = 1.0
	lightr1 = 255
	lightg1 = 255
	lightb1 = 255

	E3DCreateLight lid1
	E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1

//文字
	E3DCreateFont fontheight, 0, fontweight, 0, 0, 0, "MS ゴシック", fontid1

//配列変数
	dim keybuf0, 256
	dim keybuf1, 256

//クウォータニ音
	E3DCreateQ q0
	E3DCreateQ q1

//初期値
	//空中
	accy = 0.0	;速度計算
	vely = 0.0	;座標計算
	fmidair = 0	;空中フラグ(0:地表、1:空中)
	grav = -20.0;重力
	//移動

	upkyori=3000.0	;カメラ距離
	downkyori=2000.0;カメラ距離
	yyy=2000
*main

	//キー
		E3DGetKeyboardState	keybuf0
		E3DGetKeyboardCnt	keybuf1
		if keybuf0.VK_ESCAPE = 1 : goto *bye ; [ESC]で終了

	//MOA
		E3DSetNewPoseByMOA PC, PCeventno
		E3DGetMotionFrameNo PC, PCcurmk, PCcurframe
		E3DGetNextMotionFrameNo PC,PCcurmk, PCnextmk, PCnextframe
		if fmidair=0:PCeventno = 0

	//PC操作
		gosub*sousa

	//ステージの壁、地面の当たり判定
		gosub *ChkConf

	//カメラ
		gosub*camera

	//アプリケーションでは、レンダリングを実行する前には必ずこのメソッドを呼び出し、レンダリングの終了時、および再度E3DBeginSceneを呼び出す前には、必ず E3DEndSceneを呼び出す。
		E3DBeginScene scid1
		;ステージ
		E3DChkInView scid1, toti1
		E3DRender scid1, toti1,0
		E3DRender scid1, toti1,1,,,,,1
		E3DChkInView scid1, toti2
		E3DRender scid1, toti2

		E3DChkInView scid1, huti
		E3DRender scid1, huti
		;壁

		E3DChkInView scid1, wall
		E3DChkInView scid1, wall2
		;PC
		E3DChkInView scid1, PC
		E3DRender scid1, PC
		;PC
		E3DChkInView scid1, da
		E3DRender scid1, da
		;文字描画
		gosub *DrawText
	//このメソッドが成功すると、シーンがレンダリングされ、レンダリング後のシーンがデバイス サーフェスに保持される。
		E3DEndScene

	//バックバッファの内容を、プライマリバッファに転送する
		E3DPresent scid1
	;	mes "aaaaaaa"
	//指定したfpsに、近くなるように、waitします。
		E3DWaitbyFPS 30, chkfps1
		await 0

	//E3DChkConfGroundで使用する座標を保存します。
		E3DSetBeforePos PC
		E3DSetBeforePos da
goto *main

//ESCキーで閉じる
*bye
	E3DBye
	end

//操作
*sousa
	vkey=0
	dirx=0
	dirz=0
	if keybuf0.VK_LEFT  = 1 :vkey+=1	;左
	if keybuf0.VK_RIGHT = 1 :vkey+=4	;右
	if keybuf0.VK_UP    = 1 :vkey+=2	;上
	if keybuf0.VK_DOWN  = 1 :vkey+=8	;下

	if vkey=1 :dirx=-1 :dirz= 0	//左
	if vkey=2 :dirx= 0 :dirz=-1	//上
	if vkey=3 :dirx=-1 :dirz=-1	//左上
	if vkey=4 :dirx= 1 :dirz= 0	//右
	if vkey=6 :dirx= 1 :dirz=-1	//右上
	if vkey=8 :dirx= 0 :dirz= 1	//下
	if vkey=9 :dirx=-1 :dirz= 1	//左下
	if vkey=12:dirx= 1 :dirz= 1	//右下

	//Y座標を省いたカメラとPCの距離
	e3dgetpos PC,px,py,pz
	e3dgetpos da,cx,cy,cz
	vx=px-cx
	;vy=py-cy
	vz=pz-cz
	E3DVec3Length vx, 0, vz,kyori

	//移動スピード
	speed=160.0
	//特定のモーション、フレームによって移動スピードを0にする
	if PCcurmk=6 | jump_mae<=5 | PCcurmk=3 | burasagari=1 : speed=0.0

	kaiten_speed=3
	//移動スピード
	if dirx!=0 & dirz!=0:speed=speed/1.5

	//前進
	if dirz!=0{
		PCeventno=1
		e3dgetpos PC,px,py,pz
		e3dgetpos da,cx,cy,cz
		vx=px-cx
		vy=py-cy
		vz=pz-cz
		e3dinitq q1
		E3DLookAtQ q1, vx, 0, vz, dirx, diry, dirz, 0, 1
		E3DMultQVec q1,0,0,-1,multvx,multvy,multvz
		if dirz=-1{
			if kyori>=upkyori{
				e3dsetpos da,cx+(multvx*speed) ,cy ,cz+(multvz*speed)
			}
			e3dsetpos PC,px+(multvx*speed) ,py ,pz+(multvz*speed)
		}
		if dirz= 1&kyori>=800{
			if kyori<=downkyori{
				e3dsetpos da,cx+(multvx*speed) ,cy ,cz+(multvz*speed)
			}
			e3dsetpos PC,px+(multvx*speed) ,py ,pz+(multvz*speed)
		}
		E3DLookAtQ q0, vx, 0, vz, dirx, diry, dirz, 0, 5
	}

	//回転
	if dirx!=0{
		PCeventno=1
		e3dgetpos PC,px,py,pz
		e3dgetpos da,cx,cy,cz
		vx=px-cx
		vy=py-cy
		vz=pz-cz
		e3dinitq q1
		E3DLookAtQ q1, vx, 0, vz, dirx, diry, dirz, 0, 1
		E3DMultQVec q1,0,0,-1,multvx,multvy,multvz
		r = sqrt( (cx - px) * (cx - px) + (cz - pz) * (cz - pz) )
		E3DVec3Normalize px + speed * multvx - cx, 0.0, pz + speed * multvz - cz, vx, vy, vz
		kaitenx = cx + (vx * r)
		;kaiteny = cy
		kaitenz = cz + (vz * r)
		e3dsetpos PC,kaitenx,py,kaitenz
		E3DLookAtQ q0, vx, 0, vz, dirx, diry, dirz, 0, 5
	}

	//カメラをPCの後ろに回りこませる
	if keybuf0.'V'  = 1 |cresult=1{
		cspped=350.0	;カメラ回転スピード
		if cresult=1:cspped=200.0	;カメラ回転スピード
		E3DMultQVec q0,0,0,-1,multvx,multvy,multvz
		e3dgetpos PC,px,py,pz
		e3dgetpos da,cx,cy,cz
		vcx=cx-(px+(multvx*-upkyori))
		vcz=cz-(pz+(multvz*-upkyori))
		E3DVec3Length vcx, vcy, vcz,ckyori
		E3DVec3Normalize vcx, vcy, vcz,vcx, vcy, vcz
		if ckyori>=cspped:E3DSetPos da,cx-(vcx*cspped),cy,cz-(vcz*cspped)
	}

	//しゃがむ
	if keybuf0.'C'  = 1 & wresult=0{
		PCeventno=2

	}

	//上昇
	if (keybuf1.'X'  = 1)&(fmidair = 0):PCeventno=4:jump_mae=0
	if jump_mae>=0:jump_mae++;移動を禁止する
	if PCcurmk=4 & PCcurframe=5 :jump=250.0:vely = jump:uee=2;モーション5フレーム目でジャンプ
	//2段ジャンプ
	if (keybuf1.'X'  = 1)&(fmidair = 1):PCeventno=32:jump=350.0:vely = jump
	//下降
	if vely <=-1&(py>(adjusty+500.0)):PCeventno=8
	//着地
	if ((PCcurmk=4 & PCcurframe>=6)|PCcurmk=5|PCcurmk=7) &(fmidair = 0):PCeventno=16

	//ジャンプ、上昇、落下処理
	E3DGetPos PC, posx, posy, posz
	vely += accy	;速度計算
	posy += vely	;座標計算
	E3DSetPos PC, posx, posy, posz	;空中

	//動く床
		e3dsetpos toti2,0,yyy,0
		e3dsetpos wall2,0,yyy,0
		if yyy=2000:totitime++:totiUP=2
		if yyy=4000:totitime++:totiUP=3
		if totitime=50&totiUP=2:totitime=0:totiUP=1
		if totitime=50&totiUP=3:totitime=0:totiUP=0
		if totiUP=1:yyy+=50
		if totiUP=0:yyy-=50
	//




	;E3DSetCameraTarget vx,vy,vz

	if vkey  > 1 & hwresult = 1{
		vely=0
		if hwresult!=0:PCeventno=64
		e3dsetpos pc,hwadjustx,1710,hwadjustz
		E3DLookAtQ q0, hwnx, hwny, hwnz, 0, 0, 1, 0, 2


	}
return


*ChkConf
	//壁とPCのあたり判定

	//ふち判定
	E3DChkConfWall PC, huti, 0, hwresult, hwadjustx, hwadjusty, hwadjustz, hwnx, hwny, hwnz
	if hwresult=1{
		e3dgetpos pc,hwadjustx, hwadjusty, hwadjustz
	}

//カメラ位置、PC位置を結んだ線に壁が割り込んでいる判定
	E3DChkConfWall2 px,py,pz,cx,cy,cz,wall,60,cresult,cadjustx,cadjusty,cadjustz,cnx,cny,cnz

//カメラ壁判定
	E3DChkConfWall da, wall, 60, cwresult, cwadjustx, cwadjusty, cwadjustz, cwnx, cwny, cwnz
	if cwresult=1{
		e3dsetpos da,cwadjustx, cwadjusty, cwadjustz

	//壁にぶつかるとスピードが遅くなるのでカメラの距離を近づける
		e3dgetpos da,cx,cy,cz
		e3dgetpos PC,px,py,pz

		vx=px-cx
		vz=pz-cz
		E3DVec3Length vx, 0, vz,vykyori
		E3DVec3Normalize vx, 0, vz,vnx, vny, vnz
		E3DSetPos da,cx+(vnx*100.0),cy,cz+(vnz*150.0)

	}
;	E3DGetCameraPos old_cx,old_cy,old_cz

e3dgetpos PC ,px,py,pz
	E3DChkConfWall PC, wall, 60, wresult, wadjustx, wadjusty, wadjustz, wnx, wny, wnz


	E3DChkConfWall PC, wall2, 60, wresult2, wadjustx2, wadjusty2, wadjustz2, wnx2, wny2, wnz2
	if wresult!=0{
		e3dsetpos PC,wadjustx, py, wadjustz
	}
	if wresult2!=0{
		e3dsetpos PC,wadjustx2, py, wadjustz2
	}
	//地面とPCのあたり判定
	mapheight = 200.0	;高さの最大値
	mapminy = -10000	;地面データのY座標の最小値。実際の最小値より、少し小さな値を入れる。

	E3DChkConfGround PC, toti2, 1, mapheight, mapminy, mterrain2, adjustx2, adjusty2, adjustz2, nx2, ny2, nz2
	E3DChkConfGround PC, toti1, 1, mapheight, mapminy, mterrain, adjustx, adjusty, adjustz, nx, ny, nz

;	E3DChkConfGround PC, huti, 1,mapheight, mapminy, hwresult, hwadjustx, hwadjusty, hwadjustz, hwnx, hwny, hwnz

		if (posy>adjusty+200.0){
			accy = grav
			fmidair = 1	;空中フラグon
		} else {
			accy = 0.0
			vely = 0.0
			fmidair = 0	;空中フラグoff
			E3DSetPos PC, adjustx, adjusty, adjustz	;地面の上に移動

		}

		ycsp=100;カメラのY座標、移動スピード

		if adjusty2>adjusty{
			if (posy>adjusty2+100.0)|(mterrain2=0) {
				accy = grav
				fmidair = 1	;空中フラグon
			} else {
				accy = 0.0
				vely = 0.0
				fmidair = 0	;空中フラグoff
				E3DSetPos PC, adjustx2, adjusty2, adjustz2	;地面の上に移動
				ycsp=50
			}
		}


return


*camera

	//カメラのY座標設定
	e3dgetpos da,cx,cy,cz
	e3dgetpos PC,px,py,pz

	vy=(py+2000)-cy
	E3DVec3Length 0, vy, 0,vykyori
	E3DVec3Normalize 0, vy,0,vnx, vny, vnz


	if (vykyori>=ycsp)&(vely <= jump-ycsp):E3DSetPos da,cx,cy+(vny*ycsp),cz

	//PC向き
	E3DSetDirQ2 PC, q0

	//カメラ向き
	e3dgetpos PC,px,py,pz
	e3dgetpos da,cx,cy,cz
	E3DSetCameraPos cx,cy,cz
	E3DGetCameraPos cx,cy,cz
	vx=px-cx
	vy=py-(cy)
	vz=pz-cz
	E3DCameraLookAt vx, vy+1000, vz,0,3
return


*DrawText

	textr = 250 : textg = 250 : textb = 250
	textscale = 1

	textposx = 5 : textposy = 5
	strchk3 = "PC_X " + pcnx + " : PC_Y " + pcny+ " : PC_Z " +pcnz
	E3DDrawText textposx, textposy, textscale, textr, textg, textb, strchk3

	textposy +=20
	strchk3 = "chkfps1 " +hwresult+"*"+py
	E3DDrawText textposx, textposy, textscale, textr, textg, textb, strchk3

return