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

94 lines
2.5 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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");
}
}