0% found this document useful (0 votes)
51 views8 pages

ExRumia Package Main

This document contains code for a title scene, stage scene, end scene, pause scene, and replay select scene for an East Asian bullet curtain game package. The title scene displays an image and text, and has a menu to start, replay, or quit. The stage scene loads and runs a stage script, handles pausing and stage completion. The end scene handles different completion results. The pause scene pauses the stage and shows pause options. The replay select scene allows selecting a replay file.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views8 pages

ExRumia Package Main

This document contains code for a title scene, stage scene, end scene, pause scene, and replay select scene for an East Asian bullet curtain game package. The title scene displays an image and text, and has a menu to start, replay, or quit. The stage scene loads and runs a stage script, handles pausing and stage completion. The end scene handles different completion results. The pause scene pauses the stage and shows pause options. The replay select scene allows selecting a replay file.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 8

#東方弾幕風[Package]

#Title["EX ルーミアパッケージ"]
#Text["EX ルーミアトパッケージ"]

@Initialize
{
TTitleScene();
}

@MainLoop
{
yield;
}

@Finalize
{
}

//----------------------------------------------------
// タイトルシーン
//----------------------------------------------------
task TTitleScene
{
//タイトルシーン終了フラグ
let bEndTitleScene = false;

//タイトルパス設定
let dir = GetCurrentScriptDirectory();
let pathTitle = dir ~ "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, "パッケージサンプル");
ObjText_SetFontSize(objTitleText, 40);
ObjText_SetFontBold(objTitleText, true);
ObjText_SetFontColorTop(objTitleText, 128, 128, 255);
ObjText_SetFontColorBottom(objTitleText, 64, 64, 255);
ObjText_SetFontBorderType(objTitleText, BORDER_FULL);
ObjText_SetFontBorderColor(objTitleText,255, 255, 255);
ObjText_SetFontBorderWidth(objTitleText, 2);
Obj_SetRenderPriorityI(objTitleText, 30);
ObjRender_SetX(objTitleText, 48);
ObjRender_SetY(objTitleText, 48);

//メニュー
let INDEX_START = 0;
let INDEX_REPLAY = 1;
let INDEX_QUIT = 2;
let selectIndex = 0;//選択位置
task TMenuItem(let index, let mx, let my, let text)
{
function CreateTextObject(let mx, let my, let text)
{
let obj = ObjText_Create();
ObjText_SetText(obj, text);
ObjText_SetFontSize(obj, 20);
ObjText_SetFontBold(obj, true);
ObjText_SetFontColorTop(obj, 128, 128, 255);
ObjText_SetFontColorBottom(obj, 64, 64, 255);
ObjText_SetFontBorderType(obj, BORDER_FULL);
ObjText_SetFontBorderColor(obj,255, 255, 255);
ObjText_SetFontBorderWidth(obj, 2);
Obj_SetRenderPriorityI(obj, 30);
ObjRender_SetX(obj, mx);
ObjRender_SetY(obj, my);
return obj;
}

let objText = CreateTextObject(mx, my, text);


let objSelect = CreateTextObject(mx, my, text);
ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
while(!bEndTitleScene)
{
Obj_SetVisible(objSelect, index == selectIndex);
yield;
}
Obj_Delete(objText);
Obj_Delete(objSelect);
}

//メニュー配置
let mx = 48;
let my = 360;
let texts = ["Start", "Replay", "Quit"];
var countMenu = length(texts);
ascent(var iText in 0 .. countMenu)
{
TMenuItem(iText, mx, my, texts[iText]);
my += 32;
}

//キー状態がリセットされるまで待機
while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}

//メニュー選択処理
let frameKeyHold = 0;//キー押しっぱなしフレーム数
loop
{
//決定
if(GetVirtualKeyState(VK_OK) == KEY_PUSH)
{
if(selectIndex == INDEX_START)
{
TStageScene("");
}
else if(selectIndex == INDEX_REPLAY)
{
TReplaySelectScene();
}
else if(selectIndex == INDEX_QUIT)
{
ClosePackage();
}
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 == 30 || (frameKeyHold > 30 && (frameKeyHold % 10
== 0)))
{
selectIndex--;
}
}
else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD)
{
frameKeyHold++;
if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10
== 0)))
{
selectIndex++;
}
}
else
{
frameKeyHold = 0;
}

if(selectIndex < 0)
{
selectIndex = countMenu - 1;
}
else
{
selectIndex %= countMenu;
}

yield;
}

