2015-05-19 21:54:34 +00:00
|
|
|
//-------------------------------------------------------------------------
|
|
|
|
/*
|
|
|
|
Copyright (C) 1997, 2005 - 3D Realms Entertainment
|
|
|
|
|
|
|
|
This file is part of Shadow Warrior version 1.2
|
|
|
|
|
|
|
|
Shadow Warrior is free software; you can redistribute it and/or
|
|
|
|
modify it under the terms of the GNU General Public License
|
|
|
|
as published by the Free Software Foundation; either version 2
|
|
|
|
of the License, or (at your option) any later version.
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
|
|
|
|
|
|
See the GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with this program; if not, write to the Free Software
|
|
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
|
|
|
|
|
|
Original Source: 1997 - Frank Maddin and Jim Norwood
|
|
|
|
Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
|
|
|
|
*/
|
|
|
|
//-------------------------------------------------------------------------
|
2019-10-09 16:09:05 +00:00
|
|
|
#include "ns.h"
|
|
|
|
|
2015-05-19 21:54:34 +00:00
|
|
|
#include "build.h"
|
|
|
|
|
|
|
|
#include "names2.h"
|
|
|
|
#include "panel.h"
|
|
|
|
#include "game.h"
|
|
|
|
#include "tags.h"
|
|
|
|
#include "ai.h"
|
|
|
|
#include "pal.h"
|
|
|
|
#include "player.h"
|
2019-03-21 02:24:19 +00:00
|
|
|
#include "network.h"
|
2020-08-05 22:18:45 +00:00
|
|
|
#include "misc.h"
|
2015-05-19 21:54:34 +00:00
|
|
|
#include "sprite.h"
|
|
|
|
|
2019-10-09 16:09:05 +00:00
|
|
|
BEGIN_SW_NS
|
|
|
|
|
2015-05-19 21:54:34 +00:00
|
|
|
//int InitActorMoveCloser(short SpriteNum);
|
|
|
|
|
|
|
|
DECISION GirlNinjaBattle[] =
|
|
|
|
{
|
|
|
|
{499, InitActorMoveCloser},
|
|
|
|
//{509, InitActorAmbientNoise},
|
|
|
|
//{710, InitActorRunAway},
|
|
|
|
{1024, InitActorAttack}
|
|
|
|
};
|
|
|
|
|
|
|
|
DECISION GirlNinjaOffense[] =
|
|
|
|
{
|
|
|
|
{499, InitActorMoveCloser},
|
|
|
|
//{509, InitActorAmbientNoise},
|
|
|
|
{1024, InitActorAttack}
|
|
|
|
};
|
|
|
|
|
|
|
|
DECISION GirlNinjaBroadcast[] =
|
|
|
|
{
|
|
|
|
//{1, InitActorAlertNoise},
|
|
|
|
{6, InitActorAmbientNoise},
|
|
|
|
{1024, InitActorDecide}
|
|
|
|
};
|
|
|
|
|
|
|
|
DECISION GirlNinjaSurprised[] =
|
|
|
|
{
|
|
|
|
{701, InitActorMoveCloser},
|
|
|
|
{1024, InitActorDecide}
|
|
|
|
};
|
|
|
|
|
|
|
|
DECISION GirlNinjaEvasive[] =
|
|
|
|
{
|
|
|
|
{400, InitActorDuck}, // 100
|
|
|
|
// {300, InitActorEvade},
|
|
|
|
// {800, InitActorRunAway},
|
2021-07-10 12:25:18 +00:00
|
|
|
{1024, nullptr}
|
2015-05-19 21:54:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
DECISION GirlNinjaLostTarget[] =
|
|
|
|
{
|
|
|
|
{900, InitActorFindPlayer},
|
|
|
|
{1024, InitActorWanderAround}
|
|
|
|
};
|
|
|
|
|
|
|
|
DECISION GirlNinjaCloseRange[] =
|
|
|
|
{
|
|
|
|
{900, InitActorAttack },
|
|
|
|
{1024, InitActorReposition }
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
!AIC - Collection of decision tables
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
PERSONALITY GirlNinjaPersonality =
|
|
|
|
{
|
|
|
|
GirlNinjaBattle,
|
|
|
|
GirlNinjaOffense,
|
|
|
|
GirlNinjaBroadcast,
|
|
|
|
GirlNinjaSurprised,
|
|
|
|
GirlNinjaEvasive,
|
|
|
|
GirlNinjaLostTarget,
|
|
|
|
GirlNinjaCloseRange,
|
|
|
|
GirlNinjaCloseRange
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
ATTRIBUTE GirlNinjaAttrib =
|
|
|
|
{
|
|
|
|
{120, 140, 160, 190}, // Speeds
|
|
|
|
{4, 0, 0, -2}, // Tic Adjusts
|
|
|
|
3, // MaxWeapons;
|
|
|
|
{
|
|
|
|
DIGI_GIRLNINJAALERT, DIGI_GIRLNINJAALERT, DIGI_STAR,
|
|
|
|
DIGI_GIRLNINJAALERTT, DIGI_GIRLNINJASCREAM,0,0,0,0,0
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA RUN
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
ANIMATOR DoGirlNinjaMove, DoGirlNinjaCrawl, DoStayOnFloor, NullGirlNinja, DoActorJump, DoActorFall, DoActorDebris, DoGirlNinjaHariKari, DoActorSlide;
|
|
|
|
ANIMATOR InitActorDecide;
|
|
|
|
|
|
|
|
#define GIRLNINJA_RATE 18
|
|
|
|
|
|
|
|
STATE s_GirlNinjaRun[5][4] =
|
|
|
|
{
|
|
|
|
|
|
|
|
{
|
|
|
|
{GIRLNINJA_RUN_R0 + 0, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[0][1]},
|
|
|
|
{GIRLNINJA_RUN_R0 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[0][2]},
|
|
|
|
{GIRLNINJA_RUN_R0 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[0][3]},
|
|
|
|
{GIRLNINJA_RUN_R0 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[0][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_RUN_R1 + 0, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[1][1]},
|
|
|
|
{GIRLNINJA_RUN_R1 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[1][2]},
|
|
|
|
{GIRLNINJA_RUN_R1 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[1][3]},
|
|
|
|
{GIRLNINJA_RUN_R1 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[1][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_RUN_R2 + 0, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[2][1]},
|
|
|
|
{GIRLNINJA_RUN_R2 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[2][2]},
|
|
|
|
{GIRLNINJA_RUN_R2 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[2][3]},
|
|
|
|
{GIRLNINJA_RUN_R2 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[2][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_RUN_R3 + 0, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[3][1]},
|
|
|
|
{GIRLNINJA_RUN_R3 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[3][2]},
|
|
|
|
{GIRLNINJA_RUN_R3 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[3][3]},
|
|
|
|
{GIRLNINJA_RUN_R3 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[3][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_RUN_R4 + 0, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[4][1]},
|
|
|
|
{GIRLNINJA_RUN_R4 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[4][2]},
|
|
|
|
{GIRLNINJA_RUN_R4 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[4][3]},
|
|
|
|
{GIRLNINJA_RUN_R4 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, DoGirlNinjaMove, &s_GirlNinjaRun[4][0]},
|
|
|
|
},
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaRun[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaRun[0],
|
|
|
|
s_GirlNinjaRun[1],
|
|
|
|
s_GirlNinjaRun[2],
|
|
|
|
s_GirlNinjaRun[3],
|
|
|
|
s_GirlNinjaRun[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA STAND
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_STAND_RATE 10
|
|
|
|
|
|
|
|
STATE s_GirlNinjaStand[5][1] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_STAND_R0 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[0][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_STAND_R1 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[1][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_STAND_R2 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[2][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_STAND_R3 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[3][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_STAND_R4 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[4][0]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaStand[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaStand[0],
|
|
|
|
s_GirlNinjaStand[1],
|
|
|
|
s_GirlNinjaStand[2],
|
|
|
|
s_GirlNinjaStand[3],
|
|
|
|
s_GirlNinjaStand[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA RISE
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_RISE_RATE 10
|
|
|
|
|
|
|
|
STATE s_GirlNinjaRise[5][3] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[0][1]},
|
|
|
|
{GIRLNINJA_STAND_R0 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[0][2]},
|
2021-07-10 12:25:18 +00:00
|
|
|
{0, 0, nullptr, (STATEp)sg_GirlNinjaRun}, // JBF: sg_GirlNinjaRun really is supposed to be the
|
2015-05-19 21:54:34 +00:00
|
|
|
// pointer to the state group. See StateControl() where
|
|
|
|
// it says "if (!u->State->Pic)".
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R1 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[1][1]},
|
|
|
|
{GIRLNINJA_STAND_R1 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[1][2]},
|
2021-07-10 12:25:18 +00:00
|
|
|
{0, 0, nullptr, (STATEp)sg_GirlNinjaRun},
|
2015-05-19 21:54:34 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R2 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[2][1]},
|
|
|
|
{GIRLNINJA_STAND_R2 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[2][2]},
|
2021-07-10 12:25:18 +00:00
|
|
|
{0, 0, nullptr, (STATEp)sg_GirlNinjaRun},
|
2015-05-19 21:54:34 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R3 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[3][1]},
|
|
|
|
{GIRLNINJA_STAND_R3 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[3][2]},
|
2021-07-10 12:25:18 +00:00
|
|
|
{0, 0, nullptr, (STATEp)sg_GirlNinjaRun},
|
2015-05-19 21:54:34 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R4 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[4][1]},
|
|
|
|
{GIRLNINJA_STAND_R4 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[4][2]},
|
2021-07-10 12:25:18 +00:00
|
|
|
{0, 0, nullptr, (STATEp)sg_GirlNinjaRun},
|
2015-05-19 21:54:34 +00:00
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaRise[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaRise[0],
|
|
|
|
s_GirlNinjaRise[1],
|
|
|
|
s_GirlNinjaRise[2],
|
|
|
|
s_GirlNinjaRise[3],
|
|
|
|
s_GirlNinjaRise[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA DUCK
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_DUCK_RATE 10
|
|
|
|
#define GIRLNINJA_CRAWL_RATE 14
|
|
|
|
|
|
|
|
STATE s_GirlNinjaDuck[5][2] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_DUCK_RATE, NullGirlNinja, &s_GirlNinjaDuck[0][1]},
|
|
|
|
{GIRLNINJA_CRAWL_R0 + 0, GIRLNINJA_CRAWL_RATE, DoGirlNinjaMove, &s_GirlNinjaDuck[0][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R1 + 0, GIRLNINJA_DUCK_RATE, NullGirlNinja, &s_GirlNinjaDuck[1][1]},
|
|
|
|
{GIRLNINJA_CRAWL_R1 + 0, GIRLNINJA_CRAWL_RATE, DoGirlNinjaMove, &s_GirlNinjaDuck[1][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R2 + 0, GIRLNINJA_DUCK_RATE, NullGirlNinja, &s_GirlNinjaDuck[2][1]},
|
|
|
|
{GIRLNINJA_CRAWL_R2 + 0, GIRLNINJA_CRAWL_RATE, DoGirlNinjaMove, &s_GirlNinjaDuck[2][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R3 + 0, GIRLNINJA_DUCK_RATE, NullGirlNinja, &s_GirlNinjaDuck[3][1]},
|
|
|
|
{GIRLNINJA_CRAWL_R3 + 0, GIRLNINJA_CRAWL_RATE, DoGirlNinjaMove, &s_GirlNinjaDuck[3][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R4 + 0, GIRLNINJA_DUCK_RATE, NullGirlNinja, &s_GirlNinjaDuck[4][1]},
|
|
|
|
{GIRLNINJA_CRAWL_R4 + 0, GIRLNINJA_CRAWL_RATE, DoGirlNinjaMove, &s_GirlNinjaDuck[4][1]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaDuck[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaDuck[0],
|
|
|
|
s_GirlNinjaDuck[1],
|
|
|
|
s_GirlNinjaDuck[2],
|
|
|
|
s_GirlNinjaDuck[3],
|
|
|
|
s_GirlNinjaDuck[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA SIT
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
STATE s_GirlNinjaSit[5][1] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[0][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R1 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[1][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R2 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[2][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R3 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[3][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_KNEEL_R4 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[4][0]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaSit[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaSit[0],
|
|
|
|
s_GirlNinjaSit[1],
|
|
|
|
s_GirlNinjaSit[2],
|
|
|
|
s_GirlNinjaSit[3],
|
|
|
|
s_GirlNinjaSit[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA JUMP
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_JUMP_RATE 24
|
|
|
|
|
|
|
|
STATE s_GirlNinjaJump[5][2] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R0 + 0, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[0][1]},
|
|
|
|
{GIRLNINJA_JUMP_R0 + 1, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[0][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R1 + 0, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[1][1]},
|
|
|
|
{GIRLNINJA_JUMP_R1 + 1, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[1][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R2 + 0, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[2][1]},
|
|
|
|
{GIRLNINJA_JUMP_R2 + 1, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[2][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R3 + 0, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[3][1]},
|
|
|
|
{GIRLNINJA_JUMP_R3 + 1, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[3][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R4 + 0, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[4][1]},
|
|
|
|
{GIRLNINJA_JUMP_R4 + 1, GIRLNINJA_JUMP_RATE, DoGirlNinjaMove, &s_GirlNinjaJump[4][1]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaJump[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaJump[0],
|
|
|
|
s_GirlNinjaJump[1],
|
|
|
|
s_GirlNinjaJump[2],
|
|
|
|
s_GirlNinjaJump[3],
|
|
|
|
s_GirlNinjaJump[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA FALL
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_FALL_RATE 16
|
|
|
|
|
|
|
|
STATE s_GirlNinjaFall[5][2] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R0 + 1, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[0][1]},
|
|
|
|
{GIRLNINJA_JUMP_R0 + 2, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[0][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R1 + 1, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[1][1]},
|
|
|
|
{GIRLNINJA_JUMP_R1 + 2, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[1][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R2 + 1, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[2][1]},
|
|
|
|
{GIRLNINJA_JUMP_R2 + 2, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[2][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R3 + 1, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[3][1]},
|
|
|
|
{GIRLNINJA_JUMP_R3 + 2, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[3][1]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_JUMP_R4 + 1, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[4][1]},
|
|
|
|
{GIRLNINJA_JUMP_R4 + 2, GIRLNINJA_FALL_RATE, DoGirlNinjaMove, &s_GirlNinjaFall[4][1]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaFall[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaFall[0],
|
|
|
|
s_GirlNinjaFall[1],
|
|
|
|
s_GirlNinjaFall[2],
|
|
|
|
s_GirlNinjaFall[3],
|
|
|
|
s_GirlNinjaFall[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA PAIN
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_PAIN_RATE 15
|
|
|
|
ANIMATOR DoGirlNinjaPain;
|
|
|
|
|
|
|
|
STATE s_GirlNinjaPain[5][1] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_PAIN_R0 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[0][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_PAIN_R1 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[1][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_PAIN_R2 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[2][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_PAIN_R3 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[3][0]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_PAIN_R4 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[4][0]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaPain[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaPain[0],
|
|
|
|
s_GirlNinjaPain[1],
|
|
|
|
s_GirlNinjaPain[2],
|
|
|
|
s_GirlNinjaPain[3],
|
|
|
|
s_GirlNinjaPain[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA STICKY
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_STICKY_RATE 32
|
|
|
|
ANIMATOR InitEnemyMine;
|
|
|
|
|
|
|
|
STATE s_GirlNinjaSticky[5][6] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_THROW_R0 + 0, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[0][1]},
|
|
|
|
{GIRLNINJA_THROW_R0 + 0, GIRLNINJA_STICKY_RATE, NullGirlNinja, &s_GirlNinjaSticky[0][2]},
|
|
|
|
{GIRLNINJA_THROW_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyMine, &s_GirlNinjaSticky[0][3]},
|
|
|
|
{GIRLNINJA_THROW_R0 + 1, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[0][4]},
|
|
|
|
{GIRLNINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaSticky[0][5]},
|
|
|
|
{GIRLNINJA_THROW_R0 + 2, GIRLNINJA_STICKY_RATE, DoGirlNinjaMove, &s_GirlNinjaSticky[0][5]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_THROW_R1 + 0, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[1][1]},
|
|
|
|
{GIRLNINJA_THROW_R1 + 0, GIRLNINJA_STICKY_RATE, NullGirlNinja, &s_GirlNinjaSticky[1][2]},
|
|
|
|
{GIRLNINJA_THROW_R1 + 1, 0 | SF_QUICK_CALL, InitEnemyMine, &s_GirlNinjaSticky[1][3]},
|
|
|
|
{GIRLNINJA_THROW_R1 + 1, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[1][4]},
|
|
|
|
{GIRLNINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaSticky[1][5]},
|
|
|
|
{GIRLNINJA_THROW_R1 + 2, GIRLNINJA_STICKY_RATE, DoGirlNinjaMove, &s_GirlNinjaSticky[1][5]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[2][1]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE, NullGirlNinja, &s_GirlNinjaSticky[2][2]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyMine, &s_GirlNinjaSticky[2][3]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 1, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[2][4]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaSticky[2][5]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 2, GIRLNINJA_STICKY_RATE, DoGirlNinjaMove, &s_GirlNinjaSticky[2][5]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[3][1]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE, NullGirlNinja, &s_GirlNinjaSticky[3][2]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyMine, &s_GirlNinjaSticky[3][3]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 1, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[3][4]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaSticky[3][5]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 2, GIRLNINJA_STICKY_RATE, DoGirlNinjaMove, &s_GirlNinjaSticky[3][5]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[4][1]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE, NullGirlNinja, &s_GirlNinjaSticky[4][2]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyMine, &s_GirlNinjaSticky[4][3]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 1, GIRLNINJA_STICKY_RATE * 2, NullGirlNinja, &s_GirlNinjaSticky[4][4]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaSticky[4][5]},
|
|
|
|
{GIRLNINJA_THROW_R2 + 2, GIRLNINJA_STICKY_RATE, DoGirlNinjaMove, &s_GirlNinjaSticky[4][5]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaSticky[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaSticky[0],
|
|
|
|
s_GirlNinjaSticky[1],
|
|
|
|
s_GirlNinjaSticky[2],
|
|
|
|
s_GirlNinjaSticky[3],
|
|
|
|
s_GirlNinjaSticky[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA CROSSBOW
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_CROSSBOW_RATE 14
|
|
|
|
ANIMATOR InitEnemyCrossbow;
|
|
|
|
|
|
|
|
STATE s_GirlNinjaCrossbow[5][5] =
|
|
|
|
{
|
|
|
|
{
|
|
|
|
{GIRLNINJA_FIRE_R0 + 0, GIRLNINJA_CROSSBOW_RATE * 2, NullGirlNinja, &s_GirlNinjaCrossbow[0][1]},
|
|
|
|
{GIRLNINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyCrossbow, &s_GirlNinjaCrossbow[0][2]},
|
|
|
|
{GIRLNINJA_FIRE_R0 + 1, GIRLNINJA_CROSSBOW_RATE, NullGirlNinja, &s_GirlNinjaCrossbow[0][3]},
|
|
|
|
{GIRLNINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaCrossbow[0][4]},
|
|
|
|
{GIRLNINJA_FIRE_R0 + 1, GIRLNINJA_CROSSBOW_RATE, DoGirlNinjaMove, &s_GirlNinjaCrossbow[0][4]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_FIRE_R1 + 0, GIRLNINJA_CROSSBOW_RATE * 2, NullGirlNinja, &s_GirlNinjaCrossbow[1][1]},
|
|
|
|
{GIRLNINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, InitEnemyCrossbow, &s_GirlNinjaCrossbow[1][2]},
|
|
|
|
{GIRLNINJA_FIRE_R1 + 1, GIRLNINJA_CROSSBOW_RATE, NullGirlNinja, &s_GirlNinjaCrossbow[1][3]},
|
|
|
|
{GIRLNINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaCrossbow[1][4]},
|
|
|
|
{GIRLNINJA_FIRE_R1 + 1, GIRLNINJA_CROSSBOW_RATE, DoGirlNinjaMove, &s_GirlNinjaCrossbow[1][4]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_FIRE_R2 + 0, GIRLNINJA_CROSSBOW_RATE * 2, NullGirlNinja, &s_GirlNinjaCrossbow[2][1]},
|
|
|
|
{GIRLNINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyCrossbow, &s_GirlNinjaCrossbow[2][2]},
|
|
|
|
{GIRLNINJA_FIRE_R2 + 1, GIRLNINJA_CROSSBOW_RATE, NullGirlNinja, &s_GirlNinjaCrossbow[2][3]},
|
|
|
|
{GIRLNINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaCrossbow[2][4]},
|
|
|
|
{GIRLNINJA_FIRE_R2 + 1, GIRLNINJA_CROSSBOW_RATE, DoGirlNinjaMove, &s_GirlNinjaCrossbow[2][4]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_FIRE_R3 + 0, GIRLNINJA_CROSSBOW_RATE * 2, NullGirlNinja, &s_GirlNinjaCrossbow[3][1]},
|
|
|
|
{GIRLNINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, InitEnemyCrossbow, &s_GirlNinjaCrossbow[3][2]},
|
|
|
|
{GIRLNINJA_FIRE_R3 + 1, GIRLNINJA_CROSSBOW_RATE, NullGirlNinja, &s_GirlNinjaCrossbow[3][3]},
|
|
|
|
{GIRLNINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaCrossbow[3][4]},
|
|
|
|
{GIRLNINJA_FIRE_R3 + 1, GIRLNINJA_CROSSBOW_RATE, DoGirlNinjaMove, &s_GirlNinjaCrossbow[3][4]},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{GIRLNINJA_FIRE_R4 + 0, GIRLNINJA_CROSSBOW_RATE * 2, NullGirlNinja, &s_GirlNinjaCrossbow[4][1]},
|
|
|
|
{GIRLNINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, InitEnemyCrossbow, &s_GirlNinjaCrossbow[4][2]},
|
|
|
|
{GIRLNINJA_FIRE_R4 + 1, GIRLNINJA_CROSSBOW_RATE, NullGirlNinja, &s_GirlNinjaCrossbow[4][3]},
|
|
|
|
{GIRLNINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, InitActorDecide, &s_GirlNinjaCrossbow[4][4]},
|
|
|
|
{GIRLNINJA_FIRE_R4 + 1, GIRLNINJA_CROSSBOW_RATE, DoGirlNinjaMove, &s_GirlNinjaCrossbow[4][4]},
|
|
|
|
},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaCrossbow[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaCrossbow[0],
|
|
|
|
s_GirlNinjaCrossbow[1],
|
|
|
|
s_GirlNinjaCrossbow[2],
|
|
|
|
s_GirlNinjaCrossbow[3],
|
|
|
|
s_GirlNinjaCrossbow[4]
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//////////////////////
|
|
|
|
//
|
|
|
|
// GIRLNINJA DIE
|
|
|
|
//
|
|
|
|
//////////////////////
|
|
|
|
|
|
|
|
#define GIRLNINJA_DIE_RATE 30
|
|
|
|
ANIMATOR DoGirlNinjaSpecial;
|
|
|
|
|
|
|
|
STATE s_GirlNinjaDie[] =
|
|
|
|
{
|
|
|
|
{GIRLNINJA_DIE + 0, GIRLNINJA_DIE_RATE*2, NullGirlNinja, &s_GirlNinjaDie[1]},
|
|
|
|
{GIRLNINJA_DIE + 1, GIRLNINJA_DIE_RATE, NullGirlNinja, &s_GirlNinjaDie[2]},
|
|
|
|
{GIRLNINJA_DIE + 2, GIRLNINJA_DIE_RATE, NullGirlNinja, &s_GirlNinjaDie[3]},
|
|
|
|
{GIRLNINJA_DIE + 3, GIRLNINJA_DIE_RATE, NullGirlNinja, &s_GirlNinjaDie[4]},
|
|
|
|
{GIRLNINJA_DIE + 4, GIRLNINJA_DIE_RATE, NullGirlNinja, &s_GirlNinjaDie[5]},
|
|
|
|
{GIRLNINJA_DIE + 5, GIRLNINJA_DIE_RATE, NullGirlNinja, &s_GirlNinjaDie[6]},
|
|
|
|
{GIRLNINJA_DIE + 6, GIRLNINJA_DIE_RATE, NullGirlNinja, &s_GirlNinjaDie[7]},
|
|
|
|
{GIRLNINJA_DIE + 6, SF_QUICK_CALL, DoGirlNinjaSpecial, &s_GirlNinjaDie[8]},
|
|
|
|
{GIRLNINJA_DIE + 7, GIRLNINJA_DIE_RATE, NullGirlNinja, &s_GirlNinjaDie[9]},
|
|
|
|
{GIRLNINJA_DIE + 8, SF_QUICK_CALL, QueueFloorBlood, &s_GirlNinjaDie[10]},
|
|
|
|
{GIRLNINJA_DIE + 8, GIRLNINJA_DIE_RATE, DoActorDebris, &s_GirlNinjaDie[10]},
|
|
|
|
};
|
|
|
|
|
|
|
|
STATE s_GirlNinjaDead[] =
|
|
|
|
{
|
|
|
|
{GIRLNINJA_DIE + 6, GIRLNINJA_DIE_RATE, DoActorDebris, &s_GirlNinjaDead[1]},
|
|
|
|
{GIRLNINJA_DIE + 7, SF_QUICK_CALL, DoGirlNinjaSpecial, &s_GirlNinjaDead[2]},
|
|
|
|
{GIRLNINJA_DIE + 7, GIRLNINJA_DIE_RATE, DoActorDebris, &s_GirlNinjaDead[3]},
|
|
|
|
{GIRLNINJA_DIE + 8, SF_QUICK_CALL, QueueFloorBlood,&s_GirlNinjaDead[4]},
|
|
|
|
{GIRLNINJA_DIE + 8, GIRLNINJA_DIE_RATE, DoActorDebris, &s_GirlNinjaDead[4]},
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
STATE s_GirlNinjaDeathJump[] =
|
|
|
|
{
|
|
|
|
{GIRLNINJA_DIE + 0, GIRLNINJA_DIE_RATE, DoActorDeathMove, &s_GirlNinjaDeathJump[1]},
|
|
|
|
{GIRLNINJA_DIE + 1, GIRLNINJA_DIE_RATE, DoActorDeathMove, &s_GirlNinjaDeathJump[2]},
|
|
|
|
{GIRLNINJA_DIE + 2, GIRLNINJA_DIE_RATE, DoActorDeathMove, &s_GirlNinjaDeathJump[2]},
|
|
|
|
};
|
|
|
|
|
|
|
|
STATE s_GirlNinjaDeathFall[] =
|
|
|
|
{
|
|
|
|
{GIRLNINJA_DIE + 3, GIRLNINJA_DIE_RATE, DoActorDeathMove, &s_GirlNinjaDeathFall[1]},
|
|
|
|
{GIRLNINJA_DIE + 4, GIRLNINJA_DIE_RATE, DoActorDeathMove, &s_GirlNinjaDeathFall[1]},
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
STATEp *Stand[MAX_WEAPONS];
|
|
|
|
STATEp *Run;
|
|
|
|
STATEp *Jump;
|
|
|
|
STATEp *Fall;
|
|
|
|
STATEp *Crawl;
|
|
|
|
STATEp *Swim;
|
|
|
|
STATEp *Fly;
|
|
|
|
STATEp *Rise;
|
|
|
|
STATEp *Sit;
|
|
|
|
STATEp *Look;
|
|
|
|
STATEp *Climb;
|
|
|
|
STATEp *Pain;
|
|
|
|
STATEp *Death1;
|
|
|
|
STATEp *Death2;
|
|
|
|
STATEp *Dead;
|
|
|
|
STATEp *DeathJump;
|
|
|
|
STATEp *DeathFall;
|
|
|
|
STATEp *CloseAttack[2];
|
|
|
|
STATEp *Attack[6];
|
|
|
|
STATEp *Special[2];
|
|
|
|
*/
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaDie[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaDie
|
|
|
|
};
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaDead[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaDead
|
|
|
|
};
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaDeathJump[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaDeathJump
|
|
|
|
};
|
|
|
|
|
|
|
|
STATEp sg_GirlNinjaDeathFall[] =
|
|
|
|
{
|
|
|
|
s_GirlNinjaDeathFall
|
|
|
|
};
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
!AIC - Collection of states that connect action to states
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
ACTOR_ACTION_SET GirlNinjaActionSet =
|
|
|
|
{
|
|
|
|
sg_GirlNinjaStand,
|
|
|
|
sg_GirlNinjaRun,
|
|
|
|
sg_GirlNinjaJump,
|
|
|
|
sg_GirlNinjaFall,
|
2021-07-10 12:25:18 +00:00
|
|
|
nullptr,
|
|
|
|
nullptr,
|
|
|
|
nullptr,
|
2015-05-19 21:54:34 +00:00
|
|
|
sg_GirlNinjaRise,
|
|
|
|
sg_GirlNinjaSit,
|
2021-07-10 12:25:18 +00:00
|
|
|
nullptr,
|
|
|
|
nullptr,
|
2015-05-19 21:54:34 +00:00
|
|
|
sg_GirlNinjaPain,
|
|
|
|
sg_GirlNinjaDie,
|
2021-07-10 12:25:18 +00:00
|
|
|
nullptr,
|
2015-05-19 21:54:34 +00:00
|
|
|
sg_GirlNinjaDead,
|
|
|
|
sg_GirlNinjaDeathJump,
|
|
|
|
sg_GirlNinjaDeathFall,
|
|
|
|
{sg_GirlNinjaCrossbow, sg_GirlNinjaSticky},
|
|
|
|
{800, 1024},
|
|
|
|
{sg_GirlNinjaCrossbow, sg_GirlNinjaSticky},
|
|
|
|
{800, 1024},
|
2021-07-10 12:25:18 +00:00
|
|
|
{nullptr},
|
2015-05-19 21:54:34 +00:00
|
|
|
sg_GirlNinjaDuck,
|
2021-07-10 12:25:18 +00:00
|
|
|
nullptr
|
2015-05-19 21:54:34 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
int
|
|
|
|
SetupGirlNinja(short SpriteNum)
|
|
|
|
{
|
2021-10-30 10:09:34 +00:00
|
|
|
auto actor = &swActors[SpriteNum];
|
2015-05-19 21:54:34 +00:00
|
|
|
SPRITEp sp = &sprite[SpriteNum];
|
|
|
|
USERp u;
|
|
|
|
ANIMATOR DoActorDecide;
|
|
|
|
|
|
|
|
if (TEST(sp->cstat, CSTAT_SPRITE_RESTORE))
|
|
|
|
{
|
2021-04-02 09:13:33 +00:00
|
|
|
u = User[SpriteNum].Data();
|
2015-05-19 21:54:34 +00:00
|
|
|
ASSERT(u);
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-04-02 09:13:33 +00:00
|
|
|
u = SpawnUser(SpriteNum, GIRLNINJA_RUN_R0, s_GirlNinjaRun[0]);
|
2021-07-06 08:26:43 +00:00
|
|
|
u->Health = (Skill < MinEnemySkill - 1) ? 50 : 100;
|
2015-05-19 21:54:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
u->StateEnd = s_GirlNinjaDie;
|
|
|
|
u->Rot = sg_GirlNinjaRun;
|
|
|
|
sp->xrepeat = 51;
|
|
|
|
sp->yrepeat = 43;
|
|
|
|
|
|
|
|
u->Attrib = &GirlNinjaAttrib;
|
|
|
|
sp->pal = u->spal = 26;
|
2021-10-31 20:17:31 +00:00
|
|
|
EnemyDefaults(actor, &GirlNinjaActionSet, &GirlNinjaPersonality);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
2021-10-30 18:11:31 +00:00
|
|
|
ChangeState(actor, s_GirlNinjaRun[0]);
|
2021-10-30 10:09:34 +00:00
|
|
|
DoActorSetSpeed(actor, NORM_SPEED);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
u->Radius = 280;
|
|
|
|
RESET(u->Flags, SPR_XFLIP_TOGGLE);
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
int
|
2021-10-29 18:49:57 +00:00
|
|
|
DoGirlNinjaMove(DSWActor* actor)
|
2015-05-19 21:54:34 +00:00
|
|
|
{
|
2021-10-29 18:49:57 +00:00
|
|
|
USER* u = actor->u();
|
|
|
|
int SpriteNum = u->SpriteNum;
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
// jumping and falling
|
|
|
|
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING) && !TEST(u->Flags, SPR_CLIMBING))
|
|
|
|
{
|
|
|
|
if (TEST(u->Flags, SPR_JUMPING))
|
2021-10-29 18:49:57 +00:00
|
|
|
DoActorJump(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
else if (TEST(u->Flags, SPR_FALLING))
|
2021-10-29 18:49:57 +00:00
|
|
|
DoActorFall(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// sliding
|
|
|
|
if (TEST(u->Flags, SPR_SLIDING) && !TEST(u->Flags, SPR_CLIMBING))
|
2021-10-29 18:49:57 +00:00
|
|
|
DoActorSlide(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
// !AIC - do track or call current action function - such as DoActorMoveCloser()
|
|
|
|
if (u->track >= 0)
|
|
|
|
ActorFollowTrack(SpriteNum, ACTORMOVETICS);
|
|
|
|
else
|
|
|
|
{
|
2021-10-29 18:49:57 +00:00
|
|
|
(*u->ActorActionFunc)(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// stay on floor unless doing certain things
|
|
|
|
if (!TEST(u->Flags, SPR_JUMPING | SPR_FALLING | SPR_CLIMBING))
|
|
|
|
{
|
2021-10-29 20:34:54 +00:00
|
|
|
KeepActorOnFloor(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// take damage from environment
|
2021-10-29 18:49:57 +00:00
|
|
|
DoActorSectorDamage(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
2021-10-29 18:49:57 +00:00
|
|
|
GirlNinjaJumpActionFunc(DSWActor* actor)
|
2015-05-19 21:54:34 +00:00
|
|
|
{
|
2021-10-29 18:49:57 +00:00
|
|
|
USER* u = actor->u();
|
|
|
|
int SpriteNum = u->SpriteNum;
|
2015-05-19 21:54:34 +00:00
|
|
|
SPRITEp sp = User[SpriteNum]->SpriteP;
|
|
|
|
int nx, ny;
|
|
|
|
|
|
|
|
// Move while jumping
|
2021-01-04 11:36:54 +00:00
|
|
|
nx = MulScale(sp->xvel, bcos(sp->ang), 14);
|
|
|
|
ny = MulScale(sp->xvel, bsin(sp->ang), 14);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
// if cannot move the sprite
|
2021-10-30 21:03:26 +00:00
|
|
|
if (!move_actor(actor, nx, ny, 0L))
|
2015-05-19 21:54:34 +00:00
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!TEST(u->Flags, SPR_JUMPING|SPR_FALLING))
|
|
|
|
{
|
2021-10-29 18:49:57 +00:00
|
|
|
InitActorDecide(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int
|
2021-10-29 18:49:57 +00:00
|
|
|
NullGirlNinja(DSWActor* actor)
|
2015-05-19 21:54:34 +00:00
|
|
|
{
|
2021-10-29 18:49:57 +00:00
|
|
|
USER* u = actor->u();
|
|
|
|
int SpriteNum = u->SpriteNum;
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
if (u->WaitTics > 0) u->WaitTics -= ACTORMOVETICS;
|
|
|
|
|
|
|
|
if (TEST(u->Flags, SPR_SLIDING) && !TEST(u->Flags, SPR_CLIMBING) && !TEST(u->Flags, SPR_JUMPING|SPR_FALLING))
|
2021-10-29 18:49:57 +00:00
|
|
|
DoActorSlide(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
if (!TEST(u->Flags, SPR_CLIMBING) && !TEST(u->Flags, SPR_JUMPING|SPR_FALLING))
|
2021-10-29 20:34:54 +00:00
|
|
|
KeepActorOnFloor(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
DoActorSectorDamage(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
int DoGirlNinjaPain(DSWActor* actor)
|
2015-05-19 21:54:34 +00:00
|
|
|
{
|
2021-10-29 18:49:57 +00:00
|
|
|
USER* u = actor->u();
|
|
|
|
int SpriteNum = u->SpriteNum;
|
2015-05-19 21:54:34 +00:00
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
NullGirlNinja(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
if ((u->WaitTics -= ACTORMOVETICS) <= 0)
|
2021-10-29 18:49:57 +00:00
|
|
|
InitActorDecide(actor);
|
2015-05-19 21:54:34 +00:00
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2021-10-29 18:49:57 +00:00
|
|
|
int DoGirlNinjaSpecial(DSWActor* actor)
|
2015-05-19 21:54:34 +00:00
|
|
|
{
|
2021-10-29 18:49:57 +00:00
|
|
|
USER* u = actor->u();
|
|
|
|
int SpriteNum = u->SpriteNum;
|
2015-05-19 21:54:34 +00:00
|
|
|
SPRITEp sp = &sprite[SpriteNum];
|
|
|
|
|
|
|
|
if (u->spal == PALETTE_PLAYER5)
|
|
|
|
{
|
|
|
|
RESET(sp->cstat,CSTAT_SPRITE_TRANSLUCENT);
|
|
|
|
sp->hitag = 0;
|
|
|
|
sp->shade = -10;
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#include "saveable.h"
|
|
|
|
|
|
|
|
static saveable_code saveable_girlninj_code[] =
|
|
|
|
{
|
|
|
|
SAVE_CODE(DoGirlNinjaMove),
|
|
|
|
SAVE_CODE(GirlNinjaJumpActionFunc),
|
|
|
|
SAVE_CODE(NullGirlNinja),
|
|
|
|
SAVE_CODE(DoGirlNinjaPain),
|
|
|
|
SAVE_CODE(DoGirlNinjaSpecial),
|
|
|
|
};
|
|
|
|
|
|
|
|
static saveable_data saveable_girlninj_data[] =
|
|
|
|
{
|
|
|
|
SAVE_DATA(GirlNinjaBattle),
|
|
|
|
SAVE_DATA(GirlNinjaOffense),
|
|
|
|
SAVE_DATA(GirlNinjaBroadcast),
|
|
|
|
SAVE_DATA(GirlNinjaSurprised),
|
|
|
|
SAVE_DATA(GirlNinjaEvasive),
|
|
|
|
SAVE_DATA(GirlNinjaLostTarget),
|
|
|
|
SAVE_DATA(GirlNinjaCloseRange),
|
|
|
|
|
|
|
|
SAVE_DATA(GirlNinjaPersonality),
|
|
|
|
|
|
|
|
SAVE_DATA(GirlNinjaAttrib),
|
|
|
|
|
|
|
|
SAVE_DATA(s_GirlNinjaRun),
|
|
|
|
SAVE_DATA(sg_GirlNinjaRun),
|
|
|
|
SAVE_DATA(s_GirlNinjaStand),
|
|
|
|
SAVE_DATA(sg_GirlNinjaStand),
|
|
|
|
SAVE_DATA(s_GirlNinjaRise),
|
|
|
|
SAVE_DATA(sg_GirlNinjaRise),
|
|
|
|
SAVE_DATA(s_GirlNinjaDuck),
|
|
|
|
SAVE_DATA(sg_GirlNinjaDuck),
|
|
|
|
SAVE_DATA(s_GirlNinjaSit),
|
|
|
|
SAVE_DATA(sg_GirlNinjaSit),
|
|
|
|
SAVE_DATA(s_GirlNinjaJump),
|
|
|
|
SAVE_DATA(sg_GirlNinjaJump),
|
|
|
|
SAVE_DATA(s_GirlNinjaFall),
|
|
|
|
SAVE_DATA(sg_GirlNinjaFall),
|
|
|
|
SAVE_DATA(s_GirlNinjaPain),
|
|
|
|
SAVE_DATA(sg_GirlNinjaPain),
|
|
|
|
SAVE_DATA(s_GirlNinjaSticky),
|
|
|
|
SAVE_DATA(sg_GirlNinjaSticky),
|
|
|
|
SAVE_DATA(s_GirlNinjaCrossbow),
|
|
|
|
SAVE_DATA(sg_GirlNinjaCrossbow),
|
|
|
|
SAVE_DATA(s_GirlNinjaDie),
|
|
|
|
SAVE_DATA(s_GirlNinjaDead),
|
|
|
|
SAVE_DATA(s_GirlNinjaDeathJump),
|
|
|
|
SAVE_DATA(s_GirlNinjaDeathFall),
|
|
|
|
SAVE_DATA(sg_GirlNinjaDie),
|
|
|
|
SAVE_DATA(sg_GirlNinjaDead),
|
|
|
|
SAVE_DATA(sg_GirlNinjaDeathJump),
|
|
|
|
SAVE_DATA(sg_GirlNinjaDeathFall),
|
|
|
|
|
|
|
|
SAVE_DATA(GirlNinjaActionSet),
|
|
|
|
};
|
|
|
|
|
|
|
|
saveable_module saveable_girlninj =
|
|
|
|
{
|
|
|
|
// code
|
|
|
|
saveable_girlninj_code,
|
|
|
|
SIZ(saveable_girlninj_code),
|
|
|
|
|
|
|
|
// data
|
|
|
|
saveable_girlninj_data,
|
|
|
|
SIZ(saveable_girlninj_data)
|
|
|
|
};
|
2019-10-09 16:09:05 +00:00
|
|
|
END_SW_NS
|