I spent an hour learning how to Git. Help

This commit is contained in:
kevinmonitor 2022-09-14 23:26:09 +07:00
commit 8356c73017
258 changed files with 18172 additions and 0 deletions

View 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

View file

@ -0,0 +1,315 @@
// Item script
#include "script/KevinSystem/kevin_system/Lib_Const.dnh"
#include "./Kevin_ItemConst.txt"
#include "./Kevin_ItemLib.txt"
#include "./ItemSoundLib.txt"
//#include "./Kevin_ItemData.txt;
float widthSTG = GetStgFrameWidth();
float heightSTG = GetStgFrameHeight();
float PIV = 0;
let pointerPIV = LoadAreaCommonDataValuePointer("PIV", "currentvalue", 10000);
@Initialize{
SetAutoDeleteObject(true);
_ItemSoundTask();
SetDefaultBonusItemEnable(false);
LoadItemData(GetCurrentScriptDirectory ~ "./Kevin_ItemData.txt");
SetAreaCommonData("ScriptID", "ItemID", GetOwnScriptID());
//SetCommonDataPtr("ItemIDPtr", GetOwnScriptID());
}
int objPlayer = GetPlayerObjectID();
float tmpSpd = 0, tmpScl = 0, tmpMtp = 0;
@MainLoop{
//PIV = GetCommonDataPtr(pointerPIV, 10000);
for each(item in GetItemIdInCircleA1(widthSTG/2, heightSTG/2, heightSTG)){
tmpSpd = ObjMove_GetSpeed(item);
tmpMtp = ObjItem_IsMoveToPlayer(item);
if(tmpSpd >= 0){
if (!tmpMtp && GetPlayerState() != STATE_DOWN){
ObjItem_SetMoveToPlayer(item, true);
}
}
if(tmpMtp) {
ObjMove_SetAngle(item, GetAngleToPlayer(item));
ObjMove_SetAcceleration(item, 1);
ObjMove_SetMaxSpeed(item, 24);
}
}
yield;
}
@Event
{
alternative (GetEventType())
case (EV_GET_ITEM){
let obj = GetEventArgument(0);
alternative(obj)
case(POINT_REGULAR) { AddScore(GetCommonDataPtr(pointerPIV, 10000)); ObjSound_Play(CancelSFX);}
case(POINT_BHESTIE) { AddScore(2*GetCommonDataPtr(pointerPIV, 10000)); ObjSound_Play(SpecialItemSFX);}
case(POINT_RAINBOW) { AddScore(2*GetCommonDataPtr(pointerPIV, 10000)); ObjSound_Play(SpecialItemSFX);}
case(POINT_CANCEL) { AddScore(0.05*GetCommonDataPtr(pointerPIV, 10000)); ObjSound_Play(CancelSFX);}
case(EXTEND_LIFE) { AddScore(GetCommonDataPtr(pointerPIV, 10000)); SetPlayerLife(GetPlayerLife()+1); ObjSound_Play(SpellSFX);}
case(EXTEND_SPELL) { AddScore(GetCommonDataPtr(pointerPIV, 10000)); SetPlayerSpell(GetPlayerSpell()+1); ObjSound_Play(SpecialItemSFX);}
case(PIV_100) { SetCommonDataPtr(pointerPIV, GetCommonDataPtr(pointerPIV, 10000)+100);} //ObjSound_Play(CancelSFX);}
case(PIV_250) { SetCommonDataPtr(pointerPIV, GetCommonDataPtr(pointerPIV, 10000)+250);} //ObjSound_Play(CancelSFX);}
case(PIV_500) { SetCommonDataPtr(pointerPIV, GetCommonDataPtr(pointerPIV, 10000)+500);} //ObjSound_Play(CancelSFX);}
}
case (EV_DELETE_SHOT_TO_ITEM){
float[] position = GetEventArgument(1);
CreatePIVItem(PIV_250, position[0], position[1]);
}
case (EV_CANCEL_ITEM) {
let obj = GetEventArgument(0);
let type = GetEventArgument(1);
//ObjItem_SetMoveToPlayer(obj, false);
ObjMove_CancelMovement(obj);
//_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);
}
}

