それで、キャラクターがリングアウトするなどした時に、スプライトを表示するようにしよ
うとしたのですが、
”line750(hspcmp)外部DLLの読み込みに失敗しました。”
と表示されてしまうのです。(前に、ファイルの名前を打ちまちがえたときも、同じエラー
メッセージがでたので、DLLでなくとも”DLLの読み込みに失敗しました。”と出る場
合があるようです。)750行目にはE3DRenderSpliteと書いてあるので多分、画像の読み込み
に失敗したのか?と思って調べてみましたが、名前もファイルパスも合っていました。
自分ではどこが間違っているのかが調べても分かりません。どなたか、教えて下さい。
よろしくお願いします。
bgscr 0,ginfo_dispx,ginfo_dispy,0,0,0,ginfo_dispx,ginfo_dispy CHARA = 1 *GAME #include "e3dhsp3.as" bgscr 0,ginfo_dispx,ginfo_dispy,0,0,0,ginfo_dispx,ginfo_dispy ; ステージ1 *CGAME #module #deffunc waitbyfps int p1, var fps E3DWaitbyFPS@ p1, fps await 1 return #global dim keybuf, 512 pointmax = 150 ;点数の最大値 max = 30 screenw = ginfo_dispx : screenh = ginfo_dispy bgscr 0, screenw, screenh, 1 ;初期化 E3DEnableDbgFile E3DInit 0, -1, 0, 16, 0, scid1 ;カメラの初期化 camposx = 0.0 : camposy = 1500.0 : camposz = -6000.0 E3DSetCameraPos camposx, camposy, camposz camdegxz = 180.0 : camdegy = 0.0 E3DSetCameraDeg camdegxz, camdegy afterimagenum = 5 confflag = 0 endflag = 0 ;file のpath 用のバッファーの作成 pathlen = 2048 sdim mediadir, pathlen mediadir = dir_cur + "\\stage1" sdim pathbuf, pathlen, 2 ;projectionの変更をしたいときは、以下の2行を有効にしてください。 proj_near = 100 : proj_far = 20000 : proj_fov = 50 E3DSetProjection proj_near, proj_far, proj_fov E3DCreateProgressBar E3DSetProgressBar 0 ;地面データのロード pathbuf.0 = mediadir + "\\gl.sig" E3DSigLoad pathbuf.0, hsid0 posx0 = 0.0 : posy0 = 0.0 : posz0 = 0.0 degx0 = 0.0 : degy0 = 0.0 : degz0 = 0.0 E3DSetPos hsid0, posx0, posy0, posz0 E3DSetDir hsid0, degx0, degy0, degz0 frameno0 = 0 E3DSetProgressBar 30 ;”てき”データのロード pathbuf.0 = mediadir + "\\teki.sig" E3DSigLoad pathbuf.0, hsid1 pathbuf.0 = mediadir + "\\tekiidling.qua" E3DAddMotion hsid1, pathbuf.0, mk1_idling, max1_idling pathbuf.0 = mediadir + "\\tekipunch.qua" E3DAddMotion hsid1, pathbuf.0, mk1_punch, max1_punch pathbuf.0 = mediadir + "\\tekikick.qua" E3DAddMotion hsid1, pathbuf.0, mk1_kick, max1_kick pathbuf.0 = mediadir + "\\tekiact1.qua" E3DAddMotion hsid1, pathbuf.0, mk1_act1, max1_act1 pathbuf.0 = mediadir + "\\tekidefense.qua" E3DAddMotion hsid1, pathbuf.0, mk1_defense, max1_defense pathbuf.0 = mediadir + "\\teki_junp.qua" E3DAddMotion hsid1, pathbuf.0, mk1_junp, max1_junp pathbuf.0 = mediadir + "\\teki_huse.qua" E3DAddMotion hsid1, pathbuf.0, mk1_huse, max1_huse pathbuf.0 = mediadir + "\\tekiwin.qua" E3DAddMotion hsid1, pathbuf.0, mk1_win, max1_win pathbuf.0 = mediadir + "\\tekifinal.qua" E3DAddMotion hsid1, pathbuf.0, mk1_final, max1_final pathbuf.0 = mediadir + "\\teki_ua.qua" E3DAddMotion hsid1, pathbuf.0, mk1_ua, max1_ua ; E3DSetProgressBar 60 stepfast = 2;モーションの速さ ;遅いマシンで使用する方は、以下の行を有効にしてください。 ;(モーションが荒くなりますが、速く見えます) E3DSetMotionStep hsid1, mk1_idling, stepfast;速くするモーションの種類 E3DSetMotionStep hsid1, mk1_punch, stepfast E3DSetMotionStep hsid1, mk1_kick, stepfast E3DSetMotionStep hsid1, mk1_act1, stepfast E3DSetMotionKind hsid1, mk1_idling posx1 = 1000.0 : posy1 = 0.0 : posz1 = 0.0 degx1 = 0.0 : degy1 = 90.0 : degz1 = 0.0 E3DSetPos hsid1, posx1, posy1, posz1 E3DSetDir hsid1, degx1, degy1, degz1 frameno1 = 0 newmk1 = 0 point1 = pointmax sspoint1 =10;sspointmax ;キャラのロード if CHARA=1 { pathbuf.0 = mediadir + "\\na_parts_1_bone.sig" E3DSigLoad pathbuf.0, hsid2 pathbuf.0 = mediadir + "\\na_parts1_idling.qua" E3DAddMotion hsid2, pathbuf.0, mk2_idling, max2_idling pathbuf.0 = mediadir + "\\na_parts1_punch.qua" E3DAddMotion hsid2, pathbuf.0, mk2_punch, max2_punch pathbuf.0 = mediadir + "\\na_parts1_kick.qua" E3DAddMotion hsid2, pathbuf.0, mk2_kick, max2_kick pathbuf.0 = mediadir + "\\na_parts1_act1.qua" E3DAddMotion hsid2, pathbuf.0, mk2_act1, max2_act1 pathbuf.0 = mediadir + "\\na_parts1_defense.qua" E3DAddMotion hsid2, pathbuf.0, mk2_defense, max2_defense pathbuf.0 = mediadir + "\\na_parts1_win.qua" E3DAddMotion hsid2, pathbuf.0, mk2_win, max2_win pathbuf.0 = mediadir + "\\na_parts1_final.qua" E3DAddMotion hsid2, pathbuf.0, mk2_final, max2_final pathbuf.0 = mediadir + "\\sawablast.qua" E3DAddMotion hsid2, pathbuf.0, mk2_blast, max2_blast pathbuf.0 = mediadir + "\\ua.qua" E3DAddMotion hsid2, pathbuf.0, mk2_ua, max2_ua ;遅いマシンで使用する方は、以下の行を有効にしてください。 ;(モーションが荒くなりますが、速く見えます) E3DSetMotionStep hsid2, mk2_idling, stepfast E3DSetMotionStep hsid2, mk2_punch, stepfast E3DSetMotionStep hsid2, mk2_kick, stepfast E3DSetMotionStep hsid2, mk2_act1, stepfast E3DSetProgressBar 90 E3DSetMotionKind hsid2, mk2_idling posx2 = -1000.0 : posy2 = 0.0 : posz2 = 0.0 degx2 = 0.0 : degy2 = -90.0 : degz2 = 0.0 E3DSetPos hsid2, posx2, posy2, posz2 E3DSetDir hsid2, degx2, degy2, degz2 frameno2 = 0 newmk2 = 0 point2 = pointmax sspoint2 = 10;sspointmax ;乱数のテスト ;seed = 65536 ;E3DSeed seed ;以下、ライトの設定 lightdirx1 = 0.0 lightdiry1 = -2.0 lightdirz1 = 1.0 lightr1 = 200 lightg1 = 180 lightb1 = 150 ;平行光源 E3DCreateLight lid1 E3DSetDirectionalLight lid1, lightdirx1, lightdiry1, lightdirz1, lightr1, lightg1, lightb1 lightposx2 = 0.0 lightposy2 = 500.0 lightposz2 = 0.0 lightdist2 = 2000.0 lightr2 = 190 lightg2 = 150 lightb2 = 90 ;ポイントライト E3DCreateLight lid2 E3DSetPointLight lid2, lightposx2, lightposy2, lightposz2, lightdist2, lightr2, lightg2, lightb2 pathbuf.0 = mediadir + "\\lake.bmp" pathbuf.1 = mediadir + "\\cloud3.bmp" E3DCreateBG scid1, pathbuf.0, pathbuf.1, 0.001, 0.0, 0 switchflag1 = 0 pathbuf.0 = mediadir + "\\bar.bmp" E3DCreateSprite pathbuf.0, 1, spriteid0 E3DGetSpriteSize spriteid0, spritew0, spriteh0 pathbuf.0 = mediadir + "\\bar2.bmp" E3DCreateSprite pathbuf.0, 1, spriteid1 E3DGetSpriteSize spriteid1, spritew0, spriteh0 pathbuf.0 = mediadir + "\\KLG.bmp" E3DCreateSprite pathbuf.0, 0, spriteid2 E3DGetSpriteSize spriteid2, spritew0, spriteh0 pathbuf.0 = mediadir + "\\KO.bmp" E3DCreateSprite pathbuf.0, 0, spriteid3 E3DGetSpriteSize spriteid3, spritew30, spriteh40 pathbuf.0 = mediadir + "\\MATER.bmp" E3DCreateSprite pathbuf.0, 1, spriteid4 E3DGetSpriteSize spriteid4, spritew4, spriteh1 pathbuf.0 = mediadir + "\\RingOut.bmp" E3DCreateSprite pathbuf.0, 1, spriteid5 E3DGetSpriteSize spriteid5, spritew4, spriteh1 pathbuf.0 = mediadir + "\\DRAW.bmp" E3DCreateSprite pathbuf.0, 1, spriteid6 E3DGetSpriteSize spriteid6, spritew4, spriteh1 chkfps1 = 0 confstat = 0 cls 4 E3DDestroyProgressBar randomize *main ; keybuf変数は、メインループの外で、dim keybuf, 256 として、確保しておいてください。 E3DGetKeyboardState keybuf if keybuf.VK_ESCAPE = 1 : goto *bye ; [ESC]で終了 ;乱数のテスト ;range = 15 ;E3DRand range, rand gosub *MoveCamera ;if HENSIN = 1:gosub *CreateLight;ライト設定 if endflag = 1 :goto *OVER if endflag = 0 { gosub *MoveChara1 attackflag = 0 g = 0 gosub *MoveChara2 } E3DSetNewPose hsid1, frameno1 E3DSetNewPose hsid2, frameno2 E3DChkInView scid1, hsid0 E3DChkInView scid1, hsid1 E3DChkInView scid1, hsid2 E3DBeginScene scid1 ;不透明部分の描画をする E3DRender scid1, hsid0, 0, frameno0, 0 E3DRender scid1, hsid1, 0, frameno1, 0 E3DRender scid1, hsid2, 0, frameno2, 0 ;半透明部分の描画をする E3DRender scid1, hsid1, 1, frameno1, 0, 0, 1, 1 E3DRender scid1, hsid2, 1, frameno2, 0, 0, 1, 1 gosub *DrawText gosub *DrawIndicator E3DEndScene E3DPresent scid1 E3DChkConflict hsid0, hsid1, Ring, conf;リングアウトしているかどうかしらべる。 E3DChkConflict hsid0, hsid2, RingO, conf if Ring=0{ E3DSetPos hsid1,,-30.0,, goto *RingOut } if RingO=0{ E3DSetPos hsid2,,-30.0,, goto *RingOut } E3DChkConflict hsid1, hsid2, confflag, confstat if ( confstat > 0 ){ ;オブジェクトが視野外に出たときは、E3DChkConflictは機能しないので、代わりの関数を使う。 E3DChkConfBySphere hsid1, hsid2, 2, confflag } gosub *ChangePhysicalPoint waitbyfps 150, chkfps1 goto *main *bye picload "Quitnow.jpg" E3DBye end *MoveCamera ;*** cameraの注視点を、2体の中心にセットする E3DGetPos hsid1, posx1, posy1, posz1 E3DGetPos hsid2, posx2, posy2, posz2 targetposx = ( posx1 + posx2 ) / 2.0 targetposy = (( posy1 + posy2 ) / 2.0)+1500 targetposz = ( posz1 + posz2 ) / 2.0 upvecx = 0.0 : upvecy = 1.0 : upvecz = 0.0 E3DSetCameraTarget targetposx, targetposy, targetposz, upvecx, upvecy, upvecz ;*** 外積を使って、cameraの位置をセットする vecx1 = posx2 - posx1 vecy1 = posy2 - posy1 vecz1 = posz2 - posz1 cameradist = (posx1 - posx2) + 2500 E3DCross vecx1, vecy1, vecz1, upvecx, upvecy, upvecz, crossx, crossy, crossz crossx *= cameradist crossy *= cameradist crossz *= cameradist camposx = targetposx + crossx camposz = targetposz + crossz camposy = 2000 E3DSetCameraPos camposx, camposy, camposz return *CreateLight;ライト lightposx3 = 0.0 lightposy3 = 500.0 lightposz3 = -2000.0 lightdirx3 = 0.0 lightdiry3 = 0.0 lightdirz3 = 1.0 lightdist3 = 4000.0 lightangle3 = 20.0 lightr3 = 0 lightg3 = 0 lightb3 = 0 ;スポットライト E3DCreateLight lid3 E3DSetSpotLight lid3, lightposx3, lightposy3, lightposz3, lightdirx3, lightdiry3, lightdirz3, lightdist3, lightangle3, lightr3, lightg3, lightb3 *MoveChara1 ;hsid1のキャラクタの動作制御 k=0 forwardstep = 80.0 backstep = -100.0 degstep = 7.0 mdegstep = -degstep if attackflag = 0{ a=rnd (7) b=rnd (32) ; ;c=rnd (100) ; ;d=rnd (100) e=rnd (80) f=rnd (80) } if attackflag = 1 { if puntiflag = 1 : f = rnd (13) if kickflag = 1 : e = rnd (14) if actflag = 1 : f = rnd (12) if attackflag = 1 :g = rnd (5):attackflag = 0 } if attackflag = 1: ; VK_ が頭につく、定数の詳細は、e3dhsp_vk.as をご覧ください。 ; keybuf は、GetKeyboardState 命令で、セットされます。 if a = 1 : k+= 1 ;前移動 if b = 2 : k+= 2 ;後移動 ;if c = 4 : k+= 4 左 ;if d = 8 : k+= 8 右 if e = 16 : k+= 16 ;パンチ if f = 20 : k+= 32 ;キック if g = 1 : k+= 64 attackflag = 0 E3DGetMotionKind hsid1, curmk1 newmk1 = curmk1 ;モーションのフレーム番号が、最大値に到達したら、モーションをidlingに戻す。 if (curmk1 = mk1_punch)&(frameno1 >= max1_punch) : newmk1 = mk1_idling if (curmk1 = mk1_kick)&(frameno1 >= max1_kick) : newmk1 = mk1_idling if (curmk1 = mk1_defense)&(frameno1 >= max1_defense) : newmk1 = mk1_idling if (curmk1 = mk1_act1)&(frameno1 >= max1_act1) : newmk1 = mk1_idling ;キーに応じて、新しいアクションをセットする。相手方向を向くようにする。 if (curmk1 = mk1_idling) & ((k&16) != 0) : newmk1 = mk1_punch : E3DDirToTheOtherXZ hsid1, hsid2 if (curmk1 = mk1_idling) & ((k&32) != 0) : newmk1 = mk1_kick : E3DDirToTheOtherXZ hsid1, hsid2 if (curmk1 = mk1_idling) & ((k&64) != 0) : newmk1 = mk1_defense : E3DDirToTheOtherXZ hsid1, hsid2 if (curmk1 = mk1_idling) & ((k&16) != 0) & ((k&32) != 0) : newmk1 = mk1_act1 : E3DDirToTheOtherXZ hsid1, hsid2 if curmk1 = mk1_idling : E3DDirToTheOtherXZ hsid1, hsid2 if newmk1 != curmk1 : E3DSetMotionKind hsid1, newmk1 if (newmk1 != curmk1) & (newmk1 = mk1_act1) : E3DCreateAfterImage hsid1, afterimagenum : E3DSetAlpha hsid1, 1 ;キーに応じて、移動、回転をする。 if newmk1 = mk1_idling { if k&1 : E3DPosForward hsid1, forwardstep if k&2 : E3DPosForward hsid1, backstep ;if k&4 : E3DRotateY hsid1, mdegstep ;if k&8 : E3DRotateY hsid1, degstep } ;confflagが0で無い場合、2体が重なりすぎないように、離す。 if (confflag != 0) & ( (newmk1 = mk1_idling) | (newmk1 = mk1_defense) ) : E3DSeparateFrom hsid1, hsid2,2.0 attackflag = 0 return *MoveChara2 ;hsid2のキャラクタの動作制御 k=0 forwardstep = 110.0 backstep = -200.0 ;degstep = 6.0 ;mdegstep = -degstep ; VK_ が頭につく、定数の詳細は、e3dhsp_vk.as をご覧ください。 ; keybuf は、GetKeyboardState 命令で、セットされます。 if keybuf.'A' = 1 : k+=1 ;前進 if keybuf.'Z' = 1 : k+=2 ;後退 ;if keybuf.'Z' = 1 : k+=4 ;左 ;if keybuf.'C' = 1 : k+=8 ;右 if keybuf.'B' = 1 : k+=16 ;弱攻撃 if keybuf.'N' = 1 : k+=32 ;中攻撃 if keybuf.'M' = 1 : k+=128 ;強攻撃 if keybuf.'W' = 1 : k+=256 ;ジャンプ if keybuf.'S' = 1 : k+=512 ;伏せ E3DGetMotionKind hsid2, curmk2 newmk2 = curmk2 ;モーションのフレーム番号が、最大値に到達したら、モーションをidlingに戻す。 if (curmk2 = mk2_punch)&(frameno2 >= max2_punch) : newmk2 = mk2_idling if (curmk2 = mk2_kick)&(frameno2 >= max2_kick) : newmk2 = mk2_idling if (curmk2 = mk2_defense)&((k&64) = 0)&(frameno2 >= max2_defense) : newmk2 = mk2_idling if (curmk2 = mk2_act1)&(frameno2 >= max2_act1) : newmk2 = mk2_idling : E3DDestroyAfterImage hsid2 : E3DSetAlpha hsid2, 0 if (curmk2 = mk2_blast)&(frameno2 >= max2_blast) :newmk2 = mk2_idling if (curmk2 = mk2_ua)&(frameno2 >= max2_ua) :newmk2 = mk2_idling ;キーに応じて、新しいアクションをセットする。相手方向を向くようにする。 if (curmk2 = mk2_idling) & ((k&16) != 0) : newmk2 = mk2_punch : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & ((k&32) != 0) : newmk2 = mk2_kick : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & ((k&64) != 0) : newmk2 = mk2_defense : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & ((K&32) != 0) :sspoint2<10 : sspoint-10 : newmk2 = mk2_blast :E3DDirToTheOtherXZ hsid2,hsid1 if (curmk2 = mk2_idling) & ((k&128) != 0) & ((k&32) != 0) : newmk2 = mk2_act1 : E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) & X=1:newmk2 = mk2_ua :X=0: E3DDirToTheOtherXZ hsid2, hsid1 if (curmk2 = mk2_idling) : E3DDirToTheOtherXZ hsid2, hsid1 if newmk2 != curmk2 : E3DSetMotionKind hsid2, newmk2 if (newmk2 != curmk2) & (newmk2 = mk2_act1) : E3DCreateAfterImage hsid2, afterimagenum : E3DSetAlpha hsid2, 1 ;キーに応じて、移動、回転をする。 if newmk2 = mk2_idling { if k&1 : E3DPosForward hsid2, forwardstep if k&2 : E3DPosForward hsid2, backstep ;if k&4 : E3DRotateY hsid2, mdegstep ;if k&8 : E3DRotateY hsid2, degstep } ;confflagが0で無い場合、2体が重なりすぎないように、離す。 if (confflag != 0) & ( (newmk2 = mk2_idling) | (newmk2 = mk2_defense) ) : E3DSeparateFrom hsid2, hsid1 return *RingOut E3DDestroySprite spriteid0 E3DDestroySprite spriteid1 ; E3DDestroySprite spriteid2 ; E3DDestroySprite spriteid3 E3DDestroySprite spriteid4 E3DBeginSprite E3DRenderSprite spriteid5, 0, 0, 0, 0,0.0 E3DEndSprite if Ring=1:OWINER=1:goto *OVER if RingO=1:TWINER=1:goto *OVER if Ring=1&RingO=1:E3DDestroySprite spriteid5:DRAWFLAG=1:goto *DRAW *DRAW E3DBeginSprite E3DRenderSprite spriteid6, 0, 0, 0, 0,0.0 E3DEndSprite wait 300 goto *CGAME *ChangePhysicalPoint ;confflag と、それぞれのモーションの種類を元に、pointの減算をする。 ;defense中は、ダメージを受けないようにする。 if confflag != 0 { ;プレイヤー if (newmk1 != mk1_defense) : point1 -= 0 if (newmk1 != mk1_defense) & ( (newmk2 = mk2_punch)): if point1>0 : point1 -= 1 :punchflag = 1:attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー if (newmk1 != mk1_defense) & ( (newmk2 = mk2_kick)) : if point1>0 : point1 -= 2 :kickflag = 1:attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー if (newmk1 != mk1_defense) & ( (newmk2 = mk2_act1)) : if point1>0 :actflag = 1: point1 -= 2 :attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー if (newmk1 != mk1_defense) & ( (newmk2= mk2_blast)): if point1>0 :blastflag = 1: point1 -= 2 :attackflag = 1:if sspoint1<30 :sspoint1 += 0.1;プレーヤー ;てき if (newmk2 != mk2_defense) & ( (newmk1 = mk1_punch)):sspoint2 += 1: point2 -= 1:X=rnd (3):if sspoint1<30 :sspoint2 += 1:;てき if (newmk2 != mk2_defense) & ( (newmk1 = mk1_kick)) :sspoint2 += 1: point2 -= 2:X=rnd (3):if sspoint1<30 :sspoint2 += 1:;てき if (newmk2 != mk2_defense) & ( (newmk1 = mk1_act1)) :sspoint2 += 1: point2 -= 3:X=rnd (3):if sspoint1<30 :sspoint2 += 1:;てき if (newmk2 != mk2_defense) : point2 -= 0 } ;どちらかのpointがゼロになった時の処理 if endflag = 0 { if point1 <= 0 { E3DDestroyAfterImage hsid1 E3DSetAlpha hsid1, 0 newmk1 = mk1_final E3DSetMotionKind hsid1, newmk1 E3DDestroyAfterImage hsid2 E3DSetAlpha hsid2, 0 newmk2 = mk2_win E3DSetMotionKind hsid2, newmk2 TWINER=1 endflag = 1 }else{ if point2 <= 0 { E3DDestroyAfterImage hsid1 E3DSetAlpha hsid1, 0 newmk1 = mk1_win E3DSetMotionKind hsid1, newmk1 E3DDestroyAfterImage hsid2 E3DSetAlpha hsid2, 0 newmk2 = mk2_final E3DSetMotionKind hsid2, newmk2 OWINER=1 endflag = 1 } } } return *DrawText E3DGetFPS FPS textposx = 10 : textposy = 10 textr = 230 : textg = 50 : textb = 50 textscale = 10 str1 = "Player s H P : " + point2 E3DDrawText textposx, textposy, textscale, textr, textg, textb, str1 textposx = 500 str2 = "TEKI s H P : " + point1 E3DDrawText textposx, textposy, textscale, textr, textg, textb, str2; if endflag = 1 { wstep = 30.0;KO hstep = 30.0;縦の倍率 hpos = 350 wpos1 = 500 scale = 0.0 scale = wstep * 3.0 / spritew0 scale1 = 38 scaley = 0.0 scaley = hstep / spriteh0 E3DBeginSprite E3DRenderSprite spriteid2, scale1, scaley, 10, 700 E3DEndSprite } textposx = 10 : textposy = 700 str5 = "FPS=" + fps E3DDrawText textposx, textposy, textscale, textr, textg, textb, str5 ;textposx = 10 : textposy = 320 ;str6 = "confstat " + confstat ;E3DDrawText textposx, textposy, textscale, textr, textg, textb, str6 return *DrawIndicator wstep = double(screenw) / 12.0 hstep = double(screenh) / 32.0 hpos = 5.0 wpos1 = 1.0;wstep wpos2 = 560.0;wstep * 16.0 scale = 0.0 scale = wstep * 3.0 / spritew0 scale1 = scale * point2 / pointmax scale2 = scale * point1 / pointmax scaley = 0.0 scaley = hstep / spriteh0 E3DBeginSprite E3DRenderSprite spriteid0, scale1, scaley, wpos1, hpos,0.9 E3DRenderSprite spriteid1, scale2, scaley, wpos2, hpos,0.9 E3DRenderSprite spriteid4,1.0,1.0,0,0,0.0 E3DEndSprite return *OVER stop