310 lines
15 KiB
Plaintext
310 lines
15 KiB
Plaintext
@Initialize
|
|
{
|
|
SetAutoDeleteObject(true);
|
|
LoadReplayList();
|
|
|
|
TBackground();
|
|
TReplaySelectScene();
|
|
|
|
SetScriptResult("");
|
|
}
|
|
|
|
|
|
@MainLoop
|
|
{
|
|
|
|
yield;
|
|
}
|
|
|
|
@Finalize
|
|
{
|
|
}
|
|
|
|
function CreateTextObject(
|
|
float mx, my, size,
|
|
string text, font,
|
|
int colorTop, colorBottom,
|
|
int borderColor, borderWidth,
|
|
int renderPriority
|
|
){
|
|
|
|
let obj = ObjText_Create();
|
|
ObjText_SetText(obj, text);
|
|
ObjText_SetFontSize(obj, size);
|
|
ObjText_SetFontType(obj, font);
|
|
ObjText_SetFontColorTop(obj, colorTop);
|
|
ObjText_SetFontColorBottom(obj, colorBottom);
|
|
ObjText_SetFontBorderType(obj, BORDER_FULL);
|
|
ObjText_SetFontBorderColor(obj, borderColor);
|
|
ObjText_SetFontBorderWidth(obj, borderWidth);
|
|
Obj_SetRenderPriorityI(obj, renderPriority);
|
|
ObjRender_SetX(obj, mx);
|
|
ObjRender_SetY(obj, my);
|
|
return obj;
|
|
|
|
}
|
|
|
|
function <int> _Create2DImage(imgpath, int[] rectarray){
|
|
|
|
int imgname = ObjPrim_Create(OBJ_SPRITE_2D);
|
|
ObjPrim_SetTexture(imgname, imgpath);
|
|
ObjSprite2D_SetSourceRect(imgname, rectarray);
|
|
ObjSprite2D_SetDestCenter(imgname);
|
|
//ObjRender_SetPosition(imgname, positionstart)
|
|
|
|
return imgname;
|
|
}
|
|
|
|
task TBackground()
|
|
{
|
|
//背景
|
|
int image = _Create2DImage("script/game/PackageLib/PlaceholderTitleImage_Empty.png", [0, 0, 1920, 1080]);
|
|
LoadTextureEx(image, true, true);
|
|
|
|
Obj_SetRenderPriorityI(image, 1);
|
|
ObjRender_SetAlpha(image, 80);
|
|
ObjSprite2D_SetDestRect(image, 0, 0, 1920, 1080);
|
|
|
|
//タイトル文字列
|
|
let objText = ObjText_Create();
|
|
ObjText_SetText(objText, "Recall Stories of the Market");
|
|
ObjText_SetFontType(objText, "Connecting Chain Handserif");
|
|
ObjText_SetFontSize(objText, 96);
|
|
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, 2);
|
|
Obj_SetRenderPriorityI(objText, 30);
|
|
ObjRender_SetX(objText, 32);
|
|
ObjRender_SetY(objText, 32);
|
|
}
|
|
|
|
|
|
//----------------------------------------------------
|
|
// リプレイ選択
|
|
//----------------------------------------------------
|
|
task TReplaySelectScene
|
|
{
|
|
LoadReplayList();
|
|
let listValidReplayIndex = GetValidReplayIndices();
|
|
|
|
let cursorY = 0;
|
|
let page = 0;
|
|
let countMaxItem = length(listValidReplayIndex);
|
|
let countItemPerPage = 20;
|
|
let pageMax = trunc((countMaxItem - 1) / countItemPerPage);
|
|
pageMax = max(pageMax, 0);
|
|
let lastPageMaxCursorY = trunc(countMaxItem % countItemPerPage);
|
|
if(countMaxItem % countItemPerPage == 0)
|
|
{
|
|
lastPageMaxCursorY = countItemPerPage;
|
|
}
|
|
|
|
task TMenuItem(let itemY)
|
|
{
|
|
let objText = CreateTextObject(32, 120 + 50 * itemY, 40, "");
|
|
ObjText_SetFontBorderWidth(objText, 2);
|
|
let objSelect = CreateTextObject(32, 120 + 50 * itemY, 40, "");
|
|
ObjText_SetFontBorderWidth(objSelect, 2);
|
|
ObjRender_SetAlpha(objText, 150);
|
|
ObjRender_SetAlpha(objSelect, 120);
|
|
ObjRender_SetBlendType(objSelect, BLEND_ADD_ARGB);
|
|
|
|
let oldPage = -1;
|
|
loop
|
|
{
|
|
if(page != oldPage)
|
|
{
|
|
let text = "";
|
|
let indexList = page * countItemPerPage + itemY;
|
|
if(indexList < countMaxItem)
|
|
{
|
|
let indexReplay = listValidReplayIndex[indexList];
|
|
if(IsValidReplayIndex(indexReplay))
|
|
{
|
|
text = rtos("00", indexReplay) ~ " ";
|
|
|
|
text = text ~ vtos("-8s", GetReplayInfo(indexReplay, REPLAY_USER_NAME)) ~ " ";
|
|
text = text ~ GetReplayInfo(indexReplay, REPLAY_DATE_TIME) ~ " ";
|
|
text = text ~ rtos("000000000000", trunc(GetReplayInfo(indexReplay, REPLAY_TOTAL_SCORE))*10) ~ " ";
|
|
text = text ~ GetReplayInfo(indexReplay, REPLAY_PLAYER_NAME) ~ " ";
|
|
|
|
if(GetReplayUserData(indexReplay, "Difficulty") == "Normal"){
|
|
text = text ~ "Normal";
|
|
}
|
|
|
|
else if(GetReplayUserData(indexReplay, "Difficulty") == "Hard"){
|
|
text = text ~ "Hard";
|
|
}
|
|
|
|
if(GetReplayUserData(indexReplay, "Difficulty") == "Lunatic"){
|
|
text = text ~ "Lunatic";
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
ObjText_SetText(objText, text);
|
|
ObjText_SetText(objSelect, text);
|
|
oldPage = page;
|
|
}
|
|
|
|
if(page == pageMax && itemY >= lastPageMaxCursorY)
|
|
{
|
|
Obj_SetVisible(objText, false);
|
|
Obj_SetVisible(objSelect, false);
|
|
}
|
|
else
|
|
{
|
|
Obj_SetVisible(objText, true);
|
|
Obj_SetVisible(objSelect, itemY == cursorY);
|
|
}
|
|
|
|
yield;
|
|
}
|
|
Obj_Delete(objText);
|
|
Obj_Delete(objSelect);
|
|
}
|
|
|
|
ascent(let iItem in 0 .. countItemPerPage)
|
|
{
|
|
TMenuItem(iItem);
|
|
}
|
|
|
|
//キー状態がリセットされるまで待機
|
|
while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}
|
|
|
|
//キー処理
|
|
let frameKeyHold = 0;//キー押しっぱなしフレーム数
|
|
loop
|
|
{
|
|
//決定
|
|
if(GetVirtualKeyState(VK_OK) == KEY_PULL)
|
|
{
|
|
let indexList = page * countItemPerPage + cursorY;
|
|
if(indexList < countMaxItem)
|
|
{
|
|
let indexReplay = listValidReplayIndex[indexList];
|
|
let pathReplay = GetReplayInfo(indexReplay, REPLAY_FILE_PATH);
|
|
SetScriptResult(indexReplay);
|
|
CloseScript(GetOwnScriptID());
|
|
break;
|
|
}
|
|
}
|
|
|
|
if(GetVirtualKeyState(VK_CANCEL) == KEY_PULL)
|
|
{
|
|
//キャンセル
|
|
// XDDDDDDDDDD
|
|
SetScriptResult(99999999*69420);
|
|
CloseScript(GetOwnScriptID());
|
|
break;
|
|
}
|
|
|
|
//カーソル移動
|
|
if(GetVirtualKeyState(VK_UP) == KEY_PUSH || GetVirtualKeyState(VK_UP) == KEY_HOLD)
|
|
{
|
|
frameKeyHold++;
|
|
if(GetVirtualKeyState(VK_UP) == KEY_PUSH ||
|
|
frameKeyHold == 20 ||
|
|
(frameKeyHold > 20 && (frameKeyHold % 5 == 0)))
|
|
{
|
|
cursorY--;
|
|
}
|
|
}
|
|
else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH || GetVirtualKeyState(VK_DOWN) == KEY_HOLD)
|
|
{
|
|
frameKeyHold++;
|
|
if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH ||
|
|
frameKeyHold == 20 ||
|
|
(frameKeyHold > 20 && (frameKeyHold % 5 == 0)))
|
|
{
|
|
cursorY++;
|
|
}
|
|
}
|
|
else if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH || GetVirtualKeyState(VK_LEFT) == KEY_HOLD)
|
|
{
|
|
frameKeyHold++;
|
|
if(GetVirtualKeyState(VK_LEFT) == KEY_PUSH ||
|
|
frameKeyHold == 20 ||
|
|
(frameKeyHold > 20 && (frameKeyHold % 5 == 0)))
|
|
{
|
|
page--;
|
|
}
|
|
}
|
|
else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
|
|
{
|
|
frameKeyHold++;
|
|
if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH ||
|
|
frameKeyHold == 20 ||
|
|
(frameKeyHold > 20 && (frameKeyHold % 5 == 0)))
|
|
{
|
|
page++;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
frameKeyHold = 0;
|
|
}
|
|
|
|
if(page < 0)
|
|
{
|
|
page = pageMax;
|
|
}
|
|
else if(page > pageMax)
|
|
{
|
|
page = 0;
|
|
}
|
|
|
|
if(page != pageMax)
|
|
{
|
|
if(cursorY < 0)
|
|
{
|
|
cursorY = countItemPerPage - 1;
|
|
}
|
|
else if(cursorY >= countItemPerPage)
|
|
{
|
|
cursorY = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(cursorY < 0)
|
|
{
|
|
cursorY = lastPageMaxCursorY - 1;
|
|
}
|
|
else if(cursorY >= lastPageMaxCursorY)
|
|
{
|
|
cursorY = 0;
|
|
}
|
|
}
|
|
|
|
yield;
|
|
}
|
|
}
|
|
|
|
|
|
//----------------------------------------------------
|
|
// ユーティリティ
|
|
//----------------------------------------------------
|
|
function CreateTextObject(let mx, let my, let size, let text)
|
|
{
|
|
let obj = ObjText_Create();
|
|
ObjText_SetText(obj, text);
|
|
ObjText_SetFontType(obj, "Unispace");
|
|
ObjText_SetFontSize(obj, size);
|
|
ObjText_SetFontBold(obj, true);
|
|
ObjText_SetFontColorTop(obj, 0xBC55FF);
|
|
ObjText_SetFontColorBottom(obj, 0xECD0FF);
|
|
ObjText_SetFontBorderType(obj, BORDER_FULL);
|
|
ObjText_SetFontBorderColor(obj, 255, 255, 255);
|
|
ObjText_SetFontBorderWidth(obj, 2);
|
|
Obj_SetRenderPriorityI(obj, 40);
|
|
ObjRender_SetX(obj, mx);
|
|
ObjRender_SetY(obj, my);
|
|
return obj;
|
|
}
|
|
|