View file

@ -0,0 +1,115 @@
//let imgEffect = dirCurrent ~ "./img/Kevin_Effect.png";
int PetalEffect = ObjParticleList_Create(OBJ_PARTICLE_LIST_2D);
task InitEffect(){
_EffectListPreRender(PetalEffect, imgEffect, [0, 0, 256, 256]);
}
let imgEffect = dirCurrent ~ "./img/Kevin_Effect.png";
// Enemy deletion/explosion effects.
// This particle list is used for all instances of the effect.
task _EffectListPreRender(
int targetList,
texture, int[] rect
){
ObjPrim_SetTexture(targetList, texture);
Obj_SetRenderPriorityI(targetList, 39);
ObjPrim_SetPrimitiveType(targetList, PRIMITIVE_TRIANGLELIST);
ObjPrim_SetVertexCount(targetList, 4);
ObjRender_SetBlendType(targetList, BLEND_ALPHA);
// Left-top, right-top, left-bottom, right-bottom
ObjPrim_SetVertexUVT(targetList, 0, rect[0], rect[1]);
ObjPrim_SetVertexUVT(targetList, 1, rect[2], rect[1]);
ObjPrim_SetVertexUVT(targetList, 2, rect[0], rect[3]);
ObjPrim_SetVertexUVT(targetList, 3, rect[2], rect[3]);
// Vertex positions are offset with deltas so that the sprite is centered
float dU = (rect[2] - rect[0])/2;
float dV = (rect[3] - rect[1])/2;
ObjPrim_SetVertexPosition(targetList, 0, -dU, -dV, 1);
ObjPrim_SetVertexPosition(targetList, 1, dU, -dV, 1);
ObjPrim_SetVertexPosition(targetList, 2, -dU, dV, 1);
ObjPrim_SetVertexPosition(targetList, 3, dU, dV, 1);
ObjPrim_SetVertexIndex(targetList, [0, 1, 2, 1, 2, 3]);
}
// Enemy go Boom
/*
5 flower petals appear from the enemy and spin outwards.
Their angle constantly changes and their alpha lowers over time.
*/
task _ExplosionEffect(float enmX, float enmY, int targetList){
int i = 0;
int effectLength = 45;
int effectNum = 5;
int dir = 1;
Obj_SetRenderPriorityI(targetList, 40);
//TExplosionA(enmX, enmY, 255/effectLength, 9/effectLength);
/*ascent(i in 0..effectNum){
_CreatePetal(rand(5, 10)*dir, rand(5, 10)*dir, rand(0, 360));
dir *= -1;
//_CreatePetal(rand(50, 80), rand(-80, -50), rand(0, 360));
}*/
_CreatePetal(rand(8, 11), rand(-8, -11), rand(0, 360));
_CreatePetal(rand(-11, -8), rand(-2, 2), rand(0, 360));
_CreatePetal(rand(8, 8), rand(-2, 2), rand(0, 360));
_CreatePetal(rand(-11, -8), rand(8, 11), rand(0, 360));
_CreatePetal(rand(8, 11), rand(8, 11), rand(0, 360));
ObjSound_Play(sfxBoom);
// Create a petal with:
// x offset every frame, y offset every frame
task _CreatePetal(float spdX, float spdY, float baseAng){
float x = enmX, y = enmY;
let x_speed = spdX;
let y_speed = spdY;
let z_add = rand(-5, 5);
ascent(i in 0..effectLength){
_PetalMovement(Interpolate_Decelerate(1.5, 0.5, i/effectLength), Interpolate_Decelerate(255, 0, i/effectLength));
yield;
}
task _PetalMovement(scale, alpha){
ObjParticleList_SetScale(targetList, scale);
ObjParticleList_SetAngleZ(targetList, baseAng);
ObjParticleList_SetPosition(targetList, x, y, 1);
ObjParticleList_SetAlpha(targetList, alpha);
//Submits the current data to an instance, cleared every frame.
ObjParticleList_AddInstance(targetList);
x += x_speed;
y += y_speed;
baseAng += z_add;
yield;
}
}
}

