let dirCurrent = GetCurrentScriptDirectory(); @Initialize { InitFrame(); TScore(); TGraze(); TPlayerLife(); TPlayerSpell(); TBossLife(); TBossTimer(); TCurrentFps(); TReplayFps(); } @MainLoop { yield; } @Event { alternative(GetEventType()) case(EV_START_BOSS_SPELL) { let path = dirCurrent ~ "Default_System_MagicCircle.txt"; let id = LoadScript(path); StartScript(id); } case(EV_GAIN_SPELL) { let objScene = GetEnemyBossSceneObjectID(); let score = ObjEnemyBossScene_GetInfo(objScene, INFO_SPELL_SCORE); TGainSpell(score); } } //---------------------------------------------------- //枠外の背景表示 //---------------------------------------------------- function InitFrame() { let path = GetCurrentScriptDirectory() ~ "img/Default_SystemBackground.png"; let obj = ObjPrim_Create(OBJ_SPRITE_2D); ObjPrim_SetTexture(obj, path); Obj_SetRenderPriority(obj, 0); ObjSprite2D_SetSourceRect(obj, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); ObjSprite2D_SetDestRect(obj, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT); } //---------------------------------------------------- //スコア表示 //---------------------------------------------------- task TScore() { //Score文字列 let objScore = ObjText_Create(); ObjText_SetText(objScore, "Score"); ObjText_SetFontSize(objScore, 20); ObjText_SetFontBold(objScore, true); ObjText_SetFontColorTop(objScore, 255, 255, 255); ObjText_SetFontColorBottom(objScore, 255, 255, 255); ObjText_SetFontBorderType(objScore, BORDER_FULL); ObjText_SetFontBorderColor(objScore,128, 128, 128); ObjText_SetFontBorderWidth(objScore, 2); Obj_SetRenderPriority(objScore, 0.01); ObjRender_SetX(objScore, 428); ObjRender_SetY(objScore, 48); //得点 let pathDigit = GetCurrentScriptDirectory() ~ "img/Default_SystemDigit.png"; let count = 12; let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D); ObjPrim_SetTexture(obj, pathDigit); ObjRender_SetBlendType(obj, BLEND_ADD_RGB); Obj_SetRenderPriority(obj, 0.1); ObjRender_SetY(obj, 72); while(true) { let score = GetScore(); score = min(score, 999999999999); let listNum = DigitToArray(score, count); ObjSpriteList2D_ClearVertexCount(obj); ascent(iObj in 0 .. count) { let num = listNum[iObj]; ObjRender_SetX(obj, 440 + iObj * 14); ObjSpriteList2D_SetSourceRect(obj, num * 36, 0, (num + 1) * 36, 32); ObjSpriteList2D_SetDestRect(obj, 0, 0, 16, 24); ObjSpriteList2D_AddVertex(obj); } yield; } } //---------------------------------------------------- //Graze表示 //---------------------------------------------------- task TGraze() { //Graze文字列 let objGraze = ObjText_Create(); ObjText_SetText(objGraze, "Graze"); ObjText_SetFontSize(objGraze, 20); ObjText_SetFontBold(objGraze, true); ObjText_SetFontColorTop(objGraze, 255, 255, 255); ObjText_SetFontColorBottom(objGraze, 255, 255, 255); ObjText_SetFontBorderType(objGraze, BORDER_FULL); ObjText_SetFontBorderColor(objGraze,128, 128, 128); ObjText_SetFontBorderWidth(objGraze, 2); Obj_SetRenderPriority(objGraze, 0.01); ObjRender_SetX(objGraze, 428); ObjRender_SetY(objGraze, 98); //得点 let pathDigit = GetCurrentScriptDirectory() ~ "img/Default_SystemDigit.png"; let count = 5; let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D); ObjPrim_SetTexture(obj, pathDigit); ObjRender_SetBlendType(obj, BLEND_ADD_RGB); Obj_SetRenderPriority(obj, 0.1); ObjRender_SetY(obj, 122); while(true) { let graze = GetGraze(); graze = min(graze, 99999); let listNum = DigitToArray(graze, count); ObjSpriteList2D_ClearVertexCount(obj); ascent(iObj in 0 .. count) { let num = listNum[iObj]; ObjRender_SetX(obj, 440 + iObj * 14); ObjSpriteList2D_SetSourceRect(obj, num * 36, 0, (num + 1) * 36, 32); ObjSpriteList2D_SetDestRect(obj, 0, 0, 16, 24); ObjSpriteList2D_AddVertex(obj); } yield; } } //---------------------------------------------------- //残機表示 //---------------------------------------------------- task TPlayerLife { //life文字列 let objText = ObjText_Create(); ObjText_SetText(objText, "Player"); ObjText_SetFontSize(objText, 20); ObjText_SetFontBold(objText, true); ObjText_SetFontColorTop(objText, 255, 255, 255); ObjText_SetFontColorBottom(objText, 255, 255, 255); ObjText_SetFontBorderType(objText, BORDER_FULL); ObjText_SetFontBorderColor(objText,128, 128, 128); ObjText_SetFontBorderWidth(objText, 2); Obj_SetRenderPriority(objText, 0.01); ObjRender_SetX(objText, 428); ObjRender_SetY(objText, 150); //残機 let pathDigit = GetCurrentScriptDirectory() ~ "img/Default_SystemDigit.png"; let count = 2; let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D); ObjPrim_SetTexture(obj, pathDigit); ObjRender_SetBlendType(obj, BLEND_ADD_RGB); Obj_SetRenderPriority(obj, 0.1); ObjRender_SetY(obj, 174); while(true) { let point = GetPlayerLife(); point = min(point, 99); point = max(point, 0); let listNum = DigitToArray(point, count); ObjSpriteList2D_ClearVertexCount(obj); ascent(iObj in 0 .. count) { let num = listNum[iObj]; ObjRender_SetX(obj, 440 + iObj * 14); ObjSpriteList2D_SetSourceRect(obj, num * 36, 0, (num + 1) * 36, 32); ObjSpriteList2D_SetDestRect(obj, 0, 0, 16, 24); ObjSpriteList2D_AddVertex(obj); } yield; } } //---------------------------------------------------- //残スペル表示 //---------------------------------------------------- task TPlayerSpell { //Spell文字列 let objText = ObjText_Create(); ObjText_SetText(objText, "Spell"); ObjText_SetFontSize(objText, 20); ObjText_SetFontBold(objText, true); ObjText_SetFontColorTop(objText, 255, 255, 255); ObjText_SetFontColorBottom(objText, 255, 255, 255); ObjText_SetFontBorderType(objText, BORDER_FULL); ObjText_SetFontBorderColor(objText,128, 128, 128); ObjText_SetFontBorderWidth(objText, 2); Obj_SetRenderPriority(objText, 0.01); ObjRender_SetX(objText, 428); ObjRender_SetY(objText, 202); //スペル let pathDigit = GetCurrentScriptDirectory() ~ "img/Default_SystemDigit.png"; let count = 2; let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D); ObjPrim_SetTexture(obj, pathDigit); ObjRender_SetBlendType(obj, BLEND_ADD_RGB); Obj_SetRenderPriority(obj, 0.1); ObjRender_SetY(obj, 226); while(true) { let point = GetPlayerSpell(); point = min(point, 99); let listNum = DigitToArray(point, count); ObjSpriteList2D_ClearVertexCount(obj); ascent(iObj in 0 .. count) { let num = listNum[iObj]; ObjRender_SetX(obj, 440 + iObj * 14); ObjSpriteList2D_SetSourceRect(obj, num * 36, 0, (num + 1) * 36, 32); ObjSpriteList2D_SetDestRect(obj, 0, 0, 16, 24); ObjSpriteList2D_AddVertex(obj); } yield; } } //---------------------------------------------------- //ボスのライフ表示 //---------------------------------------------------- task TBossLife { let path = GetCurrentScriptDirectory() ~ "img/Default_System.png"; let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D); ObjPrim_SetTexture(obj, path); Obj_SetRenderPriority(obj, 0.7); let lastRemStep = -1; let lifeRateRender = 0; let objScene = ID_INVALID; loop { objScene = GetEnemyBossSceneObjectID(); ObjSpriteList2D_ClearVertexCount(obj); if(objScene != ID_INVALID) { RenderLife(); } yield; } function RenderLife() { //残りステップ let countRemStep = ObjEnemyBossScene_GetInfo(objScene, INFO_REMAIN_STEP_COUNT); if(lastRemStep != countRemStep) { //ステップが変化 lifeRateRender = 0; } //ライフ表示 let lifeTotalMax = ObjEnemyBossScene_GetInfo(objScene, INFO_ACTIVE_STEP_TOTAL_MAX_LIFE); let lifeTotal = ObjEnemyBossScene_GetInfo(objScene, INFO_ACTIVE_STEP_TOTAL_LIFE); let lifeRate = min(lifeTotal / lifeTotalMax, lifeRateRender); ObjSpriteList2D_SetSourceRect(obj, 1, 1, 127, 11); ObjSpriteList2D_SetDestRect(obj, 72, 8, 72 + 270 * lifeRate, 12); ObjSpriteList2D_AddVertex(obj); //ライフの区切り表示 ObjSpriteList2D_SetSourceRect(obj, 132, 1, 137, 11); let listLifeDiv = [0] ~ ObjEnemyBossScene_GetInfo(objScene, INFO_ACTIVE_STEP_LIFE_RATE_LIST); ascent(iDiv in 0 .. length(listLifeDiv)) { let rate = listLifeDiv[iDiv]; let x = 72 + 270 * (1-rate); ObjSpriteList2D_SetDestRect(obj, x-1, 4, x + 1, 14); ObjSpriteList2D_AddVertex(obj); } //残りステップ表示 ObjSpriteList2D_SetSourceRect(obj, 1, 1, 127, 11); ascent(iStep in 0 .. countRemStep) { let remStepRate = 58 / countRemStep; ObjSpriteList2D_SetDestRect(obj, 4 + iStep * remStepRate + 2, 8, 4 + (iStep + 1) * remStepRate, 12); ObjSpriteList2D_AddVertex(obj); } lifeRateRender += 0.01; lifeRateRender = min(lifeRateRender, 1); lastRemStep = countRemStep; } } //---------------------------------------------------- //タイマー表示 //---------------------------------------------------- task TBossTimer { let pathDigit = GetCurrentScriptDirectory() ~ "img/Default_SystemDigit.png"; let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D); ObjPrim_SetTexture(obj, pathDigit); ObjRender_SetBlendType(obj, BLEND_ADD_RGB); Obj_SetRenderPriority(obj, 0.75); ObjRender_SetY(obj, 0); let count = 2; let objScene = ID_INVALID; loop { objScene = GetEnemyBossSceneObjectID(); ObjSpriteList2D_ClearVertexCount(obj); if(objScene != ID_INVALID) { RenderTimer(); } yield; } function RenderTimer() { let timer = ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER); timer = min(timer, 99); let listNum = DigitToArray(timer, count); ObjSpriteList2D_ClearVertexCount(obj); ascent(iObj in 0 .. count) { let num = listNum[iObj]; ObjRender_SetX(obj, 352 + iObj * 14); ObjSpriteList2D_SetSourceRect(obj, num * 36, 0, (num + 1) * 36, 32); ObjSpriteList2D_SetDestRect(obj, 0, 0, 16, 24); ObjSpriteList2D_AddVertex(obj); } } } //---------------------------------------------------- //スペルカード取得表示 //---------------------------------------------------- task TGainSpell(score) { let objText = ObjText_Create(); ObjText_SetText(objText, "Spell Card Bonus!"); ObjText_SetFontSize(objText, 32); ObjText_SetFontBold(objText, true); ObjText_SetFontColorTop(objText, 255, 255, 255); ObjText_SetFontColorBottom(objText, 128, 128, 255); ObjText_SetFontBorderType(objText, BORDER_FULL); ObjText_SetFontBorderColor(objText,255, 255, 255); ObjText_SetFontBorderWidth(objText, 1); Obj_SetRenderPriority(objText, 0.6); ObjRender_SetX(objText, 32); ObjRender_SetY(objText, 98); let strScore = "+" ~ IntToString(score); let objScore = ObjText_Create(); ObjText_SetText(objScore, strScore); ObjText_SetFontSize(objScore, 32); ObjText_SetFontBold(objScore, true); ObjText_SetFontColorTop(objScore, 255, 255, 255); ObjText_SetFontColorBottom(objScore, 255, 128, 128); ObjText_SetFontBorderType(objScore, BORDER_FULL); ObjText_SetFontBorderColor(objScore,255, 255, 255); ObjText_SetFontBorderWidth(objScore, 1); Obj_SetRenderPriority(objScore, 0.6); ObjRender_SetX(objScore, 180); ObjRender_SetY(objScore, 140); loop(120) { yield; } Obj_Delete(objText); Obj_Delete(objScore); } //---------------------------------------------------- //FPS表示 //---------------------------------------------------- task TCurrentFps() { let objText = ObjText_Create(); ObjText_SetFontSize(objText, 14); ObjText_SetFontBold(objText, true); ObjText_SetFontColorTop(objText, 160, 160, 255); ObjText_SetFontColorBottom(objText, 64, 64, 255); ObjText_SetFontBorderType(objText, BORDER_FULL); ObjText_SetFontBorderColor(objText,255, 255, 255); ObjText_SetFontBorderWidth(objText, 2); ObjText_SetHorizontalAlignment(objText, ALIGNMENT_RIGHT); ObjText_SetMaxWidth(objText, GetScreenWidth() - 8); Obj_SetRenderPriority(objText, 1.0); ObjRender_SetX(objText, 0); ObjRender_SetY(objText, GetScreenHeight() - 20); loop { let fps = GetCurrentFps(); let text = vtos("1.2f", fps) ~ "fps"; ObjText_SetText(objText, text); yield; } } task TReplayFps() { if(!IsReplay()){return;} let objText = ObjText_Create(); ObjText_SetFontSize(objText, 12); ObjText_SetFontBold(objText, true); ObjText_SetFontColorTop(objText, 128, 128, 255); ObjText_SetFontColorBottom(objText, 64, 64, 255); ObjText_SetFontBorderType(objText, BORDER_FULL); ObjText_SetFontBorderColor(objText,255, 255, 255); ObjText_SetFontBorderWidth(objText, 1); Obj_SetRenderPriority(objText, 1.0); let px = GetStgFrameLeft() + GetStgFrameWidth() - 18; let py = GetStgFrameTop() + GetScreenHeight() - 14; ObjRender_SetX(objText, px); ObjRender_SetY(objText, py); loop { let fps = GetReplayFps(); let text = vtos("02d", fps); ObjText_SetText(objText, text); yield; } } //---------------------------------------------------- //ユーティリティ //---------------------------------------------------- function DigitToArray(let digit,let count) { let res = []; digit = truncate(digit); loop { let tnum = truncate(digit % 10); digit /= 10; res = [tnum] ~ res; if(truncate(digit) == 0){break;} } loop(max(0, count - length(res))) { res = [0] ~ res; } return res; }