Add existing file
This commit is contained in:
parent
9bedcb263d
commit
d6a4b8bf20
320 changed files with 20855 additions and 0 deletions
|
@ -0,0 +1,46 @@
|
|||
// Item script
|
||||
|
||||
#include "./Kevin_ItemConst.txt"
|
||||
#include "./Kevin_ItemLib.txt"
|
||||
//#include "./Kevin_ItemData.txt"
|
||||
|
||||
@Initialize{
|
||||
SetAutoDeleteObject(true);
|
||||
SetDefaultBonusItemEnable(true);
|
||||
LoadItemData(GetCurrentScriptDirectory ~ "./Kevin_ItemData.txt");
|
||||
}
|
||||
|
||||
@MainLoop{
|
||||
yield;
|
||||
}
|
||||
|
||||
@Event
|
||||
{
|
||||
alternative (GetEventType)
|
||||
case (EV_GET_ITEM){
|
||||
|
||||
let obj = GetEventArgument(0);
|
||||
|
||||
alternative(obj)
|
||||
|
||||
case(POINT_REGULAR){ AddScore(GetAreaCommonData("PIV", "currentvalue", 0));}
|
||||
case(POINT_BHESTIE){ AddScore(2*GetAreaCommonData("PIV", "currentvalue", 0));}
|
||||
case(EXTEND_LIFE){ AddScore(50000); SetPlayerLife(GetPlayerLife()+1);}
|
||||
case(EXTEND_SPELL){ AddScore(50000); SetPlayerSpell(GetPlayerSpell()+1);}
|
||||
case(PIV_100){ SetAreaCommonData("PIV", "currentvalue", GetAreaCommonData("PIV", "currentvalue", 0)+100);}
|
||||
case(PIV_250){ SetAreaCommonData("PIV", "currentvalue", GetAreaCommonData("PIV", "currentvalue", 0)+250);}
|
||||
case(PIV_500){ SetAreaCommonData("PIV", "currentvalue", GetAreaCommonData("PIV", "currentvalue", 0)+500);}
|
||||
|
||||
}
|
||||
|
||||
case (EV_DELETE_SHOT_TO_ITEM){
|
||||
|
||||
}
|
||||
|
||||
case (EV_COLLECT_ITEM){
|
||||
let obj = GetEventArgument(1);
|
||||
ObjMove_SetAcceleration(obj, 0.85);
|
||||
ObjMove_SetMaxSpeed(obj, 12);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,292 @@
|
|||
//一時停止中スクリプト
|
||||
|
||||
#include "script/KevinSystem/GeneralSoundLib.txt"
|
||||
|
||||
int STGWIDTH = GetStgFrameWidth();
|
||||
int STGHEIGHT = GetStgFrameHeight();
|
||||
|
||||
@Initialize
|
||||
{
|
||||
_SoundTask();
|
||||
ExtendSFX;
|
||||
SetAutoDeleteObject(true);
|
||||
TBackgroundNew(0, 0);
|
||||
TMenu();
|
||||
}
|
||||
|
||||
@MainLoop
|
||||
{
|
||||
yield;
|
||||
}
|
||||
|
||||
@Finalize
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
task TBackgroundNew(renderX, renderY){
|
||||
|
||||
let clearText = ObjText_Create();
|
||||
ObjText_SetText(clearText, "Congratulations on clearing the game![r]Until the next convocation...");
|
||||
ObjText_SetFontSize(clearText, 18.5);
|
||||
ObjText_SetFontType(clearText, "Connecting Chain Handserif");
|
||||
|
||||
ObjText_SetMaxWidth(clearText, STGWIDTH);
|
||||
ObjText_SetHorizontalAlignment(clearText, ALIGNMENT_CENTER);
|
||||
|
||||
ObjText_SetFontBold(clearText, true);
|
||||
ObjText_SetFontColorTop(clearText, 255, 255, 255);
|
||||
ObjText_SetFontColorBottom(clearText, 255, 255, 255);
|
||||
ObjText_SetFontBorderType(clearText, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(clearText, 0x7D39D9);
|
||||
ObjText_SetFontBorderWidth(clearText, 2);
|
||||
Obj_SetRenderPriorityI(clearText, 10);
|
||||
ObjRender_SetX(clearText, STGWIDTH-255);
|
||||
ObjRender_SetY(clearText, STGHEIGHT-75);
|
||||
|
||||
// Render semi-transparent primitive background
|
||||
task TRenderPrim(selection){
|
||||
|
||||
// Thank you for the PrimMaker Ferase :omegaflooshed:
|
||||
|
||||
ObjRender_SetPosition(selection, renderX+640, renderY+360, 0); // Since the render priority of the r.target is under 20
|
||||
|
||||
// Set up vert 0
|
||||
ObjPrim_SetVertexPosition(selection,0,-640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,0,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 0, 0, 0);
|
||||
// Set up vert 1
|
||||
ObjPrim_SetVertexPosition(selection,1,640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,1,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 1, 1280, 0);
|
||||
// Set up vert 2
|
||||
ObjPrim_SetVertexPosition(selection,2,640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,2,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 2, 1280, 720);
|
||||
// Set up vert 3
|
||||
ObjPrim_SetVertexPosition(selection,3,640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,3,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 3, 1280, 720);
|
||||
// Set up vert 4
|
||||
ObjPrim_SetVertexPosition(selection,4,-640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,4,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 4, 0, 720);
|
||||
// Set up vert 5
|
||||
ObjPrim_SetVertexPosition(selection,5,-640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,5,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 5, 0, 0);
|
||||
|
||||
for(int i = 0; i <= 5; i++){
|
||||
ObjPrim_SetVertexAlpha(selection, i, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// Render... the render target???
|
||||
let objBG = ObjPrim_Create(OBJ_PRIMITIVE_2D);
|
||||
ObjPrim_SetPrimitiveType(objBG, PRIMITIVE_TRIANGLELIST);
|
||||
ObjPrim_SetVertexCount(objBG, 6);
|
||||
let target = "target";
|
||||
CreateRenderTargetEx(target, 1280, 720);
|
||||
ObjPrim_SetTexture(objBG, target);
|
||||
//SetInvalidRenderPriorityA1(20, 80);
|
||||
RenderToTextureA1(target, 0, 100, true);
|
||||
//RenderToTextureB1(target, objBG, true);
|
||||
Obj_SetRenderPriorityI(objBG, 0);
|
||||
TRenderPrim(objBG);
|
||||
|
||||
}
|
||||
|
||||
task TBackground
|
||||
{
|
||||
task TVertex(var index, var left, var top, var right, var bottom)
|
||||
{
|
||||
ObjPrim_SetVertexPosition(obj, index + 0, left, top, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 1, left, bottom, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 2, right, top, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 3, right, top, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 4, left, bottom, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 5, right, bottom, 0);
|
||||
|
||||
ObjPrim_SetVertexUVT(obj, index + 0, left, top);
|
||||
ObjPrim_SetVertexUVT(obj, index + 1, left, bottom);
|
||||
ObjPrim_SetVertexUVT(obj, index + 2, right, top);
|
||||
ObjPrim_SetVertexUVT(obj, index + 3, right, top);
|
||||
ObjPrim_SetVertexUVT(obj, index + 4, left, bottom);
|
||||
ObjPrim_SetVertexUVT(obj, index + 5, right, bottom);
|
||||
|
||||
//STGシーン内のみアニメーション
|
||||
if(left >= 341 && right <= 937 && top >= 45 && bottom <= 677)
|
||||
{
|
||||
let alpha = 255;
|
||||
while(alpha >= 128)
|
||||
{
|
||||
ObjPrim_SetVertexAlpha(obj, index + 0, alpha);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 1, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 2, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 3, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 4, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 5, alpha);
|
||||
alpha -= 255 / frame;
|
||||
|
||||
yield;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//分割設定
|
||||
let frame = 30;
|
||||
let countH = 20; //分割数
|
||||
let countV = 30;
|
||||
let width = 1280 / countH;
|
||||
let height = 720 / countV;
|
||||
let target = GetTransitionRenderTargetName();
|
||||
let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D); //2D頂点ブジェクト生成
|
||||
ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);
|
||||
ObjPrim_SetVertexCount(obj, countH * countV * 6);
|
||||
Obj_SetRenderPriorityI(obj, 0); //描画優先度を設定
|
||||
ObjPrim_SetTexture(obj, target); //テクスチャを設定
|
||||
|
||||
ascent(ix in 0.. countH)
|
||||
{
|
||||
ascent(iy in 0.. countV)
|
||||
{
|
||||
let index = (ix + iy * countH) * 6;
|
||||
let left = ix * width;
|
||||
let right = left + width;
|
||||
let top = iy * height;
|
||||
let bottom = top + height;
|
||||
TVertex(index, left, top, right, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
task TMenu
|
||||
{
|
||||
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, 35);
|
||||
ObjText_SetFontType(obj, "Exotc350 DmBd BT");
|
||||
ObjText_SetFontBold(obj, true);
|
||||
ObjText_SetHorizontalAlignment(obj, ALIGNMENT_CENTER);
|
||||
ObjText_SetMaxWidth(obj, STGWIDTH);
|
||||
ObjText_SetFontColorTop(obj, 155, 45, 175);
|
||||
ObjText_SetFontColorBottom(obj, 200, 80, 255);
|
||||
ObjText_SetFontBorderType(obj, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(obj, 255, 255, 255);
|
||||
ObjText_SetFontBorderWidth(obj, 1.75);
|
||||
Obj_SetRenderPriorityI(obj, 10);
|
||||
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);
|
||||
loop
|
||||
{
|
||||
Obj_SetVisible(objSelect, index == selectIndex);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
//メニュー配置
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, "End of a Duel");
|
||||
ObjText_SetFontSize(objText, 50);
|
||||
ObjText_SetFontType(objText, "Exotc350 DmBd BT");
|
||||
|
||||
ObjText_SetMaxWidth(objText, STGWIDTH);
|
||||
ObjText_SetHorizontalAlignment(objText, ALIGNMENT_CENTER);
|
||||
|
||||
ObjText_SetFontBold(objText, true);
|
||||
ObjText_SetFontColorTop(objText, 75, 255, 255);
|
||||
ObjText_SetFontColorBottom(objText, 180, 255, 255);
|
||||
ObjText_SetFontBorderType(objText, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objText,0, 0, 0);
|
||||
ObjText_SetFontBorderWidth(objText, 3);
|
||||
Obj_SetRenderPriorityI(objText, 10);
|
||||
ObjRender_SetX(objText, STGWIDTH-255);
|
||||
ObjRender_SetY(objText, 100);
|
||||
|
||||
let mx = STGWIDTH-255;
|
||||
let my = 175;
|
||||
let texts = ["Record Your Victories", "Leave The Battlefield", "Go For A Rematch"];
|
||||
var countMenu = length(texts);
|
||||
ascent(var iText in 0 .. countMenu)
|
||||
{
|
||||
TMenuItem(iText, mx, my, texts[iText]);
|
||||
my += 45;
|
||||
}
|
||||
|
||||
//キー状態がリセットされるまで待機
|
||||
while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}
|
||||
|
||||
//メニュー選択処理
|
||||
let frameKeyHold = 0;//キー押しっぱなしフレーム数
|
||||
loop
|
||||
{
|
||||
//決定
|
||||
if(GetVirtualKeyState(VK_OK) == KEY_PULL)
|
||||
{
|
||||
let listResult = [RESULT_SAVE_REPLAY, RESULT_END, RESULT_RETRY];
|
||||
SetScriptResult(listResult[selectIndex]);
|
||||
CloseScript(GetOwnScriptID());
|
||||
return;
|
||||
}
|
||||
|
||||
//カーソル移動
|
||||
if(GetVirtualKeyState(VK_UP) == KEY_PUSH)
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex--;
|
||||
}
|
||||
else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH)
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex++;
|
||||
}
|
||||
else if(GetVirtualKeyState(VK_UP) == KEY_HOLD)
|
||||
{
|
||||
frameKeyHold++;
|
||||
if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0)))
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex--;
|
||||
}
|
||||
}
|
||||
else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD)
|
||||
{
|
||||
frameKeyHold++;
|
||||
if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0)))
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
frameKeyHold = 0;
|
||||
}
|
||||
|
||||
if(selectIndex < 0)
|
||||
{
|
||||
selectIndex = countMenu - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectIndex %= countMenu;
|
||||
}
|
||||
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
const POINT_REGULAR = 1;
|
||||
const POINT_BHESTIE = 2;
|
||||
const EXTEND_LIFE = 3;
|
||||
const EXTEND_SPELL = 4;
|
||||
const PIV_100 = 5;
|
||||
const PIV_250 = 6;
|
||||
const PIV_500 = 7;
|
|
@ -0,0 +1,11 @@
|
|||
#UserItemData
|
||||
|
||||
item_image = "./../img/yo.png"
|
||||
|
||||
ItemData { id=1 rect=(256,256,384,384) } // Regular Point Item (PIV)
|
||||
ItemData { id=2 rect=(384,128,512,256) } // Bhestie Point Item (PIV * 2)
|
||||
ItemData { id=3 rect=(0,256,128,384) } // 1-up Item
|
||||
ItemData { id=4 rect=(128,256,256,384) } // Spell Item
|
||||
ItemData { id=5 rect=(256,384,384,512) fixed_angle = false angular_velocity = 3} // Green PIV Item (+100)
|
||||
ItemData { id=6 rect=(384,384,512,512) fixed_angle = false angular_velocity = 3} // Pink PIV Item (+250)
|
||||
ItemData { id=7 rect=(384,256,512,384) fixed_angle = false angular_velocity = 3} // Gold PIV Item (+500)
|
|
@ -0,0 +1,92 @@
|
|||
// Valid types: PIV_100, PIV_250, PIV_500
|
||||
|
||||
function CreatePIVItem(itemtype, x, y){
|
||||
let PIVItem = CreateItemU2(itemtype, x, y, x-10, y-10, 100);
|
||||
|
||||
ObjItem_SetMoveToPlayer(PIVItem, true);
|
||||
ObjItem_SetAutoDelete(PIVItem, false);
|
||||
|
||||
ObjItem_SetAutoCollectEnableFlags(PIVItem, ITEM_AUTOCOLLECT_ALL);
|
||||
ObjItem_SetRenderScoreEnable(PIVItem, false);
|
||||
|
||||
ObjItem_SetIntersectionRadius(PIVItem, 60);
|
||||
|
||||
ObjRender_SetScaleXYZ(PIVItem, 0.3, 0.3, 1);
|
||||
ObjRender_SetAlpha(PIVItem, 125);
|
||||
|
||||
async{
|
||||
while(!Obj_IsDeleted(PIVItem)){
|
||||
float angz = ObjRender_GetAngleZ(PIVItem);
|
||||
ObjRender_SetAngleZ(PIVItem, angz+5);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
return PIVItem;
|
||||
}
|
||||
|
||||
// Valid types: POINT_REGULAR, POINT_BHESTIE
|
||||
function CreateScoreItem(itemtype, x, y){
|
||||
let ScoreItem = CreateItemU2(itemtype, x, y, x-30, y-30, 0);
|
||||
|
||||
ObjItem_SetAutoCollectEnableFlags(ScoreItem, ITEM_AUTOCOLLECT_ALL);
|
||||
ObjItem_SetAutoDelete(ScoreItem, false);
|
||||
|
||||
ObjItem_SetIntersectionRadius(ScoreItem, 60);
|
||||
ObjItem_SetRenderScoreEnable(ScoreItem, false);
|
||||
|
||||
ObjRender_SetScaleXYZ(ScoreItem, 0.4, 0.4, 1);
|
||||
ObjRender_SetAlpha(ScoreItem, 200);
|
||||
|
||||
ObjMove_AddPatternA2(ScoreItem, 60, NO_CHANGE, 90, 0.12, 5.45, 0);
|
||||
|
||||
return ScoreItem;
|
||||
}
|
||||
|
||||
// Valid types: EXTEND_LIFE, EXTEND_SPELL
|
||||
function CreateExtendItem(itemtype, x, y){
|
||||
|
||||
let ExtendItem = CreateItemU2(itemtype, x, y, x-15, y-15, 0);
|
||||
ObjItem_SetMoveToPlayer(ExtendItem, true);
|
||||
ObjItem_SetAutoCollectEnableFlags(ExtendItem, ITEM_AUTOCOLLECT_ALL);
|
||||
|
||||
ObjRender_SetScaleXYZ(ExtendItem, 0.5, 0.5, 1);
|
||||
|
||||
return ExtendItem;
|
||||
}
|
||||
|
||||
// Summoning the actual items
|
||||
|
||||
function NonspellItemDrop(scene, x, y){
|
||||
|
||||
if(ObjEnemyBossScene_GetInfo(scene, INFO_PLAYER_SHOOTDOWN_COUNT) == 0){
|
||||
loop(14){
|
||||
CreateScoreItem(POINT_REGULAR, x+rand(-75, 75), y+rand(-45, 45));
|
||||
}
|
||||
}
|
||||
else{
|
||||
loop(8){
|
||||
CreateScoreItem(POINT_REGULAR, x+rand(-75, 75), y+rand(-45, 45));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function SpellItemDrop(scene, x, y){
|
||||
|
||||
if(ObjEnemyBossScene_GetInfo(scene, INFO_PLAYER_SHOOTDOWN_COUNT) == 0 && ObjEnemyBossScene_GetInfo(scene, INFO_PLAYER_SPELL_COUNT) == 0){
|
||||
loop(20){
|
||||
CreateScoreItem(POINT_BHESTIE, x+rand(-75, 75), y+rand(-45, 45));
|
||||
}
|
||||
loop(10){
|
||||
CreateScoreItem(POINT_REGULAR, x+rand(-75, 75), y+rand(-45, 45));
|
||||
}
|
||||
}
|
||||
else if(ObjEnemyBossScene_GetInfo(scene, INFO_PLAYER_SHOOTDOWN_COUNT) == 0 && ObjEnemyBossScene_GetInfo(scene, INFO_PLAYER_SPELL_COUNT) >> 0){
|
||||
loop(12){
|
||||
CreateScoreItem(POINT_REGULAR, x+rand(-75, 75), y+rand(-45, 45));
|
||||
}
|
||||
}
|
||||
else{}
|
||||
|
||||
}
|
|
@ -0,0 +1,335 @@
|
|||
//一時停止中スクリプト
|
||||
//#include "./../../script/soundtask.txt"
|
||||
#include "script/KevinSystem/GeneralSoundLib.txt"
|
||||
|
||||
int STGWIDTH = GetStgFrameWidth();
|
||||
int STGHEIGHT = GetStgFrameHeight();
|
||||
|
||||
@Initialize
|
||||
{
|
||||
_SoundTask();
|
||||
PauseGameSFX;
|
||||
SetAutoDeleteObject(true);
|
||||
//TBackground();
|
||||
TBackgroundNew(0, 0);
|
||||
TMenu();
|
||||
TFunFact();
|
||||
//_SoundTask;
|
||||
}
|
||||
|
||||
@MainLoop
|
||||
{
|
||||
yield;
|
||||
}
|
||||
|
||||
@Finalize
|
||||
{
|
||||
}
|
||||
|
||||
task TFunFact(){
|
||||
|
||||
//int y = 0;
|
||||
|
||||
let textchoices = [
|
||||
"Even though her parents gave her an entire crash course[r]on how royals enjoy tea, Erika is more a coffee fan.",
|
||||
"Pankevin is terrified of heights, but loves rollercoasters & thrill rides.[r]He only rides the ones with shoulder harnesses to feel safer,[r]and always goes with Kouda.",
|
||||
"Rachel has been exterminated at least twice by Housui[r]for constantly nagging her to let Rachel experiment.",
|
||||
"There are a total of 18 fun facts on this pause menu,[r]including this one. How many have you found?",
|
||||
"The creator of this game is incredibly self-indulgent.[r]You probably figured out this one, though...",
|
||||
"Connecting Chain Handserif is the creator's favorite font.[r]As a Brazilian once said, \"this bitch is[r]hyperfixated on that font\".",
|
||||
"Pankevin is acquainted with a duck who casts ice magic in the[r]Outside World. His name is Caleb.",
|
||||
"Marisa and Housui often duel in the Forest of Magic.[r]Their antics have incited Alice's wrath so much that[r]she just doesn't care anymore.",
|
||||
"Whenever Tenshi and Shion organize banquets at the Hakurei Shrine,[r]Erika is the self-appointed taste tester of the food.[r]It's gone from \"unbearable\" to \"passable\" according to her.",
|
||||
"Kouda always has a pair of fluffy cat-ear headphones on hand wherever[r]he goes, so he can plop them on when he's overwhelmed by loud sounds.[r]Pankevin keeps the headphones for Kouda in his huge quiver[r]when they're traveling together.",
|
||||
"Tenshi and Erika were planning to bring Shion along for[r]their adventures, but the latter was exhausted after[r]the oil overflow incident and stayed out.[r](If Shion came along, they would be too powerful...)",
|
||||
"Housui's favorite food are amarylis flowers.[r]...That's what she says, but it's probably just mochi.",
|
||||
"Inside Pankevin's huge quiver, there are many refillable water containers,[r]a portable sketchbook & watercolor set, some snacks, and a pair of[r]fluffy cat-ear headphones for Kouda.",
|
||||
"Pankevin = Panda + Kevin, not Pansexual x Kevin. Pankevin is bi.",
|
||||
"Thank you for playing this game! It means a lot to me :D",
|
||||
"Erika Rankyuu debuted in the creator's first game, Enigma of the Storm. [r]It was made for a bullet hell game contest in a Discord server.",
|
||||
"Housui Henkawa debuted in Unstable and Unimaginable Power, [r]a Touhou fangame. It's very well-crafted and polished, so go ahead[r]and play it! Housui's the Extra boss, by the way.",
|
||||
"Housui is not bald.",
|
||||
];
|
||||
int x = prand_int(0, length(textchoices)-1);
|
||||
//y = length(textchoices);
|
||||
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, textchoices[x]);
|
||||
ObjText_SetFontSize(objText, 18.5);
|
||||
ObjText_SetFontType(objText, "Connecting Chain Handserif");
|
||||
|
||||
ObjText_SetMaxWidth(objText, STGWIDTH);
|
||||
ObjText_SetHorizontalAlignment(objText, ALIGNMENT_CENTER);
|
||||
|
||||
ObjText_SetFontBold(objText, true);
|
||||
ObjText_SetFontColorTop(objText, 255, 255, 255);
|
||||
ObjText_SetFontColorBottom(objText, 255, 255, 255);
|
||||
ObjText_SetFontBorderType(objText, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objText, 0x7D39D9);
|
||||
ObjText_SetFontBorderWidth(objText, 2);
|
||||
Obj_SetRenderPriorityI(objText, 10);
|
||||
ObjRender_SetX(objText, STGWIDTH-255);
|
||||
ObjRender_SetY(objText, STGHEIGHT-75);
|
||||
|
||||
}
|
||||
|
||||
// renderX and renderY will be TOP-LEFT COORDS
|
||||
task TBackgroundNew(renderX, renderY){
|
||||
// Render semi-transparent primitive background
|
||||
task TRenderPrim(selection){
|
||||
|
||||
// Thank you for the PrimMaker Ferase :omegaflooshed:
|
||||
|
||||
ObjRender_SetPosition(selection, renderX+640, renderY+360, 0); // Since the render priority of the r.target is under 20
|
||||
|
||||
// Set up vert 0
|
||||
ObjPrim_SetVertexPosition(selection,0,-640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,0,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 0, 0, 0);
|
||||
// Set up vert 1
|
||||
ObjPrim_SetVertexPosition(selection,1,640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,1,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 1, 1280, 0);
|
||||
// Set up vert 2
|
||||
ObjPrim_SetVertexPosition(selection,2,640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,2,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 2, 1280, 720);
|
||||
// Set up vert 3
|
||||
ObjPrim_SetVertexPosition(selection,3,640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,3,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 3, 1280, 720);
|
||||
// Set up vert 4
|
||||
ObjPrim_SetVertexPosition(selection,4,-640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,4,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 4, 0, 720);
|
||||
// Set up vert 5
|
||||
ObjPrim_SetVertexPosition(selection,5,-640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,5,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 5, 0, 0);
|
||||
|
||||
for(int i = 0; i <= 5; i++){
|
||||
ObjPrim_SetVertexAlpha(selection, i, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// Render... the render target???
|
||||
let objBG = ObjPrim_Create(OBJ_PRIMITIVE_2D);
|
||||
ObjPrim_SetPrimitiveType(objBG, PRIMITIVE_TRIANGLELIST);
|
||||
ObjPrim_SetVertexCount(objBG, 6);
|
||||
let target = "target";
|
||||
CreateRenderTargetEx(target, 1280, 720);
|
||||
ObjPrim_SetTexture(objBG, target);
|
||||
//SetInvalidRenderPriorityA1(20, 80);
|
||||
RenderToTextureA1(target, 0, 100, true);
|
||||
//RenderToTextureB1(target, objBG, true);
|
||||
Obj_SetRenderPriorityI(objBG, 0);
|
||||
TRenderPrim(objBG);
|
||||
|
||||
}
|
||||
|
||||
task TBackground
|
||||
{
|
||||
task TVertex(var index, var left, var top, var right, var bottom)
|
||||
{
|
||||
ObjPrim_SetVertexPosition(obj, index + 0, left, top, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 1, left, bottom, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 2, right, top, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 3, right, top, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 4, left, bottom, 0);
|
||||
ObjPrim_SetVertexPosition(obj, index + 5, right, bottom, 0);
|
||||
|
||||
ObjPrim_SetVertexUVT(obj, index + 0, left, top);
|
||||
ObjPrim_SetVertexUVT(obj, index + 1, left, bottom);
|
||||
ObjPrim_SetVertexUVT(obj, index + 2, right, top);
|
||||
ObjPrim_SetVertexUVT(obj, index + 3, right, top);
|
||||
ObjPrim_SetVertexUVT(obj, index + 4, left, bottom);
|
||||
ObjPrim_SetVertexUVT(obj, index + 5, right, bottom);
|
||||
|
||||
//STGシーン内のみアニメーション
|
||||
if(left >= 341 && right <= 937 && top >= 45 && bottom <= 677)
|
||||
{
|
||||
let alpha = 255;
|
||||
while(alpha >= 128)
|
||||
{
|
||||
ObjPrim_SetVertexAlpha(obj, index + 0, alpha);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 1, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 2, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 3, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 4, alpha/2);
|
||||
ObjPrim_SetVertexAlpha(obj, index + 5, alpha);
|
||||
alpha -= 255 / frame;
|
||||
|
||||
yield;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//分割設定
|
||||
let frame = 30;
|
||||
let countH = 20; //分割数
|
||||
let countV = 30;
|
||||
let width = 1280 / countH;
|
||||
let height = 720 / countV;
|
||||
let target = GetTransitionRenderTargetName();
|
||||
let obj = ObjPrim_Create(OBJ_PRIMITIVE_2D); //2D頂点ブジェクト生成
|
||||
ObjPrim_SetPrimitiveType(obj, PRIMITIVE_TRIANGLELIST);
|
||||
ObjPrim_SetVertexCount(obj, countH * countV * 6);
|
||||
Obj_SetRenderPriorityI(obj, 0); //描画優先度を設定
|
||||
ObjPrim_SetTexture(obj, target); //テクスチャを設定
|
||||
|
||||
ascent(ix in 0.. countH)
|
||||
{
|
||||
ascent(iy in 0.. countV)
|
||||
{
|
||||
let index = (ix + iy * countH) * 6;
|
||||
let left = ix * width;
|
||||
let right = left + width;
|
||||
let top = iy * height;
|
||||
let bottom = top + height;
|
||||
TVertex(index, left, top, right, bottom);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
task TMenu
|
||||
{
|
||||
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, 35);
|
||||
ObjText_SetFontType(obj, "Exotc350 DmBd BT");
|
||||
ObjText_SetFontBold(obj, true);
|
||||
ObjText_SetHorizontalAlignment(obj, ALIGNMENT_CENTER);
|
||||
ObjText_SetMaxWidth(obj, STGWIDTH);
|
||||
ObjText_SetFontColorTop(obj, 155, 45, 175);
|
||||
ObjText_SetFontColorBottom(obj, 200, 80, 255);
|
||||
ObjText_SetFontBorderType(obj, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(obj, 255, 255, 255);
|
||||
ObjText_SetFontBorderWidth(obj, 1.75);
|
||||
Obj_SetRenderPriorityI(obj, 10);
|
||||
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);
|
||||
loop
|
||||
{
|
||||
Obj_SetVisible(objSelect, index == selectIndex);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
//メニュー配置
|
||||
int x = prand_int(0, 6);
|
||||
let textchoices = ["A Brief Respite", "Yassification Paused", "Tea Time", "Heroic Moratorium", "World Comes to A Halt","A Moment to Breathe", "Players are Resting Warmly"];
|
||||
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, textchoices[x]);
|
||||
ObjText_SetFontSize(objText, 50);
|
||||
ObjText_SetFontType(objText, "Exotc350 DmBd BT");
|
||||
|
||||
ObjText_SetMaxWidth(objText, STGWIDTH);
|
||||
ObjText_SetHorizontalAlignment(objText, ALIGNMENT_CENTER);
|
||||
|
||||
ObjText_SetFontBold(objText, true);
|
||||
ObjText_SetFontColorTop(objText, 75, 255, 255);
|
||||
ObjText_SetFontColorBottom(objText, 180, 255, 255);
|
||||
ObjText_SetFontBorderType(objText, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objText,0, 0, 0);
|
||||
ObjText_SetFontBorderWidth(objText, 3);
|
||||
Obj_SetRenderPriorityI(objText, 10);
|
||||
ObjRender_SetX(objText, STGWIDTH-255);
|
||||
ObjRender_SetY(objText, 100);
|
||||
|
||||
let mx = STGWIDTH-255;
|
||||
let my = 175;
|
||||
let texts = ["Resume The Faceoff", "Accept Your Losses", "Take Another Shot"];
|
||||
var countMenu = length(texts);
|
||||
ascent(var iText in 0 .. countMenu)
|
||||
{
|
||||
TMenuItem(iText, mx, my, texts[iText]);
|
||||
my += 45;
|
||||
}
|
||||
|
||||
//キー状態がリセットされるまで待機
|
||||
while(GetVirtualKeyState(VK_PAUSE) != KEY_FREE){yield;}
|
||||
|
||||
//メニュー選択処理
|
||||
let frameKeyHold = 0;//キー押しっぱなしフレーム数
|
||||
//PauseGameSFX;
|
||||
loop
|
||||
{
|
||||
//決定
|
||||
if(GetVirtualKeyState(VK_OK) == KEY_PULL)
|
||||
{
|
||||
let listResult = [RESULT_CANCEL, RESULT_END, RESULT_RETRY];
|
||||
SetScriptResult(listResult[selectIndex]);
|
||||
CloseScript(GetOwnScriptID());
|
||||
return;
|
||||
}
|
||||
|
||||
//キャンセル
|
||||
if(GetVirtualKeyState(VK_CANCEL) == KEY_PULL || GetVirtualKeyState(VK_PAUSE) == KEY_PULL)
|
||||
{
|
||||
SetScriptResult(RESULT_CANCEL);
|
||||
CloseScript(GetOwnScriptID());
|
||||
return;
|
||||
}
|
||||
|
||||
//カーソル移動
|
||||
if(GetVirtualKeyState(VK_UP) == KEY_PUSH)
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex--;
|
||||
}
|
||||
else if(GetVirtualKeyState(VK_DOWN) == KEY_PUSH)
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex++;
|
||||
}
|
||||
else if(GetVirtualKeyState(VK_UP) == KEY_HOLD)
|
||||
{
|
||||
frameKeyHold++;
|
||||
if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0)))
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex--;
|
||||
}
|
||||
}
|
||||
else if(GetVirtualKeyState(VK_DOWN) == KEY_HOLD)
|
||||
{
|
||||
frameKeyHold++;
|
||||
if(frameKeyHold == 30 || (frameKeyHold > 30 && (frameKeyHold % 10 == 0)))
|
||||
{
|
||||
SelectOptionSFX;
|
||||
selectIndex++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
frameKeyHold = 0;
|
||||
}
|
||||
|
||||
if(selectIndex < 0)
|
||||
{
|
||||
selectIndex = countMenu - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
selectIndex %= countMenu;
|
||||
}
|
||||
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,453 @@
|
|||
//リプレイ保存スクリプト
|
||||
|
||||
int STGWIDTH = GetStgFrameWidth();
|
||||
int STGHEIGHT = GetStgFrameHeight();
|
||||
|
||||
@Initialize
|
||||
{
|
||||
SetAutoDeleteObject(true);
|
||||
LoadReplayList();
|
||||
|
||||
TBackgroundNew(0, 0);
|
||||
TReplayIndexSelection();
|
||||
}
|
||||
|
||||
@MainLoop
|
||||
{
|
||||
yield;
|
||||
}
|
||||
|
||||
@Finalize
|
||||
{
|
||||
}
|
||||
|
||||
let MENU_INDEX_SELECTION = 1;
|
||||
let MENU_NAME_ENTRY = 2;
|
||||
let menuMode = MENU_INDEX_SELECTION;
|
||||
|
||||
function CreateTextObject(let mx, let my, float size, let text)
|
||||
{
|
||||
let obj = ObjText_Create();
|
||||
ObjText_SetText(obj, text);
|
||||
ObjText_SetFontSize(obj, size);
|
||||
ObjText_SetFontType(obj, "Unispace");
|
||||
ObjText_SetFontBold(obj, true);
|
||||
//ObjText_SetHorizontalAlignment(obj, ALIGNMENT_CENTER);
|
||||
ObjText_SetMaxWidth(obj, STGWIDTH);
|
||||
ObjText_SetFontColorTop(obj, 155, 45, 175);
|
||||
ObjText_SetFontColorBottom(obj, 200, 80, 255);
|
||||
ObjText_SetFontBorderType(obj, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(obj, 255, 255, 255);
|
||||
ObjText_SetFontBorderWidth(obj, 1.75);
|
||||
Obj_SetRenderPriorityI(obj, 10);
|
||||
ObjRender_SetX(obj, mx);
|
||||
ObjRender_SetY(obj, my);
|
||||
return obj;
|
||||
}
|
||||
|
||||
// renderX and renderY will be TOP-LEFT COORDS
|
||||
task TBackgroundNew(renderX, renderY){
|
||||
// Render semi-transparent primitive background
|
||||
task TRenderPrim(selection){
|
||||
|
||||
// Thank you for the PrimMaker Ferase :omegaflooshed:
|
||||
|
||||
ObjRender_SetPosition(selection, renderX+640, renderY+360, 0); // Since the render priority of the r.target is under 20
|
||||
|
||||
// Set up vert 0
|
||||
ObjPrim_SetVertexPosition(selection,0,-640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,0,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 0, 0, 0);
|
||||
// Set up vert 1
|
||||
ObjPrim_SetVertexPosition(selection,1,640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,1,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 1, 1280, 0);
|
||||
// Set up vert 2
|
||||
ObjPrim_SetVertexPosition(selection,2,640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,2,0xA487FF);
|
||||
ObjPrim_SetVertexUVT(selection, 2, 1280, 720);
|
||||
// Set up vert 3
|
||||
ObjPrim_SetVertexPosition(selection,3,640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,3,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 3, 1280, 720);
|
||||
// Set up vert 4
|
||||
ObjPrim_SetVertexPosition(selection,4,-640,360,0);
|
||||
ObjPrim_SetVertexColor(selection,4,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 4, 0, 720);
|
||||
// Set up vert 5
|
||||
ObjPrim_SetVertexPosition(selection,5,-640,-360,0);
|
||||
ObjPrim_SetVertexColor(selection,5,0xF187FF);
|
||||
ObjPrim_SetVertexUVT(selection, 5, 0, 0);
|
||||
|
||||
for(int i = 0; i <= 5; i++){
|
||||
ObjPrim_SetVertexAlpha(selection, i, 100);
|
||||
}
|
||||
}
|
||||
|
||||
// Render... the render target???
|
||||
let objBG = ObjPrim_Create(OBJ_PRIMITIVE_2D);
|
||||
ObjPrim_SetPrimitiveType(objBG, PRIMITIVE_TRIANGLELIST);
|
||||
ObjPrim_SetVertexCount(objBG, 6);
|
||||
let target = "target";
|
||||
CreateRenderTargetEx(target, STGWIDTH, STGHEIGHT);
|
||||
ObjPrim_SetTexture(objBG, target);
|
||||
//SetInvalidRenderPriorityA1(20, 80);
|
||||
RenderToTextureA1(target, 0, 100, true);
|
||||
//RenderToTextureB1(target, objBG, true);
|
||||
Obj_SetRenderPriorityI(objBG, 0);
|
||||
TRenderPrim(objBG);
|
||||
|
||||
}
|
||||
|
||||
task TBackground
|
||||
{
|
||||
let target = GetTransitionRenderTargetName();
|
||||
let obj = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
ObjPrim_SetTexture(obj, target);
|
||||
Obj_SetRenderPriority(obj, 0.1);
|
||||
ObjSprite2D_SetSourceRect(obj, 0, 0, 640, 480);
|
||||
ObjSprite2D_SetDestCenter(obj);
|
||||
ObjRender_SetPosition(obj, 320, 240, 0);
|
||||
ObjRender_SetAlpha(obj, 64);
|
||||
}
|
||||
|
||||
task TReplayIndexSelection()
|
||||
{
|
||||
let cursorY = 0;
|
||||
let page = 0;
|
||||
let countMaxItem = REPLAY_INDEX_DIGIT_MAX - REPLAY_INDEX_DIGIT_MIN + 1;
|
||||
let countItemPerPage = 10;
|
||||
let pageMax = trunc((countMaxItem - 1) / countItemPerPage);
|
||||
pageMax = max(pageMax, 1);
|
||||
let lastPageMaxCursorY = trunc(countMaxItem / countItemPerPage);
|
||||
|
||||
task TMenuItem(let itemY)
|
||||
{
|
||||
let objText = CreateTextObject(341, 90 + 30 * itemY, 25, "");
|
||||
let objSelect = CreateTextObject(341, 90 + 30 * itemY, 25, "");
|
||||
ObjRender_SetBlendType(objSelect, BLEND_ADD_RGB);
|
||||
|
||||
let oldPage = -1;
|
||||
while(menuMode == MENU_INDEX_SELECTION)
|
||||
{
|
||||
if(page != oldPage)
|
||||
{
|
||||
let index = page * countItemPerPage + itemY + 1;
|
||||
let text = rtos("00", index) ~ " ";
|
||||
if(IsValidReplayIndex(index))
|
||||
{
|
||||
text = text ~ vtos("-8s", GetReplayInfo(index, REPLAY_USER_NAME)) ~ " ";
|
||||
text = text ~ GetReplayInfo(index, REPLAY_DATE_TIME) ~ " ";
|
||||
text = text ~ rtos("000000000000", GetReplayInfo(index, REPLAY_TOTAL_SCORE)) ~ " ";
|
||||
}
|
||||
else
|
||||
{
|
||||
text = text ~ "No Data";
|
||||
}
|
||||
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;//キー押しっぱなしフレーム数
|
||||
while(menuMode == MENU_INDEX_SELECTION)
|
||||
{
|
||||
//決定
|
||||
if(GetVirtualKeyState(VK_OK) == KEY_PULL)
|
||||
{
|
||||
menuMode = MENU_NAME_ENTRY;
|
||||
let index = page * countItemPerPage + cursorY + 1;
|
||||
TNameEntry(index);
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
//カーソル移動
|
||||
if(GetVirtualKeyState(VK_UP) == KEY_PUSH || GetVirtualKeyState(VK_UP) == KEY_HOLD)
|
||||
{
|
||||
frameKeyHold++;
|
||||
if(GetVirtualKeyState(VK_UP) == KEY_PUSH ||
|
||||
frameKeyHold == 20 ||
|
||||
(frameKeyHold > 20 && (frameKeyHold % 10 == 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 % 10 == 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 % 10 == 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 % 10 == 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
task TNameEntry(let replayIndex)
|
||||
{
|
||||
let strTextIn =
|
||||
[
|
||||
["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"],
|
||||
["Q","R","S","T","U","V","W","X","Y","Z",".",",",":",";","_","@"],
|
||||
["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"],
|
||||
["q","r","s","t","u","v","w","x","y","z","+","-","/","*","=","%"],
|
||||
["0","1","2","3","4","5","6","7","8","9","0","!","?","'","\"","$"],
|
||||
["(",")","{","}","[","]","<",">","&","#","|","~","^"," "," ","終"]
|
||||
];
|
||||
|
||||
let strTextView =
|
||||
[
|
||||
["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"],
|
||||
["Q","R","S","T","U","V","W","X","Y","Z",".",",",":",";","_","@"],
|
||||
["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"],
|
||||
["q","r","s","t","u","v","w","x","y","z","+","-","/","*","=","%"],
|
||||
["0","1","2","3","4","5","6","7","8","9","0","!","?","'","\"","$"],
|
||||
["(",")","{","}","&osb;","&csb;","<",">","&","#","|","~","^"," "," ","»"]
|
||||
];
|
||||
|
||||
let cursorX = 0;
|
||||
let cursorY = 0;
|
||||
let maxCursorX = length(strTextIn[0]);
|
||||
let maxCursorY = length(strTextIn);
|
||||
|
||||
task TMenuItem(let itemX, let itemY)
|
||||
{
|
||||
let objText = CreateTextObject(341 + GetStgFrameWidth()/5.4 + itemX * 24, 255 + itemY * 24, 22, strTextView[itemY][itemX]);
|
||||
let objSelect = CreateTextObject(341 + GetStgFrameWidth()/5.4 + itemX * 24, 255 + itemY * 24, 22, strTextView[itemY][itemX]);
|
||||
ObjRender_SetBlendType(objSelect, BLEND_ADD_ARGB);
|
||||
|
||||
while(menuMode == MENU_NAME_ENTRY)
|
||||
{
|
||||
Obj_SetVisible(objSelect, itemX == cursorX && itemY == cursorY);
|
||||
yield;
|
||||
}
|
||||
Obj_Delete(objText);
|
||||
Obj_Delete(objSelect);
|
||||
}
|
||||
|
||||
ascent(let iY in 0..maxCursorY)
|
||||
{
|
||||
ascent(let iX in 0 .. maxCursorX)
|
||||
{
|
||||
TMenuItem(iX, iY);
|
||||
}
|
||||
}
|
||||
|
||||
//キー状態がリセットされるまで待機
|
||||
while(GetVirtualKeyState(VK_OK) != KEY_FREE){yield;}
|
||||
|
||||
//入力済み文字
|
||||
let userName = "";
|
||||
let objName = CreateTextObject(341+GetStgFrameWidth()/4, 125, 28, "");
|
||||
task TNameCursor()
|
||||
{
|
||||
let objCursor = CreateTextObject(341+GetStgFrameWidth()/4, 125, 28, "_");
|
||||
while(menuMode == MENU_NAME_ENTRY)
|
||||
{
|
||||
let nameLength = length(userName);
|
||||
ObjRender_SetX(objCursor, 341+GetStgFrameWidth()/4 + nameLength * 17);
|
||||
Obj_SetVisible(objCursor, nameLength < 8);
|
||||
yield;
|
||||
}
|
||||
Obj_Delete(objCursor);
|
||||
}
|
||||
TNameCursor;
|
||||
|
||||
//キー処理
|
||||
let frameKeyHold = 0;//キー押しっぱなしフレーム数
|
||||
while(menuMode == MENU_NAME_ENTRY)
|
||||
{
|
||||
|
||||
if(GetVirtualKeyState(VK_OK) == KEY_PULL)
|
||||
{
|
||||
//決定
|
||||
let nameLength = length(userName);
|
||||
if(cursorX == maxCursorX-1 && cursorY == maxCursorY-1)
|
||||
{
|
||||
//終了キー
|
||||
if(nameLength == 0)
|
||||
{
|
||||
userName = "No Name";
|
||||
}
|
||||
else
|
||||
{
|
||||
SaveReplay(replayIndex, userName);
|
||||
SetScriptResult(RESULT_END);
|
||||
CloseScript(GetOwnScriptID());
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if(nameLength < 8)
|
||||
{
|
||||
userName = userName ~ strTextIn[cursorY][cursorX];
|
||||
}
|
||||
}
|
||||
if(GetVirtualKeyState(VK_CANCEL) == KEY_PULL)
|
||||
{
|
||||
//キャンセル
|
||||
let nameLength = length(userName);
|
||||
if(nameLength > 0)
|
||||
{
|
||||
userName = userName[0..nameLength-1];
|
||||
}
|
||||
else{menuMode = MENU_INDEX_SELECTION; TReplayIndexSelection(); break;}
|
||||
}
|
||||
ObjText_SetText(objName, userName);
|
||||
|
||||
//カーソル移動
|
||||
if(GetVirtualKeyState(VK_UP) == KEY_PUSH || GetVirtualKeyState(VK_UP) == KEY_HOLD)
|
||||
{
|
||||
frameKeyHold++;
|
||||
if(GetVirtualKeyState(VK_UP) == KEY_PUSH ||
|
||||
frameKeyHold == 20 ||
|
||||
(frameKeyHold > 20 && (frameKeyHold % 10 == 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 % 10 == 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 % 10 == 0)))
|
||||
{
|
||||
cursorX--;
|
||||
}
|
||||
}
|
||||
else if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH || GetVirtualKeyState(VK_RIGHT) == KEY_HOLD)
|
||||
{
|
||||
frameKeyHold++;
|
||||
if(GetVirtualKeyState(VK_RIGHT) == KEY_PUSH ||
|
||||
frameKeyHold == 20 ||
|
||||
(frameKeyHold > 20 && (frameKeyHold % 10 == 0)))
|
||||
{
|
||||
cursorX++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
frameKeyHold = 0;
|
||||
}
|
||||
|
||||
if(cursorX < 0)
|
||||
{
|
||||
cursorX = maxCursorX-1;
|
||||
}
|
||||
else if(cursorX >= maxCursorX)
|
||||
{
|
||||
cursorX = 0;
|
||||
}
|
||||
|
||||
if(cursorY < 0)
|
||||
{
|
||||
cursorY = maxCursorY-1;
|
||||
}
|
||||
else if(cursorY >= maxCursorY)
|
||||
{
|
||||
cursorY = 0;
|
||||
}
|
||||
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue