commit 1
This commit is contained in:
commit
d3ada59252
391 changed files with 25819 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", 100);
|
||||
LoadEx(LifeSFX, itemlib ~ "bfxr_LifeExtend.wav", 100);
|
||||
LoadEx(CancelSFX, itemlib ~ "bfxr_GetItemCancel.wav", 20);
|
||||
LoadEx(RegularItemSFX, itemlib ~ "bfxr_GetItem1.wav", 50);
|
||||
LoadEx(SpecialItemSFX, itemlib ~ "bfxr_GetItemSpecial.wav", 150);
|
||||
}
|
||||
|
||||
// Functions to load sounds in scripts
|
509
script/KevinSystem/kevin_system/KevinSystem_Item.txt
Normal file
509
script/KevinSystem/kevin_system/KevinSystem_Item.txt
Normal file
|
@ -0,0 +1,509 @@
|
|||
// Item script
|
||||
|
||||
float widthSTG = GetStgFrameWidth();
|
||||
float heightSTG = GetStgFrameHeight();
|
||||
|
||||
float PIV = 0;
|
||||
|
||||
let POINTER_PIV = LoadAreaCommonDataValuePointer("PIV", "currentvalue", 1000);
|
||||
|
||||
let POINTER_CHAIN = LoadAreaCommonDataValuePointer("PIV", "ChainAmount", 1);
|
||||
let POINTER_CHAINGAUGE = LoadAreaCommonDataValuePointer("PIV", "ChainGauge", 0);
|
||||
let POINTER_SPECIALAMMO = LoadAreaCommonDataValuePointer("PIV", "SpecialAmmo", 100);
|
||||
let POINTER_SPECIALCHECK = LoadAreaCommonDataValuePointer("PIV", "IsUsingSpecial", false);
|
||||
let POINTER_CHAINCHECK = LoadAreaCommonDataValuePointer("PIV", "IsChaining", false);
|
||||
|
||||
int SPECIAL_BOOST_COUNT = 0;
|
||||
|
||||
float rateReduceNormal = 100/120;
|
||||
float rateReduceCashin = 100/180;
|
||||
|
||||
#include "script/KevinSystem/kevin_system/Lib_Const.dnh"
|
||||
|
||||
#include "./Kevin_ItemConst.txt"
|
||||
#include "./Kevin_ItemLib.txt"
|
||||
#include "./ItemSoundLib.txt"
|
||||
|
||||
// Chain system: Crystals fill up your chain amount, up to a max of 64x
|
||||
// When you use a bomb (IsBomb), items get cancelled into golden point items worth 10000 x Chain Amount (max 640000 per item)
|
||||
|
||||
@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(POINTER_PIV, 1000);
|
||||
|
||||
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(1000);
|
||||
ObjSound_Play(CancelSFX);
|
||||
SetCommonDataPtr(POINTER_SPECIALAMMO, min(100, GetCommonDataPtr(POINTER_SPECIALAMMO, 100)+0.1));
|
||||
SetCommonDataPtr(POINTER_PIV, GetCommonDataPtr(POINTER_PIV, 1000)+50);
|
||||
|
||||
}
|
||||
|
||||
case(POINT_BHESTIE) { AddScore(2*GetCommonDataPtr(POINTER_PIV, 10000)); ObjSound_Play(SpecialItemSFX);}
|
||||
|
||||
// Rainbow point items give 10000 x Chain Counter
|
||||
|
||||
case(POINT_GOLD_SMALL) { AddScore(GetCommonDataPtr(POINTER_CHAIN, 1)*GetCommonDataPtr(POINTER_PIV, 10000)); ObjSound_Play(SpecialItemSFX);}
|
||||
|
||||
case(POINT_GOLD_MEDIUM) { AddScore(GetCommonDataPtr(POINTER_CHAIN, 1)*GetCommonDataPtr(POINTER_PIV, 10000)); ObjSound_Play(SpecialItemSFX);}
|
||||
|
||||
case(POINT_GOLD_LARGE) {
|
||||
|
||||
AddScore(GetCommonDataPtr(POINTER_PIV, 1000));
|
||||
ObjSound_Play(SpecialItemSFX);
|
||||
|
||||
}
|
||||
|
||||
case(POINT_CANCEL) { AddScore(0.05*GetCommonDataPtr(POINTER_PIV, 10000)); ObjSound_Play(CancelSFX);}
|
||||
|
||||
case(EXTEND_LIFE) { AddScore(GetCommonDataPtr(POINTER_PIV, 10000)); SetPlayerLife(GetPlayerLife()+1); ObjSound_Play(SpellSFX);}
|
||||
|
||||
case(EXTEND_SPELL) { AddScore(GetCommonDataPtr(POINTER_PIV, 10000)); SetPlayerSpell(GetPlayerSpell()+1); ObjSound_Play(SpecialItemSFX);}
|
||||
|
||||
// CHAIN ITEM
|
||||
|
||||
case(PIV_250) {
|
||||
|
||||
if (GetCommonDataPtr(POINTER_SPECIALCHECK, false) == true){
|
||||
|
||||
if(SPECIAL_BOOST_COUNT <= 90 && GetCommonDataPtr(POINTER_CHAIN, 1) >= 48){
|
||||
|
||||
SetCommonDataPtr(POINTER_CHAINGAUGE, min(100, GetCommonDataPtr(POINTER_CHAINGAUGE, 0)+ rateReduceCashin * 5 * (1 - SPECIAL_BOOST_COUNT/90)));
|
||||
SPECIAL_BOOST_COUNT++;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
if(GetCommonDataPtr(POINTER_CHAIN, 1) <= 1){
|
||||
|
||||
SetCommonDataPtr(POINTER_CHAINGAUGE, 100);
|
||||
|
||||
}
|
||||
|
||||
SetCommonDataPtr(POINTER_CHAIN, min(64, GetCommonDataPtr(POINTER_CHAIN, 1)+0.15));
|
||||
SetCommonDataPtr(POINTER_CHAINGAUGE, min(100, GetCommonDataPtr(POINTER_CHAINGAUGE, 0)+ rateReduceNormal * 20));
|
||||
|
||||
SPECIAL_BOOST_COUNT = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
case(PIV_500) { SetCommonDataPtr(POINTER_PIV, GetCommonDataPtr(POINTER_PIV, 10000)+500);}
|
||||
|
||||
case(SPECIAL_AMMO) {
|
||||
|
||||
SetCommonDataPtr(POINTER_SPECIALAMMO, min(100, GetCommonDataPtr(POINTER_SPECIALAMMO, 100)+0.2));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
case (EV_DELETE_SHOT_TO_ITEM){
|
||||
|
||||
float[] position = GetEventArgument(1);
|
||||
|
||||
if(GetCommonDataPtr(POINTER_SPECIALCHECK, true) == true && IsPlayerSpellActive() != true && GetPlayerState() == STATE_NORMAL){
|
||||
CreateScoreItem(POINT_GOLD_LARGE, position[0], position[1]);
|
||||
} // Kouryuu special weapon
|
||||
else{
|
||||
CreateScoreItem(POINT_REGULAR, position[0], position[1]);
|
||||
} // Death or bomb
|
||||
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
}
|
||||
|
||||
case(EV_DROP_AMMO_ENEMY){
|
||||
|
||||
//_DropAmmoItemEnemy(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, float killTimer, float maxTimer, float pointMin, float pointMax){
|
||||
|
||||
// If the player kills enemy within maxTimer, the enemy drops the maximum amount of point items
|
||||
|
||||
float pointFinal = Interpolate_Smooth(pointMax, pointMin, min(1, killTimer/maxTimer));
|
||||
|
||||
WriteLog(killTimer/maxTimer);
|
||||
|
||||
if (GetCommonDataPtr(POINTER_CHAINCHECK, false) == true){
|
||||
|
||||
loop(pointFinal){
|
||||
|
||||
CreateScoreItem(POINT_GOLD_LARGE, posEnm[0]+rand(-60, 60), posEnm[1]+rand(-60, 60));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
loop(pointFinal){
|
||||
|
||||
CreateScoreItem(POINT_REGULAR, posEnm[0]+rand(-60, 60), posEnm[1]+rand(-60, 60));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(GetAreaCommonData("Config", "EffectCut", 0) >= 1){}
|
||||
else{_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));
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
if(GetCommonDataPtr(EFFECTCUT_PTR, 0) >= 1){}
|
||||
else{_ScorePopup(posEnm[0], posEnm[1], "PIV", pointFinal);}
|
||||
*/
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
task _DropAmmoItemEnemy(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){
|
||||
|
||||
CreateAmmoItem(posEnm[0]+rand(-60, 60), posEnm[1]+rand(-60, 60));
|
||||
|
||||
}
|
||||
|
||||
if(GetCommonDataPtr(EFFECTCUT_PTR, 0) >= 1){}
|
||||
else{_ScorePopup(posEnm[0], posEnm[1], "AMMO", 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){
|
||||
|
||||
if (itemNum <= 0){return;}
|
||||
|
||||
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 = 40;
|
||||
float yDes = 60; // Destination text object moves to, relative to enmY
|
||||
string font = "GravityRegular5";
|
||||
string font2 = "GravityBold8";
|
||||
float borderSize = 6;
|
||||
|
||||
if (type == "POINT")
|
||||
{
|
||||
|
||||
int pointText = CreateTextObject(
|
||||
enmX, enmY, size,
|
||||
IntToString(itemNum * 10000) ~ " x " ~ IntToString(GetCommonDataPtr(POINTER_CHAIN, 1)), font,
|
||||
0x7699FF, 0xFFFFFF,
|
||||
0x2A00C0, borderSize,
|
||||
42
|
||||
);
|
||||
|
||||
ObjText_SetHorizontalAlignment(pointText, ALIGNMENT_CENTER);
|
||||
|
||||
if (GetCommonDataPtr(POINTER_CHAINCHECK, false) == true){
|
||||
|
||||
ObjText_SetFontBorderColor(pointText, 0xFF9700);
|
||||
ObjText_SetFontColorTop(pointText, 0xFFD69C);
|
||||
ObjText_SetFontSize(pointText, 56);
|
||||
ObjText_SetFontType(pointText, font2);
|
||||
ObjText_SetText(pointText, IntToString(itemNum * PIV));
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
ObjText_SetFontBorderColor(pointText, 0x2A00C0);
|
||||
ObjText_SetFontColorTop(pointText, 0x7699FF);
|
||||
ObjText_SetFontSize(pointText, 40);
|
||||
ObjText_SetFontType(pointText, font);
|
||||
ObjText_SetText(pointText, IntToString(itemNum * 1000) ~ "[r][font tc=(255, 223, 143) oz=4 oc=(123, 45, 23) bc=(219, 163, 21) oy=12 sz=25]+" ~ IntToString(itemNum * 50) ~ " VALUE");
|
||||
|
||||
}
|
||||
|
||||
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 if (type == "PIV")
|
||||
{
|
||||
int pivText = CreateTextObject(
|
||||
enmX, enmY+offset, size,
|
||||
"x" ~ IntToString(itemNum), font,
|
||||
0xFFB4EC, 0xFFFFFF,
|
||||
0xB200AD, borderSize,
|
||||
42
|
||||
);
|
||||
|
||||
ObjText_SetHorizontalAlignment(pivText, ALIGNMENT_CENTER);
|
||||
|
||||
if (GetCommonDataPtr(POINTER_CHAINCHECK, false) == true){
|
||||
Obj_SetVisible(pivText, false);
|
||||
}
|
||||
else{
|
||||
Obj_SetVisible(pivText, true);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
else if (type == "AMMO")
|
||||
{
|
||||
int pivText = CreateTextObject(
|
||||
enmX, enmY+offset, size,
|
||||
"+" ~ rtos("00.00", itemNum*0.2) ~ " [font ox=-24 oy=27 sz=45]AMMO", font,
|
||||
0xFFB4EC, 0xFFFFFF,
|
||||
0xF63357, borderSize,
|
||||
42
|
||||
);
|
||||
|
||||
ObjText_SetHorizontalAlignment(pivText, ALIGNMENT_CENTER);
|
||||
|
||||
if (GetCommonDataPtr(POINTER_CHAINCHECK, false) == true){
|
||||
Obj_SetVisible(pivText, false);
|
||||
}
|
||||
else{
|
||||
Obj_SetVisible(pivText, true);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
else{}
|
||||
}
|
115
script/KevinSystem/kevin_system/Kevin_EffectLib.dnh
Normal file
115
script/KevinSystem/kevin_system/Kevin_EffectLib.dnh
Normal 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(prand(5, 10)*dir, prand(5, 10)*dir, prand(0, 360));
|
||||
dir *= -1;
|
||||
//_CreatePetal(prand(50, 80), prand(-80, -50), prand(0, 360));
|
||||
}*/
|
||||
|
||||
_CreatePetal(prand(8, 11), prand(-8, -11), prand(0, 360));
|
||||
_CreatePetal(prand(-11, -8), prand(-2, 2), prand(0, 360));
|
||||
_CreatePetal(prand(8, 8), prand(-2, 2), prand(0, 360));
|
||||
_CreatePetal(prand(-11, -8), prand(8, 11), prand(0, 360));
|
||||
_CreatePetal(prand(8, 11), prand(8, 11), prand(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 = prand(-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;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
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!", "このゲームを遊ぶをありがとうございました!"][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, 7.5*STGHEIGHT/8);
|
||||
|
||||
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, 50);
|
||||
ObjText_SetFontType(obj, "GravityRegular5");
|
||||
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 = ["THE END(?)"];
|
||||
int x = prand_int(0, length(textchoices)-1);
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, textchoices[x]);
|
||||
ObjText_SetFontSize(objText, 72);
|
||||
ObjText_SetFontType(objText, "GravityBold8");
|
||||
|
||||
//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, 75);
|
||||
|
||||
let mx = GetScreenWidth/2;
|
||||
let my = GetScreenHeight/4;
|
||||
let texts = ["SAVE REPLAY", "TITLE", "RESTART"];
|
||||
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;
|
||||
}
|
||||
}
|
18
script/KevinSystem/kevin_system/Kevin_ItemConst.txt
Normal file
18
script/KevinSystem/kevin_system/Kevin_ItemConst.txt
Normal file
|
@ -0,0 +1,18 @@
|
|||
|
||||
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;
|
||||
|
||||
const POINT_GOLD_SMALL = 11;
|
||||
const POINT_GOLD_MEDIUM = 12;
|
||||
const POINT_GOLD_LARGE = 13;
|
||||
const SPECIAL_AMMO = 14;
|
28
script/KevinSystem/kevin_system/Kevin_ItemData.txt
Normal file
28
script/KevinSystem/kevin_system/Kevin_ItemData.txt
Normal file
|
@ -0,0 +1,28 @@
|
|||
#UserItemData
|
||||
|
||||
item_image = "./../img/yo.png"
|
||||
|
||||
ItemData { id=1 rect=(576, 256, 608, 288) } // 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=(512, 256, 576, 320) 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
|
||||
|
||||
// New point items
|
||||
|
||||
ItemData { id=11 rect=(608, 256, 640, 288) }
|
||||
ItemData { id=12 rect=(640, 256, 704, 320) }
|
||||
|
||||
ItemData { id=13 rect=(576, 320, 640, 384) } // Large gold item (NARUMI_STG)
|
||||
|
||||
// Special ammo item
|
||||
|
||||
ItemData { id=14 rect=(576, 288, 608, 320) }
|
173
script/KevinSystem/kevin_system/Kevin_ItemLib.txt
Normal file
173
script/KevinSystem/kevin_system/Kevin_ItemLib.txt
Normal file
|
@ -0,0 +1,173 @@
|
|||
// 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, -10);
|
||||
ObjMove_SetAcceleration(PIVItem, 1);
|
||||
ObjMove_SetMaxSpeed(PIVItem, 0);
|
||||
|
||||
ObjItem_SetIntersectionRadius(PIVItem, 60);
|
||||
|
||||
ObjRender_SetScaleXYZ(PIVItem, 2);
|
||||
ObjRender_SetAlpha(PIVItem, 255*(universalItemAlpha/100));
|
||||
|
||||
return PIVItem;
|
||||
}
|
||||
|
||||
function CreateAmmoItem(x, y){
|
||||
|
||||
let Item = CreateItemU1(SPECIAL_AMMO, x, y, 0);
|
||||
ObjItem_SetDefaultCollectMovement(Item, false);
|
||||
ObjItem_SetAutoDelete(Item, false);
|
||||
|
||||
ObjMove_SetAngle(Item, 90);
|
||||
ObjMove_SetSpeed(Item, -10);
|
||||
ObjMove_SetAcceleration(Item, 1);
|
||||
ObjMove_SetMaxSpeed(Item, 0);
|
||||
|
||||
ObjItem_SetIntersectionRadius(Item, 60);
|
||||
|
||||
ObjRender_SetScaleXYZ(Item, 3);
|
||||
ObjRender_SetAlpha(Item, 255*(universalItemAlpha/100));
|
||||
|
||||
return Item;
|
||||
}
|
||||
|
||||
// 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);
|
||||
|
||||
ObjItem_SetAutoCollectEnableFlags(ScoreItem, ITEM_AUTOCOLLECT_ALL);
|
||||
ObjMove_SetAngle(ScoreItem, 90);
|
||||
ObjMove_SetSpeed(ScoreItem, -20);
|
||||
ObjMove_SetAcceleration(ScoreItem, 1);
|
||||
ObjMove_SetMaxSpeed(ScoreItem, 6);
|
||||
|
||||
ObjItem_SetIntersectionRadius(ScoreItem, 64);
|
||||
ObjItem_SetRenderScoreEnable(ScoreItem, false);
|
||||
|
||||
ObjRender_SetAlpha(ScoreItem, 255*(universalItemAlpha/100));
|
||||
ObjRender_SetScaleXYZ(ScoreItem, 3);
|
||||
|
||||
/*
|
||||
if(itemtype == POINT_RAINBOW){
|
||||
|
||||
if(LoadAreaCommonDataValuePointer("PIV", "ChainGauge", 0) <= 32){
|
||||
ObjSprite2D_SetSourceRect(ScoreItem, 608, 256, 640, 288);
|
||||
}
|
||||
|
||||
else if(LoadAreaCommonDataValuePointer("PIV", "ChainGauge", 0) > 32 && LoadAreaCommonDataValuePointer("PIV", "ChainGauge", 0) < 64){
|
||||
ObjSprite2D_SetSourceRect(ScoreItem, 640, 256, 704, 320);
|
||||
}
|
||||
|
||||
else{
|
||||
ObjSprite2D_SetSourceRect(ScoreItem, 704, 256, 768, 320);
|
||||
}
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
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{}
|
||||
|
||||
}
|
307
script/KevinSystem/kevin_system/Kevin_Pause.txt
Normal file
307
script/KevinSystem/kevin_system/Kevin_Pause.txt
Normal file
|
@ -0,0 +1,307 @@
|
|||
//一時停止中スクリプト
|
||||
//#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 = [
|
||||
|
||||
["There's no Marisa.[r]She's busy exploding somewhere else.",
|
||||
"Touhou.",
|
||||
"Narumi actually doesn't know how to ski.",
|
||||
"Thanks for playing this game!",
|
||||
"You can set the amount of starting lives you have in the configurations menu."],
|
||||
|
||||
["太陽は実際に暑いエッグタルト、ね?",
|
||||
"東方.",
|
||||
"このゲームの開発元の一番好きなキャラクターは『僕のヒーローアカデミア』の『口田甲司』ですよ![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, [30, 32][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, 7.5*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, 50);
|
||||
ObjText_SetFontType(obj, "GravityRegular5");
|
||||
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 = ["Game Paused", "Too Much Snow."];
|
||||
int x = prand_int(0, length(textchoices)-1);
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetText(objText, textchoices[x]);
|
||||
ObjText_SetFontSize(objText, 72);
|
||||
ObjText_SetFontType(objText, "GravityBold8");
|
||||
|
||||
//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, 75);
|
||||
|
||||
let mx = GetScreenWidth/2;
|
||||
let my = GetScreenHeight/3;
|
||||
let texts = ["RESUME", "TITLE", "RESTART"];
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
437
script/KevinSystem/kevin_system/Kevin_ReplaySave.txt
Normal file
437
script/KevinSystem/kevin_system/Kevin_ReplaySave.txt
Normal file
|
@ -0,0 +1,437 @@
|
|||
//リプレイ保存スクリプト
|
||||
|
||||
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 DigitToCommaArray(num){ //Natashinitai
|
||||
|
||||
let srcStr = IntToString(num);
|
||||
let res = [];
|
||||
let nChar = 0;
|
||||
for(let i = length(srcStr) - 1; i >= 0; i--){
|
||||
res = [srcStr[i]] ~ res;
|
||||
nChar++;
|
||||
if(nChar % 3 == 0 && i > 0) res = "," ~ res;
|
||||
}
|
||||
return res;
|
||||
|
||||
}
|
||||
|
||||
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 = 10;
|
||||
let pageMax = trunc((countMaxItem - 1) / countItemPerPage);
|
||||
pageMax = max(pageMax, 1);
|
||||
let lastPageMaxCursorY = trunc(countMaxItem / countItemPerPage);
|
||||
|
||||
task TMenuItem(let itemY)
|
||||
{
|
||||
let objText = CreateTextObject(90, 45 + 35 * itemY, 28, "");
|
||||
let objSelect = CreateTextObject(90, 45 + 35 * itemY, 28, "");
|
||||
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 ~ DigitToCommaArray(trunc(GetReplayInfo(index, REPLAY_TOTAL_SCORE)/10)*10) ~ " ";
|
||||
text = text ~ GetReplayInfo(index, REPLAY_PLAYER_NAME) ~ " ";
|
||||
text = text ~ GetReplayUserData(index, "Difficulty");
|
||||
|
||||
/*
|
||||
SetReplayUserData("Starting Lives", GetCommonData("Starting Lives Selected", 5));
|
||||
SetReplayUserData("Player", 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(GetStgFrameWidth()/4 + itemX * 42, 400 + itemY * 42, 40, strTextView[itemY][itemX]);
|
||||
let objSelect = CreateTextObject(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(GetStgFrameWidth()/4, 200, 45, "");
|
||||
task TNameCursor()
|
||||
{
|
||||
let objCursor = CreateTextObject(GetStgFrameWidth()/4, 200, 45, "_");
|
||||
while(menuMode == MENU_NAME_ENTRY)
|
||||
{
|
||||
let nameLength = length(userName);
|
||||
ObjRender_SetX(objCursor, 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", "Standard"));
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
80
script/KevinSystem/kevin_system/Lib_Const.dnh
Normal file
80
script/KevinSystem/kevin_system/Lib_Const.dnh
Normal file
|
@ -0,0 +1,80 @@
|
|||
//Custom events
|
||||
|
||||
const EV_START_MUSIC = EV_USER + 411i;
|
||||
const EV_BOSS_MUSIC = EV_USER + 412i;
|
||||
|
||||
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_DROP_AMMO_ENEMY = EV_USER + 204i;
|
||||
|
||||
const EV_EXPLODE = EV_USER + 300i;
|
||||
|
||||
// Chain events
|
||||
|
||||
const EV_CHAIN_MAX = EV_USER + 301i; // Play sound effect when chain is max
|
||||
const EV_CHAIN_RELEASE = EV_USER + 302i; // Make enemies drop golden point items when chain is cashed in
|
||||
const EV_CHAIN_END = EV_USER + 303i; // End/reset chain when gauge goes to 0
|
||||
const CHAIN_MAX = 64;
|
||||
|
||||
// Card shop events
|
||||
|
||||
const EV_SHOP_CALL = EV_USER + 400i; // Call shop (in stage)
|
||||
const EV_SHOP_OPEN = EV_USER + 401i; // Request to open shop (in player script) when CALL is notified
|
||||
const EV_SHOP_GAIN = EV_USER + 402i; // Shop is opened in package. Afterwards, add ability via notifying this event (in player script)
|
||||
|
||||
// Convenience constants
|
||||
|
||||
const STG_WIDTH = GetStgFrameWidth();
|
||||
const STG_HEIGHT = GetStgFrameHeight();
|
||||
|
||||
// Card names
|
||||
|
||||
const CARD_NAMES =
|
||||
[
|
||||
// Shop 1
|
||||
|
||||
"Hitchcock Birds",
|
||||
"Turtle Cannon",
|
||||
"Phoenix Feather",
|
||||
"Devil's Crown",
|
||||
|
||||
// Shop 2
|
||||
|
||||
"Irresistible Demand",
|
||||
"Danmaku Catcher",
|
||||
"Mango Jam",
|
||||
"Cucumber Jam",
|
||||
|
||||
// Shop 3
|
||||
|
||||
"K*taka Fried Chicken",
|
||||
"Magic Absorber",
|
||||
"Warrior's Breastplate",
|
||||
"20/20 Goggles",
|
||||
|
||||
// Shop 4
|
||||
|
||||
"Fossil Spear",
|
||||
"Oni's Cursed Gourd",
|
||||
"Bee-Powered Laser",
|
||||
"Radiant Warrior",
|
||||
|
||||
// Final Shop
|
||||
|
||||
"Blacksmith's Offer",
|
||||
"Potionmaker's Mist",
|
||||
"Marketeer's Rainbow"
|
||||
|
||||
];
|
||||
|
||||
// Misc
|
||||
|
||||
const EFFECTCUT_PTR = LoadAreaCommonDataValuePointer("Config", "EffectCut", 0);
|
||||
|
||||
const ITEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "ItemID", 0);
|
||||
const SYSTEMID_PTR = LoadAreaCommonDataValuePointer("ScriptID", "SystemID", 0);
|
||||
|
||||
const FLYINGENM_PTR = LoadCommonDataValuePointer("Flying Defeated", 0);
|
||||
const GROUNDENM_PTR = LoadCommonDataValuePointer("Ground Defeated", 0);
|
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