bEndTitleScene = true;
Obj_Delete(objTitleImage);
Obj_Delete(objTitleText);
}
//----------------------------------------------------
// ステージシーン
//----------------------------------------------------
task TStageScene(let pathReplay)
{
let dirCurrent = GetCurrentScriptDirectory();
let dirModule = GetModuleDirectory();
let pathMainScript = dirCurrent ~ "ExRumia_Stage.txt";
let pathPlayer = dirModule ~
"script/player/default_player/Default_Player_Rumia.txt";

//--------------------------------
//画面遷移
RenderSceneToTransitionTexture();
TTransition();

//--------------------------------
//ステージ初期化
InitializeStageScene();
if(length(pathReplay) > 0)
{
SetStageReplayFile(pathReplay);
}

//--------------------------------
//初期ステージ設定
let indexStage = 1; //ステージインデックス
SetStageIndex(indexStage);
SetStageMainScript(pathMainScript);
SetStagePlayerScript(pathPlayer);
StartStageScene();

//--------------------------------
//ステージ操作
loop
{
//--------------------------------
//一時停止チェック
if(GetVirtualKeyState(VK_PAUSE) == KEY_PUSH)
{
let resPause = RunPauseScene();
alternative(resPause)
case(RESULT_RETRY)
{
//最初からやり直す
if(!IsReplay())
{
//リトライ
TerminateStageScene();
TStageScene("");
return;
}
}
case(RESULT_END)
{
//一時停止中の終了
TerminateStageScene();
}
}

if(!IsReplay() && GetKeyState(KEY_BACK) == KEY_PUSH)


{
//リトライ
TerminateStageScene();
TStageScene("");
return;
}

//--------------------------------
//ステージ完了待ち
let stgSceneState = GetStageSceneState();
if(stgSceneState == STAGE_STATE_FINISHED)
{
//ステージ終了結果を取得
let stageResult = GetStageSceneResult();
alternative(stageResult)
case(STAGE_RESULT_CLEARED)
{
//ステージクリア
if(indexStage == 2)
{
//ステージ 2 をクリアした場合は終了
TEndScene();
break;
}
else
{
//次のステージへ遷移
indexStage++;
SetStageIndex(indexStage);
SetStageMainScript(pathMainScript); //ひとまず同じステー
ジ...
SetStagePlayerScript(pathPlayer);
StartStageScene();
TTransition();
}
}
case(STAGE_RESULT_PLAYER_DOWN)
{
//自機残機 0
TEndScene();
break;
}
case(STAGE_RESULT_BREAK_OFF)
{
//ステージ途中終了
//一時停止中の終了
TTitleScene();
break;
}
}
yield;
}

TTransition();
}

//----------------------------------------------------
// 終了シーン
//----------------------------------------------------
task TEndScene()
{
if(IsReplay())
{
TTitleScene();
return;
}

//--------------------------------
//ステージ終了処理
FinalizeStageScene();

//--------------------------------
//終了シーンスクリプト起動
let dirModule = GetModuleDirectory();
let pathScript = dirModule ~ "script/default_system/Default_EndScene.txt";
let idScript = LoadScript(pathScript);
StartScript(idScript);

while(!IsCloseScript(idScript))
{
yield;
}

//--------------------------------
//終了シーン結果処理
let result = GetScriptResult(idScript);
alternative(result)
case(RESULT_SAVE_REPLAY)
{
//リプレイ保存
TReplaySaveScene();
}
case(RESULT_END)
{
//再生終了
TTitleScene();
}
case(RESULT_RETRY)
{
//リトライ
TStageScene("");
}
}

//----------------------------------------------------
// 一時停止シーン
//----------------------------------------------------
function RunPauseScene()
{
RenderSceneToTransitionTexture();
PauseStageScene(true);
let dirModule = GetModuleDirectory();
let pathScript = dirModule ~ "script/default_system/Default_Pause.txt";

//--------------------------------
//一時停止シーンンスクリプト起動
let idScript = LoadScript(pathScript);
StartScript(idScript);

while(!IsCloseScript(idScript))
{
yield;
}

PauseStageScene(false);

let res = GetScriptResult(idScript);


return res;
}

//----------------------------------------------------
// リプレイ選択シーン
//----------------------------------------------------
task TReplaySelectScene()
{
let dirCurrent = GetCurrentScriptDirectory();
let pathScript = dirCurrent ~ "ExRumia_Package_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 TReplaySaveScene()
{
let dirModule = GetModuleDirectory();
let pathScript = dirModule ~
"script/default_system/Default_ReplaySaveScene.txt";

//--------------------------------
//リプレイ保存シーンスクリプト起動
let idScript = LoadScript(pathScript);
StartScript(idScript);

while(!IsCloseScript(idScript))
{
yield;
}

//--------------------------------
//タイトルシーンへ遷移
TTitleScene();
}

//----------------------------------------------------
// 画面遷移エフェクト
//----------------------------------------------------
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);
}

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy