commit 1
BIN
script/KevinSystem/Default_Background_IceMountain.txt
Normal file
BIN
script/KevinSystem/Default_Effect.txt
Normal file
BIN
script/KevinSystem/Default_EndScene.txt
Normal file
BIN
script/KevinSystem/Default_Pause.txt
Normal file
BIN
script/KevinSystem/Default_ReplaySaveScene.txt
Normal file
BIN
script/KevinSystem/Default_ShotConst.txt
Normal file
BIN
script/KevinSystem/Default_ShotData.txt
Normal file
BIN
script/KevinSystem/Default_System_MagicCircle.txt
Normal file
120
script/KevinSystem/GeneralSoundLib.txt
Normal file
|
@ -0,0 +1,120 @@
|
|||
// Sound effects for boss go here.
|
||||
|
||||
let lib = GetModuleDirectory() ~ "./script/KevinSystem/RyannSFX/ryannlib/";
|
||||
let libKev = "script/KevinSound/";
|
||||
|
||||
let SFXVol = GetAreaCommonData("Config", "SEVol", 100) * 0.01;
|
||||
|
||||
// Sound paths
|
||||
|
||||
let defeatsnd = lib ~ "../bossdie.wav";
|
||||
let lw = lib ~ "sp_lastword.wav";
|
||||
|
||||
let bullet1 = libKev ~ "bfxr_Shoot1.wav"; // Regular bullet sound
|
||||
let bullet2 = libKev ~ "bfxr_Shoot2.wav"; // Shiny bullet sound
|
||||
|
||||
let bullet3 = lib ~ "se_explode.wav";
|
||||
let lightning1 = lib ~ "se_don00.wav"; // Lightning sound 1/Explosion sound
|
||||
let lightning2 = lib ~ "se_kira02.wav"; // Lightning sound 2
|
||||
let laze = lib ~ "se_lazer01.wav"; // Laser sound
|
||||
let lazeB = lib ~ "se_lazer00.wav";
|
||||
let slash = lib ~ "se_slash.ogg";
|
||||
|
||||
let pause = libKev ~ "bfxr_Pause.wav";
|
||||
let chargeA = libKev ~ "bfxr_Charge.wav";
|
||||
|
||||
let selection = libKev ~ "se_select00.wav";
|
||||
let thunder = lib ~ "se_boon00.wav"; // Thunder/delay laser sound
|
||||
let bomb = lib ~ "se_nep00.wav";
|
||||
|
||||
let extend = libKev ~ "bfxr_ExtendLegacy.wav"; // Clear game!
|
||||
|
||||
let lenenwarn = lib ~ "../lenenwarning.wav";
|
||||
let chargeB = lib ~ "se_ch01.wav";
|
||||
|
||||
// Sound objects declarations
|
||||
|
||||
let warnsfx = ObjSound_Create();
|
||||
let lwmusic = ObjSound_Create();
|
||||
let fire1 = ObjSound_Create();
|
||||
let fire2 = ObjSound_Create();
|
||||
let fire3 = ObjSound_Create();
|
||||
let light1 = ObjSound_Create();
|
||||
let light2 = ObjSound_Create();
|
||||
let laser = ObjSound_Create();
|
||||
let laserB = ObjSound_Create();
|
||||
let charge = ObjSound_Create();
|
||||
let phase = ObjSound_Create();
|
||||
let grz = ObjSound_Create();
|
||||
let swing = ObjSound_Create();
|
||||
let pausesfx = ObjSound_Create();
|
||||
let choose = ObjSound_Create();
|
||||
let thundersfx = ObjSound_Create();
|
||||
let bombsfx = ObjSound_Create();
|
||||
let extendsfx = ObjSound_Create();
|
||||
let icebreak = ObjSound_Create();
|
||||
let entrance = ObjSound_Create();
|
||||
|
||||
int sfxBoom = ObjSound_Create();
|
||||
int bossBoom = ObjSound_Create();
|
||||
int bossLaugh = 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 _SoundTask{
|
||||
|
||||
//LoadEx(lwmusic, lw, 80);
|
||||
LoadEx(fire1, bullet1, 65);
|
||||
LoadEx(fire2, bullet2, 65);
|
||||
LoadEx(pausesfx, pause, 40);
|
||||
LoadEx(extendsfx, extend, 60);
|
||||
|
||||
LoadEx(light1, lightning1, 20);
|
||||
LoadEx(light2, lightning2, 20);
|
||||
LoadEx(laser, laze, 20);
|
||||
LoadEx(laserB, lazeB, 20);
|
||||
//LoadEx(grz, graze, 20);
|
||||
LoadEx(swing, slash, 20);
|
||||
|
||||
LoadEx(choose, selection, 30);
|
||||
LoadEx(thundersfx, thunder, 25);
|
||||
LoadEx(charge, chargeA, 75);
|
||||
LoadEx(phase, chargeB, 75);
|
||||
LoadEx(fire3, bullet3, 35);
|
||||
LoadEx(bombsfx, bomb, 50);
|
||||
|
||||
LoadEx(warnsfx, lenenwarn, 30);
|
||||
LoadEx(icebreak, lib ~ "se_don00.wav", 60);
|
||||
LoadEx(entrance, lib ~ "se_gun00.wav", 60);
|
||||
|
||||
LoadEx(sfxBoom, libKev ~ "bfxr_EnemyBoom.wav", 60);
|
||||
LoadEx(bossBoom, libKev ~ "bossBoom.wav", 60);
|
||||
LoadEx(bossLaugh, libKev ~ "RaspberryTickle_Giggle.wav", 60);
|
||||
}
|
||||
|
||||
// Functions to load sounds in scripts
|
||||
|
||||
task Shoot1{ObjSound_Play(fire1); return;}
|
||||
task Shoot2{ObjSound_Play(fire2); return;}
|
||||
task Shoot3{ObjSound_Play(fire3); return;}
|
||||
task Lit1{ObjSound_Play(light1); return;}
|
||||
task Lit2{ObjSound_Play(light2); return;}
|
||||
task GrazeSFX{ObjSound_Play(grz); return;}
|
||||
task SwordSlashSFX{ObjSound_Play(swing); return;}
|
||||
task PauseGameSFX{ObjSound_Play(pausesfx); return;}
|
||||
task SelectOptionSFX{ObjSound_Play(choose); return;}
|
||||
task LaserSFX{ObjSound_Play(laser); return;}
|
||||
task LaserBSFX{ObjSound_Play(laserB); return;}
|
||||
task ThunderSFX{ObjSound_Play(thundersfx); return;}
|
||||
task ChargeSFX{ObjSound_Play(charge); return;}
|
||||
task ChargeBreakSFX{ObjSound_Play(phase); return;}
|
||||
task BombSFX{ObjSound_Play(bombsfx); return;}
|
||||
task ExtendSFX{ObjSound_Play(extendsfx); return;}
|
22
script/KevinSystem/Init.dnh
Normal file
|
@ -0,0 +1,22 @@
|
|||
|
||||
if(IsCommonDataAreaExists("PIV") == false){
|
||||
CreateCommonDataArea("PIV");
|
||||
SetAreaCommonData("PIV", "currentvalue", 10000);
|
||||
SetAreaCommonData("PIV", "ChainAmount", 1);
|
||||
}
|
||||
else{}
|
||||
|
||||
if(IsCommonDataAreaExists("ScriptID") == false){
|
||||
CreateCommonDataArea("ScriptID");
|
||||
SetAreaCommonData("ScriptID", "SystemID", 0);
|
||||
SetAreaCommonData("ScriptID", "ItemID", 0);
|
||||
}
|
||||
else{}
|
||||
|
||||
if(IsCommonDataAreaExists("ChainChecks") == false){
|
||||
CreateCommonDataArea("ChainChecks");
|
||||
SetAreaCommonData("ChainChecks", "IsChaining", false);
|
||||
}
|
||||
else{}
|
||||
|
||||
|
BIN
script/KevinSystem/KevinShot/KevinShot_Alt_HD.png
Normal file
After Width: | Height: | Size: 997 KiB |
BIN
script/KevinSystem/KevinShot/KevinShot_Alt_HD_2.png
Normal file
After Width: | Height: | Size: 1 MiB |
BIN
script/KevinSystem/KevinShot/KevinShot_Alt_HD_Fireball.png
Normal file
After Width: | Height: | Size: 810 KiB |
BIN
script/KevinSystem/KevinShot/KevinShot_Alt_HD_Fireball_Inv.png
Normal file
After Width: | Height: | Size: 630 KiB |
BIN
script/KevinSystem/KevinShot/KevinShot_Alt_HD_Inv.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
script/KevinSystem/KevinShot/KevinShot_FireballPxEdit.ase
Normal file
BIN
script/KevinSystem/KevinShot/KevinShot_PxEdit.ase
Normal file
BIN
script/KevinSystem/KevinShot/KevinShot_PxEdit_A.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
script/KevinSystem/KevinShot/KevinShot_PxEdit_B.png
Normal file
After Width: | Height: | Size: 871 KiB |
BIN
script/KevinSystem/KevinShot/KevinShot_PxEdit_C.png
Normal file
After Width: | Height: | Size: 242 KiB |
BIN
script/KevinSystem/KevinShot/KevinShot_PxEdit_D.png
Normal file
After Width: | Height: | Size: 255 KiB |
33
script/KevinSystem/KevinShot/misc.txt
Normal file
|
@ -0,0 +1,33 @@
|
|||
/*
|
||||
For Danmakufu users.
|
||||
|
||||
These functions are meant to be used alongside my pastel shotsheet due to the very high native resolution.
|
||||
*/
|
||||
|
||||
// Bullet rescaling task, also has functionality for setting a new hitbox size relative to the new bullet graphic size. I highly recommend leaving hitboxscale to true.
|
||||
|
||||
task _BulletRescale(target, float scale, bool hitboxscale, hitboxlevel){
|
||||
|
||||
ObjRender_SetScaleXYZ(target, scale, scale, 1);
|
||||
|
||||
if (hitboxscale){
|
||||
ObjShot_SetIntersectionScaleXY(target, scale*hitboxlevel, scale*hitboxlevel); // Note the formula. The hitbox will have been scaled accordingly along with the bullet graphic, but you can use hitboxlevel to adjust the scale further.
|
||||
return;
|
||||
}
|
||||
|
||||
else{return;}
|
||||
|
||||
}
|
||||
|
||||
// Delay task, provided by Naudiz (@Naudogs). For best effects, ensure destscale is equal to the resized scale of the bullet graphic, and orgscale be larger than it.
|
||||
|
||||
task _Delay(target, del, orgscale, destscale, orgalpha, destalpha){
|
||||
|
||||
ObjShot_SetDelay(target, del);
|
||||
ObjShot_SetDelayGraphic(target, ObjShot_GetImageID(target)); // unless you already have the ID in the function somewhere, in which case you can just use that, or use any other graphic
|
||||
ObjShot_SetDelayMode(target, DELAY_LERP, LERP_ACCELERATE, LERP_DECELERATE); // delay mode, scale lerp, alpha lerp. Check ph3sx's New Functions Documentation.txt for more details.
|
||||
ObjShot_SetDelayScaleParameter(target, destscale, orgscale, del); // lerps from orgscale to destscale scale in del frames (use the value from ObjShot_SetDelay for del)
|
||||
ObjShot_SetDelayAlphaParameter(target, destalpha, orgalpha, del); // lerps from orgalpha to destalpha scale in del frames (use the value from ObjShot_SetDelay for del)
|
||||
return;
|
||||
|
||||
}
|
28
script/KevinSystem/KevinShot/readme.txt
Normal file
|
@ -0,0 +1,28 @@
|
|||
Kevin's Ultra HD/4K Pastel Shotsheet
|
||||
|
||||
0.10a
|
||||
|
||||
--------
|
||||
|
||||
Thank you for downloading and using my pastel shotsheet!
|
||||
|
||||
This shotsheet features various common bullet types in a variety of "pastel" colors - colors lighter than your usual bullet graphics, but they should hopefully still be just as visible nonetheless. It has a *very* big native resolution (the first sheet is 4096x4096, with each bullet graphic being 256x256), and therefore is meant to be used with a similarly large game resolution and/or bullet rescaling functions. (See misc.txt for information regarding the latter in Danmakufu). It comes pre-packed with shot data and shot constant sheets meant for instant use in Danmakufu.
|
||||
|
||||
The shotsheet is still heavily incomplete. In the works is a second sheet (4096x2048) featuring more bullet types (fireballs, lasers, bubbles), some changes to existing bullet graphics to improve aesthetic and visibility, and half-size versions for regular HD reoslutions.
|
||||
|
||||
How to use:
|
||||
|
||||
Extract the directory to an appropriate location in your project and to load them, just include the shot constant text file in your script file (shotconst_4K.txt).
|
||||
--------
|
||||
The shot sheet images can be used in other engines as well. However it is the responsibility of the user to port the shot sheet data themselves.
|
||||
|
||||
The shot sheet images are free to use NON-COMMERCIALLY. Please credit me (Kevinmonitor/Kevin Mink) fully!
|
||||
|
||||
You are free to modify the shot sheets. Please state so if you do so however (for example, in the credits for your project you put a "modified by the author with permission" next to my attribution).
|
||||
|
||||
Please do not redistribute these shotsheets on your own.
|
||||
--------
|
||||
CONTACT:
|
||||
|
||||
Discord: Kevinmonitor#6745
|
||||
Twitter: @kevinminh_alt
|
142
script/KevinSystem/KevinShot/shotconst_HD.txt
Normal file
|
@ -0,0 +1,142 @@
|
|||
|
||||
local
|
||||
{
|
||||
LoadTextureEx(GetCurrentScriptDirectory ~ "./KevinShot_Alt_HD.png", true, true);
|
||||
LoadTextureEx(GetCurrentScriptDirectory ~ "./KevinShot_Alt_HD_Fireball.png", true, true);
|
||||
LoadTextureEx(GetCurrentScriptDirectory ~ "./KevinShot_Alt_HD_Inv.png", true, true);
|
||||
LoadTextureEx(GetCurrentScriptDirectory ~ "./KevinShot_Alt_HD_Fireball_Inv.png", true, true);
|
||||
LoadEnemyShotData(GetCurrentScriptDirectory ~ "shotdata_HD.txt");
|
||||
LoadEnemyShotData(GetCurrentScriptDirectory ~ "shotdata_HD_2.txt");
|
||||
LoadEnemyShotData(GetCurrentScriptDirectory ~ "shotdata_HD_3.txt");
|
||||
LoadEnemyShotData(GetCurrentScriptDirectory ~ "shotdata_HD_4.txt");
|
||||
}
|
||||
|
||||
const KEV_BALL_RED = 2000;
|
||||
const KEV_BALL_ORANGE = 2001;
|
||||
const KEV_BALL_YELLOW = 2002;
|
||||
const KEV_BALL_GREEN = 2003;
|
||||
const KEV_BALL_AQUA = 2004;
|
||||
const KEV_BALL_LAVENDER = 2005;
|
||||
const KEV_BALL_PURPLE = 2006;
|
||||
const KEV_BALL_PINK = 2007;
|
||||
const KEV_BALL_WHITE = 2008;
|
||||
|
||||
const KEV_FIRESMALL_RED = 2011;
|
||||
const KEV_FIRESMALL_ORANGE = 2012;
|
||||
const KEV_FIRESMALL_YELLOW = 2013;
|
||||
const KEV_FIRESMALL_GREEN = 2014;
|
||||
const KEV_FIRESMALL_AQUA = 2015;
|
||||
const KEV_FIRESMALL_LAVENDER = 2016;
|
||||
const KEV_FIRESMALL_PURPLE = 2017;
|
||||
const KEV_FIRESMALL_PINK = 2018;
|
||||
const KEV_FIRESMALL_WHITE = 2019;
|
||||
|
||||
const KEV_LEAF_RED = 2022;
|
||||
const KEV_LEAF_ORANGE = 2023;
|
||||
const KEV_LEAF_YELLOW = 2024;
|
||||
const KEV_LEAF_GREEN = 2025;
|
||||
const KEV_LEAF_AQUA = 2026;
|
||||
const KEV_LEAF_LAVENDER = 2027;
|
||||
const KEV_LEAF_PURPLE = 2028;
|
||||
const KEV_LEAF_PINK = 2029;
|
||||
const KEV_LEAF_WHITE = 2030;
|
||||
|
||||
const KEV_FIRELARGE_RED = 2033;
|
||||
const KEV_FIRELARGE_ORANGE = 2034;
|
||||
const KEV_FIRELARGE_YELLOW = 2035;
|
||||
const KEV_FIRELARGE_GREEN = 2036;
|
||||
const KEV_FIRELARGE_AQUA = 2037;
|
||||
const KEV_FIRELARGE_LAVENDER = 2038;
|
||||
const KEV_FIRELARGE_PURPLE = 2039;
|
||||
const KEV_FIRELARGE_PINK = 2040;
|
||||
const KEV_FIRELARGE_WHITE = 2041;
|
||||
|
||||
const KEV_ARROW_RED = 2044;
|
||||
const KEV_ARROW_ORANGE = 2045;
|
||||
const KEV_ARROW_YELLOW = 2046;
|
||||
const KEV_ARROW_GREEN = 2047;
|
||||
const KEV_ARROW_AQUA = 2048;
|
||||
const KEV_ARROW_LAVENDER = 2049;
|
||||
const KEV_ARROW_PURPLE = 2050;
|
||||
const KEV_ARROW_PINK = 2051;
|
||||
const KEV_ARROW_WHITE = 2052;
|
||||
|
||||
const KEV_BUTTERFLY_RED = 2055;
|
||||
const KEV_BUTTERFLY_ORANGE = 2056;
|
||||
const KEV_BUTTERFLY_YELLOW = 2057;
|
||||
const KEV_BUTTERFLY_GREEN = 2058;
|
||||
const KEV_BUTTERFLY_AQUA = 2059;
|
||||
const KEV_BUTTERFLY_LAVENDER = 2060;
|
||||
const KEV_BUTTERFLY_PURPLE = 2061;
|
||||
const KEV_BUTTERFLY_PINK = 2062;
|
||||
const KEV_BUTTERFLY_WHITE = 2063;
|
||||
|
||||
const KEV_AURABALL_RED = 2066;
|
||||
const KEV_AURABALL_ORANGE = 2067;
|
||||
const KEV_AURABALL_YELLOW = 2068;
|
||||
const KEV_AURABALL_GREEN = 2069;
|
||||
const KEV_AURABALL_AQUA = 2070;
|
||||
const KEV_AURABALL_LAVENDER = 2071;
|
||||
const KEV_AURABALL_PURPLE = 2072;
|
||||
const KEV_AURABALL_PINK = 2073;
|
||||
const KEV_AURABALL_WHITE = 2074;
|
||||
|
||||
const KEV_FIRE_RED = 2075;
|
||||
const KEV_FIRE_ORANGE = 2076;
|
||||
const KEV_FIRE_YELLOW = 2077;
|
||||
const KEV_FIRE_GREEN = 2078;
|
||||
const KEV_FIRE_AQUA = 2079;
|
||||
const KEV_FIRE_LAVENDER = 2080;
|
||||
const KEV_FIRE_PURPLE = 2081;
|
||||
const KEV_FIRE_PINK = 2082;
|
||||
const KEV_FIRE_WHITE = 2083;
|
||||
|
||||
const KEV_BUBBLE_RED = 2086;
|
||||
const KEV_BUBBLE_ORANGE = 2087;
|
||||
const KEV_BUBBLE_YELLOW = 2088;
|
||||
const KEV_BUBBLE_GREEN = 2089;
|
||||
const KEV_BUBBLE_AQUA = 2090;
|
||||
const KEV_BUBBLE_LAVENDER = 2091;
|
||||
const KEV_BUBBLE_PURPLE = 2092;
|
||||
const KEV_BUBBLE_PINK = 2093;
|
||||
|
||||
const KEV_KNIFE_RED = 2096;
|
||||
const KEV_KNIFE_ORANGE = 2097;
|
||||
const KEV_KNIFE_YELLOW = 2098;
|
||||
const KEV_KNIFE_GREEN = 2099;
|
||||
const KEV_KNIFE_AQUA = 2100;
|
||||
const KEV_KNIFE_LAVENDER = 2101;
|
||||
const KEV_KNIFE_PURPLE = 2102;
|
||||
const KEV_KNIFE_PINK = 2103;
|
||||
|
||||
const KEV_BITCHKILLER_ARROW = 3000;
|
||||
|
||||
// Inverted colours
|
||||
|
||||
const KEV_BALL_RED_INV = 2200; const KEV_PEOPLE_RED_INV = 2211; const KEV_LEAF_RED_INV = 2222; const KEV_AMULET_RED_INV = 2233; const KEV_ARROW_RED_INV = 2244; const KEV_BUTTERFLY_RED_INV = 2255; const KEV_AURABALL_RED_INV = 2266; const KEV_BUBBLE_RED_INV = 2286; const KEV_KNIFE_RED_INV = 2296;
|
||||
|
||||
const KEV_BALL_ORANGE_INV = 2201; const KEV_PEOPLE_ORANGE_INV = 2212; const KEV_LEAF_ORANGE_INV = 2223; const KEV_AMULET_ORANGE_INV = 2234; const KEV_ARROW_ORANGE_INV = 2245; const KEV_BUTTERFLY_ORANGE_INV = 2256; const KEV_AURABALL_ORANGE_INV = 2267; const KEV_BUBBLE_ORANGE_INV = 2287; const KEV_KNIFE_ORANGE_INV = 2297;
|
||||
|
||||
const KEV_BALL_YELLOW_INV = 2202; const KEV_PEOPLE_YELLOW_INV = 2213; const KEV_LEAF_YELLOW_INV = 2224; const KEV_AMULET_YELLOW_INV = 2235; const KEV_ARROW_YELLOW_INV = 2246; const KEV_BUTTERFLY_YELLOW_INV = 2257; const KEV_AURABALL_YELLOW_INV = 2268; const KEV_BUBBLE_YELLOW_INV = 2288; const KEV_KNIFE_YELLOW_INV = 2298;
|
||||
|
||||
const KEV_BALL_GREEN_INV = 2203; const KEV_PEOPLE_GREEN_INV = 2214; const KEV_LEAF_GREEN_INV = 2225; const KEV_AMULET_GREEN_INV = 2236; const KEV_ARROW_GREEN_INV = 2247; const KEV_BUTTERFLY_GREEN_INV = 2258; const KEV_AURABALL_GREEN_INV = 2269; const KEV_BUBBLE_GREEN_INV = 2289; const KEV_KNIFE_GREEN_INV = 2299;
|
||||
|
||||
const KEV_BALL_AQUA_INV = 2204; const KEV_PEOPLE_AQUA_INV = 2215; const KEV_LEAF_AQUA_INV = 2226; const KEV_AMULET_AQUA_INV = 2237; const KEV_ARROW_AQUA_INV = 2248; const KEV_BUTTERFLY_AQUA_INV = 2259; const KEV_AURABALL_AQUA_INV = 2270; const KEV_BUBBLE_AQUA_INV = 2290; const KEV_KNIFE_AQUA_INV = 2300;
|
||||
|
||||
const KEV_BALL_LAVENDER_INV = 2205; const KEV_PEOPLE_LAVENDER_INV = 2216; const KEV_LEAF_LAVENDER_INV = 2227; const KEV_AMULET_LAVENDER_INV = 2238; const KEV_ARROW_LAVENDER_INV = 2249; const KEV_BUTTERFLY_LAVENDER_INV = 2260; const KEV_AURABALL_LAVENDER_INV = 2271; const KEV_BUBBLE_LAVENDER_INV = 2291; const KEV_KNIFE_LAVENDER_INV = 2301;
|
||||
|
||||
const KEV_BALL_PURPLE_INV = 2206; const KEV_PEOPLE_PURPLE_INV = 2217; const KEV_LEAF_PURPLE_INV = 2228; const KEV_AMULET_PURPLE_INV = 2239; const KEV_ARROW_PURPLE_INV = 2250; const KEV_BUTTERFLY_PURPLE_INV = 2261; const KEV_AURABALL_PURPLE_INV = 2272; const KEV_BUBBLE_PURPLE_INV = 2292; const KEV_KNIFE_PURPLE_INV = 2302;
|
||||
|
||||
const KEV_BALL_PINK_INV = 2207; const KEV_PEOPLE_PINK_INV = 2218; const KEV_LEAF_PINK_INV = 2229; const KEV_AMULET_PINK_INV = 2240; const KEV_ARROW_PINK_INV = 2251; const KEV_BUTTERFLY_PINK_INV = 2262; const KEV_AURABALL_PINK_INV = 2273; const KEV_BUBBLE_PINK_INV = 2293; const KEV_KNIFE_PINK_INV = 2303;
|
||||
|
||||
const KEV_BALL_WHITE_INV = 2208; const KEV_PEOPLE_WHITE_INV = 2219; const KEV_LEAF_WHITE_INV = 2230; const KEV_AMULET_WHITE_INV = 2241; const KEV_ARROW_WHITE_INV = 2252; const KEV_BUTTERFLY_WHITE_INV = 2263; const KEV_AURABALL_WHITE_INV = 2274; const KEV_BUBBLE_WHITE_INV = 2294; const KEV_KNIFE_WHITE_INV = 2304;
|
||||
|
||||
const KEV_FIRE_RED_INV = 2275;
|
||||
const KEV_FIRE_ORANGE_INV = 2276;
|
||||
const KEV_FIRE_YELLOW_INV = 2277;
|
||||
const KEV_FIRE_GREEN_INV = 2278;
|
||||
const KEV_FIRE_AQUA_INV = 2279;
|
||||
const KEV_FIRE_LAVENDER_INV = 2280;
|
||||
const KEV_FIRE_PURPLE_INV = 2281;
|
||||
const KEV_FIRE_PINK_INV = 2282;
|
||||
const KEV_FIRE_WHITE_INV = 2283;
|
108
script/KevinSystem/KevinShot/shotdata_HD.txt
Normal file
|
@ -0,0 +1,108 @@
|
|||
#UserShotData
|
||||
|
||||
shot_image = "./KevinShot_PxEdit_A.png"
|
||||
|
||||
// BALL
|
||||
|
||||
ShotData { id = 2000 rect = (0,0,128,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //RED
|
||||
ShotData { id = 2001 rect = (128,0,256,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //ORANGE
|
||||
ShotData { id = 2002 rect = (256,0,384,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //YELLOW
|
||||
ShotData { id = 2003 rect = (384,0,512,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //GREEN
|
||||
ShotData { id = 2004 rect = (512,0,640,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //AQUA
|
||||
ShotData { id = 2005 rect = (640,0,768,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //LAVENDER
|
||||
ShotData { id = 2006 rect = (768,0,896,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //PURPLE
|
||||
ShotData { id = 2007 rect = (896,0,1024,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //PINK
|
||||
ShotData { id = 2008 rect = (1024,0,1152,128) collision = 12 delay_color = (255,255,255) angular_velocity = 5} //WHITE
|
||||
|
||||
// FIRE SMALL
|
||||
|
||||
ShotData { id = 2011 rect = (0,128,128,256) collision = (12,0,-8) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2012 rect = (128,128,256,256) collision = (12,0,-8) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2013 rect = (256,128,384,256) collision = (12,0,-8) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2014 rect = (384,128,512,256) collision = (12,0,-8) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2015 rect = (512,128,640,256) collision = (12,0,-8) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2016 rect = (640,128,768,256) collision = (12,0,-8) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2017 rect = (768,128,896,256) collision = (12,0,-8) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2018 rect = (896,128,1024,256) collision = (12,0,-8) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2019 rect = (1024,128,1152,256) collision = (12,0,-8) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
// LEAF
|
||||
|
||||
ShotData { id = 2022 rect = (0,256,128,384) collision = 8 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2023 rect = (128,256,256,384) collision = 8 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2024 rect = (256,256,384,384) collision = 8 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2025 rect = (384,256,512,384) collision = 8 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2026 rect = (512,256,640,384) collision = 8 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2027 rect = (640,256,768,384) collision = 8 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2028 rect = (768,256,896,384) collision = 8 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2029 rect = (896,256,1024,384) collision = 8 delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2030 rect = (1024,256,1152,384) collision = 8 delay_color = (255,255,255) } //WHITE
|
||||
|
||||
// FIRE BIG
|
||||
|
||||
ShotData { id = 2033 rect = (0,384,128,512) collision = (20,0,-12) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2034 rect = (128,384,256,512) collision = (20,0,-12) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2035 rect = (256,384,384,512) collision = (20,0,-12) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2036 rect = (384,384,512,512) collision = (20,0,-12) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2037 rect = (512,384,640,512) collision = (20,0,-12) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2038 rect = (640,384,768,512) collision = (20,0,-12) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2039 rect = (768,384,896,512) collision = (20,0,-12) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2040 rect = (896,384,1024,512) collision = (20,0,-12) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2041 rect = (1024,384,1152,512) collision = (20,0,-12) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2044 rect = (0,512,128,640) collision = (6,0,20) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2045 rect = (128,512,256,640) collision = (6,0,20) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2046 rect = (256,512,384,640) collision = (6,0,20) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2047 rect = (384,512,512,640) collision = (6,0,20) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2048 rect = (512,512,640,640) collision = (6,0,20) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2049 rect = (640,512,768,640) collision = (6,0,20) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2050 rect = (768,512,896,640) collision = (6,0,20) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2051 rect = (896,512,1024,640) collision = (6,0,20) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2052 rect = (1024,512,1152,640) collision = (6,0,20) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2055 rect = (0,640,128,768) collision = 12 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2056 rect = (128,640,256,768) collision = 12 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2057 rect = (256,640,384,768) collision = 12 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2058 rect = (384,640,512,768) collision = 12 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2059 rect = (512,640,640,768) collision = 12 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2060 rect = (640,640,768,768) collision = 12 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2061 rect = (768,640,896,768) collision = 12 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2062 rect = (896,640,1024,768) collision = 12 delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2063 rect = (1024,640,1152,768) collision = 12 delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2066 rect = (0,768,128,896) collision = 18 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2067 rect = (128,768,256,896) collision = 18 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2068 rect = (256,768,384,896) collision = 18 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2069 rect = (384,768,512,896) collision = 18 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2070 rect = (512,768,640,896) collision = 18 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2071 rect = (640,768,768,896) collision = 18 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2072 rect = (768,768,896,896) collision = 18 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2073 rect = (896,768,1024,896) collision = 18 delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2074 rect = (1024,768,1152,896) collision = 18 delay_color = (255,255,255) } //WHITE
|
||||
|
||||
75 -> 83: fireballs
|
||||
|
||||
ShotData { id = 2086 rect = (0,896,256,1152) collision = 48 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2087 rect = (256,896,512,1152) collision = 48 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2088 rect = (512,896,768,1152) collision = 48 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2089 rect = (768,896,1024,1152) collision = 48 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2090 rect = (1024,896,1280,1152) collision = 48 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2091 rect = (1280,896,1536,1152) collision = 48 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2092 rect = (1536,896,1792,1152) collision = 48 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2093 rect = (1792,896,2048,1152) collision = 48 delay_color = (255,255,255) } //PINK
|
||||
|
||||
ShotData { id = 2096 rect = (0,1152,128,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2097 rect = (128,1152,256,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2098 rect = (256,1152,384,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2099 rect = (384,1152,512,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2100 rect = (512,1152,640,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2101 rect = (640,1152,768,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2102 rect = (768,1152,896,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2103 rect = (896,1152,1024,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2104 rect = (1024,1152,1152,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //WHITE
|
||||
ShotData { id = 2105 rect = (1152,1152,1280,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //
|
||||
ShotData { id = 2106 rect = (1280,1152,1408,1280) collision = (8.5,0,-9.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (6.5,0,32.5) delay_color = (255,255,255) } //
|
||||
|
||||
|
||||
|
||||
|
24
script/KevinSystem/KevinShot/shotdata_HD_2.txt
Normal file
|
@ -0,0 +1,24 @@
|
|||
#UserShotData
|
||||
|
||||
shot_image = "./KevinShot_PxEdit_C.png"
|
||||
|
||||
ShotData { id = 2075 AnimationData { animation_data = ( 6, 0, 0, 128, 128); animation_data = ( 6, 128, 0, 256, 128); animation_data = ( 6, 256, 0, 384, 128); animation_data = ( 6, 384, 0, 512, 128); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2076 AnimationData { animation_data = ( 6, 0, 128, 128, 256); animation_data = ( 6, 128, 128, 256, 256); animation_data = ( 6, 256, 128, 384, 256); animation_data = ( 6, 384, 128, 512, 256); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2077 AnimationData { animation_data = ( 6, 0, 256, 128, 384); animation_data = ( 6, 128, 256, 256, 384); animation_data = ( 6, 256, 256, 384, 384); animation_data = ( 6, 384, 256, 512, 384); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2078 AnimationData { animation_data = ( 6, 0, 384, 128, 512); animation_data = ( 6, 128, 384, 256, 512); animation_data = ( 6, 256, 384, 384, 512); animation_data = ( 6, 384, 384, 512, 512); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2079 AnimationData { animation_data = ( 6, 0, 512, 128, 640); animation_data = ( 6, 128, 512, 256, 640); animation_data = ( 6, 256, 512, 384, 640); animation_data = ( 6, 384, 512, 512, 640); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2080 AnimationData { animation_data = ( 6, 0, 640, 128, 768); animation_data = ( 6, 128, 640, 256, 768); animation_data = ( 6, 256, 640, 384, 768); animation_data = ( 6, 384, 640, 512, 768); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2081 AnimationData { animation_data = ( 6, 0, 768, 128, 896); animation_data = ( 6, 128, 768, 256, 896); animation_data = ( 6, 256, 768, 384, 896); animation_data = ( 6, 384, 768, 512, 896); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2082 AnimationData { animation_data = ( 6, 0, 896, 128, 1024); animation_data = ( 6, 128, 896, 256, 1024); animation_data = ( 6, 256, 896, 384, 1024); animation_data = ( 6, 384, 896, 512, 1024); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2083 AnimationData { animation_data = ( 6, 0, 1024, 128, 1152); animation_data = ( 6, 128, 1024, 256, 1152); animation_data = ( 6, 256, 1024, 384, 1152); animation_data = ( 6, 384, 1024, 512, 1152); } render = ALPHA collision = (13, 0, 24) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
// Bitchkiller Arrow
|
||||
|
||||
ShotData {
|
||||
id = 3000
|
||||
rect = (1024, 0, 1536, 1280)
|
||||
collision = (102, 0, 256)
|
||||
collision = (50, 0, 352)
|
||||
delay_color = (255, 255, 255)
|
||||
}
|
||||
|
103
script/KevinSystem/KevinShot/shotdata_HD_3.txt
Normal file
|
@ -0,0 +1,103 @@
|
|||
#UserShotData
|
||||
|
||||
// Inverted colors
|
||||
|
||||
shot_image = "./KevinShot_PxEdit_B.png"
|
||||
|
||||
ShotData { id = 2200 rect = (0,0,128,128) collision = 26 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2201 rect = (128,0,256,128) collision = 26 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2202 rect = (256,0,384,128) collision = 26 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2203 rect = (384,0,512,128) collision = 26 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2204 rect = (512,0,640,128) collision = 26 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2205 rect = (640,0,768,128) collision = 26 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2206 rect = (768,0,896,128) collision = 26 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2207 rect = (896,0,1024,128) collision = 26 delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2208 rect = (1024,0,1152,128) collision = 26 delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2211 rect = (0,128,128,256) collision = (17,0,7) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2212 rect = (128,128,256,256) collision = (17,0,7) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2213 rect = (256,128,384,256) collision = (17,0,7) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2214 rect = (384,128,512,256) collision = (17,0,7) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2215 rect = (512,128,640,256) collision = (17,0,7) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2216 rect = (640,128,768,256) collision = (17,0,7) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2217 rect = (768,128,896,256) collision = (17,0,7) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2218 rect = (896,128,1024,256) collision = (17,0,7) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2219 rect = (1024,128,1152,256) collision = (17,0,7) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2222 rect = (0,256,128,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2223 rect = (128,256,256,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2224 rect = (256,256,384,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2225 rect = (384,256,512,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2226 rect = (512,256,640,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2227 rect = (640,256,768,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2228 rect = (768,256,896,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2229 rect = (896,256,1024,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2230 rect = (1024,256,1152,384) collision = (8,0,6) collision = (8,0,-6) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2233 rect = (0,384,256,512) collision = (28,0,0) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2234 rect = (128,384,256,512) collision = (28,0,0) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2235 rect = (256,384,384,512) collision = (28,0,0) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2236 rect = (384,384,512,512) collision = (28,0,0) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2237 rect = (512,384,640,512) collision = (28,0,0) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2238 rect = (640,384,768,512) collision = (28,0,0) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2239 rect = (768,384,896,512) collision = (28,0,0) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2240 rect = (896,384,1024,512) collision = (28,0,0) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2241 rect = (1024,384,1152,512) collision = (28,0,0) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2244 rect = (0,512,128,640) collision = (8,0,20) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2245 rect = (128,512,256,640) collision = (8,0,20) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2246 rect = (256,512,384,640) collision = (8,0,20) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2247 rect = (384,512,512,640) collision = (8,0,20) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2248 rect = (512,512,640,640) collision = (8,0,20) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2249 rect = (640,512,768,640) collision = (8,0,20) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2250 rect = (768,512,896,640) collision = (8,0,20) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2251 rect = (896,512,1024,640) collision = (8,0,20) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2252 rect = (1024,512,1152,640) collision = (8,0,20) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2255 rect = (0,640,128,768) collision = 12 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2256 rect = (128,640,256,768) collision = 12 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2257 rect = (256,640,384,768) collision = 12 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2258 rect = (384,640,512,768) collision = 12 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2259 rect = (512,640,640,768) collision = 12 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2260 rect = (640,640,768,768) collision = 12 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2261 rect = (768,640,896,768) collision = 12 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2262 rect = (896,640,1024,768) collision = 12 delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2263 rect = (1024,640,1152,768) collision = 12 delay_color = (255,255,255) } //WHITE
|
||||
|
||||
ShotData { id = 2266 rect = (0,768,128,896) collision = 18 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2267 rect = (128,768,256,896) collision = 18 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2268 rect = (256,768,384,896) collision = 18 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2269 rect = (384,768,512,896) collision = 18 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2270 rect = (512,768,640,896) collision = 18 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2271 rect = (640,768,768,896) collision = 18 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2272 rect = (768,768,896,896) collision = 18 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2273 rect = (896,768,1024,896) collision = 18 delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2274 rect = (1024,768,1152,896) collision = 18 delay_color = (255,255,255) } //WHITE
|
||||
|
||||
/*
|
||||
75 -> 83: fireballs
|
||||
|
||||
ShotData { id = 2086 rect = (0,896,256,1152) collision = 48 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2087 rect = (256,896,512,1152) collision = 48 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2088 rect = (512,896,768,1152) collision = 48 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2089 rect = (768,896,1024,1152) collision = 48 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2090 rect = (1024,896,1280,1152) collision = 48 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2091 rect = (1280,896,1536,1152) collision = 48 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2092 rect = (1536,896,1792,1152) collision = 48 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2093 rect = (1792,896,2048,1152) collision = 48 delay_color = (255,255,255) } //PINK
|
||||
*/
|
||||
|
||||
ShotData { id = 2296 rect = (0,1152,128,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2097 rect = (128,1152,256,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2098 rect = (256,1152,384,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2099 rect = (384,1152,512,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2100 rect = (512,1152,640,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2101 rect = (640,1152,768,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2102 rect = (768,1152,896,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2103 rect = (896,1152,1024,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2104 rect = (1024,1152,1152,1280) collision = (8.5,0,-5.5) collision = (8.5,0,6.5) collision = (8.5,0,19.5) collision = (7.5,0,32.5) delay_color = (255,255,255) } //WHITE
|
||||
|
||||
|
||||
|
||||
|
||||
|
15
script/KevinSystem/KevinShot/shotdata_HD_4.txt
Normal file
|
@ -0,0 +1,15 @@
|
|||
#UserShotData
|
||||
|
||||
shot_image = "./KevinShot_Alt_HD_Fireball_Inv.png"
|
||||
|
||||
ShotData { id = 2275 AnimationData { animation_data = ( 4, 0, 0, 128, 128); animation_data = ( 4, 128, 0, 256, 128); animation_data = ( 4, 256, 0, 384, 128); animation_data = ( 4, 384, 0, 512, 128); animation_data = ( 4, 512, 0, 640, 128); } render = ALPHA collision = 13 delay_color = (255,255,255) } //RED
|
||||
ShotData { id = 2276 AnimationData { animation_data = ( 4, 0, 128, 128, 256); animation_data = ( 4, 128, 128, 256, 256); animation_data = ( 4, 256, 128, 384, 256); animation_data = ( 4, 384, 128, 512, 256); animation_data = ( 4, 512, 128, 640, 256); } render = ALPHA collision = 13 delay_color = (255,255,255) } //ORANGE
|
||||
ShotData { id = 2277 AnimationData { animation_data = ( 4, 0, 256, 128, 384); animation_data = ( 4, 128, 256, 256, 384); animation_data = ( 4, 256, 256, 384, 384); animation_data = ( 4, 384, 256, 512, 384); animation_data = ( 4, 512, 256, 640, 384); } render = ALPHA collision = 13 delay_color = (255,255,255) } //YELLOW
|
||||
ShotData { id = 2278 AnimationData { animation_data = ( 4, 0, 384, 128, 512); animation_data = ( 4, 128, 384, 256, 512); animation_data = ( 4, 256, 384, 384, 512); animation_data = ( 4, 384, 384, 512, 512); animation_data = ( 4, 512, 384, 640, 512); } render = ALPHA collision = 13 delay_color = (255,255,255) } //GREEN
|
||||
ShotData { id = 2279 AnimationData { animation_data = ( 4, 0, 512, 128, 640); animation_data = ( 4, 128, 512, 256, 640); animation_data = ( 4, 256, 512, 384, 640); animation_data = ( 4, 384, 512, 512, 640); animation_data = ( 4, 512, 512, 640, 640); } render = ALPHA collision = 13 delay_color = (255,255,255) } //AQUA
|
||||
ShotData { id = 2280 AnimationData { animation_data = ( 4, 0, 640, 128, 768); animation_data = ( 4, 128, 640, 256, 768); animation_data = ( 4, 256, 640, 384, 768); animation_data = ( 4, 384, 640, 512, 768); animation_data = ( 4, 512, 640, 640, 768); } render = ALPHA collision = 13 delay_color = (255,255,255) } //LAVENDER
|
||||
ShotData { id = 2281 AnimationData { animation_data = ( 4, 0, 768, 128, 896); animation_data = ( 4, 128, 768, 256, 896); animation_data = ( 4, 256, 768, 384, 896); animation_data = ( 4, 384, 768, 512, 896); animation_data = ( 4, 512, 768, 640, 896); } render = ALPHA collision = 13 delay_color = (255,255,255) } //PURPLE
|
||||
ShotData { id = 2282 AnimationData { animation_data = ( 4, 0, 896, 128, 1024); animation_data = ( 4, 128, 896, 256, 1024); animation_data = ( 4, 256, 896, 384, 1024); animation_data = ( 4, 384, 896, 512, 1024); animation_data = ( 4, 512, 896, 640, 1024); } render = ALPHA collision = 13 delay_color = (255,255,255) } //PINK
|
||||
ShotData { id = 2283 AnimationData { animation_data = ( 4, 0, 1024, 128, 1152); animation_data = ( 4, 128, 1024, 256, 1152); animation_data = ( 4, 256, 1024, 384, 1152); animation_data = ( 4, 384, 1024, 512, 1152); animation_data = ( 4, 512, 1024, 640, 1152); } render = ALPHA collision = 13 delay_color = (255,255,255) } //WHITE
|
||||
ShotData { id = 2283 AnimationData { animation_data = ( 4, 0, 1024, 128, 1152); animation_data = ( 4, 128, 1024, 256, 1152); animation_data = ( 4, 256, 1024, 384, 1152); animation_data = ( 4, 384, 1024, 512, 1152); animation_data = ( 4, 512, 1024, 640, 1152); } render = ALPHA collision = 13 delay_color = (255,255,255) } //WHITE
|
||||
|
829
script/KevinSystem/Kevin_PlayerLib.txt
Normal file
|
@ -0,0 +1,829 @@
|
|||
/* --------------------------------------------------------------------
|
||||
|
||||
UNIVERSAL/GENERAL FUNCTIONS USED FOR PLAYERS
|
||||
|
||||
These functions may/will be reused for future scripts as well.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
#include "script/KevinSystem/kevin_system/Kevin_ItemConst.txt"
|
||||
#include "script/KevinSystem/kevin_system/Kevin_ItemLib.txt"
|
||||
#include "script/KevinSystem/kevin_system/Lib_Const.dnh"
|
||||
#include "script/KevinSystem/Kevin_PlayerLib_HUD.dnh"
|
||||
//#include "script/KevinSystem/Universal_Lib.txt"
|
||||
|
||||
float universalAlpha = GetAreaCommonData("Config", "PlayerShotOpacity", 60);
|
||||
|
||||
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);
|
||||
|
||||
//universalAlpha = 255; // Debug
|
||||
|
||||
function CreateTextObject(
|
||||
float mx, my, size,
|
||||
string text, font,
|
||||
int colorTop, colorBottom,
|
||||
int borderColor, borderWidth,
|
||||
int renderPriority
|
||||
){
|
||||
|
||||
let obj = ObjText_Create();
|
||||
ObjText_SetText(obj, text);
|
||||
ObjText_SetFontSize(obj, size);
|
||||
ObjText_SetFontType(obj, font);
|
||||
ObjText_SetFontColorTop(obj, colorTop);
|
||||
ObjText_SetFontColorBottom(obj, colorBottom);
|
||||
ObjText_SetFontBorderType(obj, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(obj, borderColor);
|
||||
ObjText_SetFontBorderWidth(obj, borderWidth);
|
||||
Obj_SetRenderPriorityI(obj, renderPriority);
|
||||
ObjRender_SetX(obj, mx);
|
||||
ObjRender_SetY(obj, my);
|
||||
return obj;
|
||||
|
||||
}
|
||||
|
||||
function <int> _Create2DImage(imgpath, int[] rectarray){
|
||||
|
||||
int imgname = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
ObjPrim_SetTexture(imgname, imgpath);
|
||||
ObjSprite2D_SetSourceRect(imgname, rectarray);
|
||||
ObjSprite2D_SetDestCenter(imgname);
|
||||
//ObjRender_SetPosition(imgname, positionstart)
|
||||
|
||||
return imgname;
|
||||
}
|
||||
|
||||
// thanks ttbd owo
|
||||
|
||||
function CreateEffectObject(px, py, img, blendtype, left, top, right, bottom)
|
||||
{
|
||||
let obj = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
ObjPrim_SetTexture(obj, img);
|
||||
ObjSprite2D_SetSourceRect(obj, left, top, right, bottom);
|
||||
ObjSprite2D_SetDestCenter(obj);
|
||||
|
||||
if(blendtype=="ALPHA"){ObjRender_SetBlendType(obj, BLEND_ALPHA);}
|
||||
else if(blendtype=="MULTIPLY"){ObjRender_SetBlendType(obj, BLEND_MULTIPLY);}
|
||||
else if(blendtype=="SUBTRACT"){ObjRender_SetBlendType(obj, BLEND_SUBTRACT);}
|
||||
else if(blendtype=="SHADOW"){ObjRender_SetBlendType(obj, BLEND_SHADOW);}
|
||||
else if(blendtype=="RGB"){ObjRender_SetBlendType(obj, BLEND_ADD_RGB);}
|
||||
else if(blendtype=="ARGB"){ObjRender_SetBlendType(obj, BLEND_ADD_ARGB);}
|
||||
else if(blendtype=="INVERT"){ObjRender_SetBlendType(obj, BLEND_INV_DESTRGB);}
|
||||
|
||||
ObjRender_SetPosition(obj, px, py, 0);
|
||||
ObjRender_SetTextureFilter(obj, FILTER_POINT, FILTER_POINT, FILTER_POINT);
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
CHAIN SYSTEM: Crystals fill up your chain amount and refill your chain gauge, up to a max of 64x
|
||||
Gauge starts to go down when you don't collect crystals: it resets the entire chain after 3 seconds
|
||||
|
||||
*/
|
||||
|
||||
task _HandleChainGauge(){
|
||||
|
||||
// Gauge maxes at 100.
|
||||
// If gauge reaches 0, reset the chain
|
||||
float rateReduceNormal = 100/120;
|
||||
|
||||
float rateReduceCashin = 100/180; // x48-64
|
||||
|
||||
float rateReduceCashin_MED = 100/90; // x32-48
|
||||
float rateReduceCashin_LOW = 100/60; // x16-32
|
||||
float rateReduceCashin_PLACEBO = 100/30; // under x16
|
||||
|
||||
while(true){
|
||||
|
||||
if(GetCommonDataPtr(POINTER_SPECIALCHECK, false) == false && GetCommonDataPtr(POINTER_CHAIN, 1) >= 64 && !isChain){NotifyEventAll(EV_CHAIN_MAX, 1);}
|
||||
|
||||
else{}
|
||||
|
||||
if(GetCommonDataPtr(POINTER_SPECIALCHECK, false) == true){
|
||||
|
||||
if(GetCommonDataPtr(POINTER_CHAINGAUGE, 0) <= 1){NotifyEventAll(EV_CHAIN_END, 1);}
|
||||
|
||||
if(GetCommonDataPtr(POINTER_CHAIN, 1) >= 48)
|
||||
{SetCommonDataPtr(POINTER_CHAINGAUGE, max(0, GetCommonDataPtr(POINTER_CHAINGAUGE, 0)-rateReduceCashin));}
|
||||
|
||||
else if(GetCommonDataPtr(POINTER_CHAIN, 1) >= 32 && GetCommonDataPtr(POINTER_CHAIN, 1) < 48)
|
||||
{SetCommonDataPtr(POINTER_CHAINGAUGE, max(0, GetCommonDataPtr(POINTER_CHAINGAUGE, 0)-rateReduceCashin_MED));}
|
||||
|
||||
else if(GetCommonDataPtr(POINTER_CHAIN, 1) >= 16 && GetCommonDataPtr(POINTER_CHAIN, 1) < 32)
|
||||
{SetCommonDataPtr(POINTER_CHAINGAUGE, max(0, GetCommonDataPtr(POINTER_CHAINGAUGE, 0)-rateReduceCashin_LOW));}
|
||||
|
||||
else
|
||||
{SetCommonDataPtr(POINTER_CHAINGAUGE, max(0, GetCommonDataPtr(POINTER_CHAINGAUGE, 0)-rateReduceCashin_PLACEBO));}
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
SetCommonDataPtr(POINTER_CHAINGAUGE, max(0, GetCommonDataPtr(POINTER_CHAINGAUGE, 0)-rateReduceNormal));
|
||||
}
|
||||
|
||||
if(
|
||||
GetCommonDataPtr(POINTER_CHAINGAUGE, 0) <= 0
|
||||
&& GetCommonDataPtr(POINTER_CHAIN, 1) > 1
|
||||
)
|
||||
{
|
||||
SetCommonDataPtr(POINTER_CHAIN, 1);
|
||||
SetCommonDataPtr(POINTER_SPECIALCHECK, false);
|
||||
}
|
||||
|
||||
yield;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
task _ShowChain(){
|
||||
|
||||
// HUD
|
||||
|
||||
//_ShowChainHUD();
|
||||
|
||||
// Playfield
|
||||
|
||||
let objPIVNum = ObjText_Create();
|
||||
|
||||
ObjText_SetFontSize(objPIVNum, 40);
|
||||
ObjText_SetFontBold(objPIVNum, true);
|
||||
ObjText_SetFontType(objPIVNum, "GravityRegular5");
|
||||
ObjText_SetFontColorTop(objPIVNum, 0xFFFFFF);
|
||||
ObjText_SetFontColorBottom(objPIVNum, 0xFFFFFF);
|
||||
ObjText_SetFontBorderType(objPIVNum, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objPIVNum, 0xFF9A4F);
|
||||
ObjText_SetFontBorderWidth(objPIVNum, 4);
|
||||
ObjText_SetHorizontalAlignment(objPIVNum, ALIGNMENT_LEFT);
|
||||
//ObjText_SetFontWeight(objPIVNum, 1000);
|
||||
Obj_SetRenderPriorityI(objPIVNum, 60);
|
||||
ObjText_SetSidePitch(objPIVNum, -3);
|
||||
ObjRender_SetPosition(objPIVNum, STG_WIDTH * 1/2 + 96, STG_HEIGHT * 10/11, 0);
|
||||
// DEBUG
|
||||
//Obj_SetVisible(objPIV, false);
|
||||
|
||||
float value = 0;
|
||||
|
||||
//todo: change params
|
||||
let objI = CreateEffectObject(STG_WIDTH/60, STG_HEIGHT/7, "script/KevinSystem/img/lol.png", "ALPHA", 0, 0, 244, 12);
|
||||
ObjSprite2D_SetDestRect(objI, 0, 0, 122, 6);
|
||||
Obj_SetRenderPriorityI(objI, 60);
|
||||
|
||||
while(true){
|
||||
value = min(GetCommonDataPtr(POINTER_SPECIALAMMO, 1), 100);
|
||||
ObjText_SetText(objPIVNum, IntToString(GetCommonDataPtr(POINTER_PIV, 1000)));
|
||||
|
||||
//PIVMultiplierValue = value/1000;
|
||||
let yass = rtos("00.00", value);
|
||||
|
||||
let mx = 60*5;
|
||||
ObjSprite2D_SetDestRect(objI, 0, 0, (GetCommonDataPtr(POINTER_SPECIALAMMO, 100)/100)*mx, 32);
|
||||
|
||||
ObjRender_SetPosition(objI, STG_WIDTH/60+160, STG_HEIGHT * 11/12, 1);
|
||||
|
||||
if (GetPlayerY() >= STG_HEIGHT * 7/8){
|
||||
ObjRender_SetAlpha(objI, 125);
|
||||
ObjRender_SetAlpha(objPIVNum, 125);
|
||||
}
|
||||
|
||||
else{
|
||||
ObjRender_SetAlpha(objI, 255);
|
||||
ObjRender_SetAlpha(objPIVNum, 255);
|
||||
}
|
||||
|
||||
if (GetCommonDataPtr(POINTER_CHAINCHECK, false) == true) {
|
||||
ObjRender_SetColor(objI, 0xFFAF1E);
|
||||
}
|
||||
else {
|
||||
if(value >= 100){
|
||||
ObjRender_SetColor(objI, 255, 90, 46);
|
||||
}
|
||||
else{
|
||||
ObjRender_SetColor(objI, 255, 145, 115);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
if(GetCommonDataPtr(POINTER_SPECIALCHECK, false) == false){
|
||||
|
||||
ObjText_SetFontBorderWidth(objPIVNum, 3);
|
||||
|
||||
if(value < CHAIN_MAX){
|
||||
|
||||
ObjText_SetFontColorTop(objPIVNum, 0x9DEFFF);
|
||||
ObjText_SetFontBorderColor(objPIVNum, 42, 0, 237);
|
||||
ObjText_SetText(objPIVNum,
|
||||
"[font size=23 oy=-8]FUN MODE CHARGING[r]" ~ yass ~ "[font size=25 oy=32]x[r]"
|
||||
~ "[r][font size=21 oc=(172, 50, 50) oy=32]AMMO: " ~ rtos("00.00", GetCommonDataPtr(POINTER_SPECIALAMMO, 100))
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
ObjText_SetFontColorTop(objPIVNum, 0x9DFFBC);
|
||||
ObjText_SetFontBorderColor(objPIVNum, 0x39C832);
|
||||
ObjText_SetText(objPIVNum,
|
||||
"[font size=23 oy=-8]FUN MODE READY![r]" ~ yass ~ "[font size=25 oy=32]x[r]"
|
||||
~ "[r][font size=21 oc=(172, 50, 50) oy=32]AMMO: " ~ rtos("00.00", GetCommonDataPtr(POINTER_SPECIALAMMO, 100))
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
ObjText_SetFontColorTop(objPIVNum, 0xFFED9D);
|
||||
ObjText_SetFontBorderColor(objPIVNum, 0xFF9A00);
|
||||
ObjText_SetFontBorderWidth(objPIVNum, 4);
|
||||
NotifyEvent(GetPlayerScriptID(), EV_CHAIN_MAX, 0);
|
||||
ObjText_SetText(objPIVNum,
|
||||
"[font size=23 oc=(241, 180, 0) oy=-8]CASH-IN[r]" ~ yass ~ "[font size=25 oy=32]x[r]"
|
||||
~ "[r][font size=21 oc=(172, 50, 50) oy=32]AMMO: " ~ rtos("00.00", GetCommonDataPtr(POINTER_SPECIALAMMO, 100))
|
||||
);
|
||||
|
||||
}
|
||||
*/
|
||||
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Self-explanatory
|
||||
|
||||
task _DeleteEffect(obj, scale){
|
||||
ObjRender_SetBlendType(obj, BLEND_ADD_ARGB);
|
||||
Obj_SetRenderPriorityI(obj, 49);
|
||||
ascent(i in 0..30){
|
||||
ObjRender_SetAlpha(obj, Interpolate_Decelerate(100*(universalAlpha/100), 0, i/30));
|
||||
ObjRender_SetScaleXYZ(obj, Interpolate_Decelerate(scale, scale*1.5, i/20));
|
||||
ObjMove_SetSpeed(obj, 12);
|
||||
yield;
|
||||
}
|
||||
Obj_Delete(obj);
|
||||
}
|
||||
|
||||
// Renders player movement. Assumes that all sprites are ORGANIZED HORIZONTALLY IN THE SHEET.
|
||||
// flipscale can only be 1 or -1.
|
||||
|
||||
task _RenderPlayerMovement(int obj, int frame, int offsetleft, int offsettop, int width, int height, float flipscale, int frameno, int speed){
|
||||
|
||||
ObjSprite2D_SetSourceRect(obj, offsetleft+width*floor(frame/speed), offsettop, width+width*floor(frame/speed), offsettop+height);
|
||||
ObjRender_SetScaleX(objPlayer, flipscale);
|
||||
|
||||
}
|
||||
|
||||
// Bullet rescaling... for player shots.
|
||||
task _BulletRescalePlayer(int target, float scale, bool hitboxscale, float hitboxlevel){
|
||||
ObjRender_SetScaleXYZ(target, scale, scale, 1);
|
||||
if (hitboxscale){
|
||||
ObjShot_SetIntersectionScaleXY(target, scale*hitboxlevel, scale*hitboxlevel);
|
||||
}
|
||||
}
|
||||
|
||||
// Handles death/respawn sigil. Assumes sigils are 512x512 in size.
|
||||
// If death is true (the player dies), the circle expands outwards. Otherwise (the player bombs/respawns), it shrinks inwards.
|
||||
|
||||
task _SigilCall(bool death, texture, int rectleft, int recttop, int rectright, int rectbottom, int objPlayer, int time){
|
||||
|
||||
let DeathCircle = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
|
||||
ObjPrim_SetTexture(DeathCircle,teamimg);
|
||||
ObjSprite2D_SetSourceRect(DeathCircle, rectleft, recttop, rectright, rectbottom);
|
||||
ObjSprite2D_SetDestCenter(DeathCircle);
|
||||
ObjRender_SetBlendType(DeathCircle,BLEND_ALPHA);
|
||||
ObjRender_SetAlpha(DeathCircle,255);
|
||||
|
||||
ObjRender_SetPosition(DeathCircle,GetPlayerX(),GetPlayerY(),1);
|
||||
Obj_SetRenderPriorityI(DeathCircle,Obj_GetRenderPriorityI(objPlayer)-10);
|
||||
|
||||
alternative(death)
|
||||
case(true){
|
||||
ascent(i in 0..time){
|
||||
float scaliealpha = Interpolate_Decelerate(255, 0, i/time);
|
||||
float scaliesize = Interpolate_Decelerate(0.1, 3, i/time);
|
||||
ObjRender_SetAlpha(DeathCircle, scaliealpha);
|
||||
ObjRender_SetPosition(DeathCircle,GetPlayerX(),GetPlayerY(),1);
|
||||
ObjRender_SetScaleXYZ(DeathCircle, scaliesize, scaliesize, 1);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
case(false){
|
||||
ascent(i in 0..time){
|
||||
float scaliealpha = Interpolate_Accelerate(255, 0, i/time);
|
||||
float scaliesize = Interpolate_Accelerate(3, 0.1, i/time);
|
||||
ObjRender_SetAlpha(DeathCircle, scaliealpha);
|
||||
ObjRender_SetPosition(DeathCircle,GetPlayerX(),GetPlayerY(),1);
|
||||
ObjRender_SetScaleXYZ(DeathCircle, scaliesize, scaliesize, 1);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
while(ObjRender_GetAlpha(DeathCircle) > 0){yield;}
|
||||
Obj_Delete(DeathCircle);
|
||||
|
||||
}
|
||||
|
||||
// Handles the hitbox and its aura. What the fuck.
|
||||
|
||||
task _HitboxRender(
|
||||
bool playerdeathbool, int objPlayer, texture_hbox, texture_aura,
|
||||
int rectleft_hbox, int recttop_hbox, int rectright_hbox, int rectbottom_hbox,
|
||||
int rectleft_aura, int recttop_aura, int rectright_aura, int rectbottom_aura,
|
||||
float scale_hbox, float scale_aura){
|
||||
|
||||
// Handle hitbox
|
||||
bool visible = false;
|
||||
int hitbox = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
|
||||
ObjPrim_SetTexture(hitbox, texture_hbox);
|
||||
ObjSprite2D_SetSourceRect(hitbox, rectleft_hbox, recttop_hbox, rectright_hbox, rectbottom_hbox);
|
||||
ObjSprite2D_SetDestCenter(hitbox);
|
||||
ObjRender_SetScaleXYZ(hitbox, scale_hbox, scale_hbox, 1);
|
||||
ObjRender_SetBlendType(hitbox, BLEND_ALPHA);
|
||||
Obj_SetRenderPriorityI(hitbox, 79);
|
||||
|
||||
Obj_SetVisible(hitbox, false);
|
||||
|
||||
// Handle hitbox's aura
|
||||
|
||||
int aura = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
|
||||
ObjPrim_SetTexture(aura, texture_aura);
|
||||
ObjSprite2D_SetSourceRect(aura, rectleft_aura, recttop_aura, rectright_aura, rectbottom_aura);
|
||||
ObjSprite2D_SetDestCenter(aura);
|
||||
ObjRender_SetScaleXYZ(aura, scale_aura, scale_aura, 1);
|
||||
ObjRender_SetAlpha(aura, 70);
|
||||
//ObjRender_SetBlendType(aura, BLEND_ADD_ARGB);
|
||||
Obj_SetRenderPriorityI(aura, Obj_GetRenderPriorityI(objPlayer)+3);
|
||||
|
||||
Obj_SetVisible(aura, false);
|
||||
|
||||
loop{
|
||||
if (visible && (!Obj_IsVisible(objPlayer) || GetVirtualKeyState(VK_SLOWMOVE) != KEY_HOLD)){
|
||||
visible = false;
|
||||
Obj_SetVisible(hitbox, false);
|
||||
Obj_SetVisible(aura, false);
|
||||
}
|
||||
else if (!visible && (Obj_IsVisible(objPlayer) && (GetVirtualKeyState(VK_SLOWMOVE) == KEY_HOLD || GetVirtualKeyState(VK_SLOWMOVE) == KEY_PUSH))){
|
||||
visible = true;
|
||||
Obj_SetVisible(aura, true);
|
||||
Obj_SetVisible(hitbox, true);
|
||||
async{
|
||||
while(Obj_IsVisible(aura)){
|
||||
float[] curang = [ObjRender_GetAngleZ(hitbox), ObjRender_GetAngleZ(aura)];
|
||||
ObjRender_SetAngleZ(hitbox, curang[0]+1.5);
|
||||
ObjRender_SetAngleZ(aura, curang[1]+1.5);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
async{
|
||||
ascent(i in 0..20){
|
||||
float scalie = Interpolate_Decelerate(scale_aura*1.5, scale_aura, i/20);
|
||||
ObjRender_SetScaleXYZ(aura, scalie, scalie, 1);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
async{
|
||||
ascent(i in 0..20){
|
||||
float scalie = Interpolate_Decelerate(0, 80, i/20);
|
||||
ObjRender_SetAlpha(aura, scalie);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
}
|
||||
ObjRender_SetPosition(hitbox, ObjMove_GetX(objPlayer), ObjMove_GetY(objPlayer), 1);
|
||||
ObjRender_SetPosition(aura, ObjMove_GetX(objPlayer), ObjMove_GetY(objPlayer), 1);
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
Simple function that handles player options. These options simply follow the player at an offset - they do not have any trajectories of their own like spinning around the player, etc.
|
||||
If the options have animations, set triggeranimation to true and adjust the number of frames + speed using delay and frameno.
|
||||
If the options rotate (in place), set triggerspin to true and adjust spinning speed using spinspeed.
|
||||
If the options only appear unfocused or focused, set either onlyFocus or onlyUnfocus to true. Setting both to true or false makes the options always visible.
|
||||
*/
|
||||
|
||||
function PlayerOption(
|
||||
float offsetx, float offsety,
|
||||
texture,
|
||||
int left, int top, int right, int bottom, float scale,
|
||||
int width, int animdelay, int frameno, bool triggeranimation,
|
||||
bool triggerspin, float spinspeed,
|
||||
bool onlyFocus, bool onlyUnfocus
|
||||
){
|
||||
|
||||
let option = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
bool visible;
|
||||
int animate = 0;
|
||||
float optx;
|
||||
float opty;
|
||||
|
||||
ObjPrim_SetTexture(option, texture);
|
||||
ObjSprite2D_SetSourceRect(option, left, top, right-1, bottom-1); // Allows the options to spin smoothly should the user choose to do so.
|
||||
ObjSprite2D_SetDestCenter(option);
|
||||
ObjRender_SetScaleXYZ(option, scale);
|
||||
ObjRender_SetBlendType(option, BLEND_ALPHA);
|
||||
ObjRender_SetAlpha(option, 255);
|
||||
Obj_SetRenderPriorityI(option, 41);
|
||||
ObjRender_SetPosition(option, offsetx, offsety, 1);
|
||||
|
||||
// Animation
|
||||
async{
|
||||
while(triggeranimation){
|
||||
ObjSprite2D_SetSourceRect(option, left+width*floor(animate/animdelay), top, right+width*floor(animate/animdelay)-1, bottom-1);
|
||||
animate++;
|
||||
if (animate >= animdelay*frameno){animate = 0;}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
// Rotation
|
||||
async{
|
||||
float i = 0;
|
||||
while(triggerspin){
|
||||
//ObjRender_SetPosition(option, GetPlayerX()+offsetx, GetPlayerY()+offsety, 1);
|
||||
ObjRender_SetAngleZ(option, i);
|
||||
i += spinspeed;
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
// Follow
|
||||
async{
|
||||
while(true){
|
||||
ObjRender_SetPosition(option, GetPlayerX()+offsetx, GetPlayerY()+offsety, 1);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
// Visibility
|
||||
async{
|
||||
// Always visible
|
||||
if((onlyFocus && onlyUnfocus) || (!onlyFocus && !onlyUnfocus)) {
|
||||
loop
|
||||
{
|
||||
if(GetPlayerState != STATE_NORMAL && GetPlayerState != STATE_HIT){ObjRender_SetAlpha(option, max(0, ObjRender_GetAlpha(option)-15)); visible = false;}
|
||||
else {ObjRender_SetAlpha(option, min(225, ObjRender_GetAlpha(option)+15)); visible = true;}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
// Visible when focused only
|
||||
else if(onlyFocus && !onlyUnfocus){
|
||||
loop
|
||||
{
|
||||
if((GetPlayerState != STATE_NORMAL && GetPlayerState != STATE_HIT) || GetVirtualKeyState(VK_SLOWMOVE) == KEY_FREE){ObjRender_SetAlpha(option, max(0, ObjRender_GetAlpha(option)-15)); visible = false;}
|
||||
else {ObjRender_SetAlpha(option, min(225, ObjRender_GetAlpha(option)+15)); visible = true;}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
// Visible when unfocused only
|
||||
else if(!onlyFocus && onlyUnfocus){
|
||||
loop
|
||||
{
|
||||
if((GetPlayerState != STATE_NORMAL && GetPlayerState != STATE_HIT) || GetVirtualKeyState(VK_SLOWMOVE) != KEY_FREE){ObjRender_SetAlpha(option, max(0, ObjRender_GetAlpha(option)-15)); visible = false;}
|
||||
else {ObjRender_SetAlpha(option, min(225, ObjRender_GetAlpha(option)+15)); visible = true;}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function _FadeIn(){
|
||||
ascent(i in 0..15){
|
||||
ObjRender_SetAlpha(option, Interpolate_Decelerate(0, 225, i/15));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
function _FadeOut(){
|
||||
ascent(i in 0..15){
|
||||
ObjRender_SetAlpha(option, Interpolate_Decelerate(225, 0, i/15));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
return option;
|
||||
}
|
||||
|
||||
/*
|
||||
A form of PlayerOption that handles basic movement towards different positionings based on whether the player is focusing or unfocusing.
|
||||
If the options have animations, set triggeranimation to true and adjust the number of frames + speed using delay and frameno.
|
||||
If the options rotate (in place), set triggerspin to true and adjust spinning speed using spinspeed.
|
||||
If the options only appear unfocused or focused, set either onlyFocus or onlyUnfocus to true. Setting both to true or false makes the options always visible.
|
||||
*/
|
||||
|
||||
function PlayerOption_LinearMove(
|
||||
float offsetX_uf, offsetY_uf, offsetX_f, offsetY_f,
|
||||
bool angchange, float ang_uf, ang_f,
|
||||
texture,
|
||||
int graphic, float texScale, int priorityRender,
|
||||
int texWidth, int animDelay, int animFrameNo, bool animMode,
|
||||
bool spinMode, float spinSpeed,
|
||||
bool onlyFocus, bool onlyUnfocus
|
||||
){
|
||||
|
||||
int option = CreatePlayerShotA1(0, 0, 0, 0, 0, 9999999, graphic);
|
||||
bool visible;
|
||||
int animate = 0;
|
||||
float optx;
|
||||
float opty;
|
||||
|
||||
float playerX = 0, playerY = 0;
|
||||
|
||||
/*
|
||||
ObjPrim_SetTexture(option, texture);
|
||||
ObjSprite2D_SetSourceRect(option, texRect[0], texRect[1], texRect[2]-1, texRect[3]-1); // Allows the options to spin smoothly should the user choose to do so.
|
||||
ObjSprite2D_SetDestCenter(option);
|
||||
*/
|
||||
|
||||
ObjShot_SetAutoDelete(option, false);
|
||||
ObjRender_SetScaleXYZ(option, texScale);
|
||||
ObjRender_SetBlendType(option, BLEND_ALPHA);
|
||||
//ObjRender_SetAlpha(option, 255);
|
||||
Obj_SetRenderPriorityI(option, priorityRender);
|
||||
ObjRender_SetPosition(option, playerX+offsetX_uf, playerY+offsetY_uf, 1);
|
||||
|
||||
///// MISC /////
|
||||
async{
|
||||
while(true){
|
||||
playerX = ObjRender_GetX(GetPlayerObjectID());
|
||||
playerY = ObjRender_GetY(GetPlayerObjectID());
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
///// ANIMATION /////
|
||||
|
||||
/*
|
||||
async{
|
||||
while(animMode){
|
||||
ObjSprite2D_SetSourceRect(option, texRect[0]+texWidth*floor(animate/animDelay), texRect[1], texRect[2]+texWidth*floor(animate/animDelay)-1, texRect[3]-1);
|
||||
animate++;
|
||||
if (animate >= animDelay*animFrameNo){animate = 0;}
|
||||
yield;
|
||||
}
|
||||
}*/
|
||||
|
||||
///// ROTATION /////
|
||||
async{
|
||||
float i = 0;
|
||||
while(spinMode){
|
||||
//ObjRender_SetPosition(option, GetPlayerX()+offsetx, GetPlayerY()+offsety, 1);
|
||||
ObjRender_SetAngleZ(option, i);
|
||||
i += spinSpeed;
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
///// VISIBILITY /////
|
||||
async{
|
||||
// Always visible
|
||||
if((onlyFocus && onlyUnfocus) || (!onlyFocus && !onlyUnfocus)) {
|
||||
loop
|
||||
{
|
||||
if(GetPlayerState != STATE_NORMAL && GetPlayerState != STATE_HIT){ObjRender_SetAlpha(option, max(0, ObjRender_GetAlpha(option)-15)); visible = false;}
|
||||
else {ObjRender_SetAlpha(option, min(255, ObjRender_GetAlpha(option)+15)); visible = true;}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
// Visible when focused only
|
||||
else if(onlyFocus && !onlyUnfocus){
|
||||
loop
|
||||
{
|
||||
if((GetPlayerState != STATE_NORMAL && GetPlayerState != STATE_HIT) || GetVirtualKeyState(VK_SLOWMOVE) == KEY_FREE){ObjRender_SetAlpha(option, max(0, ObjRender_GetAlpha(option)-15)); visible = false;}
|
||||
else {ObjRender_SetAlpha(option, min(255, ObjRender_GetAlpha(option)+15)); visible = true;}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
// Visible when unfocused only
|
||||
else if(!onlyFocus && onlyUnfocus){
|
||||
loop
|
||||
{
|
||||
if((GetPlayerState != STATE_NORMAL && GetPlayerState != STATE_HIT) || GetVirtualKeyState(VK_SLOWMOVE) != KEY_FREE){ObjRender_SetAlpha(option, max(0, ObjRender_GetAlpha(option)-15)); visible = false;}
|
||||
else {ObjRender_SetAlpha(option, min(255, ObjRender_GetAlpha(option)+15)); visible = true;}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
///// MOVEMENT /////
|
||||
async{
|
||||
|
||||
loop{
|
||||
|
||||
if(GetVirtualKeyState(VK_SLOWMOVE) != KEY_FREE){
|
||||
|
||||
async{
|
||||
|
||||
ascent(i in 0..15){
|
||||
if(angchange){ObjRender_SetAngleZ(option, Interpolate_Decelerate(ObjRender_GetAngleZ(option), ang_f, i/15));}
|
||||
ObjRender_SetX(option, Interpolate_Decelerate(ObjRender_GetX(option), playerX+offsetX_f, i/15));
|
||||
ObjRender_SetY(option, Interpolate_Decelerate(ObjRender_GetY(option), playerY+offsetY_f, i/15));
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
async{
|
||||
|
||||
ascent(i in 0..15){
|
||||
if(angchange){ObjRender_SetAngleZ(option, Interpolate_Decelerate(ObjRender_GetAngleZ(option), ang_uf, i/15));}
|
||||
ObjRender_SetX(option, Interpolate_Decelerate(ObjRender_GetX(option), playerX+offsetX_uf, i/15));
|
||||
ObjRender_SetY(option, Interpolate_Decelerate(ObjRender_GetY(option), playerY+offsetY_uf, i/15));
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function _FadeIn(){
|
||||
ascent(i in 0..15){
|
||||
ObjRender_SetAlpha(option, Interpolate_Decelerate(0, 225, i/15));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
function _FadeOut(){
|
||||
ascent(i in 0..15){
|
||||
ObjRender_SetAlpha(option, Interpolate_Decelerate(225, 0, i/15));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
return option;
|
||||
}
|
||||
|
||||
/*
|
||||
------------------------------------------------------
|
||||
|
||||
POINTBLANK-PIV MECHANIC FUNCTIONS
|
||||
Will be optimized somewhere down the line.
|
||||
|
||||
------------------------------------------------------
|
||||
*/
|
||||
|
||||
// Selects an enemy in the @MainLoop-updated _enemyArray, executes _PetalDrop, and adds it to _existArray so the task isn't called again for the same enemy. maxX and maxY are the bounds of the playing field.
|
||||
|
||||
task _Mechanic(bool playerdeathbool, int[] _enemyArray, int [] _existArray, float maxX, float maxY, int objPlayer, int bossScene, int maxrate, int addrate, float adddist){
|
||||
while(!playerdeathbool){
|
||||
_enemyArray = GetIntersectionRegistedEnemyID();
|
||||
bossScene = GetEnemyBossSceneObjectID();
|
||||
for each (int enemy in ref _enemyArray){
|
||||
float enemyX = ObjMove_GetX(enemy);
|
||||
float enemyY = ObjMove_GetY(enemy);
|
||||
if (0 < enemyX && enemyX < maxX && 0 < enemyY && enemyY < maxY && !contains(_existArray, enemy)){
|
||||
_PetalDrop(enemy, playerdeathbool, objPlayer, bossScene, maxrate, addrate, adddist);
|
||||
_existArray = _existArray ~ [enemy];
|
||||
}
|
||||
else{continue;}
|
||||
}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
// Checks the boss scene type (nonspell/spell/last spell/invalid), the ID of the player object, and the target enemy. Drops petals with a type and drop rate that depends on the boss scene type and how close the player is to the target enemy.
|
||||
|
||||
task _PetalDrop(int target, bool playerdeathbool, int objPlayer, int bossScene, int maxrate, int addrate, float adddist){
|
||||
|
||||
while(!Obj_IsDeleted(target) && !playerdeathbool){
|
||||
float dist = hypot(ObjMove_GetX(target)-ObjMove_GetX(objPlayer), ObjMove_GetY(target)-ObjMove_GetY(objPlayer));
|
||||
let atktype = GetEnemyBossSceneObjectID();
|
||||
if(dist <= (GetStgFrameHeight()-100) && atktype != ID_INVALID && ObjEnemy_GetInfo(target, INFO_SHOT_HIT_COUNT) >= 1 && ObjEnemy_GetInfo(target, INFO_DAMAGE_PREVIOUS_FRAME) > 0){
|
||||
|
||||
wait(maxrate + addrate*floor(dist/adddist));
|
||||
|
||||
}
|
||||
else{yield;}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
task _DeathbombWarning(imgpath, int[] imgrectarray, int deathbombframes, float basescale){
|
||||
|
||||
int circle = _Create2DImage(imgpath, imgrectarray);
|
||||
Obj_SetRenderPriorityI(circle, 75);
|
||||
ObjRender_SetAlpha(circle, 255);
|
||||
ObjRender_SetPosition(circle, ObjRender_GetX(GetPlayerObjectID()), ObjRender_GetY(GetPlayerObjectID()), 1);
|
||||
ObjRender_SetBlendType(circle, BLEND_INV_DESTRGB);
|
||||
|
||||
ascent(i in 0..deathbombframes-1){
|
||||
ObjRender_SetScaleXYZ(circle, Interpolate_Accelerate(basescale, 0, i/(deathbombframes-1)));
|
||||
yield;
|
||||
}
|
||||
|
||||
Obj_Delete(circle);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
task _BombShake(shaketime, intensity){
|
||||
|
||||
float baseintensity = intensity;
|
||||
float shakeno = shaketime;
|
||||
|
||||
ascent(i in 0..shakeno){
|
||||
Set2DCameraFocusX(GetStgFrameWidth/2 + rand(-intensity, intensity));
|
||||
Set2DCameraFocusY(GetStgFrameHeight/2 + rand(-intensity, intensity));
|
||||
intensity = Interpolate_Decelerate(0, baseintensity, 1-i/shakeno);
|
||||
shaketime--;
|
||||
yield;
|
||||
}
|
||||
|
||||
while(shaketime > 0){yield;}
|
||||
|
||||
Set2DCameraFocusX(GetStgFrameWidth/2);
|
||||
Set2DCameraFocusY(GetStgFrameHeight/2);
|
||||
yield;
|
||||
}
|
||||
|
||||
task _Countdown(){
|
||||
|
||||
//_FunIndicator;
|
||||
|
||||
//int timer = time;
|
||||
int counter = CreateTextObject(
|
||||
playerX, playerY, 45,
|
||||
"", "GravityRegular5",
|
||||
0xFFFFFF, 0xFFFFFF,
|
||||
0x1AEC8C, 8,
|
||||
51
|
||||
);
|
||||
|
||||
int counter2 = CreateTextObject(
|
||||
1720, 870, 40,
|
||||
"", "Unispace",
|
||||
0xFFFFFF, 0xFFFFFF,
|
||||
0x1AEC8C, 2,
|
||||
19
|
||||
);
|
||||
|
||||
ObjText_SetHorizontalAlignment(counter, ALIGNMENT_CENTER);
|
||||
|
||||
while(true){
|
||||
|
||||
if(GetPlayerInvincibilityFrame() <= 0){Obj_SetVisible(counter, false);}
|
||||
else{Obj_SetVisible(counter, true);}
|
||||
ObjRender_SetPosition(counter, playerX, playerY - 96, 1);
|
||||
ObjText_SetText(counter, IntToString(GetPlayerInvincibilityFrame()));
|
||||
ObjText_SetText(counter2, IntToString(GetPlayerInvincibilityFrame()));
|
||||
yield;
|
||||
|
||||
}
|
||||
|
||||
//Obj_Delete(counter);
|
||||
|
||||
}
|
||||
|
||||
task _FunIndicator(){
|
||||
|
||||
int counter = CreateTextObject(
|
||||
1720, 910, 41,
|
||||
"FUN IS PREPARED", "Origami Mommy",
|
||||
0xFFD9B8, 0xFFFFFF,
|
||||
0xD96600, 4,
|
||||
39
|
||||
);
|
||||
|
||||
ObjText_SetHorizontalAlignment(counter, ALIGNMENT_CENTER);
|
||||
|
||||
while(true){
|
||||
|
||||
if(GetCommonDataPtr(POINTER_CHAIN, 1) >= 64 && GetCommonDataPtr(POINTER_SPECIALCHECK, false) == false)
|
||||
|
||||
{Obj_SetVisible(counter, true);}
|
||||
|
||||
else{Obj_SetVisible(counter, false);}
|
||||
|
||||
ObjRender_SetPosition(counter, playerX, playerY + 128, 1);
|
||||
|
||||
yield;
|
||||
|
||||
}
|
||||
|
||||
//Obj_Delete(counter);
|
||||
|
||||
}
|
133
script/KevinSystem/Kevin_PlayerLib_HUD.dnh
Normal file
|
@ -0,0 +1,133 @@
|
|||
task _ShowChainHUD(){
|
||||
|
||||
// Playfield
|
||||
|
||||
// Multiplier
|
||||
|
||||
async{
|
||||
|
||||
let objPIVNum = ObjText_Create();
|
||||
|
||||
// AAAAAAA WHYYYYYYY
|
||||
|
||||
ObjText_SetFontSize(objPIVNum, 60);
|
||||
ObjText_SetFontBold(objPIVNum, true);
|
||||
ObjText_SetFontType(objPIVNum, "Origami Mommy");
|
||||
ObjText_SetFontColorTop(objPIVNum, 0xFFFFFF);
|
||||
ObjText_SetFontColorBottom(objPIVNum, 0xFFFFFF);
|
||||
ObjText_SetFontBorderType(objPIVNum, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objPIVNum, 95, 209, 255);
|
||||
ObjText_SetFontBorderWidth(objPIVNum, 4);
|
||||
ObjText_SetHorizontalAlignment(objPIVNum, ALIGNMENT_LEFT);
|
||||
Obj_SetRenderPriorityI(objPIVNum, 19);
|
||||
ObjText_SetSidePitch(objPIVNum, -3);
|
||||
ObjRender_SetPosition(objPIVNum, 32, 128, 0);
|
||||
// DEBUG
|
||||
//Obj_SetVisible(objPIV, false);
|
||||
|
||||
float value = 0;
|
||||
|
||||
while(true){
|
||||
value = min(GetCommonDataPtr(POINTER_CHAIN, 1), CHAIN_MAX);
|
||||
//PIVMultiplierValue = value/1000;
|
||||
let yass = rtos("00.00", value);
|
||||
|
||||
if(GetCommonDataPtr(POINTER_SPECIALCHECK, false) == false){
|
||||
|
||||
ObjText_SetFontBorderWidth(objPIVNum, 3);
|
||||
|
||||
if(value < CHAIN_MAX){
|
||||
|
||||
ObjText_SetFontBorderColor(objPIVNum, 42, 0, 237);
|
||||
ObjText_SetText(objPIVNum,
|
||||
yass ~ "[font size=25 oy=32]x"
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
ObjText_SetFontBorderColor(objPIVNum, 0, 240, 117);
|
||||
ObjText_SetText(objPIVNum,
|
||||
yass ~ "[font size=25 oy=32]x"
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
|
||||
ObjText_SetFontBorderColor(objPIVNum, 0xFF9A00);
|
||||
ObjText_SetText(objPIVNum,
|
||||
yass ~ "[font size=25 oy=32]x"
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Chain Timer
|
||||
|
||||
async{
|
||||
|
||||
let timerText = CreateTextObject(
|
||||
275, 210, 32,
|
||||
"", "Unispace",
|
||||
0xB5FFEE, 0xFFFFFF,
|
||||
0x397D88, 2,
|
||||
19
|
||||
);
|
||||
|
||||
while(true){
|
||||
ObjText_SetText(timerText, IntToString(GetCommonDataPtr(POINTER_CHAINGAUGE, 100)));
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Chain Status
|
||||
|
||||
async{
|
||||
|
||||
let timerText = CreateTextObject(
|
||||
275, 255, 32,
|
||||
"", "Unispace",
|
||||
0xFFE0A2, 0xFFFFFF,
|
||||
0xCB6D00, 2,
|
||||
19
|
||||
);
|
||||
|
||||
while(true){
|
||||
ObjText_SetText(timerText, GetCommonDataPtr(POINTER_SPECIALCHECK, false) ? "ACTIVE" : "INACTIVE");
|
||||
ObjText_SetFontBorderColor(timerText, GetCommonDataPtr(POINTER_SPECIALCHECK, false) ? 0xCB6D00 : 0x67A41E);
|
||||
ObjText_SetFontColorTop(timerText, GetCommonDataPtr(POINTER_SPECIALCHECK, false) ? 0xFFE0A2 : 0xD8FFA8);
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Ammo Status
|
||||
|
||||
async{
|
||||
|
||||
let ammoText = CreateTextObject(
|
||||
1585, 445, 48,
|
||||
"", "Unispace",
|
||||
0xFFB8A0, 0xFFFFFF,
|
||||
0xC53000, 2,
|
||||
19
|
||||
);
|
||||
|
||||
ObjText_SetFontBold(ammoText, true);
|
||||
while(true){
|
||||
ObjText_SetText(ammoText, rtos("000.00", GetCommonDataPtr(POINTER_SPECIALAMMO, 100)) ~ "[font sz=24 oy=20]/100.00");
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
926
script/KevinSystem/Kevin_System.txt
Normal file
|
@ -0,0 +1,926 @@
|
|||
|
||||
// SYSTEM FOR STATION GAME
|
||||
|
||||
let dirCurrent = GetCurrentScriptDirectory();
|
||||
|
||||
// Change accordingly!
|
||||
|
||||
int offsetX = 1551;
|
||||
int baseY = 155;
|
||||
int spaceY = 135;
|
||||
float scale = 1.15*1.6;
|
||||
|
||||
int sel = 0;
|
||||
|
||||
// Item, life, spell graphics
|
||||
|
||||
let graphicimg = dirCurrent ~ "./img/yo.png";
|
||||
let lifebarimg = dirCurrent ~ "./img/lifebar.png";
|
||||
LoadTextureEx(graphicimg, true, true);
|
||||
|
||||
let pointerPIV;
|
||||
|
||||
//#include "./../script/soundtask.txt"
|
||||
|
||||
#include "script/KevinSystem/Init.dnh"
|
||||
#include "script/KevinSystem/kevin_system/Lib_Const.dnh"
|
||||
#include "script/KevinSystem/GeneralSoundLib.txt"
|
||||
#include "script/default_system/Default_Effect.txt"
|
||||
#include "script/KevinSystem/kevin_system/Kevin_EffectLib.dnh"
|
||||
|
||||
@Initialize
|
||||
{
|
||||
|
||||
if(!IsCommonDataAreaExists("PIV")){
|
||||
CreateCommonDataArea("PIV");
|
||||
SetAreaCommonData("PIV", "currentvalue", 10000);
|
||||
}
|
||||
else{}
|
||||
|
||||
pointerPIV = LoadAreaCommonDataValuePointer("PIV", "currentvalue", 10000);
|
||||
|
||||
_SoundTask();
|
||||
|
||||
SetAreaCommonData("ScriptID", "SystemID", GetOwnScriptID());
|
||||
|
||||
//SetCommonDataPtr("SystemIDPtr", GetOwnScriptID());
|
||||
|
||||
SetStgFrame(0, 0, 1280, 720, 20, 80);
|
||||
|
||||
sel = prand_int(0, 99);
|
||||
|
||||
// Pixel art
|
||||
|
||||
SetShotTextureFilter(FILTER_NONE, FILTER_NONE);
|
||||
SetItemTextureFilter(FILTER_NONE, FILTER_NONE);
|
||||
|
||||
SetPauseScriptPath(GetCurrentScriptDirectory() ~ "kevin_system/Kevin_Pause.txt");
|
||||
SetEndSceneScriptPath(GetCurrentScriptDirectory() ~ "kevin_system/Kevin_EndScene.txt");
|
||||
SetReplaySaveSceneScriptPath(GetCurrentScriptDirectory() ~ "kevin_system/Kevin_ReplaySave.txt");
|
||||
|
||||
InitEffect();
|
||||
InitFrame();
|
||||
|
||||
//TInstallFont(); Moved to package.
|
||||
|
||||
TScore();
|
||||
LifeDisplay();
|
||||
|
||||
//TGraze();
|
||||
//SetPlayerLife(9);
|
||||
//SpellDisplay();
|
||||
THighScore();
|
||||
//TValueDisplay();
|
||||
|
||||
StartItemScript(dirCurrent ~ "./kevin_system/KevinSystem_Item.txt");
|
||||
|
||||
TExtendSystem();
|
||||
//TBossLife();
|
||||
TBossTimer();
|
||||
|
||||
TCurrentFps();
|
||||
TReplayFps();
|
||||
//_SoundTask;
|
||||
}
|
||||
|
||||
@MainLoop
|
||||
{
|
||||
yield;
|
||||
}
|
||||
|
||||
@Event
|
||||
{
|
||||
alternative(GetEventType())
|
||||
|
||||
case(EV_START_BOSS_SPELL)
|
||||
{
|
||||
let path = dirCurrent ~ "Default_System_MagicCircle.txt";
|
||||
let id = LoadScript(path);
|
||||
StartScript(id);
|
||||
}
|
||||
|
||||
case(EV_GAIN_SPELL)
|
||||
{
|
||||
let objScene = GetEnemyBossSceneObjectID();
|
||||
let spellbonus = ObjEnemyBossScene_GetInfo(objScene, INFO_SPELL_SCORE);
|
||||
TScoreAward(spellbonus);
|
||||
}
|
||||
|
||||
// Arguments: [enemy x, y], particle list to use
|
||||
|
||||
case(EV_EXPLODE)
|
||||
{
|
||||
float[] pos = GetEventArgument(0);
|
||||
//int listTarget = GetEventArgument(1);
|
||||
|
||||
if(GetCommonDataPtr(EFFECTCUT_PTR, 0) >= 2){ObjSound_Play(sfxBoom);}
|
||||
//_EffectListPreRender(PetalEffect, imgEffect, [0, 0, 256, 256]);
|
||||
else{_ExplosionEffect(pos[0], pos[1], PetalEffect);}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
// Grants extends based on score
|
||||
|
||||
task TExtendSystem(){
|
||||
|
||||
// NEXT: Text (y around 650?) (x around 2250?)
|
||||
|
||||
/*let NextText =
|
||||
|
||||
CreateTextObject(
|
||||
1625, 465, 30,
|
||||
"NEXT:", "Connecting Chain Handserif",
|
||||
0xA70053, 0xA70053,
|
||||
0xFFFFFF, 2,
|
||||
1
|
||||
);*/
|
||||
|
||||
//ObjText_SetFontBold(NextText, true);
|
||||
// Indicates the score threshold needed for the next extend
|
||||
|
||||
let ExtendThresholdText =
|
||||
|
||||
CreateTextObject(
|
||||
1450, 160, 28,
|
||||
"", "Unispace",
|
||||
0xFF98A9, 0xFFFFFF,
|
||||
0x000000, 4,
|
||||
2
|
||||
);
|
||||
|
||||
ObjText_SetFontBold(ExtendThresholdText, true);
|
||||
ObjText_SetHorizontalAlignment(ExtendThresholdText, ALIGNMENT_LEFT);
|
||||
|
||||
int len = 0;
|
||||
int count = 0;
|
||||
// Millions
|
||||
let req = [
|
||||
|
||||
];
|
||||
|
||||
alternative(GetCommonData("Difficulty", "Standard"))
|
||||
|
||||
case("Novice"){
|
||||
req = [250, 500, 1000, 1800];
|
||||
len = 3;
|
||||
}
|
||||
|
||||
case("Standard"){
|
||||
req = [400, 800, 1500, 2500];
|
||||
len = 3;
|
||||
}
|
||||
|
||||
others{
|
||||
req = [1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000, 16000, 17000, 18000, 19000, 20000];
|
||||
len = 19;
|
||||
}
|
||||
|
||||
let next = 0;
|
||||
|
||||
// NARUMISTG
|
||||
|
||||
req = [
|
||||
10, 20, 40, 80, 120
|
||||
];
|
||||
|
||||
loop{
|
||||
count = (trunc(GetScore())/10)*10;
|
||||
if(next <= length(req)-1){
|
||||
if(count >= req[next]*1000000){
|
||||
next++;
|
||||
SetPlayerLife(GetPlayerLife+1);
|
||||
ExtendSFX;
|
||||
ExtendEffect;
|
||||
}
|
||||
}
|
||||
|
||||
if(next <= len){ObjText_SetText(ExtendThresholdText, "[font tc=(255, 43, 78) bc=(255, 128, 149)]NEXT: [font clr]" ~ DigitToCommaArray(req[next]*1000000));}
|
||||
|
||||
else{ObjText_SetText(ExtendThresholdText, "MAXIMUM");}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
task ExtendEffect(){
|
||||
|
||||
int time = 30;
|
||||
int timeDisappear = 30;
|
||||
|
||||
float x = GetPlayerX();
|
||||
float y = GetPlayerY()-90;
|
||||
|
||||
int extendText = CreateTextObject(
|
||||
x, y, 75,
|
||||
"Life[r]Extend!", "Exotc350 DmBd BT",
|
||||
0xFF61AE, 0xFFFFFF,
|
||||
0x5E0064, 6,
|
||||
42
|
||||
);
|
||||
|
||||
ObjText_SetLinePitch(extendText, -2);
|
||||
ObjText_SetFontBold(extendText, true);
|
||||
ObjText_SetHorizontalAlignment(extendText, ALIGNMENT_CENTER);
|
||||
|
||||
ascent(i in 0..time){
|
||||
ObjRender_SetY(extendText, Interpolate_Decelerate(y, y-120, i/time));
|
||||
yield;
|
||||
}
|
||||
|
||||
wait(15);
|
||||
|
||||
ascent(i in 0..timeDisappear){
|
||||
ObjRender_SetAlpha(extendText, Interpolate_Decelerate(255, 0, i/timeDisappear));
|
||||
yield;
|
||||
}
|
||||
Obj_Delete(extendText);
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
//枠外の背景表示
|
||||
//----------------------------------------------------
|
||||
task InitFrame()
|
||||
{
|
||||
let path1 = GetCurrentScriptDirectory() ~ "img/HUD1.png";
|
||||
let path2 = GetCurrentScriptDirectory() ~ "img/HUD2.png";
|
||||
|
||||
let obj1 = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
let obj2 = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
|
||||
LoadTextureEx(path1, true, true);
|
||||
LoadTextureEx(path2, true, true);
|
||||
|
||||
ObjPrim_SetTexture(obj1, path1);
|
||||
ObjPrim_SetTexture(obj2, path2);
|
||||
|
||||
int[] arr = [obj1, obj2];
|
||||
|
||||
for each(int obj in ref arr){
|
||||
|
||||
ObjRender_SetTextureFilterMag(obj, FILTER_NONE);
|
||||
ObjRender_SetTextureFilterMin(obj, FILTER_NONE);
|
||||
ObjRender_SetTextureFilterMip(obj, FILTER_NONE);
|
||||
Obj_SetRenderPriority(obj, 79);
|
||||
ObjSprite2D_SetSourceRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
ObjSprite2D_SetDestRect(obj, 0, 0, GetScreenWidth(), GetScreenHeight());
|
||||
|
||||
}
|
||||
|
||||
// If player moves to vertical bounds, lower opacity
|
||||
|
||||
while(true){
|
||||
|
||||
if(GetPlayerY() > GetStgFrameHeight() * 7/8){
|
||||
ObjRender_SetAlpha(obj2, 125);
|
||||
}
|
||||
else{ObjRender_SetAlpha(obj2, 255);}
|
||||
|
||||
if(GetPlayerY() < GetStgFrameHeight() * 1/8){
|
||||
ObjRender_SetAlpha(obj1, 125);
|
||||
}
|
||||
else{ObjRender_SetAlpha(obj1, 255);}
|
||||
|
||||
yield;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
//スコア表示
|
||||
//----------------------------------------------------
|
||||
|
||||
task THighScore(){
|
||||
|
||||
let DATA_PLAYER = GetPlayerReplayName();
|
||||
let DATA_DIFFICULTY = GetCommonData("Difficulty", "Standard");
|
||||
|
||||
let objScoreNo = ObjText_Create();
|
||||
ObjText_SetFontSize(objScoreNo, 32);
|
||||
ObjText_SetFontBold(objScoreNo, true);
|
||||
ObjText_SetFontType(objScoreNo, "GravityBold8");
|
||||
ObjText_SetFontColorTop(objScoreNo, 0xFFFFFF);
|
||||
ObjText_SetFontColorBottom(objScoreNo, 0xFFB061);
|
||||
ObjText_SetFontBorderType(objScoreNo, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objScoreNo, 0xAB3D00);
|
||||
ObjText_SetFontBorderWidth(objScoreNo, 4);
|
||||
//ObjText_SetFontWeight(objScoreNo, 1000);
|
||||
Obj_SetRenderPriorityI(objScoreNo, 79);
|
||||
ObjText_SetSidePitch(objScoreNo, -2);
|
||||
ObjRender_SetPosition(objScoreNo, 192, 12, 0);
|
||||
|
||||
while(true){
|
||||
let score = GetAreaCommonData("Data_" ~ DATA_PLAYER, "HighScore_" ~ DATA_DIFFICULTY, 0);
|
||||
score = min(score,999999999990);
|
||||
let yass = DigitToCommaArray(score);
|
||||
ObjText_SetText(objScoreNo, yass);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
task TScore(){
|
||||
// New score system using rtos
|
||||
|
||||
// For score with zeroes at the end: Truncate score/10, and then multiply it by 10
|
||||
|
||||
let objScoreNo = ObjText_Create();
|
||||
ObjText_SetFontSize(objScoreNo, 32);
|
||||
ObjText_SetFontBold(objScoreNo, true);
|
||||
ObjText_SetFontType(objScoreNo, "GravityBold8");
|
||||
ObjText_SetFontColorTop(objScoreNo, 0xFFFFFF);
|
||||
ObjText_SetFontColorBottom(objScoreNo, 0x8944CE);
|
||||
ObjText_SetFontBorderType(objScoreNo, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objScoreNo, 0x391339);
|
||||
ObjText_SetFontBorderWidth(objScoreNo, 4);
|
||||
//ObjText_SetFontWeight(objScoreNo, 1000);
|
||||
Obj_SetRenderPriorityI(objScoreNo, 79);
|
||||
ObjText_SetSidePitch(objScoreNo, -2);
|
||||
ObjRender_SetPosition(objScoreNo, 192, 56, 0);
|
||||
while(true){
|
||||
|
||||
if(GetPlayerY() < GetStgFrameHeight() * 1/8){
|
||||
ObjRender_SetAlpha(objScoreNo, 125);
|
||||
}
|
||||
else{ObjRender_SetAlpha(objScoreNo, 255);}
|
||||
|
||||
let score = trunc(GetScore()/10) * 10;
|
||||
score = min(score,999999999990);
|
||||
let yass = DigitToCommaArray(score);
|
||||
ObjText_SetText(objScoreNo, yass);
|
||||
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
//Graze表示
|
||||
//----------------------------------------------------
|
||||
task TGraze()
|
||||
{
|
||||
let grazenum = ObjText_Create();
|
||||
ObjText_SetFontSize(grazenum, 58);
|
||||
ObjText_SetFontBold(grazenum, true);
|
||||
ObjText_SetFontType(grazenum, "Anke Calligraph");
|
||||
ObjText_SetFontColorTop(grazenum, 0x8898A3);
|
||||
ObjText_SetFontColorBottom(grazenum, 0xD2E0FF);
|
||||
ObjText_SetFontBorderType(grazenum, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(grazenum, 0xFFFFFF);
|
||||
ObjText_SetFontBorderWidth(grazenum, 3);
|
||||
Obj_SetRenderPriorityI(grazenum, 1);
|
||||
ObjRender_SetX(grazenum, offsetX-10);
|
||||
ObjRender_SetY(grazenum, baseY*0.8+spaceY*5);
|
||||
|
||||
while(true){
|
||||
let graze = GetGraze();
|
||||
|
||||
ObjText_SetText(grazenum, rtos("00000", graze));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
task TValueDisplay(){
|
||||
|
||||
let objPIVNum = ObjText_Create();
|
||||
ObjText_SetFontSize(objPIVNum, 45);
|
||||
ObjText_SetFontBold(objPIVNum, true);
|
||||
ObjText_SetFontType(objPIVNum, "Origami Mommy");
|
||||
ObjText_SetFontColorTop(objPIVNum,0xFFFFFF);
|
||||
ObjText_SetFontColorBottom(objPIVNum,0xFFFFFF);
|
||||
ObjText_SetFontBorderType(objPIVNum, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objPIVNum, 0xDC47C8);
|
||||
ObjText_SetFontBorderWidth(objPIVNum, 4);
|
||||
ObjText_SetHorizontalAlignment(objPIVNum, ALIGNMENT_LEFT);
|
||||
//ObjText_SetFontWeight(objPIVNum, 1000);
|
||||
Obj_SetRenderPriorityI(objPIVNum, 2);
|
||||
//ObjText_SetSidePitch(objPIVNum, -3);
|
||||
ObjRender_SetPosition(objPIVNum, 1440, 275, 0);
|
||||
// DEBUG
|
||||
//Obj_SetVisible(objPIV, false);
|
||||
|
||||
int value = 0;
|
||||
|
||||
while(true){
|
||||
value = min(GetCommonDataPtr(pointerPIV, 10000), 9999999990);
|
||||
//PIVMultiplierValue = value/1000;
|
||||
let yass = vtos("-5.2f", value/10000);
|
||||
if(value < 100000){ObjText_SetText(objPIVNum, yass ~ "[font size=25 ox=-24 oy=18]x");}
|
||||
else{ObjText_SetText(objPIVNum, yass ~ "[font size=25 oy=18]x");}
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
//残機表示
|
||||
//----------------------------------------------------
|
||||
/*task TPlayerLife
|
||||
{
|
||||
let lifenum = ObjText_Create();
|
||||
ObjText_SetFontSize(lifenum, 22);
|
||||
ObjText_SetFontBold(lifenum, false);
|
||||
ObjText_SetFontType(lifenum, "Unispace");
|
||||
ObjText_SetFontColorTop(lifenum,255,255,255);
|
||||
ObjText_SetFontColorBottom(lifenum,255,255,255);
|
||||
Obj_SetRenderPriorityI(lifenum, 1);
|
||||
ObjRender_SetX(lifenum,507);
|
||||
ObjRender_SetY(lifenum,101);
|
||||
|
||||
while(true){
|
||||
let liferemain = GetPlayerLife();
|
||||
|
||||
ObjText_SetText(lifenum, rtos("00", liferemain));
|
||||
yield;
|
||||
}
|
||||
}*/
|
||||
|
||||
//----------------------------------------------------
|
||||
//残スペル表示
|
||||
//----------------------------------------------------
|
||||
task TPlayerSpell
|
||||
{
|
||||
let spellnum = ObjText_Create();
|
||||
ObjText_SetFontSize(spellnum, 22);
|
||||
ObjText_SetFontBold(spellnum, false);
|
||||
ObjText_SetFontType(spellnum, "Unispace");
|
||||
ObjText_SetFontColorTop(spellnum,255,255,255);
|
||||
ObjText_SetFontColorBottom(spellnum,255,255,255);
|
||||
Obj_SetRenderPriorityI(spellnum, 1);
|
||||
ObjRender_SetX(spellnum,offsetX);
|
||||
ObjRender_SetY(spellnum,baseY+spaceY*3);
|
||||
|
||||
while(true){
|
||||
let spellremain = GetPlayerSpell();
|
||||
|
||||
ObjText_SetText(spellnum, rtos("00", spellremain));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
// New life task
|
||||
task LifeDisplay(){
|
||||
|
||||
// oh god oh no
|
||||
let liferemain;
|
||||
let lifecounter = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
|
||||
let lifeshow = graphicimg;
|
||||
Obj_SetRenderPriorityI(lifecounter, 79);
|
||||
ObjPrim_SetTexture(lifecounter, lifeshow);
|
||||
//ObjSpriteList2D_SetSourceRect(lifecounter, 256, 0, 384, 128);
|
||||
//ObjRender_SetScaleXYZ(lifecounter, 0.5, 0.5, 1);
|
||||
//ObjSpriteList2D_SetDestCenter(lifecounter);
|
||||
|
||||
int maxText = CreateTextObject(
|
||||
1440, 390, 45,
|
||||
"ASCENSION", "Origami Mommy",
|
||||
0x280644, 0x701582,
|
||||
0xD1B4FF, 3.5,
|
||||
2
|
||||
);
|
||||
|
||||
ObjText_SetFontWeight(maxText, 1000);
|
||||
|
||||
int MaxLife = GetCommonData("Life Limit", 99999);
|
||||
|
||||
loop{
|
||||
SetPlayerLife(min(MaxLife, GetPlayerLife()));
|
||||
|
||||
if(GetPlayerY() < GetStgFrameHeight() * 1/8){
|
||||
ObjRender_SetAlpha(lifecounter, 125);
|
||||
}
|
||||
else{ObjRender_SetAlpha(lifecounter, 255);}
|
||||
|
||||
ObjSpriteList2D_ClearVertexCount(lifecounter);
|
||||
ObjSpriteList2D_SetSourceRect(lifecounter, 608, 288, 640, 288+32);
|
||||
ObjRender_SetTextureFilterMag(lifecounter, FILTER_NONE);
|
||||
ObjSpriteList2D_SetDestCenter(lifecounter);
|
||||
ObjRender_SetScaleXYZ(lifecounter, 2, 2, 1);
|
||||
liferemain = GetPlayerLife();
|
||||
ascent(i in 0..liferemain){
|
||||
ObjRender_SetPosition(lifecounter, 710+i*24, 30, 0);
|
||||
ObjSpriteList2D_AddVertex(lifecounter);
|
||||
}
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
// New spell task
|
||||
task SpellDisplay{
|
||||
|
||||
int text = CreateTextObject(
|
||||
1820, 380, 32,
|
||||
"MAX", "Origami Mommy",
|
||||
0xFFB4F7, 0xFFFFFF,
|
||||
0x6600BE, 4,
|
||||
2
|
||||
);
|
||||
|
||||
Obj_SetVisible(text, false);
|
||||
ObjText_SetSidePitch(text, -4);
|
||||
ObjText_SetHorizontalAlignment(text, ALIGNMENT_CENTER);
|
||||
|
||||
let spellremain;
|
||||
let spellcounter = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
|
||||
let spellshow = graphicimg;
|
||||
Obj_SetRenderPriorityI(spellcounter, 1);
|
||||
ObjPrim_SetTexture(spellcounter, spellshow);
|
||||
|
||||
loop{
|
||||
if(GetPlayerSpell() > 5){SetPlayerSpell(5);}
|
||||
if(GetPlayerSpell() == 5){Obj_SetVisible(text, true);}
|
||||
else{Obj_SetVisible(text, false);}
|
||||
ObjSpriteList2D_ClearVertexCount(spellcounter);
|
||||
ObjSpriteList2D_SetSourceRect(spellcounter, 640, 128, 768, 256);
|
||||
ObjSpriteList2D_SetDestCenter(spellcounter);
|
||||
ObjRender_SetScaleXYZ(spellcounter, 0.3*scale, 0.3*scale, 1);
|
||||
spellremain = GetPlayerSpell();
|
||||
ascent(i in 0..spellremain){
|
||||
ObjRender_SetPosition(spellcounter, 1604+i*32, 392, 0);
|
||||
ObjSpriteList2D_AddVertex(spellcounter);
|
||||
}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
//----------------------------------------------------
|
||||
// Edited ExRumia system
|
||||
//----------------------------------------------------
|
||||
task TBossLife
|
||||
|
||||
// Lifebar starts at x = 352, ends at x = 925
|
||||
{
|
||||
let path = lifebarimg;
|
||||
let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
|
||||
let objStar = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
|
||||
let objDivision = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
|
||||
let objLifebar = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
|
||||
//bool BossExist = false;
|
||||
|
||||
ObjPrim_SetTexture(obj, path);
|
||||
Obj_SetRenderPriorityI(obj, 72);
|
||||
ObjRender_SetAlpha(obj, 255);
|
||||
|
||||
ObjPrim_SetTexture(objStar, path);
|
||||
Obj_SetRenderPriorityI(objStar, 70);
|
||||
|
||||
ObjPrim_SetTexture(objDivision, path);
|
||||
Obj_SetRenderPriorityI(objDivision, 72);
|
||||
|
||||
ObjPrim_SetTexture(objLifebar, path);
|
||||
Obj_SetRenderPriorityI(objLifebar, 70);
|
||||
ObjRender_SetAlpha(objLifebar, 140);
|
||||
//Obj_SetVisible(objLifebar, false);
|
||||
|
||||
let lastRemStep = -1;
|
||||
let lifeRateRender = 0;
|
||||
|
||||
let objScene = ID_INVALID;
|
||||
loop
|
||||
{
|
||||
objScene = GetEnemyBossSceneObjectID();
|
||||
ObjSpriteList2D_ClearVertexCount(obj);
|
||||
ObjSpriteList2D_ClearVertexCount(objLifebar);
|
||||
ObjSpriteList2D_ClearVertexCount(objStar);
|
||||
ObjSpriteList2D_ClearVertexCount(objDivision);
|
||||
if(objScene != ID_INVALID)
|
||||
{
|
||||
//BossExist = true;
|
||||
ObjSpriteList2D_SetSourceRect(objLifebar, 8, 6, 801, 50);
|
||||
ObjSpriteList2D_SetDestCenter(objLifebar);
|
||||
ObjRender_SetScaleXYZ(objLifebar, 1.12, 1.25, 1);
|
||||
ascent (i in 0..1){
|
||||
ObjRender_SetPosition(objLifebar, 455, 40, 1);
|
||||
ObjSpriteList2D_AddVertex(objLifebar);
|
||||
}
|
||||
RenderActiveLife();
|
||||
|
||||
}
|
||||
yield;
|
||||
}
|
||||
|
||||
/*task RenderLifebar(){
|
||||
ObjSprite2D_SetSourceRect(objLifebar, 5, 5, 534, 34);
|
||||
ObjSprite2D_SetDestCenter(objLifebar);
|
||||
ObjRender_SetPosition(objLifebar, 352, 20, 1);
|
||||
while(BossExist){
|
||||
Obj_SetVisible(objLifebar, true);
|
||||
yield;
|
||||
}
|
||||
}*/
|
||||
|
||||
function RenderActiveLife()
|
||||
{
|
||||
//残りステップ
|
||||
let countRemStep = ObjEnemyBossScene_GetInfo(objScene, INFO_REMAIN_STEP_COUNT);
|
||||
if(lastRemStep != countRemStep)
|
||||
{
|
||||
//ステップが変化
|
||||
lifeRateRender = 0;
|
||||
}
|
||||
|
||||
//Overall active life
|
||||
let lifeTotalMax = ObjEnemyBossScene_GetInfo(objScene, INFO_ACTIVE_STEP_TOTAL_MAX_LIFE);
|
||||
let lifeTotal = ObjEnemyBossScene_GetInfo(objScene, INFO_ACTIVE_STEP_TOTAL_LIFE);
|
||||
let lifeRate = min(lifeTotal / lifeTotalMax, lifeRateRender);
|
||||
ObjSpriteList2D_SetSourceRect(obj, 7, 119, 800, 159);
|
||||
ObjSpriteList2D_SetDestRect(obj, 11, 20, 12 + (890-2) * lifeRate, 60);
|
||||
ObjRender_SetColorHSV(obj, -60, 384, 384);
|
||||
ObjSpriteList2D_AddVertex(obj);
|
||||
ObjRender_SetBlendType(obj, BLEND_ALPHA);
|
||||
|
||||
//Life "division" bar
|
||||
ObjSpriteList2D_SetSourceRect(objDivision, 8, 56, 27, 111);
|
||||
//ObjRender_SetColorHSV(objDivision, 32, 255, 255);
|
||||
let listLifeDiv = [0] ~ ObjEnemyBossScene_GetInfo(objScene, INFO_ACTIVE_STEP_LIFE_RATE_LIST);
|
||||
ascent(iDiv in 1 .. length(listLifeDiv)-1)
|
||||
{
|
||||
let rate = listLifeDiv[iDiv];
|
||||
let x = (GetStgFrameWidth()) * 0.98 * (1-rate);
|
||||
ObjSpriteList2D_SetDestRect(objDivision, x-4, 62, x+24, 118);
|
||||
ObjSpriteList2D_AddVertex(objDivision);
|
||||
}
|
||||
|
||||
//Boss star rendering
|
||||
ObjRender_SetScaleXYZ(objStar, 0.6, 0.6, 1);
|
||||
ObjSpriteList2D_SetSourceRect(objStar, 0, 169, 268, 430);
|
||||
Obj_SetRenderPriority(objStar, 1);
|
||||
ascent(iStep in 0 .. countRemStep)
|
||||
{
|
||||
ObjRender_SetPosition(objStar, GetStgFrameWidth()*1.6, 35+45*iStep, 1);
|
||||
ObjSpriteList2D_SetDestCenter(objStar);
|
||||
ObjSpriteList2D_AddVertex(objStar);
|
||||
}
|
||||
|
||||
lifeRateRender += 0.01;
|
||||
lifeRateRender = min(lifeRateRender, 1);
|
||||
lastRemStep = countRemStep;
|
||||
|
||||
if(GetCommonData("IsFightingBoss", false) == true){
|
||||
if(ObjMove_GetY(GetPlayerObjectID()) < GetStgFrameHeight()/6){
|
||||
ObjRender_SetAlpha(obj, 60);
|
||||
ObjRender_SetAlpha(objLifebar, 30);
|
||||
}
|
||||
else{
|
||||
ObjRender_SetAlpha(obj, 255);
|
||||
ObjRender_SetAlpha(objLifebar, 140);
|
||||
}
|
||||
}
|
||||
|
||||
else{
|
||||
ObjRender_SetAlpha(obj, 0);
|
||||
ObjRender_SetAlpha(objLifebar, 0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
//タイマー表示
|
||||
//----------------------------------------------------
|
||||
task TBossTimer
|
||||
{
|
||||
let textTimer = ObjText_Create();
|
||||
ObjText_SetFontSize(textTimer, 20);
|
||||
ObjText_SetFontType(textTimer, "GravityRegular5");
|
||||
|
||||
//ObjText_SetMaxWidth(textTimer, GetStgFrameWidth()/6);
|
||||
ObjText_SetHorizontalAlignment(textTimer, ALIGNMENT_LEFT);
|
||||
|
||||
ObjText_SetFontBold(textTimer, true);
|
||||
ObjText_SetFontColorTop(textTimer, 0xFFFFFF);
|
||||
ObjText_SetFontColorBottom(textTimer, 0xFFFFFF);
|
||||
ObjText_SetFontBorderType(textTimer, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(textTimer, 0x45A6FF);
|
||||
ObjText_SetFontBorderWidth(textTimer, 5);
|
||||
Obj_SetRenderPriorityI(textTimer, 73);
|
||||
//ObjRender_SetX(textTimer, GetStgFrameWidth()/2);
|
||||
ObjRender_SetX(textTimer, 710);
|
||||
ObjRender_SetY(textTimer, 125);
|
||||
Obj_SetVisible(textTimer, true);
|
||||
|
||||
let pathDigit = GetCurrentScriptDirectory() ~ "img/Default_SystemDigit.png";
|
||||
|
||||
let obj = ObjPrim_Create(OBJ_SPRITE_LIST_2D);
|
||||
ObjPrim_SetTexture(obj, lifebarimg);
|
||||
ObjRender_SetBlendType(obj, BLEND_ADD_RGB);
|
||||
Obj_SetRenderPriority(obj, 0.75);
|
||||
//ObjRender_SetY(obj, 38);
|
||||
let count = 2;
|
||||
|
||||
let objScene = ID_INVALID;
|
||||
loop
|
||||
{
|
||||
objScene = GetEnemyBossSceneObjectID();
|
||||
ObjSpriteList2D_ClearVertexCount(obj);
|
||||
if(objScene != ID_INVALID)
|
||||
{
|
||||
Obj_SetVisible(textTimer, true);
|
||||
RenderTimer();
|
||||
}
|
||||
else{Obj_SetVisible(textTimer, false);
|
||||
}
|
||||
yield;
|
||||
}
|
||||
|
||||
task RenderTimer()
|
||||
{
|
||||
let timer = ObjEnemyBossScene_GetInfo(objScene, INFO_TIMERF)/60;
|
||||
timer = min(timer, 999.99);
|
||||
ObjText_SetText(textTimer, rtos("000.00", timer) ~ "[font sz=15 oy=18]s LEFT");
|
||||
ObjSpriteList2D_SetSourceRect(obj, 404, 225, 537, 374);
|
||||
ObjRender_SetScaleXYZ(obj, 1, 1, 1);
|
||||
ObjSpriteList2D_SetDestCenter(obj);
|
||||
ObjRender_SetPosition(textTimer, 590, 55, 1);
|
||||
//ObjSpriteList2D_AddVertex(obj);
|
||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) <= 10 && ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) > 0){
|
||||
if(ObjEnemyBossScene_GetInfo(objScene, INFO_TIMERF) % 60 == 0 || ObjEnemyBossScene_GetInfo(objScene, INFO_TIMER) < 1){_Timeout();}
|
||||
ObjText_SetFontBorderColor(textTimer, 0xF0396C);
|
||||
}
|
||||
else{ObjText_SetFontBorderColor(textTimer, 0x45A6FF); ObjText_SetFontSize(textTimer, 35);}
|
||||
if(ObjMove_GetY(GetPlayerObjectID()) < GetStgFrameHeight()/8){
|
||||
ObjRender_SetAlpha(textTimer, 60);
|
||||
}
|
||||
else{
|
||||
ObjRender_SetAlpha(textTimer, 255);
|
||||
}
|
||||
yield;
|
||||
}
|
||||
|
||||
task _Timeout(){ // HOLY FUCK THE TIMER IS RUNNING OUT BITCH
|
||||
|
||||
ascent(i in 0..30){
|
||||
ObjText_SetFontSize(textTimer, Interpolate_Decelerate(50, 25, i/30));
|
||||
//ObjRender_SetScaleXYZ(obj, Interpolate_Decelerate(0.6, 0.38, i/30));
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
task TScoreAward(dascore){
|
||||
|
||||
let objText = ObjText_Create();
|
||||
int x = rand_int(0, 99);
|
||||
|
||||
RegularAward;
|
||||
|
||||
task RegularAward{
|
||||
|
||||
let fontsizearray = [70, 70, 70, 65, 60, 65, 70, 70, 70, 40, 40];
|
||||
let textarray = ["So Cool Bestie!", "Bimbo Eliminated!", "Wig Snatched!", "Neutralized Boss Sexiness!", "Gay Rights Confirmed!", "Himbo Kisses!", "Slay Button Hit!", "Yass!!!!", "Gatekept, Gaslit, Girlbossed!", "Spell Card Capture!"];
|
||||
|
||||
int y = rand_int(0, length(textarray)-2);
|
||||
|
||||
ObjText_SetText(objText, textarray[y]); // Selects a random capture text from the array
|
||||
ObjText_SetFontSize(objText, fontsizearray[y]*1.5);
|
||||
ObjText_SetFontType(objText, "Exotc350 DmBd BT");
|
||||
|
||||
//ObjText_SetMaxWidth(objText, GetStgFrameWidth());
|
||||
ObjText_SetHorizontalAlignment(objText, ALIGNMENT_CENTER);
|
||||
|
||||
ObjText_SetFontBold(objText, true);
|
||||
ObjText_SetFontColorTop(objText, 0xFFD34D);
|
||||
ObjText_SetFontColorBottom(objText, 0xFFF2CA);
|
||||
ObjText_SetFontBorderType(objText, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objText,0, 0, 0);
|
||||
ObjText_SetFontBorderWidth(objText, 3);
|
||||
Obj_SetRenderPriority(objText, 0.6);
|
||||
ObjRender_SetX(objText, GetStgFrameWidth()/2);
|
||||
ObjRender_SetY(objText, GetStgFrameHeight()/5);
|
||||
}
|
||||
|
||||
let scorefinal = trunc(dascore/10) * 10;
|
||||
let scorescene = GetEnemyBossSceneObjectID();
|
||||
|
||||
if (ObjEnemyBossScene_GetInfo(scorescene, INFO_PLAYER_SHOOTDOWN_COUNT) == 0 &&
|
||||
ObjEnemyBossScene_GetInfo(scorescene, INFO_PLAYER_SPELL_COUNT) == 0){
|
||||
AddScore(scorefinal);
|
||||
}
|
||||
|
||||
let strScore = "Capture Bonus +" ~ DigitToCommaArray(scorefinal);
|
||||
let objScore = ObjText_Create();
|
||||
ObjText_SetText(objScore, strScore);
|
||||
ObjText_SetFontSize(objScore, 85);
|
||||
ObjText_SetFontType(objScore, "Anke Calligraph");
|
||||
|
||||
ObjText_SetMaxWidth(objScore, GetStgFrameWidth());
|
||||
ObjText_SetHorizontalAlignment(objScore, ALIGNMENT_CENTER);
|
||||
|
||||
ObjText_SetFontBold(objScore, true);
|
||||
ObjText_SetFontColorTop(objScore, 0x9C2400);
|
||||
ObjText_SetFontColorBottom(objScore, 0xFF982A);
|
||||
ObjText_SetFontBorderType(objScore, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objScore, 255, 255, 255);
|
||||
ObjText_SetFontBorderWidth(objScore, 3);
|
||||
Obj_SetRenderPriority(objScore, 0.6);
|
||||
ObjRender_SetX(objScore, GetStgFrameWidth()/2 - (GetStgFrameWidth()/2-5));
|
||||
ObjRender_SetY(objScore, GetStgFrameHeight()/3.2-15);
|
||||
|
||||
wait(120);
|
||||
|
||||
Obj_Delete(objText);
|
||||
Obj_Delete(objScore);
|
||||
|
||||
}
|
||||
//----------------------------------------------------
|
||||
//FPS表示
|
||||
//----------------------------------------------------
|
||||
task TCurrentFps()
|
||||
{
|
||||
|
||||
if(IsReplay()){return;}
|
||||
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetFontSize(objText, 36);
|
||||
ObjText_SetFontBold(objText, true);
|
||||
ObjText_SetFontType(objText, "Unispace");
|
||||
ObjText_SetFontColorTop(objText, 0x6747FF);
|
||||
ObjText_SetFontColorBottom(objText, 0xAEC4FF);
|
||||
ObjText_SetFontBorderType(objText, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objText, 38, 3, 93);
|
||||
ObjText_SetFontBorderWidth(objText, 1.5);
|
||||
ObjText_SetHorizontalAlignment(objText, ALIGNMENT_RIGHT);
|
||||
ObjText_SetMaxWidth(objText, GetScreenWidth() - 8);
|
||||
Obj_SetRenderPriority(objText, 1.0);
|
||||
ObjRender_SetX(objText, 0);
|
||||
ObjRender_SetY(objText, GetScreenHeight() - 48);
|
||||
|
||||
loop
|
||||
{
|
||||
let fps = GetCurrentFps();
|
||||
let text = vtos("1.2f", fps) ~ "fps";
|
||||
ObjText_SetText(objText, text);
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
task TReplayFps()
|
||||
{
|
||||
if(!IsReplay()){return;}
|
||||
|
||||
let objText = ObjText_Create();
|
||||
ObjText_SetFontSize(objText, 36);
|
||||
ObjText_SetFontType(objText, "Unispace");
|
||||
ObjText_SetFontBold(objText, true);
|
||||
ObjText_SetFontColorTop(objText, 128, 128, 255);
|
||||
ObjText_SetFontColorBottom(objText, 255, 255, 255);
|
||||
ObjText_SetFontBorderType(objText, BORDER_FULL);
|
||||
ObjText_SetHorizontalAlignment(objText, ALIGNMENT_RIGHT);
|
||||
ObjText_SetFontBorderColor(objText,38, 3, 93);
|
||||
ObjText_SetFontBorderWidth(objText, 1);
|
||||
Obj_SetRenderPriorityI(objText, 79);
|
||||
|
||||
let px = GetStgFrameWidth() - 10;
|
||||
let py = GetStgFrameHeight() - 42;
|
||||
ObjRender_SetX(objText, px);
|
||||
ObjRender_SetY(objText, py);
|
||||
|
||||
loop
|
||||
{
|
||||
let fps = GetReplayFps();
|
||||
let text = vtos("1.2f", fps);
|
||||
ObjText_SetText(objText, "REPLAY MODE: " ~ text ~ "fps");
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------
|
||||
//ユーティリティ
|
||||
//----------------------------------------------------
|
BIN
script/KevinSystem/PlayerSFX/CK Music Factory/air01.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/CK Music Factory/air02.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/CK Music Factory/laser01.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/CK Music Factory/slash01.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/CK Music Factory/wind01.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/TAM Music Factory/se04.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/TAM Music Factory/status4.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/TAM Music Factory/tama2.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/ZaGames_PlayerFire1.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_Base.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_Base2.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_Base3.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_BombOld.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_Burn.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_ExplosionMini.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_Graze.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_LaserActivate.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_LaserDeactivate.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_MissileExplode.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_PlayerHit.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_PlayerShootdown.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_ScytheRetrieve.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_Shine.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/bfxr_Splash.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/laser01.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/magic21.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/retrolaser.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/retrolaser2.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/se_nep00.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/se_old_kira01.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/slash01.wav
Normal file
BIN
script/KevinSystem/PlayerSFX/tama2.wav
Normal file
66
script/KevinSystem/PlayerSoundLib.dnh
Normal file
|
@ -0,0 +1,66 @@
|
|||
// Sound effects for player scripts go here.
|
||||
|
||||
|
||||
// Link to sound folder
|
||||
|
||||
//let sddir = GetCurrentScriptDirectory() ~ "./PlayerSFX";
|
||||
|
||||
string[] SFXList = GetFilePathList("script/KevinSystem/PlayerSFX/");
|
||||
|
||||
let SFXVol = GetAreaCommonData("Config", "SEVol", 100) * 0.01;
|
||||
|
||||
const Base1 = ObjSound_Create(),
|
||||
Base2 = ObjSound_Create(),
|
||||
Base3 = ObjSound_Create(),
|
||||
Bomb1 = ObjSound_Create(),
|
||||
Fire = ObjSound_Create(),
|
||||
Explosion1 = ObjSound_Create(),
|
||||
Graze = ObjSound_Create(),
|
||||
LaserAct = ObjSound_Create(),
|
||||
LaserDeact = ObjSound_Create(),
|
||||
Explosion2 = ObjSound_Create(),
|
||||
PlayerHit = ObjSound_Create(),
|
||||
PlayerDie = ObjSound_Create(),
|
||||
Misc1 = ObjSound_Create(),
|
||||
Shine = ObjSound_Create(),
|
||||
Splash = ObjSound_Create(),
|
||||
PlayerDie2 = ObjSound_Create(),
|
||||
Misc2 = ObjSound_Create(),
|
||||
Base4 = ObjSound_Create(),
|
||||
Bomb2 = ObjSound_Create(),
|
||||
MasterSpark = ObjSound_Create(),
|
||||
Misc3 = ObjSound_Create(),
|
||||
Base5 = ObjSound_Create();
|
||||
|
||||
let VarList = [Base1, Base2, Base3, Bomb1, Fire, Explosion1, Graze, LaserAct, LaserDeact, Explosion2, PlayerHit, PlayerDie, Misc1, Shine, Splash, PlayerDie2, Misc2, Base4, Bomb2, MasterSpark, Misc3, Base5];
|
||||
let VolList = [40, 40, 40, 40, 40, 40, 40, 40, 40, 80, 80, 80, 40, 80, 40, 80, 40, 40, 40, 40, 40, 40];
|
||||
|
||||
// Function for loading and setting volume of a sound object
|
||||
|
||||
task _Init(){
|
||||
|
||||
}
|
||||
|
||||
function <int> LoadEx(obj, targetpath, targetvol){
|
||||
|
||||
//int obj = ObjSound_Create();
|
||||
ObjSound_Load(obj, targetpath);
|
||||
ObjSound_SetVolumeRate(obj, targetvol * SFXVol);
|
||||
ObjSound_SetSoundDivision(obj, SOUND_SE);
|
||||
|
||||
//return obj;
|
||||
|
||||
}
|
||||
|
||||
task _SoundTask(){
|
||||
|
||||
int i = 0;
|
||||
|
||||
WriteLog("File being read is " ~ SFXList[0]);
|
||||
|
||||
for each(var objSound in ref VarList){
|
||||
LoadEx(objSound, SFXList[i], 25);
|
||||
i++;
|
||||
}
|
||||
|
||||
}
|
BIN
script/KevinSystem/RyannSFX/ItemSFX/bfxr_GetItem1.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ItemSFX/bfxr_GetItemCancel.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ItemSFX/bfxr_GetItemSpecial.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ItemSFX/bfxr_GetItemSpecialOLD.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ItemSFX/bfxr_LifeExtend.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ItemSFX/bfxr_SpellExtend.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_alert.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_boon00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_ch01.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_ch02.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_don00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_explode.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_extend.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_extend2.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_graze.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_kira00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_kira02.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_lazer00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_lazer01.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_nep00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_old_extend.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_old_kira00.ogg
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_old_kira00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_old_lazer01.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_old_nep00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_pause.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_select00.wav
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_slash.ogg
Normal file
BIN
script/KevinSystem/RyannSFX/ryannlib/se_tan00.wav
Normal file
1
script/KevinSystem/SoundName.txt
Normal file
|
@ -0,0 +1 @@
|
|||
PLAYER SOUND NAME
|
BIN
script/KevinSystem/TerraShot2x/shot_1.png
Normal file
After Width: | Height: | Size: 1.6 MiB |
BIN
script/KevinSystem/TerraShot2x/shot_const.dnh
Normal file
BIN
script/KevinSystem/TerraShot2x/shot_data_1.dnh
Normal file
890
script/KevinSystem/Universal_EnemyLib.dnh
Normal file
|
@ -0,0 +1,890 @@
|
|||
/*
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
UNIVERSAL LIBRARY FOR ENEMY-RELATED FUNCTIONS
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
*/
|
||||
|
||||
#include "script/KevinSystem/kevin_system/Lib_Const.dnh"
|
||||
|
||||
// Code by Kevinmonitor with some assistance.
|
||||
/*
|
||||
|
||||
///////////// ENEMY SPAWNING DURING STAGES /////////////
|
||||
|
||||
*/
|
||||
|
||||
function <int> _InitDifficulty(int diffInt){
|
||||
|
||||
int difficulty = 0;
|
||||
|
||||
if(GetCommonData("Difficulty", "Normal") == "Normal"){
|
||||
difficulty = 0;
|
||||
}
|
||||
|
||||
else if(GetCommonData("Difficulty", "Normal") == "Hard"){
|
||||
difficulty = 1;
|
||||
}
|
||||
|
||||
else if(GetCommonData("Difficulty", "Normal") == "Lunatic"){
|
||||
difficulty = 2;
|
||||
}
|
||||
|
||||
return difficulty;
|
||||
}
|
||||
|
||||
// Explosion Sound Effects
|
||||
|
||||
task _RenderBoss(int enemy){
|
||||
|
||||
int aniidle = 0;
|
||||
|
||||
string tex = "script/game/resourceLib/Spritesheet_StationJam.png";
|
||||
|
||||
//LoadTextureEx(tex, true, true);
|
||||
|
||||
ObjPrim_SetTexture(enemy, tex);
|
||||
ObjSprite2D_SetSourceRect(enemy, 1280, 0, 1280+256, 256);
|
||||
ObjSprite2D_SetDestCenter(enemy);
|
||||
ObjRender_SetScaleXYZ(enemy, 1);
|
||||
|
||||
int nameText = CreateTextObject(
|
||||
GetStgFrameWidth()*0.3, 200, 25,
|
||||
"REMILIA SCARLET", "Origami Mommy",
|
||||
0xFF5A5A, 0xFFFFFF,
|
||||
0x791D1D, 3,
|
||||
1
|
||||
);
|
||||
|
||||
ObjRender_SetAngleZ(nameText, -90);
|
||||
ObjText_SetFontBold(nameText, true);
|
||||
|
||||
//_BossMarker(enemy, tex, 512, 0, 768, 256, 0.45, 30);
|
||||
|
||||
while(!Obj_IsDeleted(enemy)){
|
||||
|
||||
yield;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
task _RenderMidboss(int enemy){
|
||||
|
||||
int aniidle = 0;
|
||||
|
||||
string tex = "script/game/StageLib/BossAsset.png";
|
||||
|
||||
LoadTextureEx(tex, true, true);
|
||||
|
||||
int nameText = CreateTextObject(
|
||||
GetStgFrameWidth()*0.38, 10, 42,
|
||||
"MIDBOSS: Kobiko", "Connecting Chain Handserif",
|
||||
0xBA8AFF, 0xFFFFFF,
|
||||
0x552A9C, 3,
|
||||
1
|
||||
);
|
||||
|
||||
ObjText_SetFontBold(nameText, true);
|
||||
ObjPrim_SetTexture(enemy, tex);
|
||||
ObjSprite2D_SetSourceRect(enemy, 768, 0, 768+512, 512);
|
||||
ObjSprite2D_SetDestCenter(enemy);
|
||||
ObjRender_SetScaleXYZ(enemy, 0.5);
|
||||
|
||||
_BossMarker(enemy, tex, 512, 256, 768, 512, 0.45, 30);
|
||||
|
||||
while(!Obj_IsDeleted(enemy)){
|
||||
|
||||
yield;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
task _FadeInSpawn(
|
||||
int enemyID,
|
||||
float spawnX, float spawnY,
|
||||
float destX, float destY,
|
||||
float spawnScale, float destScale,
|
||||
int time){
|
||||
|
||||
ObjMove_SetPosition(enemyID, spawnX, spawnY);
|
||||
ObjRender_SetAlpha(enemyID, 0);
|
||||
|
||||
ObjMove_SetDestAtFrame(enemyID, destX, destY, time, LERP_DECELERATE);
|
||||
|
||||
ascent(i in 0..time){
|
||||
ObjRender_SetAlpha(enemyID, Interpolate_Decelerate(0, 255, i/time));
|
||||
ObjRender_SetScaleXYZ(enemyID, Interpolate_Decelerate(spawnScale, destScale, i/time));
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Creates an enemy and spawns them using _FadeInSpawn. Shooting and movement tasks not covered.
|
||||
// Task also handles deleting the enemy after their life reaches 0.
|
||||
|
||||
/*
|
||||
BhestieBlue: 0, 0, 256, 256
|
||||
BhestieGreen: 256, 0, 512, 256
|
||||
GaySamoyed: 0, 256, 256, 512
|
||||
EvilSamoyed: 256, 256, 512, 512
|
||||
*/
|
||||
|
||||
function <int> _CreateEnemy(
|
||||
float spawnX, float spawnY, float destX, float destY, int spawntime,
|
||||
float spawnScale, float destScale,
|
||||
float health, float sizeHitbox, float sizeHurtbox,
|
||||
texture,
|
||||
int rectLeft, int rectTop, int rectRight, int rectBottom){
|
||||
|
||||
// Essentials
|
||||
int enemyID = ObjEnemy_Create(OBJ_ENEMY);
|
||||
ObjEnemy_Regist(enemyID);
|
||||
ObjEnemy_SetLife(enemyID, health);
|
||||
ObjEnemy_SetAutoDelete(enemyID, true);
|
||||
|
||||
// TBA: Handle animations
|
||||
ObjPrim_SetTexture(enemyID, texture);
|
||||
ObjSprite2D_SetSourceRect(enemyID, rectLeft, rectTop, rectRight, rectBottom);
|
||||
ObjSprite2D_SetDestCenter(enemyID);
|
||||
|
||||
// Spawning
|
||||
_FadeInSpawn(enemyID, spawnX, spawnY, destX, destY, spawnScale, destScale, spawntime);
|
||||
_HandleEnemyWellbeing(enemyID, sizeHitbox, sizeHurtbox);
|
||||
|
||||
return enemyID;
|
||||
|
||||
}
|
||||
|
||||
// Special overload for creating hitbox/hurtboxless enemies.
|
||||
|
||||
function <int> _CreateEnemy(
|
||||
bool intersectionrender,
|
||||
float spawnX, float spawnY, float destX, float destY, int spawntime,
|
||||
float spawnScale, float destScale,
|
||||
float health, float sizeHitbox, float sizeHurtbox,
|
||||
texture,
|
||||
int rectLeft, int rectTop, int rectRight, int rectBottom){
|
||||
|
||||
// Essentials
|
||||
int enemyID = ObjEnemy_Create(OBJ_ENEMY);
|
||||
ObjEnemy_Regist(enemyID);
|
||||
ObjEnemy_SetLife(enemyID, health);
|
||||
ObjEnemy_SetAutoDelete(enemyID, true);
|
||||
|
||||
// TBA: Handle animations
|
||||
ObjPrim_SetTexture(enemyID, texture);
|
||||
ObjSprite2D_SetSourceRect(enemyID, rectLeft, rectTop, rectRight, rectBottom);
|
||||
ObjSprite2D_SetDestCenter(enemyID);
|
||||
|
||||
// Spawning
|
||||
_FadeInSpawn(enemyID, spawnX, spawnY, destX, destY, spawnScale, destScale, spawntime);
|
||||
if (intersectionrender){_HandleEnemyWellbeing(enemyID, sizeHitbox, sizeHurtbox);}
|
||||
else{}
|
||||
|
||||
return enemyID;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Hitbox and deletion
|
||||
|
||||
task _HandleEnemyWellbeing(int enemyID, float sizeHitbox, float sizeHurtbox){
|
||||
|
||||
//float enmX = 0, enmY = 0;
|
||||
|
||||
while(ObjEnemy_GetInfo(enemyID, INFO_LIFE) > 0){
|
||||
|
||||
ObjEnemy_SetIntersectionCircleToShot(enemyID, ObjMove_GetX(enemyID), ObjMove_GetY(enemyID), sizeHitbox);
|
||||
//ObjEnemy_SetIntersectionCircleToPlayer(enemyID, ObjMove_GetX(enemyID), ObjMove_GetY(enemyID), sizeHurtbox);
|
||||
yield;
|
||||
|
||||
}
|
||||
|
||||
Obj_Delete(enemyID);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Fading invincibility for bosses/enemies (with parameters for wait times and fade times, and a separate multiplier for bomb damage rate (final spells))
|
||||
|
||||
task _FadeInvincibility(int target, int waittime, int fadetime, float bombmultiplier){
|
||||
|
||||
float x = 0;
|
||||
ObjEnemy_SetDamageRate(target, 0, 0);
|
||||
wait(waittime);
|
||||
ascent(i in 0..fadetime){
|
||||
x = Interpolate_Accelerate(0, 100, i/fadetime);
|
||||
ObjEnemy_SetDamageRate(target, x, x*bombmultiplier);
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
///////////// HANDLING THE END OF SINGLES (DURING BOSS/MIDBOSS FIGHTS) /////////////
|
||||
|
||||
To-do: Move item creation to the item script(s)
|
||||
|
||||
*/
|
||||
|
||||
////// NEW //////
|
||||
|
||||
task _GoToBrazil(
|
||||
int targetscene, targetenemy,
|
||||
int maxitemdrop, int minitemdrop){
|
||||
|
||||
while(ObjEnemy_GetInfo(targetenemy, INFO_LIFE)>0){
|
||||
yield;
|
||||
}
|
||||
|
||||
maxitemdrop = 14;
|
||||
minitemdrop = 7;
|
||||
|
||||
int finalItemDrop = 0;
|
||||
let itemType = POINT_RAINBOW;
|
||||
|
||||
int maxTimer = ObjEnemyBossScene_GetInfo(targetscene, INFO_ORGTIMERF);
|
||||
int killTimer = ObjEnemyBossScene_GetInfo(targetscene, INFO_TIMERF);
|
||||
|
||||
bool isnon = ObjEnemyBossScene_GetInfo(targetscene, INFO_IS_SPELL);
|
||||
|
||||
// If the boss is killed within the first 1/5 of the timer, drop full items
|
||||
|
||||
if(killTimer >= maxTimer*(4/5)) {finalItemDrop = maxitemdrop;}
|
||||
|
||||
// Starting from the rest of the timer, the maximum items that can be dropped is equal to 4/5 of the max drop amount
|
||||
|
||||
else{finalItemDrop = Interpolate_Decelerate(minitemdrop, maxitemdrop*(4/5), killTimer/(maxTimer*4/5));}
|
||||
|
||||
// If the player has lost a life, lock the number of items to the lowest possible
|
||||
|
||||
if(ObjEnemyBossScene_GetInfo(targetscene, INFO_PLAYER_SHOOTDOWN_COUNT) > 0){
|
||||
finalItemDrop = minitemdrop;
|
||||
//itemType = POINT_REGULAR;
|
||||
}
|
||||
|
||||
DeleteShotAll(TYPE_ALL,TYPE_ITEM);
|
||||
|
||||
SetPlayerInvincibilityFrame(120);
|
||||
|
||||
// Common Data
|
||||
|
||||
NotifyEventAll(EV_SINGLE_ITEM_DROP, ObjMove_GetX(targetenemy), ObjMove_GetY(targetenemy), finalItemDrop, itemType);
|
||||
|
||||
wait(120);
|
||||
|
||||
float[] enemyPos = [ObjMove_GetX(targetenemy), ObjMove_GetY(targetenemy)];
|
||||
|
||||
SetCommonData("Entering PIV", GetAreaCommonData("PIV", "currentvalue", 10000));
|
||||
SetCommonData("Boss Position X", enemyPos[0]);
|
||||
SetCommonData("Boss Position Y", enemyPos[1]);
|
||||
|
||||
Obj_Delete(targetenemy);
|
||||
|
||||
}
|
||||
|
||||
////// OLD/LEGACY //////
|
||||
// Basic post-death handling after every attack (Duo).
|
||||
|
||||
function _GoToBrazilDuo(targetscene, targetenemy, targetenemyA, targetenemyB, returnXA, returnYA, returnXB, returnYB, bool isnon, int itemdropamount){
|
||||
|
||||
while(ObjEnemy_GetInfo(targetenemy, INFO_LIFE) > 0){
|
||||
yield;
|
||||
}
|
||||
|
||||
DeleteShotAll(TYPE_ALL,TYPE_ITEM);
|
||||
SetPlayerInvincibilityFrame(120);
|
||||
|
||||
// returnX and returnY are the boss positions they return to at the end of every pattern. (I'm too lazy for common data...)
|
||||
|
||||
ObjMove_CancelMovement(targetenemyA); ObjMove_CancelMovement(targetenemyB);
|
||||
|
||||
ObjMove_SetDestAtFrame(targetenemyA, returnXA, returnYA, 45, LERP_DECELERATE);
|
||||
ObjMove_SetDestAtFrame(targetenemyB, returnXB, returnYB, 45, LERP_DECELERATE);
|
||||
|
||||
async{
|
||||
wait(45);
|
||||
ObjMove_CancelMovement(targetenemyA); ObjMove_CancelMovement(targetenemyB);
|
||||
ObjMove_SetDestAtFrame(targetenemyA, returnXA, returnYA, 15, LERP_DECELERATE);
|
||||
ObjMove_SetDestAtFrame(targetenemyB, returnXB, returnYB, 15, LERP_DECELERATE);
|
||||
ObjMove_SetProcessMovement(targetenemyA, false);
|
||||
ObjMove_SetProcessMovement(targetenemyB, false);
|
||||
return;
|
||||
}
|
||||
|
||||
alternative(isnon)
|
||||
|
||||
case(true){_NonspellItemDrop(targetscene, targetenemyA, itemdropamount); _NonspellItemDrop(targetscene, targetenemyB, itemdropamount);}
|
||||
|
||||
others{_SpellItemDrop(targetscene, targetenemyA, itemdropamount); _SpellItemDrop(targetscene, targetenemyB, itemdropamount);}
|
||||
|
||||
wait(120);
|
||||
|
||||
Obj_Delete(targetenemy);
|
||||
Obj_Delete(targetenemyA);
|
||||
Obj_Delete(targetenemyB);
|
||||
|
||||
}
|
||||
|
||||
// Basic post-death handling after every attack (Solo).
|
||||
|
||||
task _GoToBrazil(targetscene, targetenemy, returnX, returnY, bool isnon, int itemdropamount){
|
||||
|
||||
while(ObjEnemy_GetInfo(targetenemy, INFO_LIFE)>0){
|
||||
yield;
|
||||
}
|
||||
|
||||
DeleteShotAll(TYPE_ALL,TYPE_ITEM);
|
||||
|
||||
SetPlayerInvincibilityFrame(120);
|
||||
|
||||
// ITS COMMON DATA TIME BITCHES
|
||||
|
||||
float[] enemyPos = [ObjMove_GetX(targetenemy), ObjMove_GetY(targetenemy)];
|
||||
SetCommonData("Boss Position", enemyPos);
|
||||
|
||||
alternative(isnon)
|
||||
case(true){_NonspellItemDrop(targetscene, targetenemy, itemdropamount);}
|
||||
others{_NonspellItemDrop(targetscene, targetenemy, itemdropamount);}
|
||||
|
||||
wait(120);
|
||||
|
||||
Obj_Delete(targetenemy);
|
||||
|
||||
}
|
||||
|
||||
task _GoToBrazilMidboss(targetscene, targetenemy, bool isnon, int itemdropamount){
|
||||
|
||||
while(ObjEnemy_GetInfo(targetenemy, INFO_LIFE)>0){
|
||||
yield;
|
||||
}
|
||||
|
||||
DeleteShotAll(TYPE_ALL,TYPE_ITEM);
|
||||
|
||||
SetPlayerInvincibilityFrame(120);
|
||||
|
||||
// ITS COMMON DATA TIME BITCHES
|
||||
|
||||
float[] enemyPos = [ObjMove_GetX(targetenemy), ObjMove_GetY(targetenemy)];
|
||||
SetCommonData("Boss Position", enemyPos);
|
||||
|
||||
alternative(isnon)
|
||||
case(true){_NonspellItemDrop(targetscene, targetenemy, itemdropamount);}
|
||||
others{_NonspellItemDrop(targetscene, targetenemy, itemdropamount);}
|
||||
|
||||
wait(60);
|
||||
|
||||
ObjMove_SetDestAtFrame(targetenemy, enemyPos[0], -150, 45, LERP_SMOOTHER);
|
||||
|
||||
wait(45);
|
||||
|
||||
Obj_Delete(targetenemy);
|
||||
|
||||
}
|
||||
|
||||
// Used after end of last spell for dramatic effect. NOTE TO SELF: REPLACE SOUND & GRAPHICAL EFFECTS
|
||||
|
||||
task _ByeBitch(targetscene, targetenemy){
|
||||
|
||||
while(ObjEnemyBossScene_GetInfo(targetscene, INFO_CURRENT_LIFE) > 0){
|
||||
yield;
|
||||
}
|
||||
|
||||
/*ObjSound_Load(death, defeatsnd);
|
||||
ObjSound_SetVolumeRate(death, 30);
|
||||
ObjSound_SetFade(death, 5);*/
|
||||
|
||||
let x = ObjMove_GetX(targetenemy);
|
||||
let y = ObjMove_GetY(targetenemy);
|
||||
|
||||
StartSlow(TARGET_ALL, 30);
|
||||
SetPlayerInvincibilityFrame(180);
|
||||
DeleteShotAll(TYPE_ALL,TYPE_ITEM);
|
||||
//ObjSound_Play(death);
|
||||
TExplosionA(x,y,10,0.5);
|
||||
wait(120);
|
||||
|
||||
StopSlow(TARGET_ALL);
|
||||
//ObjSound_Play(death);
|
||||
//Obj_Delete(target);
|
||||
TExplosionA(x,y,10,0.5);
|
||||
wait(120);
|
||||
|
||||
}
|
||||
|
||||
function <void> _ByeBitches(int targetscene, int targetboss, int targetenemyA, int targetenemyB, int itemdropamount){
|
||||
|
||||
//wait(120);
|
||||
|
||||
loop{
|
||||
float life = ObjEnemy_GetInfo(targetboss, INFO_LIFE);
|
||||
if(life > 0){yield;}
|
||||
else{break;}
|
||||
}
|
||||
|
||||
int death = ObjSound_Create();
|
||||
ObjSound_Load(death, defeatsnd);
|
||||
ObjSound_SetVolumeRate(death, 40);
|
||||
ObjSound_SetFade(death, 7.5);
|
||||
|
||||
StartSlow(TARGET_ALL, 30);
|
||||
SetPlayerInvincibilityFrame(180);
|
||||
DeleteShotAll(TYPE_ALL,TYPE_ITEM);
|
||||
ObjSound_Play(death);
|
||||
TExplosionA(ObjMove_GetX(targetenemyA), ObjMove_GetY(targetenemyA), 10, 0.5);
|
||||
TExplosionA(ObjMove_GetX(targetenemyB), ObjMove_GetY(targetenemyB), 10, 0.5);
|
||||
wait(120);
|
||||
|
||||
_SpellItemDrop(targetscene, targetenemyA, itemdropamount);
|
||||
_SpellItemDrop(targetscene, targetenemyB, itemdropamount);
|
||||
|
||||
StopSlow(TARGET_ALL);
|
||||
|
||||
ObjSound_Play(death);
|
||||
|
||||
TExplosionA(ObjMove_GetX(targetenemyA), ObjMove_GetY(targetenemyA), 10, 0.5);
|
||||
TExplosionA(ObjMove_GetX(targetenemyB), ObjMove_GetY(targetenemyB), 10, 0.5);
|
||||
|
||||
Obj_Delete(targetboss);
|
||||
Obj_Delete(targetenemyA);
|
||||
Obj_Delete(targetenemyB);
|
||||
|
||||
wait(120);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
//////////////// GRAPHICAL/VISUAL-RELATED TASKS AND FUNCTIONS ////////////////
|
||||
|
||||
*/
|
||||
|
||||
// Handles boss markers during boss fights.
|
||||
|
||||
task _BossMarker(int targetenemy, markertex, int left, int top, int right, int bottom, float scale, float heightoffset){
|
||||
|
||||
int marker = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
ObjPrim_SetTexture(marker, markertex);
|
||||
ObjSprite2D_SetSourceRect(marker, left, top, right, bottom);
|
||||
ObjSprite2D_SetDestCenter(marker);
|
||||
ObjRender_SetScaleXYZ(marker, scale);
|
||||
Obj_SetRenderPriorityI(marker, 19);
|
||||
ObjRender_SetAlpha(marker, 255);
|
||||
//ObjRender_SetY(marker, GetStgFrameHeight()+heightoffset);
|
||||
|
||||
while(!Obj_IsDeleted(targetenemy)){
|
||||
ObjRender_SetPosition(marker, ObjRender_GetX(targetenemy)+(GetScreenWidth()-GetStgFrameWidth())/2, GetStgFrameHeight()+heightoffset+(GetScreenHeight()-GetStgFrameHeight())/2, 1);
|
||||
yield;
|
||||
}
|
||||
|
||||
Obj_Delete(marker);
|
||||
}
|
||||
|
||||
// Tasks that handle calling a spellcard. No spell card history.
|
||||
|
||||
task _DuoCutin(
|
||||
image1, image2,
|
||||
int rectleft, int recttop, int rectright, int rectbottom,
|
||||
int spellID, string spellname,
|
||||
float textsize, float bordersize, int bordercolor, int bonusbordercolor,
|
||||
float textstartx, float textendx, int render1, int render2
|
||||
){
|
||||
|
||||
// Handle the appearance and disappearances of the images
|
||||
|
||||
// 0 = upwards, 1 = downwards || 0 = left, 1 = right
|
||||
|
||||
// Handle the spell text
|
||||
|
||||
int spelltext = ObjText_Create();
|
||||
ObjText_SetText(spelltext, spellname);
|
||||
ObjText_SetFontType(spelltext, "Connecting Chain Handserif");
|
||||
|
||||
ObjText_SetFontSize(spelltext, textsize);
|
||||
ObjText_SetFontColorTop(spelltext, 255, 255, 255);
|
||||
ObjText_SetFontColorBottom(spelltext, 255, 255, 255);
|
||||
ObjText_SetFontBorderType(spelltext, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(spelltext, bordercolor);
|
||||
ObjText_SetFontBorderWidth(spelltext, bordersize);
|
||||
|
||||
ObjText_SetHorizontalAlignment(spelltext, ALIGNMENT_RIGHT);
|
||||
ObjText_SetMaxWidth(spelltext, GetStgFrameWidth);
|
||||
Obj_SetRenderPriorityI(spelltext, 79);
|
||||
ObjRender_SetPosition(spelltext, textstartx, GetStgFrameHeight/8-10, 0); // WIP
|
||||
ObjRender_SetAlpha(spelltext, 255);
|
||||
|
||||
// Handle the spell bonus
|
||||
|
||||
let objBonus = ObjText_Create();
|
||||
ObjText_SetFontSize(objBonus, 38);
|
||||
ObjText_SetFontBold(objBonus, true);
|
||||
ObjText_SetFontType(objBonus, "Anke Calligraph");
|
||||
ObjText_SetFontColorTop(objBonus, 255, 255, 255);
|
||||
ObjText_SetFontColorBottom(objBonus, 255, 255, 255);
|
||||
ObjText_SetFontBorderType(objBonus, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objBonus, bonusbordercolor);
|
||||
ObjText_SetFontBorderWidth(objBonus, 2);
|
||||
|
||||
ObjText_SetHorizontalAlignment(objBonus, ALIGNMENT_RIGHT);
|
||||
ObjText_SetMaxWidth(objBonus, GetStgFrameWidth-24);
|
||||
Obj_SetRenderPriorityI(objBonus, 79);
|
||||
ObjRender_SetPosition(objBonus, textendx, GetStgFrameHeight/8+12, 0); // WIP
|
||||
ObjRender_SetAlpha(objBonus, 255);
|
||||
|
||||
async{
|
||||
while(ObjEnemyBossScene_GetInfo(spellID, INFO_PLAYER_SHOOTDOWN_COUNT) == 0 && ObjEnemyBossScene_GetInfo(spellID, INFO_PLAYER_SPELL_COUNT) == 0)
|
||||
{
|
||||
int score = trunc(ObjEnemyBossScene_GetInfo(spellID, INFO_SPELL_SCORE)/10) * 10;
|
||||
score = min(score, 9999999990);
|
||||
let yass = DigitToCommaArray(score);
|
||||
ObjText_SetText(objBonus, yass);
|
||||
yield;
|
||||
}
|
||||
ObjText_SetText(objBonus, ":(");
|
||||
}
|
||||
|
||||
// Actually call the tasks and functions here
|
||||
|
||||
// Mm
|
||||
|
||||
int objCutin1 = _Create2DImage(image1, rectleft, recttop, rectright, rectbottom);
|
||||
int objCutin2 = _Create2DImage(image2, rectleft, recttop, rectright, rectbottom);
|
||||
|
||||
Obj_SetRenderPriorityI(objCutin1, render1);
|
||||
Obj_SetRenderPriorityI(objCutin2, render2);
|
||||
|
||||
_MoveVertical(objCutin1, 0, 0);
|
||||
_MoveVertical(objCutin2, 1, 1);
|
||||
|
||||
//WriteLog(ObjRender_GetY(objCutin1));
|
||||
|
||||
//_MoveIntoPlace(spelltext, textstartx, textendx);
|
||||
_FadeAtPlayer(spelltext);
|
||||
_FadeAtPlayer(objBonus);
|
||||
|
||||
while(ObjEnemyBossScene_GetInfo(spellID, INFO_CURRENT_LIFE) > 0){yield;}
|
||||
|
||||
Obj_Delete(spelltext);
|
||||
Obj_Delete(objBonus);
|
||||
|
||||
//return;
|
||||
|
||||
}
|
||||
|
||||
task _SoloCutin(
|
||||
image,
|
||||
int rectleft, int recttop, int rectright, int rectbottom,
|
||||
int bossID, int spellID, string spellname,
|
||||
float textsize, float bordersize, int bordercolor, int bonusbordercolor,
|
||||
float textstartx, float texty, int render
|
||||
){
|
||||
|
||||
// Handle the spell text
|
||||
|
||||
int spelltext = ObjText_Create();
|
||||
ObjText_SetText(spelltext, spellname);
|
||||
ObjText_SetFontType(spelltext, "Connecting Chain Handserif");
|
||||
|
||||
ObjText_SetFontSize(spelltext, textsize);
|
||||
ObjText_SetFontColorTop(spelltext, 255, 255, 255);
|
||||
ObjText_SetFontColorBottom(spelltext, 255, 255, 255);
|
||||
ObjText_SetFontBorderType(spelltext, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(spelltext, bordercolor);
|
||||
ObjText_SetFontBorderWidth(spelltext, bordersize);
|
||||
|
||||
ObjText_SetHorizontalAlignment(spelltext, ALIGNMENT_LEFT);
|
||||
//ObjText_SetMaxWidth(spelltext, GetStgFrameWidth);
|
||||
Obj_SetRenderPriorityI(spelltext, 79);
|
||||
ObjRender_SetPosition(spelltext, textstartx, texty, 0); // WIP
|
||||
ObjRender_SetAlpha(spelltext, 255);
|
||||
|
||||
// Handle the spell bonus
|
||||
|
||||
let objBonus = ObjText_Create();
|
||||
ObjText_SetFontSize(objBonus, textsize*1.25);
|
||||
ObjText_SetFontBold(objBonus, true);
|
||||
ObjText_SetFontType(objBonus, "Anke Calligraph");
|
||||
ObjText_SetFontColorTop(objBonus, 255, 255, 255);
|
||||
ObjText_SetFontColorBottom(objBonus, 255, 255, 255);
|
||||
ObjText_SetFontBorderType(objBonus, BORDER_FULL);
|
||||
ObjText_SetFontBorderColor(objBonus, bonusbordercolor);
|
||||
ObjText_SetFontBorderWidth(objBonus, 2);
|
||||
|
||||
ObjText_SetHorizontalAlignment(objBonus, ALIGNMENT_LEFT);
|
||||
//ObjText_SetMaxWidth(objBonus, GetStgFrameWidth-24);
|
||||
Obj_SetRenderPriorityI(objBonus, 79);
|
||||
ObjRender_SetPosition(objBonus, textstartx, texty+textsize-5, 0); // WIP
|
||||
ObjRender_SetAlpha(objBonus, 255);
|
||||
|
||||
async{
|
||||
while(ObjEnemyBossScene_GetInfo(spellID, INFO_PLAYER_SHOOTDOWN_COUNT) == 0 && ObjEnemyBossScene_GetInfo(spellID, INFO_PLAYER_SPELL_COUNT) == 0)
|
||||
{
|
||||
int score = trunc(ObjEnemyBossScene_GetInfo(spellID, INFO_SPELL_SCORE)/10) * 10;
|
||||
score = min(score, 9999999990);
|
||||
let yass = DigitToCommaArray(score);
|
||||
ObjText_SetText(objBonus, "Bonus: " ~ yass);
|
||||
yield;
|
||||
}
|
||||
ObjText_SetText(objBonus, "Bonus Failed...");
|
||||
}
|
||||
|
||||
// Actually call the tasks and functions here
|
||||
|
||||
// Mm
|
||||
|
||||
int objCutin = _Create2DImage(image, rectleft, recttop, rectright, rectbottom);
|
||||
|
||||
Obj_SetRenderPriorityI(objCutin, render);
|
||||
|
||||
_MoveDiagonal(objCutin, GetStgFrameWidth()*1.25, -120, GetStgFrameWidth()/2, GetStgFrameHeight()/2, -120, GetStgFrameHeight()*1.25);
|
||||
//WriteLog(Obj_IsVisible(spelltext));
|
||||
|
||||
//_MoveIntoPlace(spelltext, textstartx, textendx);
|
||||
_FadeAtPlayer(spelltext);
|
||||
_FadeAtPlayer(objBonus);
|
||||
|
||||
while(ObjEnemyBossScene_GetInfo(spellID, INFO_CURRENT_LIFE) > 0){yield;}
|
||||
|
||||
Obj_Delete(spelltext);
|
||||
Obj_Delete(objBonus);
|
||||
|
||||
//return;
|
||||
|
||||
}
|
||||
|
||||
// Tasks meant to be used with cutin tasks.
|
||||
|
||||
task _MoveVertical(int target, int move, int widthposition){
|
||||
|
||||
float positionstart = [GetStgFrameHeight()*1.5, -GetStgFrameHeight()][move];
|
||||
float positionmid = GetStgFrameHeight()/2;
|
||||
float positionend = [-GetStgFrameHeight()*1.5, GetStgFrameHeight()*1.5][move];
|
||||
|
||||
float positionhort = [3*GetStgFrameWidth/8, 6*GetStgFrameWidth/8][widthposition];
|
||||
|
||||
ObjRender_SetPosition(target, positionhort, positionstart, 0);
|
||||
|
||||
ascent(i in 0..30){
|
||||
ObjRender_SetY(target, Interpolate_Decelerate(positionstart, positionmid, i/30));
|
||||
yield;
|
||||
}
|
||||
|
||||
wait(30);
|
||||
|
||||
ascent(i in 0..30){
|
||||
ObjRender_SetY(target, Interpolate_Accelerate(positionmid, positionend, i/30));
|
||||
yield;
|
||||
}
|
||||
|
||||
Obj_Delete(target);
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
task _MoveDiagonal(int target, int startx, int starty, int midx, int midy, int endx, int endy){
|
||||
|
||||
//"
|
||||
|
||||
ObjRender_SetPosition(target, startx, endx, 1);
|
||||
|
||||
ascent(i in 0..30){
|
||||
ObjRender_SetPosition(target, Interpolate_Decelerate(startx, midx, i/30), Interpolate_Decelerate(starty, midy, i/30), 1);
|
||||
ObjRender_SetAlpha(target, Interpolate_Decelerate(0, 255, i/30));
|
||||
yield;
|
||||
}
|
||||
|
||||
wait(30);
|
||||
|
||||
ascent(i in 0..30){
|
||||
ObjRender_SetPosition(target, Interpolate_Decelerate(midx, endx, i/30), Interpolate_Decelerate(midy, endy, i/30), 1);
|
||||
ObjRender_SetAlpha(target, Interpolate_Decelerate(255, 0, i/30));
|
||||
yield;
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
task _MoveIntoPlace(int target, int startx, int endx){
|
||||
ascent(i in 0..30){
|
||||
ObjRender_SetX(target, Interpolate_Decelerate(startx, endx, i/30));
|
||||
ObjRender_SetAlpha(target, Interpolate_Decelerate(0, 255, i/30));
|
||||
yield;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
task _FadeAtPlayer(int target){
|
||||
wait(30);
|
||||
while(!Obj_IsDeleted(target)){
|
||||
int player = GetPlayerObjectID();
|
||||
if(ObjRender_GetY(player) <= GetStgFrameHeight()/3.5){ObjRender_SetAlpha(target, 60);}
|
||||
else{ObjRender_SetAlpha(target, 255);}
|
||||
yield;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Enemy render tasks
|
||||
|
||||
/*
|
||||
These render tasks assume the order of the spritesheet goes like this:
|
||||
|
||||
Idle Idle2 Idle3 ...
|
||||
Left Left2 Left3 ...
|
||||
Right
|
||||
|
||||
*/
|
||||
|
||||
task _RenderEnemyMovement(int obj, int frame, int offsetleft, int offsettop, int width, int height, float flipscale, int frameno, int speed){
|
||||
|
||||
ObjSprite2D_SetSourceRect(obj, offsetleft+width*floor(frame/speed), offsettop, width+width*floor(frame/speed), offsettop+height);
|
||||
ObjRender_SetScaleX(obj, flipscale);
|
||||
|
||||
}
|
||||
|
||||
task _EnemyRenderFull(int enemyobj, int texture, int offsetleft, int offsettop, int width, int height, int framenoidle, int framenomovement, int speed){
|
||||
|
||||
int aniidle = 0;
|
||||
int animove = 0;
|
||||
|
||||
while(!Obj_IsDeleted(enemyobj)){
|
||||
|
||||
float dir = ObjMove_GetAngle(enemyobj);
|
||||
float speed = ObjMove_GetSpeed(enemyobj);
|
||||
|
||||
// Idle
|
||||
if (speed == 0){
|
||||
_RenderEnemyMovement(enemyobj, aniidle, offsetleft, offsettop, width, height, 1, framenoidle, speed);
|
||||
aniidle++;
|
||||
if(aniidle >= speed*framenoidle){aniidle = 0;}
|
||||
}
|
||||
// Left
|
||||
else if (cos(dir) < 0){
|
||||
_RenderEnemyMovement(enemyobj, aniidle, offsetleft, offsettop+height, width, height*2, 1, framenomovement, speed);
|
||||
animove++;
|
||||
if(animove >= speed*framenomovement){animove = 0;}
|
||||
}
|
||||
// Right
|
||||
else if (cos(dir) > 0){
|
||||
_RenderEnemyMovement(enemyobj, aniidle, offsetleft, offsettop+height*2, width, height*3, 1, framenomovement, speed);
|
||||
animove++;
|
||||
if(animove >= speed*framenomovement){animove = 0;}
|
||||
}
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
// Drop a number of point items and petals depending on how fast you kill the enemy and how close you are to them.
|
||||
|
||||
task _EnemyItemDrop(
|
||||
int ID, bool isFlying,
|
||||
int minPoint, int minPIV,
|
||||
int maxPoint, int maxPIV,
|
||||
int maxTimer, int maxDist
|
||||
){
|
||||
|
||||
//wait(spawnTime+5);
|
||||
float enmX = ObjMove_GetX(ID), enmY = ObjMove_GetY(ID);
|
||||
int Bitch = ID;
|
||||
float timer = 1;
|
||||
float dmgCheck = 0;
|
||||
|
||||
ObjEnemy_SetDamageRate(Bitch, 100, 100);
|
||||
|
||||
while(ObjEnemy_GetInfo(Bitch, INFO_LIFE) > 0){
|
||||
|
||||
enmX = ObjMove_GetX(Bitch);
|
||||
enmY = ObjMove_GetY(Bitch);
|
||||
timer++;
|
||||
yield;
|
||||
|
||||
}
|
||||
|
||||
if(
|
||||
(-128 < enmX && enmX < STG_WIDTH+128)
|
||||
&&
|
||||
(-128 < enmY && enmY < STG_HEIGHT+128)
|
||||
)
|
||||
|
||||
{
|
||||
|
||||
if (isFlying) {SetCommonDataPtr(FLYINGENM_PTR, GetCommonDataPtr(FLYINGENM_PTR, 0)+1);}
|
||||
else {SetCommonDataPtr(GROUNDENM_PTR, GetCommonDataPtr(GROUNDENM_PTR, 0)+1);}
|
||||
|
||||
//_ExplosionEffect(enmX, enmY, PetalEffect);
|
||||
//_ScorePopup(float enmX, float enmY, int pointNum, int pivNum);
|
||||
|
||||
// NotifyEvent is faster than NotifyEventAll, considering how the item event will be called many times.
|
||||
|
||||
NotifyEvent(GetCommonDataPtr(ITEMID_PTR, 0), EV_DROP_POINT_ENEMY, [enmX, enmY], timer, maxTimer, minPoint, maxPoint);
|
||||
//NotifyEvent(GetCommonDataPtr(ITEMID_PTR, 0), EV_DROP_PIV_ENEMY, GetPlayerObjectID(), [enmX, enmY], minPIV, maxPIV, maxDist);
|
||||
NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR, 0), EV_EXPLODE, [enmX, enmY]);
|
||||
|
||||
}
|
||||
|
||||
else{}
|
||||
|
||||
}
|
||||
|
||||
// Overload with special weapon ammo
|
||||
|
||||
task _EnemyItemDrop(
|
||||
int ID, bool isFlying,
|
||||
float minPoint, float minPIV, float minAmmo,
|
||||
float maxPoint, float maxPIV, float maxAmmo,
|
||||
float maxTimer, float maxDist
|
||||
){
|
||||
|
||||
//wait(spawnTime+5);
|
||||
float enmX = ObjMove_GetX(ID), enmY = ObjMove_GetY(ID);
|
||||
int Bitch = ID;
|
||||
float timer = 1;
|
||||
float dmgCheck = 0;
|
||||
|
||||
ObjEnemy_SetDamageRate(Bitch, 100, 100);
|
||||
|
||||
while(ObjEnemy_GetInfo(Bitch, INFO_LIFE) > 0){
|
||||
|
||||
enmX = ObjMove_GetX(Bitch);
|
||||
enmY = ObjMove_GetY(Bitch);
|
||||
timer++;
|
||||
yield;
|
||||
|
||||
}
|
||||
|
||||
if(
|
||||
(-128 < enmX && enmX < STG_WIDTH+128)
|
||||
&&
|
||||
(-128 < enmY && enmY < STG_HEIGHT+128)
|
||||
)
|
||||
|
||||
{
|
||||
|
||||
if (isFlying) {SetCommonDataPtr(FLYINGENM_PTR, GetCommonDataPtr(FLYINGENM_PTR, 0)+1);}
|
||||
else {SetCommonDataPtr(GROUNDENM_PTR, GetCommonDataPtr(GROUNDENM_PTR, 0)+1);}
|
||||
|
||||
//_ExplosionEffect(enmX, enmY, PetalEffect);
|
||||
//_ScorePopup(float enmX, float enmY, int pointNum, int pivNum);
|
||||
|
||||
// NotifyEvent is faster than NotifyEventAll, considering how the item event will be called many times.
|
||||
|
||||
NotifyEvent(GetCommonDataPtr(ITEMID_PTR, 0), EV_DROP_POINT_ENEMY, [enmX, enmY], timer, maxTimer, minPoint, maxPoint);
|
||||
|
||||
// Comment these out for NarumiSTG
|
||||
|
||||
//NotifyEvent(GetCommonDataPtr(ITEMID_PTR, 0), EV_DROP_PIV_ENEMY, GetPlayerObjectID(), [enmX, enmY], minPIV, maxPIV, maxDist);
|
||||
//NotifyEvent(GetCommonDataPtr(ITEMID_PTR, 0), EV_DROP_AMMO_ENEMY, GetPlayerObjectID(), [enmX, enmY], minAmmo, maxAmmo, maxDist);
|
||||
NotifyEvent(GetCommonDataPtr(SYSTEMID_PTR, 0), EV_EXPLODE, [enmX, enmY]);
|
||||
|
||||
}
|
||||
|
||||
else{}
|
||||
|
||||
}
|
440
script/KevinSystem/Universal_Lib.txt
Normal file
|
@ -0,0 +1,440 @@
|
|||
/* --------------------------------------------------------------------
|
||||
|
||||
/////////////// UNIVERSAL/GENERAL LIBRARY /////////////////
|
||||
|
||||
A library meant for universal functions and including other libraries.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
let blipVol = 3 * GetAreaCommonData("Config", "SEVol", 100) * 0.01;
|
||||
|
||||
#include "script/KevinSystem/kevin_system/Lib_Const.dnh"
|
||||
|
||||
#include "script/KevinSystem/kevin_system/Kevin_ItemLib.txt"
|
||||
#include "script/KevinSystem/kevin_system/Kevin_ItemConst.txt"
|
||||
#include "script/default_system/Default_Effect.txt" // Probably change this somewhere down the line.
|
||||
|
||||
#include "script/KevinSystem/GeneralSoundLib.txt" // Ryannlib momento
|
||||
#include "script/KevinSystem/TerraShot2x/shot_const.dnh"
|
||||
|
||||
#include "script/KevinSystem/Universal_EnemyLib.dnh"
|
||||
|
||||
#include "script/KevinSystem/KevinShot/shotconst_HD.txt"
|
||||
|
||||
// Convenience constants
|
||||
|
||||
// Placeholder
|
||||
|
||||
let invalid = "script/KevinSystem/img/lol.png";
|
||||
|
||||
LoadTextureEx(invalid, true, true);
|
||||
|
||||
let sound = ObjSound_Create();
|
||||
ObjSound_Load(sound, "script/game/resourceLib/dialogueblip.wav");
|
||||
ObjSound_SetVolumeRate(sound, 100 * blipVol);
|
||||
ObjSound_SetSoundDivision(sound, SOUND_SE);
|
||||
|
||||
// Shortened version of very commonly used functions
|
||||
|
||||
function <float> FUNC_LERP_DECEL(a, b, x){
|
||||
float res = Interpolate_Decelerate(a, b, x);
|
||||
return res;
|
||||
}
|
||||
|
||||
function <float> FUNC_LERP_ACCEL(a, b, x){
|
||||
float res = Interpolate_Accelerate(a, b, x);
|
||||
return res;
|
||||
}
|
||||
|
||||
function <float> FUNC_LERP_LINEAR(a, b, x){
|
||||
float res = Interpolate_Linear(a, b, x);
|
||||
return res;
|
||||
}
|
||||
|
||||
function <float> FUNC_LERP_SMOOTH(a, b, x){
|
||||
float res = Interpolate_Smooth(a, b, x);
|
||||
return res;
|
||||
}
|
||||
|
||||
function <float> FUNC_LERP_SMOOTHER(a, b, x){
|
||||
float res = Interpolate_Smoother(a, b, x);
|
||||
return res;
|
||||
}
|
||||
|
||||
//_EffectListPreRender(PetalEffect, testEnemyTex, [1536, 0, 1792, 256]);
|
||||
_SoundTask;
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
// thanks mugenri uwu
|
||||
|
||||
function <void> TTextScroll(int obj_, string text_) { //Makes text fill gradually in text boxes
|
||||
|
||||
bool dialogEnd = false;
|
||||
bool sentenceEnd = false;
|
||||
string[] tempStrings = SplitString(text_, "/"); //use / for newlines instead of [r]
|
||||
string tempString = "";
|
||||
char lastChar;
|
||||
int waitTime;
|
||||
|
||||
async{
|
||||
while(!dialogEnd){
|
||||
if(sentenceEnd){wait(4); continue;}
|
||||
else{ObjSound_Play(sound); wait(4);}
|
||||
}
|
||||
}
|
||||
|
||||
if (GetVirtualKeyState(VK_OK) == KEY_PUSH) { //Prevents skipping the yield
|
||||
SetVirtualKeyState(VK_OK, KEY_FREE);
|
||||
}
|
||||
|
||||
ascent (i in 0..length(tempStrings)) { //list of substrings
|
||||
ascent (j in 0..length(tempStrings[i])) { //for each character in a substring
|
||||
tempString ~= [tempStrings[i][j]];
|
||||
lastChar = tempString[-1];
|
||||
ObjText_SetText(obj_, tempString);
|
||||
if([tempStrings[i][j]] == "." ||
|
||||
[tempStrings[i][j]] == "," ||
|
||||
[tempStrings[i][j]] == "!" ) {sentenceEnd = true; wait(10);}
|
||||
else {wait(2); sentenceEnd = false;}
|
||||
}
|
||||
tempString ~= ['[','r',']']; //append a newline after each substring
|
||||
}
|
||||
|
||||
dialogEnd = true;
|
||||
wait(30);
|
||||
|
||||
}
|
||||
|
||||
// Simple text object creation (adapted from mkm)
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
// Simple 2D image creation
|
||||
|
||||
function <int> _Create2DImage(imgpath, int rectleft, int recttop, int rectright, int rectbottom){
|
||||
|
||||
int imgname = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
ObjPrim_SetTexture(imgname, imgpath);
|
||||
ObjSprite2D_SetSourceRect(imgname, rectleft, recttop, rectright, rectbottom);
|
||||
ObjSprite2D_SetDestCenter(imgname);
|
||||
//ObjRender_SetPosition(imgname, positionstart)
|
||||
|
||||
return imgname;
|
||||
}
|
||||
|
||||
// Overload that uses arrays instead
|
||||
|
||||
function <int> _Create2DImage(imgpath, int[] rectarray){
|
||||
|
||||
int imgname = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
ObjPrim_SetTexture(imgname, imgpath);
|
||||
ObjSprite2D_SetSourceRect(imgname, rectarray);
|
||||
ObjSprite2D_SetDestCenter(imgname);
|
||||
//ObjRender_SetPosition(imgname, positionstart)
|
||||
|
||||
return imgname;
|
||||
}
|
||||
|
||||
// Overload with texture load option
|
||||
|
||||
function <int> _Create2DImage(imgpath, int[] rectarray, bool loadEx){
|
||||
|
||||
if(loadEx){LoadTextureEx(imgpath, true, true);}
|
||||
|
||||
int imgname = ObjPrim_Create(OBJ_SPRITE_2D);
|
||||
ObjPrim_SetTexture(imgname, imgpath);
|
||||
ObjSprite2D_SetSourceRect(imgname, rectarray);
|
||||
ObjSprite2D_SetDestCenter(imgname);
|
||||
//ObjRender_SetPosition(imgname, positionstart)
|
||||
|
||||
return imgname;
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Task to make bullet fade after a certain time, bullet loses hitbox while fading
|
||||
|
||||
task _EnemyShotFade(int target, int time, bool fadedelay, float delaymultiplier){
|
||||
ObjShot_SetDeleteFrame(target, time);
|
||||
if (fadedelay){
|
||||
wait(time-time/delaymultiplier);
|
||||
ObjShot_SetIntersectionEnable(target, false);
|
||||
ascent(i in 0..time/delaymultiplier){
|
||||
ObjRender_SetAlpha(target, Interpolate_Smoother(ObjRender_GetAlpha(target), 0, i/(time/delaymultiplier)));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
else{
|
||||
ascent(i in 0..time){
|
||||
ObjRender_SetAlpha(target, Interpolate_Smoother(ObjRender_GetAlpha(target), 0, i/time));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Delay function by Naudiz
|
||||
|
||||
task _Delay(target, del){
|
||||
|
||||
ObjShot_SetDelay(target, del);
|
||||
ObjShot_SetDelayGraphic(target, ObjShot_GetImageID(target)); // unless you already have the ID in the function somewhere, in which case you can just use that, or use any other graphic
|
||||
ObjShot_SetDelayMode(target, DELAY_LERP, LERP_ACCELERATE, LERP_DECELERATE); // delay mode, scale lerp, alpha lerp (these are the modes I use in my entry)
|
||||
ObjShot_SetDelayColoringEnable(target, true);
|
||||
ObjShot_SetDelayScaleParameter(target, 1, 2, del); // lerps from 2 to 1 scale in del frames (use the value from ObjShot_SetDelay for del)
|
||||
ObjShot_SetDelayAlphaParameter(target, 1, 0, del); // lerps from 0 to 1 (255) alpha in del frames
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Overloads by me
|
||||
|
||||
task _Delay(target, del, orgscale, destscale, orgalpha, destalpha, scalelerp, alphalerp){
|
||||
|
||||
ObjShot_SetDelay(target, del);
|
||||
ObjShot_SetDelayGraphic(target, ObjShot_GetImageID(target));
|
||||
ObjShot_SetDelayColoringEnable(target, true);
|
||||
ObjShot_SetDelayMode(target, DELAY_LERP, scalelerp, alphalerp);
|
||||
ObjShot_SetDelayScaleParameter(target, destscale, orgscale, del);
|
||||
ObjShot_SetDelayAlphaParameter(target, destalpha, orgalpha, del);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
task _Delay(target, del, orgscale, destscale, orgalpha, destalpha){
|
||||
|
||||
ObjShot_SetDelay(target, del);
|
||||
ObjShot_SetDelayGraphic(target, ObjShot_GetImageID(target));
|
||||
ObjShot_SetDelayColoringEnable(target, true);
|
||||
ObjShot_SetDelayMode(target, DELAY_LERP, LERP_ACCELERATE, LERP_DECELERATE);
|
||||
ObjShot_SetDelayScaleParameter(target, destscale, orgscale, del);
|
||||
ObjShot_SetDelayAlphaParameter(target, destalpha, orgalpha, del);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
task _Delay(target, del, orgscale, orgalpha){
|
||||
|
||||
ObjShot_SetDelay(target, del);
|
||||
ObjShot_SetDelayGraphic(target, ObjShot_GetImageID(target));
|
||||
ObjShot_SetDelayColoringEnable(target, true);
|
||||
ObjShot_SetDelayMode(target, DELAY_LERP, LERP_ACCELERATE, LERP_DECELERATE);
|
||||
ObjShot_SetDelayScaleParameter(target, 1, orgscale, del);
|
||||
ObjShot_SetDelayAlphaParameter(target, 1, orgalpha, del);
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
// Rescales the bullet. Very important.
|
||||
|
||||
task _BulletRescale(target, float scale, bool hitboxscale, hitboxlevel){
|
||||
|
||||
ObjRender_SetScaleXYZ(target, scale, scale, 1);
|
||||
|
||||
if (hitboxscale){
|
||||
ObjShot_SetIntersectionScaleXY(target, scale*hitboxlevel, scale*hitboxlevel);
|
||||
return;
|
||||
}
|
||||
|
||||
else{return;}
|
||||
|
||||
}
|
||||
|
||||
// Item drop functions.
|
||||
|
||||
//////////// TO-DO: Move all item creation to the item script, rendering both of these tasks obsolete. ////////////
|
||||
|
||||
task _NonspellItemDrop(int targetscene, int targetenemy, int itemamount){
|
||||
|
||||
float ex = ObjMove_GetX(targetenemy);
|
||||
float ey = ObjMove_GetY(targetenemy);
|
||||
|
||||
if(ObjEnemyBossScene_GetInfo(targetscene, INFO_PLAYER_SHOOTDOWN_COUNT) == 0){
|
||||
loop(itemamount){
|
||||
CreateScoreItem(POINT_REGULAR, rand(ex-90, ex+90), rand(ey-90, ey+90));
|
||||
}
|
||||
}
|
||||
else{
|
||||
loop(trunc(itemamount/2)){
|
||||
CreateScoreItem(POINT_REGULAR, rand(ex-90, ex+90), rand(ey-90, ey+90));
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
task _SpellItemDrop(int targetscene, int targetenemy, int itemamount){
|
||||
|
||||
float ex = ObjMove_GetX(targetenemy);
|
||||
float ey = ObjMove_GetY(targetenemy);
|
||||
|
||||
if(ObjEnemyBossScene_GetInfo(targetscene, INFO_PLAYER_SHOOTDOWN_COUNT) == 0 && ObjEnemyBossScene_GetInfo(targetscene, INFO_PLAYER_SPELL_COUNT) == 0){
|
||||
loop(itemamount){
|
||||
CreateScoreItem(POINT_BHESTIE, rand(ex-90, ex+90), rand(ey-90, ey+90));
|
||||
}
|
||||
}
|
||||
else if (ObjEnemyBossScene_GetInfo(targetscene, INFO_PLAYER_SHOOTDOWN_COUNT) == 0 && ObjEnemyBossScene_GetInfo(targetscene, INFO_PLAYER_SPELL_COUNT) >= 0){
|
||||
loop(trunc(itemamount/2)){
|
||||
CreateScoreItem(POINT_BHESTIE, rand(ex-90, ex+90), rand(ey-90, ey+90));
|
||||
}
|
||||
}
|
||||
else{}
|
||||
|
||||
}
|
||||
|
||||
// By Neck_Logo
|
||||
|
||||
task _CreateCustomTelegraphLine(
|
||||
float posX_, float posY_,
|
||||
float initAngle_, float destAngle_,
|
||||
float initLength_, float destLength_,
|
||||
float initWidth_, float destWidth_,
|
||||
int color_, int maxAlpha_,
|
||||
float growthTime_, float lifeTime_, float fadeTime_
|
||||
) // damn this is some cursed indenting
|
||||
{
|
||||
int scene = GetEnemyBossSceneObjectID();
|
||||
|
||||
let _shotF_Telegraph_Line = ObjParticleList_Create(OBJ_PARTICLE_LIST_2D);
|
||||
ObjPrim_SetTexture(_shotF_Telegraph_Line, invalid);
|
||||
|
||||
Obj_SetRenderPriorityI(_shotF_Telegraph_Line, 37);
|
||||
ObjPrim_SetPrimitiveType(_shotF_Telegraph_Line, PRIMITIVE_TRIANGLELIST);
|
||||
ObjPrim_SetVertexCount(_shotF_Telegraph_Line, 4);
|
||||
|
||||
ObjRender_SetBlendType(_shotF_Telegraph_Line, BLEND_ALPHA);
|
||||
|
||||
//
|
||||
|
||||
float dU = 0.5, dV = 0.5;
|
||||
// Left-top, right-top, left-bottom, right-bottom
|
||||
|
||||
ObjPrim_SetVertexUVT(_shotF_Telegraph_Line, 0, 0, 0);
|
||||
ObjPrim_SetVertexUVT(_shotF_Telegraph_Line, 1, 1, 0);
|
||||
ObjPrim_SetVertexUVT(_shotF_Telegraph_Line, 2, 0, 1);
|
||||
ObjPrim_SetVertexUVT(_shotF_Telegraph_Line, 3, 1, 1);
|
||||
|
||||
// Vertex positions are offset with deltas so that the sprite is centered
|
||||
|
||||
ObjPrim_SetVertexPosition(_shotF_Telegraph_Line, 0, -dU, -dV, 1);
|
||||
ObjPrim_SetVertexPosition(_shotF_Telegraph_Line, 1, dU, -dV, 1);
|
||||
ObjPrim_SetVertexPosition(_shotF_Telegraph_Line, 2, -dU, dV, 1);
|
||||
ObjPrim_SetVertexPosition(_shotF_Telegraph_Line, 3, dU, dV, 1);
|
||||
|
||||
ObjPrim_SetVertexIndex(_shotF_Telegraph_Line, [0, 1, 2, 1, 2, 3]);
|
||||
|
||||
float angle = initAngle_;
|
||||
float span = initLength_;
|
||||
float width = initWidth_;
|
||||
int alpha = 0;
|
||||
|
||||
//_CreateParticleList();
|
||||
_TelegraphLineControl();
|
||||
|
||||
if(scene != ID_INVALID){
|
||||
// growth phase
|
||||
for (int i = 1; i <= growthTime_ && 0 < ObjEnemyBossScene_GetInfo(scene, INFO_ACTIVE_STEP_TOTAL_LIFE); i++) {
|
||||
width = Interpolate_Decelerate(initWidth_, destWidth_, i / growthTime_);
|
||||
alpha = Interpolate_Decelerate(0, maxAlpha_+32, i / growthTime_);
|
||||
RenderTelegraphLine();
|
||||
yield;
|
||||
}
|
||||
|
||||
// static phase
|
||||
for (int j = 1; j <= lifeTime_ && 0 < ObjEnemyBossScene_GetInfo(scene, INFO_ACTIVE_STEP_TOTAL_LIFE); j++) {
|
||||
RenderTelegraphLine();
|
||||
yield;
|
||||
}
|
||||
|
||||
if (!(0 < ObjEnemyBossScene_GetInfo(scene, INFO_ACTIVE_STEP_TOTAL_LIFE))) fadeTime_ = min(fadeTime_, 25);
|
||||
|
||||
}
|
||||
|
||||
else{
|
||||
for (int i = 1; i <= growthTime_ ; i++) {
|
||||
width = Interpolate_Decelerate(initWidth_, destWidth_, i / growthTime_);
|
||||
alpha = Interpolate_Decelerate(0, maxAlpha_+32, i / growthTime_);
|
||||
RenderTelegraphLine();
|
||||
yield;
|
||||
}
|
||||
|
||||
// static phase
|
||||
for (int j = 1; j <= lifeTime_; j++) {
|
||||
RenderTelegraphLine();
|
||||
yield;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
destWidth_ = width;
|
||||
maxAlpha_ = alpha;
|
||||
|
||||
// deletion phase
|
||||
for (int k = 1; k <= fadeTime_; k++) {
|
||||
width = Interpolate_Accelerate(destWidth_, destWidth_ - (destWidth_ - initWidth_) / 2, k / fadeTime_);
|
||||
alpha = Interpolate_Accelerate(maxAlpha_+32, 0, k / fadeTime_);
|
||||
RenderTelegraphLine();
|
||||
yield;
|
||||
}
|
||||
|
||||
Obj_Delete(_shotF_Telegraph_Line);
|
||||
|
||||
task _TelegraphLineControl() {
|
||||
for (int l = 1; l <= growthTime_ + lifeTime_; l++) {
|
||||
angle = Interpolate_Decelerate(initAngle_, destAngle_, l / (growthTime_ + lifeTime_));
|
||||
span = Interpolate_Decelerate(initLength_, destLength_, l / (growthTime_ + lifeTime_));
|
||||
yield;
|
||||
}
|
||||
}
|
||||
|
||||
function <void> RenderTelegraphLine() {
|
||||
|
||||
float midX = posX_ + span * cos(angle) + (width / 2) * cos(angle + 90);
|
||||
float midY = posY_ + span * sin(angle) + (width / 2) * sin(angle + 90);
|
||||
|
||||
ObjParticleList_SetPosition(_shotF_Telegraph_Line, midX, midY, 1);
|
||||
ObjParticleList_SetScale(_shotF_Telegraph_Line, span, width, 1);
|
||||
ObjParticleList_SetAngleZ(_shotF_Telegraph_Line, angle);
|
||||
ObjParticleList_SetColor(_shotF_Telegraph_Line, color_);
|
||||
ObjParticleList_SetAlpha(_shotF_Telegraph_Line, alpha);
|
||||
ObjParticleList_AddInstance(_shotF_Telegraph_Line);
|
||||
|
||||
}
|
||||
|
||||
//return _shotF_Telegraph_Line;
|
||||
}
|