

#include "hgimg3.as"
#module

#deffunc RenderSprite int p1,int p2,int p3, int p4, int p5, int p6, int p7, int p8, int p9, int p10, int p11 ,double p12
	
		gmode p2,p6, p7,p3
		pos p8,p9
		if p10 != 0 && p11 !=0{
			hgrotate p1,p4,p5,0,p10,p11
		}
		if p10 = 0 || p11 =0{
			hgrotate p1,p4,p5,p12;,p10,p11
		}
	;p1 = eLXgID
	;p2 = `惂[h
		;0ʏ
		;1 =Rs[[h
		;2=F߃[h
		;3=[h
	;p3 = w0~255
	;p4 = 摜`JnʒuX
	;p5 = 摜`IʒuX
	;p6 = 摜`JnʒuY
	;p7 = 摜`IʒuY
	;p8 = 摜`WX
	;p9 = 摜`WY
	return

#deffunc SetParticle int p1,int p2,int p3, int p4, int p5, int p6
	
	;p[eBN[h
	if p3 < 1: p3=1
	if p2 != 0{
		newevent ev1; VCxgID擾
		event_setdir ev1, -0.03*p3,-0.06*p3,-0.03*p3, 0.03*p3,-0.08*p3,0.03*p3
		event_prmon ev1,PRMSET_MODE,OBJ_MOVE|OBJ_XFRONT
		event_adddir ev1, 0, 0.1, 0
		event_wait ev1,10
		event_efx ev1, 16, $200, 0, 0
		event_adddir ev1, 0, 0.1, 0
		event_wait ev1,16
		event_prmset ev1,PRMSET_FLAG,0
	}
	if p2 = 0{
		newevent ev1		; VCxgID擾
		event_setwork ev1,-0.02*p3,-0.04*p3,-0.02*p3,0.02*p3,0.04*p3,0.02*p3;_oʒu
		event_scale ev1,20,20.0,20.0,20.0,1;TCY
		event_prmon ev1,PRMSET_MODE,OBJ_MOVE|OBJ_XFRONT
		event_wait ev1,5
		event_efx ev1, 10, $200, 0, 0
		event_wait ev1,5
		event_prmset ev1,PRMSET_FLAG,0
	}
	regobj objx, p1	; IuWFNg̓o^
	setpos objx,p4,p5,p6
	setefx objx, $2ff,0,0	; FZ[hɐݒ
	setevent objx,ev1	; Cxg
	;p[eBNID
	;˃[h
	;ˋK
	;oWX
	;oWY
	;oWZ
	return
#deffunc DirToTheOtherXZ int p2,int p1
	getpos p1,posx1,posy1,posz1
  	getpos p2,posx2,posy2,posz2
  	vecx = posx1 - posx2
  	vecz = posz1 - posz2
  	diryX = 3.14/2
  	xx = vecx
  	if xx < 0 : xx = xx * -1
  	zx = vecz
  	if zx < 0 : zx = zx * -1
  	if zx >= xx{
  		if vecz <0{
  			if vecx != 0 && vecz != 0{
	  			diry3 = vecx/vecz
	  		}
  		}
  		if vecz >-1{
  			if vecx != 0 && vecz != 0{
		  		diry3 = 3.14 + (vecx/vecz)
	  		}
 		}
  	}
  	if zx < xx{
  		if vecx <0{
  			if vecx != 0 && vecz != 0{
	  			diry3 = (-vecz/vecx)+diryX
	  		}
  		}
  		if vecx >-1{
  			if vecx != 0 && vecz != 0{
	  		
		  		diry3 = (-vecz/vecx)+diryX*3
	  		}
 		}
  	}
  	setang p2 ,0.0,diry3,0.0
 return
#deffunc DirToTheOtherXZ2 int p2,double p1,double p3,double p4
	posx1 = p1
	posy1 = p3
	posz1 = p4
  	getpos p2,posx2,posy2,posz2
  	vecx = posx1 - posx2
  	vecz = posz1 - posz2
  	diryX = 3.14/2
  	xx = vecx
  	if xx < 0 : xx = xx * -1
  	zx = vecz
  	if zx < 0 : zx = zx * -1
  	if zx >= xx{
  		if vecz <0{
  			if vecx != 0 && vecz != 0{
	  			diry3 = vecx/vecz
	  		}
  		}
  		if vecz >-1{
  			if vecx != 0 && vecz != 0{
		  		diry3 = 3.14 + (vecx/vecz)
	  		}
 		}
  	}
  	if zx < xx{
  		if vecx <0{
  			if vecx != 0 && vecz != 0{
	  			diry3 = (-vecz/vecx)+diryX
	  		}
  		}
  		if vecx >-1{
  			if vecx != 0 && vecz != 0{
	  		
		  		diry3 = (-vecz/vecx)+diryX*3
	  		}
 		}
  	}
  	setang p2 ,0.0,diry3,0.0
 return
#deffunc Vec3length double p1,double p2,double p3, var p4
	;p1=vecx
	;p2=vecy
	;p3=vecz
	;p4=length
	vec1 = 1.0 * p1 * p1
	vec2 = 1.0 * p2 * p2
	vec3 = 1.0 * p3 * p3
	vec4 = vec1 + vec2 + vec3
	
	p4 = sqrt(vec4)
 
	
 return
#deffunc PosForward int p1,int p2
	;p1=fID
	;p2=Oi
	selang p1
	objgetfv an
	p3 = 0.01 * -p2 
	forward = p3;ړx
	fvdir an, 0.0f, 0.0f, forward;f̊pxforward̑OivZ
	selpos  p1 : objgetfv po ; f̍WzϐpoɊi[
	fvadd po,-an.0,an.1,an.2;zϐanɃfforward̑OiWw
	 ;objwalk object,-an.0,an.1,an.2
	objsetfv po;po̐MOCɐݒ
 return
#deffunc RotateX int p1,int p2
	;p1=fID
	;p2=]0`360
	p3 = 0.0
	selang p1
	p3 = 1.744444444444444 * p2
	p5 = (0.01*p3)
	objaddf1 0,p5
 return
