DNF/sqr/character/atmage/lightningwall/ap_lightningwall.nut

94 lines
2.5 KiB
Plaintext
Raw Normal View History

2024-03-30 00:19:16 +08:00
AP_LIGHTNING_WALL_VAR_ELECT_OBJ <- 0;
AP_LIGHTNING_WALL_VAR_START_Z <- 1;
function sq_AddFunctionName(appendage)
{
appendage.sq_AddFunctionName("proc", "proc_appendage_LightningWall")
appendage.sq_AddFunctionName("onStart", "onStart_appendage_LightningWall")
appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_LightningWall")
}
function sq_AddEffect(appendage)
{
}
function proc_appendage_LightningWall(appendage)
{
if(!appendage) {
return;
}
local parentObj = appendage.getParent();
local sourceObj = appendage.getSource();
if(!sourceObj || !parentObj) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local startZ = var.getInt(AP_LIGHTNING_WALL_VAR_START_Z);
local z = sq_GetShuttleValue(0, 8, sq_GetObjectTime(parentObj), 40);
parentObj.setCurrentPos(parentObj.getXPos(), parentObj.getYPos(), startZ + z);
local elect = var.getObject(AP_LIGHTNING_WALL_VAR_ELECT_OBJ);
if(elect)
elect.setCurrentPos(parentObj.getXPos(), parentObj.getYPos()+1, parentObj.getZPos() + parentObj.getObjectHeight()/2);
local ani = parentObj.getCurrentAnimation();
local rgb = z < 4 ? 255 : 0;
if(ani)
ani.setEffectLayer(true, GRAPHICEFFECT_MONOCHROME, true, sq_RGB(rgb,rgb,rgb), sq_ALPHA(255), true, true);
}
function onStart_appendage_LightningWall(appendage)
{
if(!appendage) {
return;
}
local parentObj = appendage.getParent();
local sourceObj = appendage.getSource();
if(!sourceObj || !parentObj) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local elect = sq_AddDrawOnlyAniFromParent(parentObj,"PassiveObject/Character/Mage/Animation/ATLightningWall/12_el-shock_dodge.ani", 0, 0, 0);
elect.setCurrentPos(parentObj.getXPos(), parentObj.getYPos()+1, parentObj.getZPos() + parentObj.getObjectHeight()/2);
local sizeRate = sq_GetUniformVelocity(5,15,parentObj.getObjectHeight() - 100, 150);
sizeRate = sizeRate.tofloat()/10.0;
local ani = elect.getCurrentAnimation();
if(ani)
ani.resize(sizeRate);
var.setObject(AP_LIGHTNING_WALL_VAR_ELECT_OBJ, elect);
var.setInt(AP_LIGHTNING_WALL_VAR_START_Z, parentObj.getZPos());
parentObj.sq_PlaySound("LIGHTWALL_ELEC");
}
function onEnd_appendage_LightningWall(appendage)
{
if(!appendage) {
return;
}
printc("onEnd_appendage_LightningWall");
local var = appendage.getVar();
local elect = var.getObject(AP_LIGHTNING_WALL_VAR_ELECT_OBJ);
if(elect) {
elect.setValid(false);
printc("onEnd_appendage_LightningWall");
}
}