Add existing file
This commit is contained in:
parent
9bedcb263d
commit
d6a4b8bf20
320 changed files with 20855 additions and 0 deletions
34
script/KevinSystem/kevin_system/ItemSoundLib.txt
Normal file
34
script/KevinSystem/kevin_system/ItemSoundLib.txt
Normal file
|
@ -0,0 +1,34 @@
|
|||
// Sound effects for items go here.
|
||||
|
||||
let itemlib = GetModuleDirectory() ~ "./script/KevinSystem/RyannSFX/ItemSFX/";
|
||||
let SFXVol = GetAreaCommonData("Config", "SEVol", 100) * 0.01;
|
||||
|
||||
// Sound objects declarations
|
||||
|
||||
let SpellSFX = ObjSound_Create();
|
||||
let LifeSFX = ObjSound_Create();
|
||||
let CancelSFX = ObjSound_Create();
|
||||
let RegularItemSFX = ObjSound_Create();
|
||||
let SpecialItemSFX = ObjSound_Create();
|
||||
|
||||
// Merge function that loads sounds and significantly decreases volume
|
||||
// so the ears do not die from SFX overload.
|
||||
|
||||
function LoadEx(targetobj, targetpath, targetvol){
|
||||
|
||||
ObjSound_Load(targetobj, targetpath);
|
||||
ObjSound_SetVolumeRate(targetobj, targetvol * SFXVol);
|
||||
ObjSound_SetSoundDivision(targetobj, SOUND_SE);
|
||||
|
||||
}
|
||||
|
||||
task _ItemSoundTask{
|
||||
|
||||
LoadEx(SpellSFX, itemlib ~ "bfxr_SpellExtend.wav", 80);
|
||||
LoadEx(LifeSFX, itemlib ~ "bfxr_LifeExtend.wav", 80);
|
||||
LoadEx(CancelSFX, itemlib ~ "bfxr_GetItemCancel.wav", 20);
|
||||
LoadEx(RegularItemSFX, itemlib ~ "bfxr_GetItem1.wav", 40);
|
||||
LoadEx(SpecialItemSFX, itemlib ~ "bfxr_GetItemSpecial.wav", 40);
|
||||
}
|
||||
|
||||
// Functions to load sounds in scripts
|
276
script/KevinSystem/kevin_system/KevinSystem_Item.txt
Normal file
276
script/KevinSystem/kevin_system/KevinSystem_Item.txt
Normal file
|
@ -0,0 +1,276 @@
|
|||
// Item script
|
||||
|
||||
#include "./Kevin_ItemConst.txt"
|
||||
#include "./Kevin_ItemLib.txt"
|
||||
#include "./ItemSoundLib.txt"
|
||||
//#include "./Kevin_ItemData.txt;
|
||||
|
||||
float PIV = 0;
|
||||
|
||||
@Initialize{
|
||||
SetAutoDeleteObject(true);
|
||||
_ItemSoundTask();
|
||||
SetDefaultBonusItemEnable(false);
|
||||
LoadItemData(GetCurrentScriptDirectory ~ "./Kevin_ItemData.txt");
|
||||
}
|
||||
|
||||
@MainLoop{
|
||||
PIV = GetAreaCommonData("PIV", "currentvalue", 0);
|
||||
yield;
|
||||
}
|
||||
|
||||
@Event
|
||||
{
|
||||
alternative (GetEventType())
|
||||
case (EV_GET_ITEM){
|
||||
|
||||
let obj = GetEventArgument(0);
|
||||
|
||||
alternative(obj)
|
||||
|
||||
case(POINT_REGULAR) { AddScore(GetAreaCommonData("PIV", "currentvalue", 0)); ObjSound_Play(CancelSFX);}
|
||||
case(POINT_BHESTIE) { AddScore(2*GetAreaCommonData("PIV", "currentvalue", 0)); ObjSound_Play(SpecialItemSFX);}
|
||||
case(POINT_RAINBOW) { AddScore(2*GetAreaCommonData("PIV", "currentvalue", 0)); ObjSound_Play(SpecialItemSFX);}
|
||||
case(POINT_CANCEL) { AddScore(0.05*GetAreaCommonData("PIV", "currentvalue", 0)); ObjSound_Play(CancelSFX);}
|
||||
|
||||
case(EXTEND_LIFE) { AddScore(PIV); SetPlayerLife(GetPlayerLife()+1); ObjSound_Play(SpellSFX);}
|
||||
case(EXTEND_SPELL) { AddScore(PIV); SetPlayerSpell(GetPlayerSpell()+1); ObjSound_Play(SpecialItemSFX);}
|
||||
|
||||
case(PIV_100) { SetAreaCommonData("PIV", "currentvalue", GetAreaCommonData("PIV", "currentvalue", 0)+100);} //ObjSound_Play(CancelSFX);}
|
||||
case(PIV_250) { SetAreaCommonData("PIV", "currentvalue", GetAreaCommonData("PIV", "currentvalue", 0)+250);} //ObjSound_Play(CancelSFX);}
|
||||
case(PIV_500) { SetAreaCommonData("PIV", "currentvalue", GetAreaCommonData("PIV", "currentvalue", 0)+500);} //ObjSound_Play(CancelSFX);}
|
||||
|
||||
}
|
||||
|
||||
case (EV_DELETE_SHOT_TO_ITEM){
|
||||
|
||||
float[] position = GetEventArgument(1);
|
||||
CreateCancelItem(position[0], position[1]);
|
||||
|
||||
}
|
||||
|
||||
case (EV_CANCEL_ITEM) {
|
||||
|
||||
let obj = GetEventArgument(0);
|
||||
let type = GetEventArgument(1);
|
||||
|
||||
_CancelHandling(obj, type);
|
||||
|
||||
}
|
||||
|
||||
case (EV_COLLECT_ITEM){
|
||||
|
||||
let obj = GetEventArgument(0);
|
||||
let type = GetEventArgument(1);
|
||||
let typeCollect = GetEventArgument(2);
|
||||
|
||||
//WriteLog(type);
|
||||
_MoveToPlayer(obj, type, typeCollect); // Separate task is used to move the object to the player at customized speeds.
|
||||
|
||||
}
|
||||
|
||||
// Drops point items depending on how close you were to the enemy when you killed them.
|
||||
/*
|
||||
Event arguments:
|
||||
|
||||
0: PlayerID
|
||||
1: EnemyID
|
||||
2: Minimum number of point items
|
||||
3: Maximum number of point items
|
||||
|
||||
*/
|
||||
|
||||
case(EV_DROP_POINT_ENEMY){
|
||||
|
||||
_DropPointItem(GetEventArgument(0), GetEventArgument(1), GetEventArgument(2), GetEventArgument(3), GetEventArgument(4));
|
||||
|
||||
}
|
||||
|
||||
case(EV_DROP_PIV_ENEMY){
|
||||
|
||||
_DropPIVItemEnemy(GetEventArgument(0), GetEventArgument(1), GetEventArgument(2), GetEventArgument(3), GetEventArgument(4));
|
||||
|
||||
}
|
||||
|
||||
// Event arguments: Enemy X, Enemy Y, Item Drop Amount, Item Drop Type
|
||||
case(EV_SINGLE_ITEM_DROP){
|
||||
|
||||
loop(GetEventArgument(2)){
|
||||
CreateScoreItem(GetEventArgument(3),
|
||||
GetEventArgument(0)+rand(-100, 100), GetEventArgument(1)+rand(-100, 100));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
case(EV_DROP_EXTEND){
|
||||
CreateExtendItem(EXTEND_LIFE, GetEventArgument(0), GetEventArgument(1));
|
||||
}
|
||||
}
|
||||
|
||||
task _CancelHandling(int IDItem, int typeItem){
|
||||
|
||||
ObjMove_CancelMovement(IDItem);
|
||||
|
||||
while(GetPlayerState() != STATE_NORMAL){yield;}
|
||||
|
||||
_MoveToPlayer(IDItem, typeItem, 0);
|
||||
|
||||
}
|
||||
|
||||
// Timer is counted in frames (60 frames = 1 second)
|
||||
|
||||
task _DropPointItem(float[] posEnm, int killTimer, int maxTimer, int pointMin, int pointMax){
|
||||
|
||||
// If the player kills enemy within maxTimer, the enemy drops the maximum amount of point items
|
||||
|
||||
int pointFinal = Interpolate_Smooth(pointMin, pointMax, min(1, maxTimer/killTimer));
|
||||
//WriteLog(pointFinal);
|
||||
|
||||
loop(pointFinal){
|
||||
|
||||
CreateScoreItem(POINT_REGULAR, posEnm[0]+rand(-60, 60), posEnm[1]+rand(-60, 60));
|
||||
|
||||
}
|
||||
|
||||
_ScorePopup(posEnm[0], posEnm[1], "POINT", pointFinal);
|
||||
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
task _DropPIVItemEnemy(int IDPlayer, float[] posEnm, int pointMin, int pointMax, int bestDist){
|
||||
|
||||
// If the player is within at MOST "bestDist" from the enemy, the enemy drops the maximum amount of PIV items
|
||||
|
||||
float curDist = hypot(posEnm[0]-ObjMove_GetX(IDPlayer), posEnm[1]-ObjMove_GetY(IDPlayer));
|
||||
|
||||
int pointFinal = Interpolate_Smooth(pointMin, pointMax, min(1, bestDist/curDist));
|
||||
//WriteLog(pointFinal);
|
||||
|
||||
loop(pointFinal){
|
||||
|
||||
CreatePIVItem(PIV_250, posEnm[0]+rand(-60, 60), posEnm[1]+rand(-60, 60));
|
||||
|
||||
}
|
||||
|
||||
_ScorePopup(posEnm[0], posEnm[1], "PIV", pointFinal);
|
||||
|
||||
return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
task _MoveToPlayer(obj, type, typeCollect){
|
||||
|
||||
ObjItem_SetAutoDelete(obj, true);
|
||||
ObjMove_SetAcceleration(obj, 1);
|
||||
//ObjMove_SetMaxSpeed(obj, 2);
|
||||
|
||||
// The max speed of movement differs based on item.
|
||||
alternative(type)
|
||||
|
||||
case(POINT_CANCEL) { ObjMove_SetMaxSpeed(obj, 23); }
|
||||
|
||||
case(PIV_100) { ObjMove_SetMaxSpeed(obj, 18); }
|
||||
case(PIV_250) { ObjMove_SetMaxSpeed(obj, 18); }
|
||||
case(PIV_500) { ObjMove_SetMaxSpeed(obj, 18); }
|
||||
|
||||
case(POINT_REGULAR) { ObjMove_SetMaxSpeed(obj, 20); }
|
||||
case(POINT_RAINBOW) { ObjMove_SetMaxSpeed(obj, 20); }
|
||||
case(POINT_BHESTIE) { ObjMove_SetMaxSpeed(obj, 20); }
|
||||
others { ObjMove_SetMaxSpeed(obj, 25); }
|
||||
|
||||
while (!Obj_IsDeleted(obj)) {
|
||||
ObjMove_SetAngle(obj, GetAngleToPlayer(obj));
|
||||
//WriteLog(ObjMove_GetSpeed(obj));
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Text popups. When enemy is defeated, text objects appear showing the number of PIV and point items collected.
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
task _ScorePopup(float enmX, float enmY, string type, int itemNum){
|
||||
|
||||
float offset = 72; // Vertical space between the 2 scoretexts
|
||||
float time = 30; // Time that the text objects (appear+)last on screen
|
||||
float timeDisappear = 15; // Fade time
|
||||
float size = 75;
|
||||
float yDes = 60; // Destination text object moves to, relative to enmY
|
||||
string font = "Unispace";
|
||||
float borderSize = 6;
|
||||
|
||||
if (type == "POINT"){
|
||||
|
||||
int pointText = CreateTextObject(
|
||||
enmX, enmY, size,
|
||||
"x" ~ IntToString(itemNum), font,
|
||||
0x7699FF, 0xFFFFFF,
|
||||
0x2A00C0, borderSize,
|
||||
42
|
||||
);
|
||||
ObjText_SetHorizontalAlignment(pointText, ALIGNMENT_CENTER);
|
||||
|
||||
ascent(i in 0..time){
|
||||
ObjRender_SetY(pointText, Interpolate_Decelerate(enmY, enmY-yDes, i/time));
|
||||
yield;
|
||||
}
|
||||
|
||||
ascent(i in 0..timeDisappear){
|
||||
ObjRender_SetAlpha(pointText, Interpolate_Decelerate(255, 0, i/timeDisappear));
|
||||
yield;
|
||||
}
|
||||
Obj_Delete(pointText);
|
||||
}
|
||||
|
||||
else{
|
||||
int pivText = CreateTextObject(
|
||||
enmX, enmY+offset, size,
|
||||
"x" ~ IntToString(itemNum), font,
|
||||
0xFFB4EC, 0xFFFFFF,
|
||||
0xB200AD, borderSize,
|
||||
42
|
||||
);
|
||||
|
||||
ObjText_SetHorizontalAlignment(pivText, ALIGNMENT_CENTER);
|
||||
|
||||
ascent(i in 0..time){
|
||||
ObjRender_SetY(pivText, Interpolate_Decelerate(enmY+offset, enmY+offset-yDes, i/time));
|
||||
yield;
|
||||
}
|
||||
|
||||
ascent(i in 0..timeDisappear){
|
||||
ObjRender_SetAlpha(pivText, Interpolate_Decelerate(255, 0, i/timeDisappear));
|
||||
yield;
|
||||
}
|
||||
|
||||
Obj_Delete(pivText);
|
||||
}
|
||||
|
||||
}
|
263
script/KevinSystem/kevin_system/Kevin_EndScene.txt
Normal file
263
script/KevinSystem/kevin_system/Kevin_EndScene.txt
Normal file
|
@ -0,0 +1,263 @@
|
|||
//一時停止中スクリプト
|
||||
|
||||
#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 objText = ObjText_Create();
|
||||
ObjText_SetText(objText, "Thank you for playing![r]Until the next pride...");
|
||||
ObjText_SetFontSize(objText, 36);
|
||||
ObjText_SetFontType(objText, "Connecting Chain Handserif");
|
||||
|
||||
//ObjText_SetMaxWidth(objText, GetScreenWidth/2);
|
||||
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, GetScreenWidth/2);
|
||||
ObjRender_SetY(objText, 8*STGHEIGHT/9);
|
||||
|
||||
let obj = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
Obj_SetRenderPriorityI(obj, 1);
|
||||
|
||||
let currentFrameTexture = GetTransitionRenderTargetName();
|
||||
|
||||
ObjPrim_SetTexture(obj, currentFrameTexture);
|
||||
ObjSprite2D_SetSourceRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
ObjSprite2D_SetDestRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
|
||||
ObjRender_SetColor(obj, 0x593DA3);
|
||||
|
||||
}
|
||||
|
||||
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;//選択位置
|
||||
function 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, 65);
|
||||
ObjText_SetFontType(obj, "Connecting Chain Handserif");
|
||||
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, 3.5);
|
||||
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);
|
||||
|
||||
async{
|
||||
loop
|
||||
{
|
||||
Obj_SetVisible(objSelect, index == selectIndex);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
return objText;
|
||||
}
|
||||
|
||||
//メニュー配置
|
||||
|
||||
let textchoices = ["End of a Journey"];
|
||||
int x = prand_int(0, length(textchoices)-1);
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, textchoices[x]);
|
||||
ObjText_SetFontSize(objText, 150);
|
||||
ObjText_SetFontType(objText, "Anke Calligraph");
|
||||
|
||||
//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, GetScreenWidth/2);
|
||||
ObjRender_SetY(objText, 100);
|
||||
|
||||
let mx = GetScreenWidth/2;
|
||||
let my = GetScreenHeight/4;
|
||||
let texts = ["Save A Replay", "Depart From The Market", "Re-enter The Parade"];
|
||||
var countMenu = length(texts);
|
||||
ascent(var iText in 0 .. countMenu)
|
||||
{
|
||||
int text = TMenuItem(iText, mx, my, texts[iText]);
|
||||
my += 75;
|
||||
}
|
||||
|
||||
//キー状態がリセットされるまで待機
|
||||
while(GetVirtualKeyState(VK_PAUSE) != KEY_FREE){yield;}
|
||||
|
||||
//メニュー選択処理
|
||||
let frameKeyHold = 0;//キー押しっぱなしフレーム数
|
||||
//PauseGameSFX;
|
||||
|
||||
function CheckShotRelease {
|
||||
return (GetVirtualKeyState(VK_OK) == KEY_HOLD);
|
||||
}
|
||||
|
||||
int countA = 0;
|
||||
|
||||
loop
|
||||
{
|
||||
//決定
|
||||
if(CheckShotRelease){yield; continue;}
|
||||
|
||||
if(GetVirtualKeyState(VK_OK) == KEY_PUSH)
|
||||
{
|
||||
let listResult = [RESULT_SAVE_REPLAY, RESULT_END, RESULT_RETRY];
|
||||
SetScriptResult(listResult[selectIndex]);
|
||||
CloseScript(GetOwnScriptID());
|
||||
return;
|
||||
}
|
||||
|
||||
//カーソル移動
|
||||
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;
|
||||
}
|
||||
}
|
13
script/KevinSystem/kevin_system/Kevin_ItemConst.txt
Normal file
13
script/KevinSystem/kevin_system/Kevin_ItemConst.txt
Normal file
|
@ -0,0 +1,13 @@
|
|||
|
||||
const POINT_REGULAR = 1;
|
||||
const POINT_RAINBOW = 2;
|
||||
const POINT_BHESTIE = 3;
|
||||
const POINT_CANCEL = 4;
|
||||
|
||||
const EXTEND_LIFE = 5;
|
||||
const EXTEND_SPELL = 6;
|
||||
|
||||
const PIV_100 = 7;
|
||||
const PIV_250 = 8;
|
||||
const PIV_500 = 9;
|
||||
const FRAGMENT_SPELL = 10;
|
16
script/KevinSystem/kevin_system/Kevin_ItemData.txt
Normal file
16
script/KevinSystem/kevin_system/Kevin_ItemData.txt
Normal file
|
@ -0,0 +1,16 @@
|
|||
#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) } // Homosexual Point Item (PIV * 2)
|
||||
ItemData { id=3 rect=(256,128,384,256) } // Bhestie Point Item (PIV * 2, 25% chance of drop)
|
||||
ItemData { id=4 rect=(512,0,640,128) } // Cancel Item (PIV * O.2), erase bullets via bombs
|
||||
|
||||
ItemData { id=5 rect=(0,256,128,384) } // 1-up Item
|
||||
ItemData { id=6 rect=(128,256,256,384) } // Spell Item
|
||||
|
||||
ItemData { id=7 rect=(256,384,384,512) fixed_angle = false angular_velocity = 3} // Green PIV Item (+100)
|
||||
ItemData { id=8 rect=(384,384,512,512) fixed_angle = false angular_velocity = 3} // Pink PIV Item (+250)
|
||||
ItemData { id=9 rect=(384,256,512,384) fixed_angle = false angular_velocity = 3} // Gold PIV Item (+500)
|
||||
ItemData { id=10 rect=(128,384,256,512) } // Spell Piece
|
146
script/KevinSystem/kevin_system/Kevin_ItemLib.txt
Normal file
146
script/KevinSystem/kevin_system/Kevin_ItemLib.txt
Normal file
|
@ -0,0 +1,146 @@
|
|||
// Valid types: PIV_100, PIV_250, PIV_500
|
||||
|
||||
float universalItemAlpha = GetAreaCommonData("Config", "ItemOpacity", 60);
|
||||
|
||||
const EV_DROP_POINT_ENEMY = EV_USER + 200i;
|
||||
const EV_DROP_PIV_ENEMY = EV_USER + 201i;
|
||||
const EV_SINGLE_ITEM_DROP = EV_USER + 202i;
|
||||
const EV_DROP_EXTEND = EV_USER + 203i;
|
||||
|
||||
function CreatePIVItem(itemtype, x, y){
|
||||
|
||||
let PIVItem = CreateItemU1(itemtype, x, y, 0);
|
||||
ObjItem_SetDefaultCollectMovement(PIVItem, false);
|
||||
|
||||
async{
|
||||
wait(20);
|
||||
ObjMove_SetMaxSpeed(PIVItem, 24);
|
||||
ObjItem_SetMoveToPlayer(PIVItem, true);
|
||||
}
|
||||
|
||||
//ObjItem_SetAutoCollectEnableFlags(PIVItem, ITEM_AUTOCOLLECT_ALL);
|
||||
|
||||
ObjItem_SetIntersectionRadius(PIVItem, 60);
|
||||
|
||||
ObjRender_SetScaleXYZ(PIVItem, 0.85, 0.85, 1);
|
||||
ObjRender_SetAlpha(PIVItem, 255*(universalItemAlpha/100));
|
||||
|
||||
async{
|
||||
while(!Obj_IsDeleted(PIVItem)){
|
||||
float angz = ObjRender_GetAngleZ(PIVItem);
|
||||
ObjRender_SetAngleZ(PIVItem, angz+3.5);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
return PIVItem;
|
||||
}
|
||||
|
||||
// Valid types: POINT_REGULAR, POINT_BHESTIE, POINT_RAINBOW
|
||||
function CreateScoreItem(itemtype, x, y){
|
||||
let ScoreItem = CreateItemU1(itemtype, x + rand(-60, 60), y + rand(-60, 60), 0);
|
||||
ObjItem_SetDefaultCollectMovement(ScoreItem, false);
|
||||
|
||||
async{
|
||||
wait(45);
|
||||
ObjItem_SetMoveToPlayer(ScoreItem, true);
|
||||
}
|
||||
|
||||
//ObjItem_SetAutoCollectEnableFlags(ScoreItem, ITEM_AUTOCOLLECT_ALL);
|
||||
|
||||
ObjItem_SetIntersectionRadius(ScoreItem, 60);
|
||||
ObjItem_SetRenderScoreEnable(ScoreItem, false);
|
||||
|
||||
//ObjRender_SetScaleXYZ(ScoreItem, 0.7, 0.7, 1);
|
||||
ObjRender_SetAlpha(ScoreItem, 255*(universalItemAlpha/100));
|
||||
|
||||
//ObjMove_AddPatternA2(ScoreItem, 60, NO_CHANGE, 90, 0.12, 5.45, 0);
|
||||
|
||||
return ScoreItem;
|
||||
}
|
||||
|
||||
function CreateCancelItem(x, y){
|
||||
|
||||
let CancelItem = CreateItemU1(POINT_CANCEL, x, y, 0);
|
||||
ObjItem_SetDefaultCollectMovement(CancelItem, false);
|
||||
|
||||
async{
|
||||
wait(45);
|
||||
ObjItem_SetMoveToPlayer(CancelItem, true);
|
||||
ObjMove_SetMaxSpeed(CancelItem, 24);
|
||||
}
|
||||
|
||||
ObjItem_SetAutoCollectEnableFlags(CancelItem, ITEM_AUTOCOLLECT_ALL);
|
||||
ObjItem_SetRenderScoreEnable(CancelItem, false);
|
||||
|
||||
ObjItem_SetIntersectionRadius(CancelItem, 60);
|
||||
|
||||
ObjRender_SetScaleXYZ(CancelItem, 0.6, 0.6, 1);
|
||||
ObjRender_SetAlpha(CancelItem, 255*(universalItemAlpha/100));
|
||||
|
||||
async{
|
||||
while(!Obj_IsDeleted(CancelItem)){
|
||||
float angz = ObjRender_GetAngleZ(CancelItem);
|
||||
ObjRender_SetAngleZ(CancelItem, angz+2);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
return CancelItem;
|
||||
|
||||
}
|
||||
// Valid types: EXTEND_LIFE, EXTEND_SPELL
|
||||
function CreateExtendItem(itemtype, x, y){
|
||||
|
||||
let ExtendItem = CreateItemU2(itemtype, x, y, x, y-125, 0);
|
||||
ObjItem_SetDefaultCollectMovement(ExtendItem, false);
|
||||
//ObjItem_SetMoveToPlayer(ExtendItem, true);
|
||||
ObjItem_SetAutoCollectEnableFlags(ExtendItem, ITEM_AUTOCOLLECT_ALL);
|
||||
|
||||
ObjRender_SetScaleXYZ(ExtendItem, 1.5, 1.5, 1);
|
||||
Obj_SetRenderPriorityI(ExtendItem, 49);
|
||||
|
||||
async{
|
||||
wait(30);
|
||||
ObjItem_SetMoveToPlayer(ExtendItem, true);
|
||||
//ObjMove_SetMaxSpeed(CancelItem, 24);
|
||||
}
|
||||
|
||||
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{}
|
||||
|
||||
}
|
298
script/KevinSystem/kevin_system/Kevin_Pause.txt
Normal file
298
script/KevinSystem/kevin_system/Kevin_Pause.txt
Normal file
|
@ -0,0 +1,298 @@
|
|||
//一時停止中スクリプト
|
||||
//#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 = [
|
||||
"The sun is just a really hot egg tart, if you think about it.",
|
||||
"Gay people.",
|
||||
"You know what else is as cool as gay Touhous? It's Kouji Kouda[r]from the hit anime \"Boku no Hero Academia\"- *turns into a Kouda plushie*",
|
||||
"Thanks for playing this game! I hope you enjoyed my gay Touhou endeavours.",
|
||||
"You can set the amount of starting lives you have in the configurations menu.[r]If you have trouble with difficult patterns or stage sections, now you can blast right through them!"
|
||||
];
|
||||
int x = prand_int(0, length(textchoices)-1);
|
||||
//y = length(textchoices);
|
||||
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, textchoices[x]);
|
||||
ObjText_SetFontSize(objText, 36);
|
||||
ObjText_SetFontType(objText, "Connecting Chain Handserif");
|
||||
|
||||
//ObjText_SetMaxWidth(objText, GetScreenWidth/2);
|
||||
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, GetScreenWidth/2);
|
||||
ObjRender_SetY(objText, 8*STGHEIGHT/9);
|
||||
|
||||
}
|
||||
|
||||
// renderX and renderY will be TOP-LEFT COORDS
|
||||
task TBackgroundNew(float renderX, renderY){
|
||||
|
||||
let obj = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
Obj_SetRenderPriorityI(obj, 1);
|
||||
|
||||
let currentFrameTexture = GetTransitionRenderTargetName();
|
||||
|
||||
ObjPrim_SetTexture(obj, currentFrameTexture);
|
||||
ObjSprite2D_SetSourceRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
ObjSprite2D_SetDestRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
|
||||
ObjRender_SetColor(obj, 0x593DA3);
|
||||
|
||||
}
|
||||
|
||||
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;//選択位置
|
||||
function 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, 65);
|
||||
ObjText_SetFontType(obj, "Connecting Chain Handserif");
|
||||
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, 3.5);
|
||||
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);
|
||||
|
||||
async{
|
||||
loop
|
||||
{
|
||||
Obj_SetVisible(objSelect, index == selectIndex);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
return objText;
|
||||
}
|
||||
|
||||
//メニュー配置
|
||||
|
||||
let textchoices = ["Market Moratorium", "Respite from the Parade", "Worthy Rest"];
|
||||
int x = prand_int(0, length(textchoices)-1);
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, textchoices[x]);
|
||||
ObjText_SetFontSize(objText, 150);
|
||||
ObjText_SetFontType(objText, "Anke Calligraph");
|
||||
|
||||
//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, GetScreenWidth/2);
|
||||
ObjRender_SetY(objText, 100);
|
||||
|
||||
let mx = GetScreenWidth/2;
|
||||
let my = GetScreenHeight/4;
|
||||
let texts = ["Resume The Faceoff", "Accept Your Losses", "Take Another Shot"];
|
||||
var countMenu = length(texts);
|
||||
ascent(var iText in 0 .. countMenu)
|
||||
{
|
||||
int text = TMenuItem(iText, mx, my, texts[iText]);
|
||||
my += 75;
|
||||
}
|
||||
|
||||
//キー状態がリセットされるまで待機
|
||||
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;
|
||||
}
|
||||
if(GetKeyState(KEY_R) == KEY_PUSH){
|
||||
SetScriptResult(RESULT_RETRY);
|
||||
CloseScript(GetOwnScriptID());
|
||||
return;
|
||||
}
|
||||
if(GetKeyState(KEY_Q) == KEY_PUSH){
|
||||
SetScriptResult(RESULT_END);
|
||||
CloseScript(GetOwnScriptID());
|
||||
return;
|
||||
}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
421
script/KevinSystem/kevin_system/Kevin_ReplaySave.txt
Normal file
421
script/KevinSystem/kevin_system/Kevin_ReplaySave.txt
Normal file
|
@ -0,0 +1,421 @@
|
|||
//リプレイ保存スクリプト
|
||||
|
||||
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_LEFT);
|
||||
//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, 3);
|
||||
Obj_SetRenderPriorityI(obj, 10);
|
||||
ObjRender_SetX(obj, mx);
|
||||
ObjRender_SetY(obj, my);
|
||||
return obj;
|
||||
}
|
||||
|
||||
// renderX and renderY will be TOP-LEFT COORDS
|
||||
task TBackgroundNew(float renderX, renderY){
|
||||
|
||||
let obj = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
Obj_SetRenderPriorityI(obj, 1);
|
||||
|
||||
let currentFrameTexture = GetTransitionRenderTargetName();
|
||||
|
||||
ObjPrim_SetTexture(obj, currentFrameTexture);
|
||||
ObjSprite2D_SetSourceRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
ObjSprite2D_SetDestRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
|
||||
ObjRender_SetColor(obj, 0x593DA3);
|
||||
|
||||
}
|
||||
|
||||
task TReplayIndexSelection()
|
||||
{
|
||||
let cursorY = 0;
|
||||
let page = 0;
|
||||
let countMaxItem = REPLAY_INDEX_DIGIT_MAX - REPLAY_INDEX_DIGIT_MIN + 1;
|
||||
let countItemPerPage = 20;
|
||||
let pageMax = trunc((countMaxItem - 1) / countItemPerPage);
|
||||
pageMax = max(pageMax, 1);
|
||||
let lastPageMaxCursorY = trunc(countMaxItem / countItemPerPage);
|
||||
|
||||
task TMenuItem(let itemY)
|
||||
{
|
||||
let objText = CreateTextObject(90, 45 + 50 * itemY, 35, "");
|
||||
let objSelect = CreateTextObject(90, 45 + 50 * itemY, 35, "");
|
||||
ObjRender_SetAlpha(objText, 125);
|
||||
ObjRender_SetAlpha(objSelect, 80);
|
||||
ObjRender_SetBlendType(objSelect, BLEND_ADD_ARGB);
|
||||
|
||||
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)) ~ " ";
|
||||
text = text ~ GetReplayInfo(index, REPLAY_PLAYER_NAME) ~ " ";
|
||||
text = text ~ GetReplayUserData(index, "Difficulty");
|
||||
|
||||
/*SetReplayUserData("Starting Lives", GetCommonData("Starting Lives Selected", 5));
|
||||
SetReplayUserData("Player Team", GetReplayInfo(index, REPLAY_PLAYER_NAME));
|
||||
SetReplayUserData("Difficulty", GetCommonData("Difficulty", "Arcade"));*/
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
text = text ~ "Entry Blank";
|
||||
}
|
||||
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_CANCEL) == KEY_PUSH){
|
||||
SetScriptResult(RESULT_END);
|
||||
CloseScript(GetOwnScriptID());
|
||||
}
|
||||
|
||||
//カーソル移動
|
||||
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(360 + GetStgFrameWidth()/4 + itemX * 42, 400 + itemY * 42, 40, strTextView[itemY][itemX]);
|
||||
let objSelect = CreateTextObject(360 + GetStgFrameWidth()/4+ itemX * 42, 400 + itemY * 42, 40, 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(360+GetStgFrameWidth()/4, 200, 45, "");
|
||||
task TNameCursor()
|
||||
{
|
||||
let objCursor = CreateTextObject(360+GetStgFrameWidth()/4, 200, 45, "_");
|
||||
while(menuMode == MENU_NAME_ENTRY)
|
||||
{
|
||||
let nameLength = length(userName);
|
||||
ObjRender_SetX(objCursor, 360+GetStgFrameWidth()/4 + nameLength * 30);
|
||||
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 = "Gay";
|
||||
}
|
||||
else
|
||||
{
|
||||
SetReplayUserData("Starting Lives", GetCommonData("Starting Lives Selected", 5));
|
||||
SetReplayUserData("Player Team", GetCommonData("Player Team", "ByakMiko"));
|
||||
SetReplayUserData("Difficulty", GetCommonData("Difficulty", "Arcade"));
|
||||
SetReplayUserData("Dialogue Skip", GetCommonData("Dialogue Skip Mode", 0));
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
0
script/KevinSystem/kevin_system/ValueLib.txt
Normal file
0
script/KevinSystem/kevin_system/ValueLib.txt
Normal file
Loading…
Add table
Add a link
Reference in a new issue