#deffunc RotateY int p1,int p2
	;p1=fID
	;p2=]0`360
	p3 = 0.0
	selang p1
	p3 = 1.744444444444444 * p2
	p5 = (0.01*p3)
	objaddf1 1,p5
 return
#deffunc RotateZ int p1,int p2
	;p1=fID
	;p2=]0`360
	p3 = 0.0
	selang p1
	p3 = 1.744444444444444 * p2
	p5 = (0.01*p3)
	objaddf1 2,p5
 return

#global
#module
#deffunc LoadXGround str file, array aa
//^ZRCAo͂Xt@CiDirectX Retained modejnʂƂēǂݍށiׂĎOpʂł邱ƂKvj
//loadground file, aa
//file	t@CpX
//aa	}bv̖ʁA_f[^Aʐi|SjAXZ̍WőlAŏlŕԂ

	notesel np									//ϐnpΏ
	noteload file								//Xt@Cǂݍ

	dim gyou,notemax

	repeat notemax
		noteget gyou(cnt), cnt					//sf[^ɕ
	loop

	repeat notemax
		kekka = instr (gyou(cnt),0,"Mesh {")	//sf[^當uMeshov		^ZRCȀoXtH[}bgixof 0302txt 0064j̏ꍇ̂ݎgp\
		if kekka != -1 :an=cnt					//sԍۑ ŌɌuMeshov
	loop

	dotmax=int(gyou(an+1))						//_

	ddim sx,dotmax
	ddim sy,dotmax
	ddim sz,dotmax

	repeat dotmax
		data=gyou(an+2+cnt)						//sf[^i_f[^xyzj

		kekka=instr (data,0,";")
		kekkaA=kekka+1
		sx0=strmid (data,0,kekka)
		sx(cnt)=double(sx0)						//_WXۑ

		kekka2=instr (data,kekkaA,";")
		kekkaB=kekka2+1
		sy0=strmid (data,kekkaA,kekka2)
		sy(cnt)=double(sy0)						//Y

		kekkaC=kekkaA+kekkaB
		kekka3=instr (data,kekkaC,";")
		kekkaD=kekka3+1
		sz0=strmid (data,kekkaC,kekka3)
		sz(cnt)=double(sz0)						//Z
   loop

	meshmax =int(gyou(an+3+dotmax))				//ʐ
	dim n1d,meshmax								//_ԍۑpϐ
	dim n2d,meshmax
	dim n3d,meshmax
	ddim aa,8,3,meshmax							//o͗pzϐ@SʁE_f[^


	repeat meshmax
		data=gyou(an+4+dotmax+cnt)				//ʂ\3̒_ԍf[^

		kekka=instr (data,3,",")
		kekkaA=kekka+1
		n1=strmid (data,3,kekka)
		n1d(cnt)=int(n1)

		kekka2=instr (data,3+kekkaA,",")
		kekkaB=kekka2+1
		n2=strmid (data,3+kekkaA,kekka2)
		n2d(cnt)=int(n2)

		kekka3=instr (data,3+kekkaA+kekkaB,";")
		kekkaC=kekka3+1
		n3=strmid (data,3+kekkaA+kekkaB,kekka3)
		n3d(cnt)=int(n3)

		aa(0,0,cnt)=sx(n1d(cnt)):aa(0,1,cnt)=-1.0*sy(n1d(cnt)):aa(0,2,cnt)=sz(n1d(cnt))	//YW͏オ-1Ȃ̂ŕϊ	aa(_ԍ0`2, xyz, ʔԍ)Wۑ
		aa(1,0,cnt)=sx(n2d(cnt)):aa(1,1,cnt)=-1.0*sy(n2d(cnt)):aa(1,2,cnt)=sz(n2d(cnt))	//
		aa(2,0,cnt)=sx(n3d(cnt)):aa(2,1,cnt)=-1.0*sy(n3d(cnt)):aa(2,2,cnt)=sz(n3d(cnt))	//


		V1X=aa(2,0,cnt)-aa(0,0,cnt) :V1Y=aa(2,1,cnt)-aa(0,1,cnt) :V1Z=aa(2,2,cnt)-aa(0,2,cnt)
		V2X=aa(1,0,cnt)-aa(0,0,cnt) :V2Y=aa(1,1,cnt)-aa(0,1,cnt) :V2Z=aa(1,2,cnt)-aa(0,2,cnt)

		fv=V1X,V1Y,V1Z
		fvouter fv,V2X,V2Y,V2Z
		nX0=fv.0 :nY0=fv.1 :nZ0=fv.2
		//nX0=((V1Y*V2Z)-(V1Z*V2Y)) :nY0=((V1Z*V2X)-(V1X*V2Z)) :nZ0=((V1X*V2Y)-(V1Y*V2X)) //OςŖʂ̖@xNg擾

		VN=sqrt((nX0*nX0)+(nY0*nY0)+(nz0*nz0)) //@xNg̒߂
		aa(6,0,cnt)=nx0/VN
		aa(6,1,cnt)=ny0/VN
		aa(6,2,cnt)=nz0/VN  															//ʖ@xNg𐳋Kĕۑ

		data2=gyou(an+8+dotmax+meshmax+cnt)
		aa(7,0,cnt)=double(data2)														//ʂ̃}eAԍۑ
	loop

	aa(3,0,0)=double(meshmax)															//3,0,0ɂ͑ʐ(|S)

