#東方弾幕風[Package] #Title["Maiden's Exhibition -少女達の弾幕展覧会- ver0.03a"] #Text["Maiden's Exhibition ver0.03a"] #System["./system/System.txt"] #Player["./player/Marisa/Marisa.txt","./player/Reimu/Reimu.txt"] #include".\SpellCard/SpellCard.txt" #include".\lib/BossCommon/SpellList.txt" let PlayerCharacter; let SoundFlag=1; let StageMusicFlag=1; let StageMusicStopFlag=0; let DemoFlag=0; let SpellCardInfo_Text=[]; let SpellCardInfo_Get=[]; let SpellCardInfo_Challenge=[]; @Initialize{T_Main();} @MainLoop{yield;} @Finalize{} task T_Main { yield; if(LoadCommonDataAreaA1("SPELL_RECORD")) { } else { let Spell_C_Array=[]; let Spell_G_Array=[]; let Spell_Score_Array=[]; let Spell_First_Array=[]; let Spell_Early_Array=[]; let Spell_Favorite_Array=[]; loop(100) { Spell_C_Array=Spell_C_Array~[0]; Spell_G_Array=Spell_G_Array~[0]; Spell_Favorite_Array=Spell_Favorite_Array~[0]; Spell_Score_Array=Spell_Score_Array~[0]; Spell_First_Array=Spell_First_Array~[0]; Spell_Early_Array=Spell_Early_Array~[100000]; } CreateCommonDataArea("SPELL_RECORD"); SetAreaCommonData("SPELL_RECORD","Reimu_Challenge",Spell_C_Array); SetAreaCommonData("SPELL_RECORD","Reimu_Get",Spell_G_Array); SetAreaCommonData("SPELL_RECORD","Reimu_Score",Spell_Score_Array); SetAreaCommonData("SPELL_RECORD","Reimu_First",Spell_First_Array); SetAreaCommonData("SPELL_RECORD","Reimu_Early",Spell_Early_Array); SetAreaCommonData("SPELL_RECORD","Marisa_Challenge",Spell_C_Array); SetAreaCommonData("SPELL_RECORD","Marisa_Get",Spell_G_Array); SetAreaCommonData("SPELL_RECORD","Marisa_Score",Spell_Score_Array); SetAreaCommonData("SPELL_RECORD","Marisa_First",Spell_First_Array); SetAreaCommonData("SPELL_RECORD","Marisa_Early",Spell_Early_Array); /* CreateCommonDataArea("TUNING"); SetAreaCommonData("TUNING","BGM",1); SetAreaCommonData("TUNING","PlayerCharacter",0); SetAreaCommonData("TUNING","SelectIndex",0); SetAreaCommonData("TUNING","SelectPageIndex",0); SetAreaCommonData("TUNING","SortType",0); SetAreaCommonData("TUNING","PlayerName","NEMO"); SetAreaCommonData("TUNING","FavoriteMode",0); SetAreaCommonData("TUNING","Favorite",Spell_Favorite_Array); SetAreaCommonData("TUNING","Setting",[100,100,1,1,1]); */ } if(LoadCommonDataAreaA1("TUNING")) { } else { let Spell_Favorite_Array=[]; loop(100) { Spell_Favorite_Array=Spell_Favorite_Array~[0]; } CreateCommonDataArea("TUNING"); SetAreaCommonData("TUNING","BGM",1); SetAreaCommonData("TUNING","PlayerCharacter",0); SetAreaCommonData("TUNING","SelectIndex",0); SetAreaCommonData("TUNING","SelectPageIndex",0); SetAreaCommonData("TUNING","SortType",0); SetAreaCommonData("TUNING","PlayerName","NEMO"); SetAreaCommonData("TUNING","FavoriteMode",0); SetAreaCommonData("TUNING","Favorite",Spell_Favorite_Array); SetAreaCommonData("TUNING","Setting",[100,100,1,1,1]); } yield; TTitleScene(); T_Sound(); } //---------------------------------------------------- // タイトルシーン //---------------------------------------------------- task T_Sound { let objMusic=ObjSound_Create; ObjSound_Load(objMusic,GetCurrentScriptDirectory~"bgm/menu.ogg"); ObjSound_SetLoopEnable(objMusic,true); // ObjSound_SetLoopTime(objMusic,46.439,107.369); let MaxVulume=GetAreaCommonData("TUNING","Setting",[])[0]; if(SoundFlag==1) { ObjSound_Play(objMusic); while(SoundFlag) { MaxVulume=GetAreaCommonData("TUNING","Setting",[])[0]; ObjSound_SetVolumeRate(objMusic,MaxVulume); yield; } ObjSound_SetFade(objMusic,-40); loop(60){yield;} } Obj_Delete(objMusic); } task TTitleScene { SpellCardInfo_Text=[]; SpellCardInfo_Get=[]; SpellCardInfo_Challenge=[]; SoundFlag=1; StageMusicFlag=0; PlayerCharacter = GetAreaCommonData("TUNING","PlayerCharacter",1);//プレイヤー let SortType = GetAreaCommonData("TUNING","SortType",1);//ソート方法 let FavoriteMode= GetAreaCommonData("TUNING","FavoriteMode",0);//フェイバリットモード //タイトルシーン終了フラグ let bEndTitleScene = false; //タイトルパス設定 let dir = GetCurrentScriptDirectory(); let pathTitle = dir ~ "system/img/Title.png"; let objTitleImage = ObjPrim_Create(OBJ_SPRITE_2D); //2Dスプライトオブジェクト生成 Obj_SetRenderPriorityI(objTitleImage, 20); //描画優先度を設定 ObjPrim_SetTexture(objTitleImage, pathTitle); //テクスチャを設定 ObjSprite2D_SetSourceRect(objTitleImage, 0, 0, 640, 480); ObjSprite2D_SetDestRect(objTitleImage, 0, 0, 640, 480); //タイトル文字列 let objTitleText = ObjText_Create(); ObjText_SetText(objTitleText, "No SpellCard            Difficult Memory"); if(FavoriteMode) { ObjText_SetText(objTitleText, "No * SpellCard            Difficult Memory"); } ObjText_SetFontSize(objTitleText, 14+4); ObjText_SetFontBold(objTitleText, true); ObjText_SetFontColorTop(objTitleText, 255, 255, 255); ObjText_SetFontColorBottom(objTitleText, 160, 160, 255); ObjText_SetFontBorderType(objTitleText, BORDER_NONE); ObjText_SetFontBorderColor(objTitleText,255, 255, 255); ObjText_SetFontBorderWidth(objTitleText, 2*0); Obj_SetRenderPriorityI(objTitleText, 30); ObjRender_SetX(objTitleText, 14); ObjRender_SetY(objTitleText, 14); ObjText_SetFontType(objTitleText,"MS 明朝"); /*************タイトルテキスト表示タスク****************************/ task TMenuItem { function CreateTextObject(let mx, let my, let text) { let obj = ObjText_Create(); ObjText_SetText(obj, text); ObjText_SetFontSize(obj, 14+4); ObjText_SetFontBold(obj, true); ObjText_SetFontColorTop(obj, 255, 255, 255); ObjText_SetFontBorderType(obj, BORDER_NONE); ObjText_SetFontBorderColor(obj,255, 255, 255); ObjText_SetFontBorderWidth(obj, 2*0); Obj_SetRenderPriorityI(obj, 72); ObjRender_SetX(obj, mx); ObjRender_SetY(obj, my); ObjText_SetFontType(obj,"MS 明朝"); Obj_SetValue(obj,"BaseAlpha",255); return obj; } let mx = 14; let my = 14+25; let objTextArray=[]; ascent(i in 0..12) { objTextArray = objTextArray~[CreateTextObject(mx, my+i%12*25, "")]; } let AlphaRate=1; let OldPage=selectPageIndex; let R=255;let G=255;let B=255; let Alpha=255; while(!bEndTitleScene) { ascent(i in 0..12) { if(length(SpellCardInfo_Text)>i+selectPageIndex*12) {//カードNo(配列)以下なら表示 ObjText_SetText(objTextArray[i], SpellCardInfo_Text[i+selectPageIndex*12]); ObjRender_SetX(objTextArray[i], mx); if(SpellCardInfo_Challenge[i+selectPageIndex*12]>=1) {//スペル取得状況によって色分け if(SpellCardInfo_Get[i+selectPageIndex*12]>=1) { R=128;G=255;B=192; } else { R=255;G=64;B=64; } } else { R=255;G=255;B=255; } ObjText_SetFontColorBottom(objTextArray[i], R, G, B); } else {//カードNo(配列)超えたら何も表示しない ObjText_SetText(objTextArray[i], ""); } if(selectIndex%12==i) {//選択行と他の行でAlpha値変更 ObjRender_SetAlpha(objTextArray[i],Alpha); } else { ObjRender_SetAlpha(objTextArray[i],Alpha*0.6); } } OldPage=selectPageIndex; yield; //if(OldPage!=selectPageIndex && !FavoriteMode) if(OldPage!=selectPageIndex || FavoriteModeChange) {//ぺージ変更かつファボモードじゃないなら変更エフェクト発生 let dir=1; if(OldPage+1==selectPageIndex || (selectPageIndex==0 && OldPage==MaxselectPageIndex-1) ) { dir=1; } else { dir=-1; } ascent(i in 0..12) { if(length(SpellCardInfo_Text)>i+OldPage*12) { if(SpellCardInfo_Challenge[i+OldPage*12]>=1) { if(SpellCardInfo_Get[i+OldPage*12]>=1) { R=128;G=255;B=192; } else { R=255;G=64;B=64; } } else { R=255;G=255;B=255; } if(selectIndex%12==i) { CreateEffectText(mx, my+i%12*25,SpellCardInfo_Text[i+OldPage*12],dir,R,G,B,Alpha); } else { CreateEffectText(mx, my+i%12*25,SpellCardInfo_Text[i+OldPage*12],dir,R,G,B,Alpha*0.6); } } } CtrlAlpha(dir); } } ascent(i in 0..12) {//タイトルシーン終了時に削除 Obj_Delete(objTextArray[i]); } /*************ページ変更エフェクトタスク(ネスト)*********************/ task CtrlAlpha(dir) { mx = 14+100*dir; Alpha=0; loop(10) { mx-=10*dir; Alpha+=255/10; yield; } } task CreateEffectText(let mx, let my, let text,dir,R,G,B,Alpha) { let obj = ObjText_Create(); ObjText_SetText(obj, text); ObjText_SetFontSize(obj, 14+4); ObjText_SetFontBold(obj, true); ObjText_SetFontColorTop(obj, 255, 255, 255); ObjText_SetFontBorderType(obj, BORDER_NONE); ObjText_SetFontBorderColor(obj,R,G,B); ObjText_SetFontBorderWidth(obj, 2*0); Obj_SetRenderPriorityI(obj, 72); ObjRender_SetX(obj, mx); ObjRender_SetY(obj, my); ObjText_SetFontType(obj,"MS 明朝"); ObjText_SetFontColorBottom(obj, R, G, B); let BaseAlpha=Alpha; loop(10) { mx-=100/10*dir; Alpha-=BaseAlpha/10; ObjRender_SetX(obj, mx); ObjRender_SetAlpha(obj,Alpha); yield; } Obj_Delete(obj); } /*************ページ変更エフェクトタスク(ネスト)終わり*********************/ } /*************タイトルテキスト表示タスク終わり*************************/ yield;//一応負荷対策 //メニュー配置 let mx = 14; let my = 14+25; let SpellCardSetting=SetSpell(); /*********************ソート部***************************/ alternative(SortType) case(0){}//デフォルト case(1) {//作品順 ascent(i in 0..length(SpellCardSetting)) { ascent(j in i..length(SpellCardSetting)) { if(GetNameNumber(SpellCardSetting[i][2])>GetNameNumber(SpellCardSetting[j][2])) { let Temp=SpellCardSetting[i]; SpellCardSetting[i]=SpellCardSetting[j]; SpellCardSetting[j]=Temp; } } } } case(2) {//難易度順 ascent(i in 0..length(SpellCardSetting)) { ascent(j in i..length(SpellCardSetting)) { if(SpellCardSetting[i][1]>SpellCardSetting[j][1]) { let Temp=SpellCardSetting[i]; SpellCardSetting[i]=SpellCardSetting[j]; SpellCardSetting[j]=Temp; } } } } /******************ソート終わり*************************/ let texts=[]; let Name_texts=[]; let SpellName_texts=[]; let C_Array=[]; let G_Array=[]; alternative(PlayerCharacter) case(0) { C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]); G_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Get",[]); } case(1) { C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]); G_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Get",[]); } ascent(i in 0..length(SpellCardSetting)) { SetSpellCardNumber(SpellCardSetting[i][0]);//共通データ"SpellNumber"に名前に応じて固定番号を入れる if(GetAreaCommonData("TUNING","Favorite",[0])[GetCommonData("SpellNumber",0)]==1 || FavoriteMode==0) {//ファボモードの時はふぁぼしてるのだけ処理 SpellName_texts=SpellName_texts~[SpellCardSetting[i][0]]; Name_texts=Name_texts~[SpellCardSetting[i][2]]; if(C_Array[GetCommonData("SpellNumber",0)]>=1) { texts=texts~[SpellCardSetting[i][0]]; } else { texts=texts~["挑戦者募集中"]; } SetSpellCardNumber(SpellCardSetting[i][0]); let AddStr; /****3桁になるように頭に0をつけている、その後スペース追加*****/ if(i+1<10) { AddStr="00"~IntToString(i+1); } else if(i+1<100) { AddStr="0"~IntToString(i+1); } else { AddStr=IntToString(i+1); } /****お気に入りだったら*をつける*****/ SetSpellCardNumber(SpellCardSetting[i][0]); let F_Array=GetAreaCommonData("TUNING","Favorite",[0]); if(F_Array[GetCommonData("SpellNumber",0)]==1) { AddStr=AddStr~"*"; } else { AddStr=AddStr~" "; } /************スペル名追加しスペースで調整*****************/ texts[i]=AddStr~texts[i]; while(length(texts[i])<38) { texts[i]=texts[i]~" "; } /************スペル名追加しスペースで調整*****************/ texts[i]=texts[i]~SpellCardSetting[i][1]; while(length(texts[i])<56) { texts[i]=texts[i]~" "; } /************取得回数/挑戦回数追加*************************/ AddStr=IntToString(G_Array[GetCommonData("SpellNumber",0)]); texts[i]=texts[i]~AddStr; AddStr=" / "; texts[i]=texts[i]~AddStr; AddStr=IntToString(C_Array[GetCommonData("SpellNumber",0)]); texts[i]=texts[i]~AddStr; } else { texts=texts~[""]; } } /************空要素を削除*************************/ descent(i in 0..length(texts)) { if(texts[i]=="") { texts=erase(texts,i); } } if(length(texts)==0) {//フェイバリットモードにしようとしたけどふぁぼがないからやり直し FavoriteMode=0; SetAreaCommonData("TUNING","FavoriteMode",FavoriteMode); bEndTitleScene = true; Obj_Delete(objTitleImage); Obj_Delete(objTitleText); yield; TTitleScene; return; } ascent(var iText in 0 .. length(texts)) { SetSpellCardNumber(SpellName_texts[iText]); SpellCardInfo_Text=SpellCardInfo_Text~[texts[iText]]; SpellCardInfo_Get=SpellCardInfo_Get~[G_Array[GetCommonData("SpellNumber",0)]]; SpellCardInfo_Challenge=SpellCardInfo_Challenge~[C_Array[GetCommonData("SpellNumber",0)]]; } //メニュー let INDEX_START = 0; let INDEX_REPLAY = 1; let INDEX_QUIT = 2; let selectIndex = GetAreaCommonData("TUNING","SelectIndex",0);//選択位置 let selectPageIndex=GetAreaCommonData("TUNING","SelectPageIndex",0);//選択位置 let FavoriteModeChange=0;//ふぉぼモードに移行状態か見るための変数(エフェクト用) TMenuItem();//スペルテキスト表示 let MaxselectPageIndex=0; let countMenu = 12;//行数設定 //キー状態がリセットされるまで待機 while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;} SelectEffect(); Explain(); //メニュー選択処理 let frameKeyHold = 0;//キー押しっぱなしフレーム数 MaxselectPageIndex=floor(length(texts)/countMenu)+1; if(length(texts)%countMenu==0){MaxselectPageIndex-=1;} let FreeCount=0; DemoFlag=0; let CanselHoldCount=0; loop { SetAreaCommonData("TUNING","SelectIndex",selectIndex); SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex); SetAreaCommonData("TUNING","PlayerCharacter",PlayerCharacter); SetAreaCommonData("TUNING","SortType",SortType); //決定 if(GetVirtualKeyState(VK_OK) == KEY_PUSH) { SetSpellCardNumber(SpellName_texts[selectIndex+selectPageIndex*countMenu]); SetCommonData("SpellCardNo",GetCommonData("SpellNumber",0)); SetCommonData("SpellCardID",selectIndex+1+selectPageIndex*countMenu); SetCommonData("BossName",Name_texts[selectIndex+selectPageIndex*countMenu]); SetCommonData("SpellCardName",SpellName_texts[selectIndex+selectPageIndex*countMenu]); SetCommonData("PlayerCharacter",PlayerCharacter); let info=SpellCardInfo_Text[selectIndex+selectPageIndex*countMenu]; let tx=info[38..54]; let difficult=0; ascent(i in 0..8) { if(tx[i*2..i*2+2]=="☆"){difficult++;} } SetCommonData("SpellCardDifficult",difficult); SetCommonData("Ori_SpellCardBonus",length(SpellCardSetting[selectIndex+selectPageIndex*countMenu][1])/2*50000+100000); TStageScene(""); break; } //カーソル移動 if(GetVirtualKeyState(VK_UP) == KEY_PUSH) { selectIndex--; } else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH) { selectIndex++; } else if(GetVirtualKeyState(VK_UP) == KEY_HOLD) { frameKeyHold++; if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0))) { selectIndex--; } } else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD) { frameKeyHold++; if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 8 == 0))) { selectIndex++; } } else if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH) { selectPageIndex--; if(selectPageIndex<0) { selectPageIndex=MaxselectPageIndex-1; } } else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH) { selectPageIndex++; if(selectPageIndex>=MaxselectPageIndex) { selectPageIndex=0; } } else if(GetVirtualKeyState(VK_LEFT) == KEY_HOLD) { frameKeyHold++; if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 9 == 0))) { selectPageIndex--; if(selectPageIndex<0) { selectPageIndex=MaxselectPageIndex-1; } } } else if(GetVirtualKeyState(VK_RIGHT) == KEY_HOLD) { frameKeyHold++; if(frameKeyHold == 24 || (frameKeyHold > 24 && (frameKeyHold % 9 == 0))) { selectPageIndex++; if(selectPageIndex>=MaxselectPageIndex) { selectPageIndex=0; } } } else { frameKeyHold = 0; } if(selectIndex < 0) { if(selectPageIndex==MaxselectPageIndex-1 && length(texts)%countMenu!=0) {//最終ページかつそのページの行が12でない selectIndex = length(texts)%countMenu-1; } else { selectIndex = countMenu - 1; } } else { if(selectPageIndex==MaxselectPageIndex-1 && length(texts)%countMenu!=0) { if(selectIndex > length(texts)%countMenu-1) {//行を超えているとき selectIndex = 0; } } selectIndex %= countMenu; } if(GetVirtualKeyState(VK_PAUSE) == KEY_PUSH) {//プレイヤーキャラ変更 PlayerCharacter++; PlayerCharacter=PlayerCharacter%2; SetAreaCommonData("TUNING","PlayerCharacter",PlayerCharacter); bEndTitleScene = true; yield; TTitleScene(); break; } if(GetVirtualKeyState(VK_USER1) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_FREE) {//リプレイ選択画面移行 yield; TReplaySelectScene(); break; } if(GetVirtualKeyState(VK_USER2) == KEY_PUSH) {//ソートタイプの変更 SortType+=1; SortType=SortType%3; SetAreaCommonData("TUNING","SortType",SortType); bEndTitleScene = true; yield; TTitleScene(); break; } if(GetVirtualKeyState(VK_SLOWMOVE) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_FREE) {//お気に入り追加、解除 let F_Array=GetAreaCommonData("TUNING","Favorite",[0]); SetSpellCardNumber(SpellName_texts[selectIndex+selectPageIndex*countMenu]); let Num=GetCommonData("SpellNumber",0); if(F_Array[Num]==0) {//ふぁぼ追加と削除 F_Array[Num]=1; } else { F_Array[Num]=0; } SetAreaCommonData("TUNING","Favorite",F_Array); if(selectPageIndex==MaxselectPageIndex-1 && selectIndex == length(texts)%countMenu-1 && FavoriteMode) {//最終ページかつカーソルが最下段かつふぁぼモード(ふぁぼ解除操作) selectIndex-=1; if(selectIndex==-1) {//カーソルが最上段だったとき if(MaxselectPageIndex>=2) {//ページが2ページ以上あるとき selectIndex=0; selectPageIndex-=1; } else {//ないときは通常モードへ selectIndex=0; FavoriteMode=0; SetAreaCommonData("TUNING","FavoriteMode",FavoriteMode); } } } SetAreaCommonData("TUNING","SelectIndex",selectIndex); SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex); bEndTitleScene = true; yield; TTitleScene(); break; } if(GetVirtualKeyState(VK_SLOWMOVE) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_HOLD) {//お気に入り、通常モードへの移行 if(FavoriteMode==1) { FavoriteMode=0; } else { FavoriteMode=1; } FavoriteModeChange=1; SetAreaCommonData("TUNING","FavoriteMode",FavoriteMode); selectPageIndex=0; selectIndex=0; SetAreaCommonData("TUNING","SelectIndex",selectIndex); SetAreaCommonData("TUNING","SelectPageIndex",selectPageIndex); bEndTitleScene = true; yield; TTitleScene(); break; } if(GetVirtualKeyState(VK_USER1) == KEY_PUSH && GetVirtualKeyState(VK_SPELL) == KEY_HOLD) {//設定、通常モードへの移行 yield; TSettingScene(); break; } /**********************デモプレイ部******************/ /* if(GetVirtualKeyState(VK_LEFT)==KEY_FREE &&GetVirtualKeyState(VK_RIGHT)==KEY_FREE &&GetVirtualKeyState(VK_UP)==KEY_FREE &&GetVirtualKeyState(VK_DOWN)==KEY_FREE &&GetVirtualKeyState(VK_PAUSE)==KEY_FREE ) { FreeCount+=1; if(FreeCount==1800) { yield; // DemoScene(); SetAreaCommonData("TUNING","DemoCount",GetAreaCommonData("TUNING","DemoCount",0)+1); break; } } else{FreeCount=0;} */ /**********************終了部******************/ if(GetVirtualKeyState(VK_SPELL) == KEY_HOLD) { CanselHoldCount+=1; if(CanselHoldCount>=120){ClosePackage();} } else { CanselHoldCount=0; } yield; } bEndTitleScene = true; Obj_Delete(objTitleImage); Obj_Delete(objTitleText); task SelectEffect {//選択時の星エフェクト let x=0; let y=0; while(!bEndTitleScene) { y=39+25*selectIndex; Light(rand(0,640),y+rand(15,16),rand(1,2)/3,270+rand(-5,5)); Light(rand(0,640),y+rand(1,0),rand(1,2)/3,90+rand(-5,5)); yield; } task Light(X,Y,speed,angle) { let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D); ObjPrim_SetTexture(obj, GetCurrentScriptDirectory~"img/effect/star.png"); ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP); ObjPrim_SetVertexCount(obj, 4); ObjRender_SetBlendType(obj, BLEND_ADD_RGB); ObjRender_SetAngleZ(obj,0); ObjPrim_SetVertexPosition(obj, 0, -16, -16, -0); ObjPrim_SetVertexPosition(obj, 1, -16, 16, -0); ObjPrim_SetVertexPosition(obj, 2, 16, -16, 0); ObjPrim_SetVertexPosition(obj, 3, 16,16, 0); ObjPrim_SetVertexUVT(obj, 0, 0, 0); ObjPrim_SetVertexUVT(obj, 1, 0, 32); ObjPrim_SetVertexUVT(obj, 2, 32, 0); ObjPrim_SetVertexUVT(obj, 3, 32, 32); ObjRender_SetPosition(obj,X,Y,0); let scale=0.5; let Alpha=180; let Zangle=0; let ZanglePlus=rand(-5,5); loop(30) { scale-=0.5/30; Zangle+=ZanglePlus; ObjRender_SetPosition(obj,ObjRender_GetX(obj)+speed*cos(angle),ObjRender_GetY(obj)+speed*sin(angle),0); ObjRender_SetScaleXYZ(obj,scale,scale,scale); ObjRender_SetAngleZ(obj,Zangle); ObjRender_SetColor(obj,Alpha*0.75,Alpha*0.75,Alpha); yield; } Obj_Delete(obj); } } task Explain {//スペル情報表示 UnderExplain();//下部に操作説明表示 function CreateTextObject(let mx, let my, let text) { let obj = ObjText_Create(); ObjText_SetText(obj, text); ObjText_SetFontSize(obj, 14+4); ObjText_SetFontBold(obj, true); ObjText_SetFontColorTop(obj, 255, 255, 255); ObjText_SetFontColorBottom(obj, 255, 160, 255); if(mx==504 || mx==584) { ObjText_SetFontColorBottom(obj, 160, 160, 255); } if(my==440 && mx!=584) { if(text=="総合評価") { ObjText_SetFontColorBottom(obj, 160, 160, 255); } else { ObjText_SetFontColorBottom(obj, 255, 128, 128); } } // ObjText_SetFontBorderType(obj, BORDER_FULL); ObjText_SetFontBorderType(obj, BORDER_NONE); ObjText_SetFontBorderColor(obj,255, 255, 255); ObjText_SetFontBorderWidth(obj, 2*0); Obj_SetRenderPriorityI(obj, 72); ObjRender_SetX(obj, mx); ObjRender_SetY(obj, my); ObjText_SetFontType(obj,"MS 明朝"); return obj; } let objText = CreateTextObject(14, 352,"使用者: "~"Unknown"); let objText2 = CreateTextObject(14, 352+20, "初取得挑戦数 "~"N/A"); let objText3 = CreateTextObject(14, 352+20*2, "最高スコア  "~"N/A"); let objText4 = CreateTextObject(14, 352+20*3, "最短撃破時間 "~"N/A"); let objText5 = CreateTextObject(504, 352, "Page "~"1 / "~IntToString(MaxselectPageIndex)); let objText6 = CreateTextObject(356, 352+20*1, "総取得枚数   "~"18/42"); let objText7 = CreateTextObject(356, 352+20*2, "総合最高スコア "); let objText8 = CreateTextObject(356, 352+20*3, "総撃破時間   "~"N/A"); let objText9 = CreateTextObject(14, 352+20*4+8, "Player "~"博麗 霊夢"); let objText10 = CreateTextObject(584, 440,""); let objText11 = CreateTextObject(356, 352+20*4+8,"総合評価"); let objText12 = CreateTextObject(356+19*8, 352+20*4+8,"A"); let objText13 = CreateTextObject(356, 352+20*0,"ソート"); if(SortType==0) { ObjText_SetText(objText13,"ソート:番号順"); } else if(SortType==1) { ObjText_SetText(objText13,"ソート:作品順"); } else if(SortType==2) { ObjText_SetText(objText13,"ソート:難度順"); } if(PlayerCharacter==0) { ObjText_SetText(objText9, "Player "~"博麗 霊夢"); } else if(PlayerCharacter==1) { ObjText_SetText(objText9, "Player "~"霧雨 魔理沙"); } let C_Array=[]; let G_Array=[]; let S_Array=[]; let Fi_Array=[]; let E_Array=[]; alternative(PlayerCharacter) case(0) { C_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Challenge",[]); G_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Get",[]); S_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Score",[]); Fi_Array=GetAreaCommonData("SPELL_RECORD","Reimu_First",[]); E_Array=GetAreaCommonData("SPELL_RECORD","Reimu_Early",[]); } case(1) { C_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Challenge",[]); G_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Get",[]); S_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Score",[]); Fi_Array=GetAreaCommonData("SPELL_RECORD","Marisa_First",[]); E_Array=GetAreaCommonData("SPELL_RECORD","Marisa_Early",[]); } let TotalGet=0; let TotalScore=0; let TotalTime=0; let TotalEvaluation=0; let TotalDifficult=0; ascent(i in 0..length(SpellCardSetting)) { SetSpellCardNumber(SpellCardSetting[i][0]); if(G_Array[GetCommonData("SpellNumber",0)]>=1) { TotalGet+=1; TotalEvaluation+=length(SpellCardSetting[i][1])/2; } if(S_Array[GetCommonData("SpellNumber",0)]>=0) { TotalScore+=S_Array[GetCommonData("SpellNumber",0)]; } if(E_Array[GetCommonData("SpellNumber",0)]<100000) { if(E_Array[GetCommonData("SpellNumber",0)]>1800) { TotalTime+=1800; } else { TotalTime+=E_Array[GetCommonData("SpellNumber",0)]; } } TotalDifficult+=length(SpellCardSetting[i][1])/2; } SetCommonData("ClearEvaluation",TotalEvaluation); SetCommonData("TotalDifficult",TotalDifficult); SetCommonData("IdealEvaluation",TotalDifficult*2+2*length(SpellCardSetting)); TotalEvaluation+=TotalScore/100000; SetCommonData("ScoreEvaluation",TotalScore/100000); if(TotalGet>0) { TotalEvaluation+=(1800-(TotalTime/TotalGet))*TotalGet/180; SetCommonData("TimeEvaluation",(1800-(TotalTime/TotalGet))*TotalGet/180); } let TotalRank=TotalEvaluation/GetCommonData("IdealEvaluation",0); SetCommonData("TotalRank",TotalRank); ObjText_SetText(objText6, "総取得枚数   "~IntToString(TotalGet)~" / "~IntToString(length(SpellCardSetting))); ObjText_SetText(objText7, "総合最高スコア "~IntToString(TotalScore)); if(TotalGet==length(SpellCardSetting)) { let TimeArray=IntToString(floor(TotalTime)*100/60); alternative(length(TimeArray)) case(4){TimeArray=TimeArray[0..2]~"."~TimeArray[2..4]~" s";} case(5){TimeArray=TimeArray[0..3]~"."~TimeArray[3..5]~" s";} case(6){TimeArray=TimeArray[0..4]~"."~TimeArray[4..6]~" s";} case(7){TimeArray=TimeArray[0..5]~"."~TimeArray[5..7]~" s";} ObjText_SetText(objText8, "総撃破時間   "~TimeArray); } ObjText_SetText(objText12,IntToString(TotalEvaluation)); //TotalRank=0.1; if(TotalRank>=0) { ObjText_SetText(objText12,"F"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 50, 50, 255); } if(TotalRank>=0.2) { ObjText_SetText(objText12,"E"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 50, 150, 255); } if(TotalRank>=0.35) { ObjText_SetText(objText12,"D"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 50, 255, 150); } if(TotalRank>=0.5) { ObjText_SetText(objText12,"C"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 255, 255, 50); } if(TotalRank>=0.7) { ObjText_SetText(objText12,"B"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 255, 150, 50); } if(TotalRank>=0.8) { ObjText_SetText(objText12,"A"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 255, 50, 50); } if(TotalRank>=0.9) { ObjText_SetText(objText12,"S"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 230, 184, 34); } if(TotalRank>=0.95) { ObjText_SetText(objText12,"SS"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 255, 255, 50); } if(TotalRank>=1) { ObjText_SetText(objText12,"SSS"); ObjText_SetFontColorTop(objText12, 255, 255, 255); ObjText_SetFontColorBottom(objText12, 255, 255, 50); } let count=0; while(!bEndTitleScene) { SetSpellCardNumber(SpellName_texts[selectIndex+selectPageIndex*countMenu]); if(C_Array[GetCommonData("SpellNumber",0)]!=0) { ObjText_SetText(objText, "使用者: "~Name_texts[selectIndex+selectPageIndex*countMenu]); } else { ObjText_SetText(objText, "使用者: "~"Unknown"); } if(Fi_Array[GetCommonData("SpellNumber",0)]!=0) { ObjText_SetText(objText2, "初取得挑戦数 "~IntToString(Fi_Array[GetCommonData("SpellNumber",0)])); } else { ObjText_SetText(objText2, "初取得挑戦数 "~"N/A"); } if(S_Array[GetCommonData("SpellNumber",0)]!=0) { ObjText_SetText(objText3, "最高スコア  "~IntToString(S_Array[GetCommonData("SpellNumber",0)])); } else { ObjText_SetText(objText3, "最高スコア  "~"N/A"); } if(E_Array[GetCommonData("SpellNumber",0)]!=100000) { let TimeArray=IntToString(floor(E_Array[GetCommonData("SpellNumber",0)]*100/60)); alternative(length(TimeArray)) case(3){TimeArray=TimeArray[0..1]~"."~TimeArray[1..3]~" s";} case(4){TimeArray=TimeArray[0..2]~"."~TimeArray[2..4]~" s";} ObjText_SetText(objText4, "最短撃破時間 "~TimeArray); } else { ObjText_SetText(objText4, "最短撃破時間 "~"N/A"); } ObjText_SetText(objText5, "Page "~IntToString(selectPageIndex+1)~" / "~IntToString(MaxselectPageIndex)); ObjRender_SetX(objText10,584); let fpslength=5; if(GetCurrentFps>=100){fpslength=6;ObjRender_SetX(objText10,574);} ObjText_SetText(objText10,vtos("3f",GetCurrentFps)[0..fpslength]); if(TotalRank>=0.9 && count%10==0) { Light(356+19*8+rand(-1,11), 352+20*4+8+rand(0,18),0,0); } if(TotalRank>=0.95 && count%10==3) { Light(356+19*8+rand(-1,11)+10, 352+20*4+8+rand(0,18),0,0); } if(TotalRank>=0.95 && count%10==6) { Light(356+19*8+rand(-1,11)+20, 352+20*4+8+rand(0,18),0,0); } count++; yield; } Obj_Delete(objText); Obj_Delete(objText2); Obj_Delete(objText3); Obj_Delete(objText4); Obj_Delete(objText5); Obj_Delete(objText6); Obj_Delete(objText7); Obj_Delete(objText8); Obj_Delete(objText9); Obj_Delete(objText10); Obj_Delete(objText11); Obj_Delete(objText12); Obj_Delete(objText13); task Light(X,Y,speed,angle) { let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D); ObjPrim_SetTexture(obj, GetCurrentScriptDirectory~"img/effect/star.png"); ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLESTRIP); ObjPrim_SetVertexCount(obj, 4); ObjRender_SetBlendType(obj, BLEND_ADD_RGB); ObjRender_SetAngleZ(obj,0); ObjPrim_SetVertexPosition(obj, 0, -16, -16, -0); ObjPrim_SetVertexPosition(obj, 1, -16, 16, -0); ObjPrim_SetVertexPosition(obj, 2, 16, -16, 0); ObjPrim_SetVertexPosition(obj, 3, 16,16, 0); ObjPrim_SetVertexUVT(obj, 0, 0, 0); ObjPrim_SetVertexUVT(obj, 1, 0, 32); ObjPrim_SetVertexUVT(obj, 2, 32, 0); ObjPrim_SetVertexUVT(obj, 3, 32, 32); ObjRender_SetPosition(obj,X,Y,0); let scale=0.5; let Alpha=180; let Zangle=0; let ZanglePlus=rand(-5,5); loop(30) { scale-=0.5/30; Zangle+=ZanglePlus; ObjRender_SetPosition(obj,ObjRender_GetX(obj)+speed*cos(angle),ObjRender_GetY(obj)+speed*sin(angle),0); ObjRender_SetScaleXYZ(obj,scale,scale,scale); ObjRender_SetAngleZ(obj,Zangle); ObjRender_SetColor(obj, 230, 184, 34); yield; } Obj_Delete(obj); } } task UnderExplain {//画面下部操作説明表示 let text="Shot Decide Pause CharacterChange User1 Replay User2 SortChange Cansel_Hold Quit"; let text2="Slow Favorite Cansel_Hold+Slow Favorite_Mode Cansel_Hold+User1 Setting_Mode"; let obj = ObjText_Create(); ObjText_SetText(obj,text); ObjText_SetFontSize(obj, 12); ObjText_SetFontBold(obj, true); ObjText_SetFontBorderType(obj, BORDER_NONE); ObjText_SetFontBorderColor(obj,255, 255, 255); ObjText_SetFontBorderWidth(obj, 0); Obj_SetRenderPriorityI(obj, 30); ObjRender_SetX(obj, 14); ObjRender_SetY(obj, 464); let Alpha=255; let AlphaAngle=270; let x=14; let x2=488; while(!bEndTitleScene) { ObjRender_SetX(obj, x); ObjRender_SetAlpha(obj,255*absolute(cos(AlphaAngle))); AlphaAngle+=0.5; if(AlphaAngle%360<90 || AlphaAngle%360>270) { ObjText_SetText(obj,text); } else { ObjText_SetText(obj,text2); } yield; } Obj_Delete(obj); } } //---------------------------------------------------- // ステージシーン //---------------------------------------------------- task TStageScene(let pathReplay) { let dirCurrent = GetCurrentScriptDirectory(); let dirModule = GetModuleDirectory(); let pathMainScript = dirCurrent ~ "SpellCard/Stage.txt"; let pathPlayer; if(PlayerCharacter==0) { pathPlayer = dirCurrent ~ "player/Reimu/Reimu.txt"; } else if(PlayerCharacter==1) { pathPlayer = dirCurrent ~ "player/Marisa/Marisa.txt"; } //-------------------------------- //画面遷移 RenderSceneToTransitionTexture(); TTransition(); SoundFlag=0; //-------------------------------- //ステージ初期化 InitializeStageScene(); if(length(pathReplay) > 0) { SetStageReplayFile(pathReplay); } //-------------------------------- //初期ステージ設定 let indexStage = 1+1; //ステージインデックス SetStageIndex(indexStage); SetStageMainScript(pathMainScript); SetStagePlayerScript(pathPlayer); StartStageScene(); StageMusicFlag=1; TStageSound; //-------------------------------- //ステージ操作 MB_Save(); loop { if(GetVirtualKeyState(VK_SHOT) == KEY_PUSH && DemoFlag==1) { TerminateStageScene(); } //-------------------------------- //一時停止チェック if(GetVirtualKeyState(VK_PAUSE) == KEY_PUSH && DemoFlag==0) { let resPause = RunPauseScene(); alternative(resPause) case(RESULT_RETRY) { //最初からやり直す if(!IsReplay()) { //リトライ ClearInvalidRenderPriority(); TerminateStageScene(); TStageScene(""); return; } } case(RESULT_END) { //一時停止中の終了 TerminateStageScene(); } } //-------------------------------- //ステージ完了待ち let stgSceneState = GetStageSceneState(); if(stgSceneState == STAGE_STATE_FINISHED) { //ステージ終了結果を取得 let stageResult = GetStageSceneResult(); alternative(stageResult) case(STAGE_RESULT_CLEARED) { //ステージクリア if(indexStage == 2) { //ステージ2をクリアした場合は終了 if(IsReplay) { TEndScene(); } else { TClearScene(); } break; } else { //次のステージへ遷移 indexStage++; SetStageIndex(indexStage); SetStageMainScript(pathMainScript); //ひとまず同じステージ... SetStagePlayerScript(pathPlayer); StartStageScene(); TTransition(); } } case(STAGE_RESULT_PLAYER_DOWN) { //自機残機0 TEndScene(); break; } case(STAGE_RESULT_BREAK_OFF) { //ステージ途中終了 //一時停止中の終了 if(IsReplay) { TEndScene(); } else { TTitleScene(); T_Sound(); } ClearInvalidRenderPriority(); break; } } yield; } TTransition(); } task TStageSound { let StageMusicObject=ObjSound_Create; SetCommonData("MusicStep",0); let Difficult=GetCommonData("SpellCardDifficult",1); if(Difficult<=4) { ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm1.ogg"); } /* else if(Difficult<=5) { ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm2.ogg"); } */ else { ObjSound_Load(StageMusicObject,GetCurrentScriptDirectory~"bgm/bgm3.ogg"); } ObjSound_SetLoopEnable(StageMusicObject,true); // ObjSound_SetLoopTime(StageMusicObject,47.297,169.970); ObjSound_SetSoundDivision(StageMusicObject,SOUND_BGM); ObjSound_Play(StageMusicObject); ObjSound_SetRestartEnable(StageMusicObject,true); Obj_SetValue(StageMusicObject,"Stop",false); let CurrentVulume=1; let MaxVulume=GetAreaCommonData("TUNING","Setting",[])[0]; while(StageMusicFlag) { if(CurrentVulume<1){CurrentVulume+=0.05;} if(StageMusicStopFlag) { ObjSound_Stop(StageMusicObject); ObjSound_SetVolumeRate(StageMusicObject,0); CurrentVulume=0; } else { yield; ObjSound_Play(StageMusicObject); if(GetAreaCommonData("TUNING","BGM",1)==1) { ObjSound_SetVolumeRate(StageMusicObject,MaxVulume*CurrentVulume); } else { ObjSound_SetVolumeRate(StageMusicObject,0); } } if(GetCommonData("BossDefeat",false)) { loop(240) { CurrentVulume-=1/240; ObjSound_SetVolumeRate(StageMusicObject,MaxVulume*CurrentVulume); yield; } loop { yield; if(StageMusicFlag==0){break;} } } yield; } /*何故か消すと読み込まなくなる・・・ CurrentVulume=1; while(CurrentVulume>0) { CurrentVulume-=1/240; if(StageMusicStopFlag) { ObjSound_Stop(StageMusicObject); //CurrentVulume=ObjSound_GetVolumeRate(StageMusicObject); ObjSound_SetVolumeRate(StageMusicObject,0); } else { yield; ObjSound_Play(StageMusicObject); if(GetAreaCommonData("TUNING","BGM",1)==1) { ObjSound_SetVolumeRate(StageMusicObject,100*CurrentVulume); } else { ObjSound_SetVolumeRate(StageMusicObject,0); } } yield; } */ Obj_Delete(StageMusicObject); } //---------------------------------------------------- // 終了シーン //---------------------------------------------------- task TClearScene() { if(IsReplay()) { TTitleScene(); T_Sound(); return; } //-------------------------------- //ステージ終了処理 FinalizeStageScene(); //-------------------------------- //終了シーンスクリプト起動 let dirModule = GetModuleDirectory(); let pathScript = GetCurrentScriptDirectory() ~ "system/ClearScene.txt"; let idScript = LoadScript(pathScript); StartScript(idScript); while(!IsCloseScript(idScript)) { yield; } //-------------------------------- //終了シーン結果処理 MB_Save(); let result = GetScriptResult(idScript); alternative(result) case(RESULT_SAVE_REPLAY) { //リプレイ保存 TReplaySaveScene(); } case(RESULT_END) { //再生終了 TTitleScene(); T_Sound(); } case(RESULT_RETRY) { //リトライ TStageScene(""); } } task TEndScene() { if(DemoFlag==1) { SoundFlag=1; StageMusicFlag=0; T_Sound; // TReplaySelectScene(); TTitleScene(); T_Sound; return; } if(IsReplay()) { SoundFlag=1; StageMusicFlag=0; T_Sound; TReplaySelectScene(); // TTitleScene(); return; } //-------------------------------- //ステージ終了処理 FinalizeStageScene(); //-------------------------------- //終了シーンスクリプト起動 let dirModule = GetModuleDirectory(); let pathScript = GetCurrentScriptDirectory() ~ "system/EndScene.txt"; let idScript = LoadScript(pathScript); StartScript(idScript); while(!IsCloseScript(idScript)) { yield; } //-------------------------------- //終了シーン結果処理 MB_Save(); let result = GetScriptResult(idScript); alternative(result) case(RESULT_SAVE_REPLAY) { //リプレイ保存 TReplaySaveScene(); } case(RESULT_END) { //再生終了 TTitleScene(); T_Sound(); } case(RESULT_RETRY) { //リトライ TStageScene(""); } } //---------------------------------------------------- // 一時停止シーン //---------------------------------------------------- function RunPauseScene() { StageMusicStopFlag=1; RenderSceneToTransitionTexture(); PauseStageScene(true); let dirModule = GetModuleDirectory(); // let pathScript = dirModule ~ "script/default_system/Default_Pause.txt"; let pathScript = GetCurrentScriptDirectory() ~ "system/Pause.txt"; //-------------------------------- //一時停止シーンンスクリプト起動 let idScript = LoadScript(pathScript); StartScript(idScript); while(!IsCloseScript(idScript)) { yield; } StageMusicStopFlag=0; PauseStageScene(false); let res = GetScriptResult(idScript); return res; } //---------------------------------------------------- // リプレイ選択シーン //---------------------------------------------------- task TReplaySelectScene() { let dirCurrent = GetCurrentScriptDirectory(); let pathScript = dirCurrent ~ "system/ReplaySelectScene.txt"; //-------------------------------- //リプレイ選択シーンスクリプト起動 let idScript = LoadScript(pathScript); StartScript(idScript); while(!IsCloseScript(idScript)) { yield; } //-------------------------------- //リプレイ選択シーン結果処理 let result = GetScriptResult(idScript); if(length(result) == 0) { //タイトルシーンへ戻る TTitleScene(); } else { //リプレイ再生開始 TStageScene(result); } } //---------------------------------------------------- // デモシーン //---------------------------------------------------- task DemoScene() { DemoFlag=1; let dirCurrent = GetCurrentScriptDirectory(); let pathScript = dirCurrent ~ "system/DemoScene.txt"; //-------------------------------- //リプレイ選択シーンスクリプト起動 let idScript = LoadScript(pathScript); StartScript(idScript); while(!IsCloseScript(idScript)) { yield; } //-------------------------------- //リプレイ選択シーン結果処理 let result = GetScriptResult(idScript); TStageScene(result); } //---------------------------------------------------- // リプレイ保存シーン //---------------------------------------------------- task TReplaySaveScene() { let dirCurrent = GetCurrentScriptDirectory(); let pathScript = dirCurrent ~ "system/ReplaySaveScene.txt"; //-------------------------------- //リプレイ保存シーンスクリプト起動 let idScript = LoadScript(pathScript); StartScript(idScript); while(!IsCloseScript(idScript)) { yield; } //-------------------------------- //タイトルシーンへ遷移 TTitleScene(); T_Sound; } //---------------------------------------------------- // 設定シーン //---------------------------------------------------- task TSettingScene() { let dirCurrent = GetCurrentScriptDirectory(); let pathScript = dirCurrent ~ "system/SettingScene.txt"; //-------------------------------- //リプレイ選択シーンスクリプト起動 let idScript = LoadScript(pathScript); StartScript(idScript); while(!IsCloseScript(idScript)) { yield; } //-------------------------------- //リプレイ選択シーン結果処理 let result = GetScriptResult(idScript); if(length(result) == 0) { //タイトルシーンへ戻る TTitleScene(); } else {//使用しない TStageScene(result); } } //---------------------------------------------------- // 画面遷移エフェクト //---------------------------------------------------- function RenderSceneToTransitionTexture() { //現在のシーン内容を画面遷移用テクスチャに描画 let textureName = GetTransitionRenderTargetName(); RenderToTextureA1(textureName, 0, 100, true); } task TTransition { let textureName = GetTransitionRenderTargetName(); let objImage = ObjPrim_Create(OBJ_SPRITE_2D); //2Dスプライトオブジェクト生成 Obj_SetRenderPriorityI(objImage, 100); //描画優先度を設定 ObjPrim_SetTexture(objImage, textureName); //テクスチャを設定 ObjSprite2D_SetSourceRect(objImage, 0, 0, 640, 480); ObjSprite2D_SetDestRect(objImage, 0, 0, 640, 480); let alpha = 255; while(alpha > 0) { ObjRender_SetAlpha(objImage, alpha); alpha -= 16; yield; } Obj_Delete(objImage); } function MB_Save { if(!IsReplay()) { SaveCommonDataAreaA1("SPELL_RECORD"); SaveCommonDataAreaA1("TUNING"); } }