View 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 station...", "このゲームを遊ぶをありがとうございました!"][GetCommonData("Language", 0)]);
ObjText_SetFontSize(objText, [38, 45][GetCommonData("Language", 0)]);
ObjText_SetFontType(objText, "コーポレート・ロゴ(ラウンド) ver2 Bold");
//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 Replay", "Back To Title", "Restart Battle"];
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;
}
}

View 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;

View 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

View file

@ -0,0 +1,149 @@
// Valid types: PIV_100, PIV_250, PIV_500
float universalItemAlpha = GetAreaCommonData("Config", "ItemOpacity", 60);
function CreatePIVItem(itemtype, x, y){
let PIVItem = CreateItemU1(itemtype, x, y, 0);
ObjItem_SetDefaultCollectMovement(PIVItem, false);
ObjItem_SetAutoDelete(PIVItem, false);
ObjMove_SetAngle(PIVItem, 90);
ObjMove_SetSpeed(PIVItem, -20);
ObjMove_SetAcceleration(PIVItem, 1);
ObjMove_SetMaxSpeed(PIVItem, 0);
/*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);
ObjItem_SetAutoDelete(ScoreItem, false);
ObjMove_SetAngle(ScoreItem, 90);
ObjMove_SetSpeed(ScoreItem, -20);
ObjMove_SetAcceleration(ScoreItem, 1);
ObjMove_SetMaxSpeed(ScoreItem, 0);
ObjItem_SetIntersectionRadius(ScoreItem, 60);
ObjItem_SetRenderScoreEnable(ScoreItem, false);
ObjRender_SetAlpha(ScoreItem, 255*(universalItemAlpha/100));
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);
ObjMove_SetAngle(ExtendItem, 90);
ObjMove_SetSpeed(ExtendItem, -20);
ObjMove_SetAcceleration(ExtendItem, 1);
ObjMove_SetMaxSpeed(ExtendItem, 0);
ObjRender_SetScaleXYZ(ExtendItem, 1.5, 1.5, 1);
Obj_SetRenderPriorityI(ExtendItem, 49);
ObjItem_SetAutoDelete(ExtendItem, false);
/*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{}
}

View file

@ -0,0 +1,306 @@
//一時停止中スクリプト
//#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, right?",
"Touhou.",
"You know what else is as cool as Touhou? It's Kouji Kouda[r]from the hit anime \"Boku no Hero Academia\"!",
"Thanks for playing this game!",
"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!"],
["太陽は実際に暑いエッグタルト、ね?",
"東方.",
"このゲームの開発元の一番好きなキャラクターは『僕のヒーローアカデミア』の『口田甲司』ですよ![r]口田くんはすごいとかわいいね...",
"このゲームを遊ぶをありがとうございました!",
"あなたは『OPTIONS』のメニューにはライフカウンターを変化することができます。"],
];
int x = prand_int(0, length(textchoices[GetCommonData("Language", 0)])-1);
//y = length(textchoices);
let objText = ObjText_Create();
ObjText_SetText(objText, textchoices[GetCommonData("Language", 0)][x]);
ObjText_SetFontSize(objText, [38, 45][GetCommonData("Language", 0)]);
ObjText_SetFontType(objText, "コーポレート・ロゴ(ラウンド) ver2 Bold");
//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 Game", "Back To Title", "Restart Battle"];
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;
}
}

View 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", "Hard"));*/
}
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", "Hard"));
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;
}
}

View file

@ -0,0 +1,11 @@
//Custom events
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;
const EV_EXPLODE = EV_USER + 300i;
//const SYSTEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0);
//const ITEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "ItemID", 0);