//͈͌@XZ̍őlƍŏl̕ۑ

	xx1=0.0:xx2=0.0:xx3=0.0
	repeat meshmax
		cn=cnt
		if cn>0{
			if aa(0,0,cn)>xx1 {//ݒlxx1傫Εۑ
				xx1=aa(0,0,cn)
			}
			if aa(1,0,cn)>xx2 {
				xx2=aa(1,0,cn)
			}
			if aa(2,0,cn)>xx3 {
				xx3=aa(2,0,cn)
			}
		}else {					//͖0̒_W
			xx1=aa(0,0,0)
			xx2=aa(1,0,0)
			xx3=aa(2,0,0)
		}
	loop
	//܂łŒ_0`3XWőleX܂
	//Ō0`3r
	if xx1>=xx2 	:xx12=xx1 	:else :xx12=xx2
	if xx12>=xx3 	:xx123=xx12 :else :xx123=xx3

	aa(4,0,0)=xx123																		//4,0,0ɂ̓}bvXől

//͈͌small
	xx1=0.0:xx2=0.0:xx3=0.0
	repeat meshmax
		cn=cnt
		if cn>0 {
			if  aa(0,0,cn)<=xx1 {
				xx1=aa(0,0,cn)
			}
			if aa(1,0,cn)<=xx2{
				xx2=aa(1,0,cn)
			}
			if aa(2,0,cn)<=xx3{
				xx3=aa(2,0,cn)
			}
		}else{
			xx1=aa(0,0,0)
			xx2=aa(1,0,0)
			xx3=aa(2,0,0)
		}
	loop

	if xx1<=xx2 	:xx12=xx1 	:else :xx12=xx2
	if xx12<=xx3 	:xx123=xx12 :else :xx123=xx3

	aa(5,0,0)=xx123																		//5,0,0ɂXŏl

//ZW͈
	zz1=0.0:zz2=0.0:zz3=0.0
	repeat meshmax
		cn=cnt
		if cn>0{
			if aa(0,2,cn)>=zz1 {
				zz1=aa(0,2,cn)
			}
			if aa(1,2,cn)>=zz2 {
				zz2=aa(1,2,cn)
			}
			if aa(2,2,cn)>=zz3 {
				zz3=aa(2,2,cn)
			}
		}else {
			zz1=aa(0,2,0)
			zz2=aa(1,2,0)
			zz3=aa(2,2,0)
		}
	loop

	if zz1>=zz2 	:zz12=zz1 	:else :zz12=zz2
	if zz12>=zz3 	:zz123=zz12 :else :zz123=zz3

	aa(4,2,0)=zz123																		//4,2,0ɂZől

//͈͌small
	zz1=0.0:zz2=0.0:zz3=0.0
	repeat meshmax
		cn=cnt
		if cn>0{
			if  aa(0,2,cn)<=zz1 {
				zz1=aa(0,2,cn)
			}
			if aa(1,2,cn)<=zz2 {
				zz2=aa(1,2,cn)
			}
			if aa(2,2,cn)<=zz3 {
				zz3=aa(2,2,cn)
			}
		}else{
			zz1=aa(0,2,0)
			zz2=aa(1,2,0)
			zz3=aa(2,2,0)
		}
	loop

	if zz1<=zz2 	:zz12=zz1 	:else :zz12=zz2
	if zz12<=zz3 	:zz123=zz12 :else :zz123=zz3

	aa(5,2,0)=zz123																		//5,2,0Zŏl


	//ȏaaɃf[^i[


	//傫ȉϐ͂ŃJ
	np=0
	gyou=0
	sx=0
	sy=0
	sz=0
	n1d=0
	n2d=0
	n3d=0

return
#global

#module
	#deffunc ChkConfGround array aa, var px, var py, var pz, double vy, var result, var fno, array fn, var tt
//ǂݍ񂾒nʃf[^aaƂ̓蔻
//groundhit aa, px, py, pz, vy, result, fno, fn, fmat
//aa		loadgroundœǂݍ񂾈̌`̒nʃf[^
//px`pz	݂̍W͂ApyɏCWo͂
//vy		@㉺ɐL΂xNg̒(0傫)
//result	Փ˔茋ʁ@0Փ˂Ȃ@1Փ
//fno		Փ˖ʔԍ
//fn		Փ˖ʂ̖@xNg
//fmat		Փ˖ʂ̃}eAԍ

	ha0 = 10000.0
	result=0
	if vy=0 :vy=1.0		//0Zh~
	if (px<aa(4,0,0)) & (px>aa(5,0,0)) & (pz<aa(4,2,0)) & (pz>aa(5,2,0)) {//WP}bv͈͓Ȃ画
		repeat aa(3,0,0)
			cn=cnt
			hitf=0//hitfZbg

			VV1=((aa(1,0,cn)-aa(0,0,cn))*(pz-aa(0,2,cn)))-((aa(1,2,cn)-aa(0,2,cn))*(px-aa(0,0,cn)))	//_ƎOp`̓O@
			VV2=((aa(2,0,cn)-aa(1,0,cn))*(pz-aa(1,2,cn)))-((aa(2,2,cn)-aa(1,2,cn))*(px-aa(1,0,cn)))	//OςyvZ
			VV3=((aa(0,0,cn)-aa(2,0,cn))*(pz-aa(2,2,cn)))-((aa(0,2,cn)-aa(2,2,cn))*(px-aa(2,0,cn)))	//

			if VV1<=0 :hitf=hitf-1 :else :hitf=hitf+1
			if VV2<=0 :hitf=hitf-1 :else :hitf=hitf+1
			if VV3<=0 :hitf=hitf-1 :else :hitf=hitf+1

			if (hitf=3) | (hitf=-3) { //OςOƂłΓ_͎Op`ɑ݂B
				//ʖ@
				nx=aa(6,0,cn)
				ny=aa(6,1,cn)
				nz=aa(6,2,cn)

				//Փ˂Ƃo
				fno=cn
				fn=nx,ny,nz
				fmat=int(aa(7,0,cn))

				PN=vy*ny //P̃xNgi0.5ƂĂjƖ@Ƃ̓
				PL=((aa(0,0,cn)-px)*nx)+((aa(0,1,cn)-py)*ny)+((aa(0,2,cn)-pz)*nz)//ʂƓ_oƂ̋ Pʂ1_ւ̃xNgƖ@Ƃ̓ςŋ܂
				TT=PL/PN
				;if (TT >= -2.0) & (TT <= 2.0) {	//㉺ɔ
				ha1 = TT
				
					
				if TT < ha0 && TT > -1.0{
					ha0 = ha1
					result = 1
					pyx=py+(vy*TT)-0.2							//ʂƂ̌_0.2ɕĂ
					;break
				};if TT < ha0 && TT > -1.0{
			}//ʂƂ̌_YW(hitf=3) | (hitf=-3)
		loop
	}
	if ha0 != 10000.0 : py = pyx
return
#global
	 
#module

#deffunc LoadXWall str file, array ap
;f̏Sēǂݍ
	notesel np
	noteload file
   	dim dd,notmax
 	repeat notemax
        noteget dd(cnt), cnt
    loop
    repeat notemax
    	;"Mesh {"ȍ~sڂȂ̂𒲂ׂ
   		val = instr (dd(cnt),0,"Mesh {")
  	 	if val != -1{
			;ꂽscntxɑ
			cntx = cnt
	  	}
	
	  	;dcnt Ƀf_𒊏o
	  	val2 = strtrim(dd(cntx+1),0,';');";"𕶎菜
	  	;cɕϊB
	  	dcnt =int(val2)
	  	;dd(cntx)
   	loop   
 	;f̖ʐ𒊏o
 	;fߖʐô"Mesh {"ɒ_̋Lqs𑫂3𑫂ʒu
 	
 	val = strtrim(dd(cntx+dcnt+3),0,';')
 	mcnt = int(val);mcantɖʐ
 
 	
 	;_Ă鏇ɏo
 	dim px,dcnt+1
 	dim py,dcnt+1
 	dim pz,dcnt+1
 	
 	repeat dcnt
 		val = strtrim(dd(cntx+2+cnt),0,',');","𕶎菜
 		
		split val, ";", x, y, z
		px(cnt) = double(x)
		py(cnt) = double(y)
		pz(cnt) = double(z)
		
 	loop
 
 	;Op`@l𒊏o
 	dim d,mcnt+1
 	cnt2 = 0
 	repeat mcnt
 		val = dd(cntx+dcnt+4+cnt)
 		strrep val,"3;",""
		
 		;val = strtrim(dd(cntx+dcnt+4+cnt),3,';');"3"𕶎菜
 		;val2 = strtrim(val,3,',');";"𕶎菜
 		
		split val, ",", x, y, z,w
		d(cnt2) = int(x) : cnt2++
		d(cnt2) = int(y) : cnt2++
		d(cnt2) = int(z) : cnt2++
		
 	loop
 
 	
 	cntx2 = 0
 	cnt3 = 0
 	repeat mcnt*9
 		if cnt3 = 0 :  x = px(d(cntx2))
 		if cnt3 = 1 :  x = py(d(cntx2))
 		if cnt3 = 2 :  x = pz(d(cntx2))
 		ap(cnt) = x
 		cnt3++
 		if cnt3 = 3 : cnt3 = 0 : cntx2++
 	loop
 	
 	return
#global
#module
#deffunc ChkConfWall array ap,var dx,var dy,var dz,var ex,var ey,var ez,var hit ,var up,var ax2,var az2,var bx2,var bz2,var hiy
	vdx = dx - ex
	vdz = dz - ez
	
	cnt2 = 0
	mcnt2 = 0
	
	foreach ap
 		mcnt2++
 	loop
 	cntx = 0
 	hit = 0
 	mcnt = mcnt2/9
 	hx = 10000.0
	repeat mcnt
		ax = ap(cnt2):cnt2++
		ay = ap(cnt2):cnt2++
		az = ap(cnt2):cnt2++
		
		bx = ap(cnt2):cnt2++
		by = ap(cnt2):cnt2++
		bz = ap(cnt2):cnt2++
	
		cx = ap(cnt2):cnt2++
		cy = ap(cnt2):cnt2++
		cz = ap(cnt2):cnt2++
		
		uphit = 0
		
		;̌߂
		;r = { (Dy - Cy)(Cx - Ax) - (Dx - Cx)(Cy - Ay) }/ { (Bx - Ax)(Dy - Cy) - (By - Ay)(Dx - Cx) }@EEEB
		;s = { (By - Ay)(Cx - Ax) - (Bx - Ax)(Cy - Ay) }/ { (Bx - Ax)(Dy - Cy) - (By - Ay)(Dx - Cx) }@EEEC
		;@AAArAs Ɂ@0`1@̊Ԃ̒lƂċ܂Ȃ΁AQ͌ĂȂƂȂ܂
		r0 = 5.0
		r1 = ((ez-dz)*(dx-ax))-((ex-dx)*(dz-az))
		r2 = ((bx-ax)*(ez-dz))-((bz-az)*(ex-dx))
		if r1 != 0 && r2 != 0 : r0 = r1/r2
		s0 = 5.0
		s1 = ((bz-az)*(dx-ax))-((bx-ax)*(dz-az))
		s2 = ((bx-ax)*(ez-dz))-((bz-az)*(ex-dx))
		if s1 != 0 && s2 != 0 : s0 = s1/s2
		
		if r0 >= 0 && r0 <= 1{
			if s0 >= 0 && s0 <= 1{
				uphit = 1
				
				if dy-hdown > -ay && dy-hdown > -by && dy-hdown > -cy{
					uphit = 0
				}
				
				if dy-hup < -ay && dy-hup < -by && dy-hup < -cy{
					uphit = 0
				}
				if uphit = 1{
					hit = uphit
					ex = dx
					ez = dz
	
					ax2 = ax
					az2 = az
	
					bx2 = bx
					bz2 = bz
	
					ay1 = ay
					by1 = by
					cy1 = cy
					if ay >= by && ay >= cy{
						hiy = ay
					}
					if by >= ay && by >= cy{
						hiy = by
					}
					if cy >= by && cy >= ay{
						hiy = cy
					}
				}
				;hit = ay
			}
		}
	
	loop
	
return
#global
#module
;w肵_ƕǂ̔s
#deffunc ChkConfWall2 array ap,var dx,var dy,var dz,var ex,var ey,var ez,var hit ,var up,var ax2,var az2,var bx2,var bz2,var hiy,var ax,var ay,var az,var bx,var by,var bz,var cx,var cy,var cz
	vdx = dx - ex
	vdz = dz - ez
	
	cnt2 = 0
	mcnt2 = 0
	
	
 	cntx = 0
 	hit = 0
 	
 	hx = 10000.0
	repeat 1
		;ax = ap(cnt2):cnt2++
		;ay = ap(cnt2):cnt2++
		;az = ap(cnt2):cnt2++
		
		;bx = ap(cnt2):cnt2++
		;by = ap(cnt2):cnt2++
		;bz = ap(cnt2):cnt2++
	
		;cx = ap(cnt2):cnt2++
		;cy = ap(cnt2):cnt2++
		;cz = ap(cnt2):cnt2++
		
		uphit = 0
		
		;̌߂
		;r = { (Dy - Cy)(Cx - Ax) - (Dx - Cx)(Cy - Ay) }/ { (Bx - Ax)(Dy - Cy) - (By - Ay)(Dx - Cx) }@EEEB
		;s = { (By - Ay)(Cx - Ax) - (Bx - Ax)(Cy - Ay) }/ { (Bx - Ax)(Dy - Cy) - (By - Ay)(Dx - Cx) }@EEEC
		;@AAArAs Ɂ@0`1@̊Ԃ̒lƂċ܂Ȃ΁AQ͌ĂȂƂȂ܂
		r0 = 5.0
		r1 = ((ez-dz)*(dx-ax))-((ex-dx)*(dz-az))
		r2 = ((bx-ax)*(ez-dz))-((bz-az)*(ex-dx))
		if r1 != 0 && r2 != 0 : r0 = r1/r2
		s0 = 5.0
		s1 = ((bz-az)*(dx-ax))-((bx-ax)*(dz-az))
		s2 = ((bx-ax)*(ez-dz))-((bz-az)*(ex-dx))
		if s1 != 0 && s2 != 0 : s0 = s1/s2
		
		if r0 >= 0 && r0 <= 1{
			if s0 >= 0 && s0 <= 1{
				uphit = 1
				
				if dy-hdown > -ay && dy-hdown > -by && dy-hdown > -cy{
					uphit = 0
				}
				
				if dy-hup < -ay && dy-hup < -by && dy-hup < -cy{
					uphit = 0
				}
				if uphit = 1{
					hit = uphit
					ex = dx
					ez = dz
	
					ax2 = ax
					az2 = az
	
					bx2 = bx
					bz2 = bz
	
					ay1 = ay
					by1 = by
					cy1 = cy
					if ay >= by && ay >= cy{
						hiy = ay
					}
					if by >= ay && by >= cy{
						hiy = by
					}
					if cy >= by && cy >= ay{
						hiy = cy
					}
				}
				;hit = ay
			}
		}
	
	loop
	
return
#global

#module
#deffunc delobjXGround str file, array aa
//^ZRCAo͂Xt@CiDirectX Retained modejnʂƂēǂݍށiׂĎOpʂł邱ƂKvj
//loadground file, aa
//file	t@CpX
//aa	}bv̖ʁA_f[^Aʐi|SjAXZ̍WőlAŏlŕԂ

	notesel np									//ϐnpΏ
	noteload file								//Xt@Cǂݍ

	dim gyou,notemax

	repeat notemax
		noteget gyou(cnt), cnt					//sf[^ɕ
	loop

	repeat notemax
		kekka = instr (gyou(cnt),0,"Mesh {")	//sf[^當uMeshov		^ZRCȀoXtH[}bgixof 0302txt 0064j̏ꍇ̂ݎgp\
		if kekka != -1 :an=cnt					//sԍۑ ŌɌuMeshov
	loop

	dotmax=int(gyou(an+1))						//_

	ddim sx,dotmax
	ddim sy,dotmax
	ddim sz,dotmax

	meshmax =int(gyou(an+3+dotmax))				//ʐ
	dim n1d,meshmax								//_ԍۑpϐ
	dim n2d,meshmax
	dim n3d,meshmax
	ddim aa,8,3,meshmax							//o͗pzϐ@SʁE_f[^
	
return
#global
	 
#module

#deffunc delobjXWall str file, array ap
;f̏Sēǂݍ
	notesel np
	noteload file
   	
   	dim dd,notmax
 	repeat notemax
        noteget dd(cnt), cnt
        
    loop
    
    repeat notemax
    	;"Mesh {"ȍ~sڂȂ̂𒲂ׂ
   		val = instr (dd(cnt),0,"Mesh {")
  	 	if val != -1{
			;ꂽscntxɑ
			cntx = cnt
	  	}
	
	  	;dcnt Ƀf_𒊏o
	  	val2 = strtrim(dd(cntx+1),0,';');";"𕶎菜
	  	;cɕϊB
	  	dcnt =int(val2)
	  	;dd(cntx)
   	loop   
 	;f̖ʐ𒊏o
 	;fߖʐô"Mesh {"ɒ_̋Lqs𑫂3𑫂ʒu
 	
 	val = strtrim(dd(cntx+dcnt+3),0,';')
 	mcnt = int(val);mcantɖʐ
 
 	;_Ă鏇ɏo
 	dim px,dcnt+1
 	dim py,dcnt+1
 	dim pz,dcnt+1
 
 	;Op`@l𒊏o
 	dim d,mcnt+1
 	dim ap,mcnt*9
 	
 	return
 	#global



  