From c769de1828211c14cd89c97055345b8bdaa8b6cf Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 24 Feb 2024 10:33:03 +0100 Subject: [PATCH] reverted all the state work on Shadow Warrior. --- source/CMakeLists.txt | 1 - source/common/engine/serializer.cpp | 30 - source/common/engine/serializer.h | 1 - source/core/actorinfo.h | 31 +- source/core/coreactor.h | 4 - source/core/namedef_custom.h | 43 - source/core/serializer_raze.cpp | 1 - source/core/states.cpp | 1167 -------- source/core/states.h | 262 -- source/games/sw/src/actor.cpp | 251 +- source/games/sw/src/ai.cpp | 390 ++- source/games/sw/src/ai.h | 24 +- source/games/sw/src/break.cpp | 2 +- source/games/sw/src/bunny.cpp | 416 +-- source/games/sw/src/coolg.cpp | 353 ++- source/games/sw/src/coolie.cpp | 233 +- source/games/sw/src/draw.cpp | 30 +- source/games/sw/src/eel.cpp | 221 +- source/games/sw/src/game.cpp | 5 +- source/games/sw/src/game.h | 354 +-- source/games/sw/src/girlninj.cpp | 384 +-- source/games/sw/src/goro.cpp | 329 ++- source/games/sw/src/hornet.cpp | 144 +- source/games/sw/src/jsector.cpp | 11 +- source/games/sw/src/jweapon.cpp | 210 +- source/games/sw/src/lava.cpp | 311 +- source/games/sw/src/misc.h | 6 +- source/games/sw/src/miscactr.cpp | 653 ++-- source/games/sw/src/morph.cpp | 23 +- source/games/sw/src/namelist.h | 4 + source/games/sw/src/ninja.cpp | 1237 ++++---- source/games/sw/src/panel.cpp | 2 + source/games/sw/src/player.cpp | 816 ++--- source/games/sw/src/ripper.cpp | 454 +-- source/games/sw/src/ripper2.cpp | 530 ++-- source/games/sw/src/rotator.cpp | 23 + source/games/sw/src/save.cpp | 26 +- source/games/sw/src/saveable.cpp | 12 + source/games/sw/src/sector.cpp | 51 +- source/games/sw/src/serp.cpp | 597 ++-- source/games/sw/src/skel.cpp | 353 +-- source/games/sw/src/skull.cpp | 179 +- source/games/sw/src/slidor.cpp | 22 + source/games/sw/src/sounds.cpp | 2 +- source/games/sw/src/spike.cpp | 24 + source/games/sw/src/sprite.cpp | 2533 ++++++++-------- source/games/sw/src/sumo.cpp | 429 +-- source/games/sw/src/swactor.h | 22 - source/games/sw/src/track.cpp | 155 +- source/games/sw/src/vator.cpp | 17 + source/games/sw/src/wallmove.cpp | 25 + source/games/sw/src/weapon.cpp | 2617 ++++++++++------- source/games/sw/src/weapon.h | 2 +- source/games/sw/src/zilla.cpp | 566 ++-- source/games/sw/src/zombie.cpp | 589 ++-- wadsrc/static/zscript/games/duke/dukeactor.zs | 1 + wadsrc/static/zscript/games/sw/swactor.zs | 314 -- 57 files changed, 8389 insertions(+), 9103 deletions(-) delete mode 100644 source/core/states.cpp delete mode 100644 source/core/states.h diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 286b8fd6b6e..367c903c590 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -979,7 +979,6 @@ set (PCH_SOURCES core/statistics.cpp core/secrets.cpp core/savegamehelp.cpp - core/states.cpp core/precache.cpp core/psky.cpp core/quotes.cpp diff --git a/source/common/engine/serializer.cpp b/source/common/engine/serializer.cpp index 261aa464cbd..4e4364c96a6 100644 --- a/source/common/engine/serializer.cpp +++ b/source/common/engine/serializer.cpp @@ -55,7 +55,6 @@ #include "textures.h" #include "texturemanager.h" #include "base64.h" -#include "vm.h" #include "i_interface.h" using namespace FileSys; @@ -1592,35 +1591,6 @@ template<> FSerializer &Serialize(FSerializer &arc, const char *key, Dictionary } } -template<> FSerializer& Serialize(FSerializer& arc, const char* key, VMFunction*& func, VMFunction**) -{ - if (arc.isWriting()) - { - arc.WriteKey(key); - if (func) arc.w->String(func->QualifiedName); - else arc.w->Null(); - } - else - { - func = nullptr; - - auto val = arc.r->FindKey(key); - if (val != nullptr && val->IsString()) - { - auto qname = val->GetString(); - size_t p = strcspn(qname, "."); - if (p != 0) - { - FName clsname(qname, p, true); - FName funcname(qname + p + 1, true); - func = PClass::FindFunction(clsname, funcname); - } - } - - } - return arc; -} - //========================================================================== // // Handler to retrieve a numeric value of any kind. diff --git a/source/common/engine/serializer.h b/source/common/engine/serializer.h index 29677237b5e..047d43f541d 100644 --- a/source/common/engine/serializer.h +++ b/source/common/engine/serializer.h @@ -324,7 +324,6 @@ inline FSerializer& Serialize(FSerializer& arc, const char* key, BitArray& value template<> FSerializer& Serialize(FSerializer& arc, const char* key, PClass*& clst, PClass** def); template<> FSerializer& Serialize(FSerializer& arc, const char* key, FFont*& font, FFont** def); template<> FSerializer &Serialize(FSerializer &arc, const char *key, Dictionary *&dict, Dictionary **def); -template<> FSerializer& Serialize(FSerializer& arc, const char* key, VMFunction*& dict, VMFunction** def); inline FSerializer &Serialize(FSerializer &arc, const char *key, DVector3 &p, DVector3 *def) { diff --git a/source/core/actorinfo.h b/source/core/actorinfo.h index e21891653e8..b98687297d4 100644 --- a/source/core/actorinfo.h +++ b/source/core/actorinfo.h @@ -7,7 +7,6 @@ #include "dobject.h" #include "m_fixed.h" #include "m_random.h" -#include "states.h" class FScanner; class FInternalLightAssociation; @@ -45,10 +44,6 @@ struct FActorInfo // these are temporary. Due to how Build games handle their tiles, we cannot look up the textures when scripts are being parsed. TArray SpriteSetNames; - FState* OwnedStates = nullptr; - int NumOwnedStates = 0; - FStateLabels* StateList = nullptr; - FActorInfo() = default; FActorInfo(const FActorInfo& other) { @@ -64,7 +59,6 @@ struct FActorInfo } void ResolveTextures(const char* clsname, DCoreActor *defaults); - }; // No objects of this type will be created ever - its only use is to static_cast @@ -88,30 +82,7 @@ class PClassActor : public PClass PClassActor *GetReplacement(); PClassActor *GetReplacee(); - bool OwnsState(const FState* state) const - { - auto i = ActorInfo(); - return i != nullptr && state >= i->OwnedStates && state < i->OwnedStates + i->NumOwnedStates; - } - - FState* GetStates() const - { - return ActorInfo()->OwnedStates; - } - - FStateLabels* GetStateLabels() const - { - return ActorInfo()->StateList; - } - - FState* FindState(int numnames, FName* names, bool exact = false) const; - FState* FindStateByString(const char* name, bool exact = false); - FState* FindState(FName name) const - { - return FindState(1, &name); - } - - // For those times when being able to scan every kind of actor is convenient inline static TArray AllActorClasses; }; + diff --git a/source/core/coreactor.h b/source/core/coreactor.h index e2c610dd7fe..92ecbc5b22e 100644 --- a/source/core/coreactor.h +++ b/source/core/coreactor.h @@ -511,7 +511,3 @@ inline DCoreActor* GetDefaultByType(const PClass* type) return (DCoreActor*)(type->Defaults); } -inline PClassActor* ValidateActor(PClass* cls) -{ - return cls && cls->IsDescendantOf(RUNTIME_CLASS(DCoreActor)) ? static_cast(cls) : nullptr; -} diff --git a/source/core/namedef_custom.h b/source/core/namedef_custom.h index 73d5b549521..c228376c91b 100644 --- a/source/core/namedef_custom.h +++ b/source/core/namedef_custom.h @@ -57,46 +57,3 @@ xx(isExhumed) xx(ChangeAction) xx(ChangeAI) xx(ChangeMove) - -xx(Swim) -xx(DeathJump) -xx(Jump) -xx(DeathFall) -xx(Fall) -xx(Dead) -xx(Run) -xx(Sit) -xx(Stand) -xx(Death1) -xx(Death2) -xx(Duck) -xx(Rise) -xx(Fly) -xx(Crawl) -xx(Pain) -xx(Climb) -xx(Special) -xx(CloseAttack) -xx(Attack) -xx(Dive) -xx(Sword) -xx(Punch) -xx(HeadHurl) -xx(HangFall) - -xx(Speeds) -xx(TicAdjust) -xx(MaxWeapons) -xx(AmbientSound) -xx(AlertSound) -xx(AttackSound) -xx(PainSound) -xx(DieSound) -xx(ExtraSound1) -xx(ExtraSound2) -xx(ExtraSound3) -xx(ExtraSound4) -xx(ExtraSound5) -xx(ExtraSound6) -xx(CloseAttackPercent) -xx(AttackPercent) diff --git a/source/core/serializer_raze.cpp b/source/core/serializer_raze.cpp index ddf82332ff0..0312f1b6cf7 100644 --- a/source/core/serializer_raze.cpp +++ b/source/core/serializer_raze.cpp @@ -44,7 +44,6 @@ #include "rapidjson/prettywriter.h" #include "rapidjson/document.h" #include "serializer_raze.h" -#include "states.h" #include "actorinfo.h" #include "printf.h" #include "utf8.h" diff --git a/source/core/states.cpp b/source/core/states.cpp deleted file mode 100644 index fed9b51e537..00000000000 --- a/source/core/states.cpp +++ /dev/null @@ -1,1167 +0,0 @@ -/* -** p_states.cpp -** state management -** -**--------------------------------------------------------------------------- -** Copyright 1998-2008 Randy Heit -** Copyright 2006-2008 Christoph Oelckers -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -** -*/ -#include "coreactor.h" -#include "cmdlib.h" -#include "c_dispatch.h" -#include "v_text.h" -#include "thingdef.h" -#include "templates.h" -#include "states.h" -#include "texturemanager.h" - - -// stores indices for symbolic state labels for some old-style DECORATE functions. -FStateLabelStorage StateLabels; -TArray SpriteFrames; -TArray SpriteDefs; - -void InitSpriteDefs(const char** names, size_t count) -{ - SpriteDefs.Clear(); - SpriteDefs.Push({}); - - // allocate one buffer for all sprite names. - size_t maxlen = 0; - for (size_t i = 0; i < count; i++) - { - size_t ll = strlen(names[i]); - if (ll > maxlen) maxlen = ll; - } - TArray work(maxlen + 4, true); - - for (size_t i = 0; i < count; i++) - { - FSpriteFrame swork[26]{}; - size_t ll = strlen(names[i]); - memcpy(work.Data(), names[i], ll); - work[ll] = '@'; - - int maxframe = -1; - for (int j = 0; j < 26; j++) - { - int bits = 0; - FTextureID texs[9]; - work[ll + 1] = 'A' + j; - work[ll + 3] = 0; - - for (int k = 0; k <= 8; k++) - { - work[ll + 2] = '0' + k; - texs[k] = TexMan.CheckForTexture(work.Data(), ETextureType::Any); - if (texs[k].isValid()) bits |= (1 << k); - } - if (bits == 1) - { - swork[j].Texture[0] = texs[0]; - swork[j].RotMode = 1; - maxframe = j; - } - else if (bits == 2) - { - swork[j].Texture[0] = texs[1]; - swork[j].RotMode = 1; - maxframe = j; - } - else if (bits == 62) - { - memcpy(swork[j].Texture, &texs[1], 5 * sizeof(FTextureID)); - swork[j].RotMode = 5; - maxframe = j; - } - else if (bits == 510) - { - memcpy(swork[j].Texture, &texs[1], 8 * sizeof(FTextureID)); - swork[j].RotMode = 8; - maxframe = j; - } - else - { - Printf("Incomplete frames for sprite %s, frame %c\n", names[i], 'A' + j); - } - } - maxframe++; - auto pos = SpriteFrames.Reserve(maxframe); - memcpy(&SpriteFrames[pos], swork, maxframe * sizeof(FSpriteFrame)); - FSpriteDef def = { names[i], (uint8_t)maxframe, (uint16_t)pos }; - SpriteDefs.Push(def); - } -} - - -// Each state is owned by an actor. Actors can own any number of -// states, but a single state cannot be owned by more than one -// actor. States are archived by recording the actor they belong -// to and the index into that actor's list of states. - - -//========================================================================== -// -// This wraps everything needed to get a current sprite from a state into -// one single script function. -// -//========================================================================== - -/* -DEFINE_ACTION_FUNCTION(FState, GetSpriteTexture) -{ - PARAM_SELF_STRUCT_PROLOGUE(FState); - PARAM_INT(rotation); - PARAM_INT(skin); - PARAM_FLOAT(scalex); - PARAM_FLOAT(scaley); - - spriteframe_t *sprframe; - if (skin == 0) - { - sprframe = &SpriteFrames[sprites[self->sprite].spriteframes + self->GetFrame()]; - } - else - { - sprframe = &SpriteFrames[sprites[Skins[skin].sprite].spriteframes + self->GetFrame()]; - scalex = Skins[skin].Scale.X; - scaley = Skins[skin].Scale.Y; - } - if (numret > 0) ret[0].SetInt(sprframe->Texture[rotation].GetIndex()); - if (numret > 1) ret[1].SetInt(!!(sprframe->Flip & (1 << rotation))); - if (numret > 2) ret[2].SetVector2(DVector2(scalex, scaley)); - return min(3, numret); -} -*/ - - -//========================================================================== -// -// Find the actor that a state belongs to. -// -//========================================================================== - -PClassActor *FState::StaticFindStateOwner (const FState *state) -{ - for (unsigned int i = 0; i < PClassActor::AllActorClasses.Size(); ++i) - { - PClassActor *info = PClassActor::AllActorClasses[i]; - if (info->OwnsState(state)) - { - return info; - } - } - - return nullptr; -} - -//========================================================================== -// -// Find the actor that a state belongs to, but restrict the search to -// the specified type and its ancestors. -// -//========================================================================== - -PClassActor *FState::StaticFindStateOwner (const FState *state, PClassActor *info) -{ - while (info != nullptr) - { - if (info->OwnsState(state)) - { - return info; - } - info = ValidateActor(info->ParentClass); - } - - return nullptr; -} - -//========================================================================== -// -// -//========================================================================== - -FString FState::StaticGetStateName(const FState *state, PClassActor *info) -{ - auto so = FState::StaticFindStateOwner(state); - if (so == nullptr) - { - so = FState::StaticFindStateOwner(state, info); - } - if (so == nullptr) - { - return ""; - } - return FStringf("%s.%d", so->TypeName.GetChars(), int(state - so->GetStates())); -} - -//========================================================================== -// -// -//========================================================================== - -FStateLabel *FStateLabels::FindLabel (FName label) -{ - return const_cast(BinarySearch(Labels, NumLabels, &FStateLabel::Label, label)); -} - -void FStateLabels::Destroy () -{ - for(int i = 0; i < NumLabels; i++) - { - if (Labels[i].Children != nullptr) - { - Labels[i].Children->Destroy(); - M_Free(Labels[i].Children); // These are malloc'd, not new'd! - Labels[i].Children = nullptr; - } - } -} - - -//========================================================================== -// -// Creates a list of names from a string. Dots are used as separator -// -//========================================================================== - -TArray &MakeStateNameList(const char * fname) -{ - static TArray namelist(3); - FName firstpart = NAME_None, secondpart = NAME_None; - char *c; - - // Handle the old names for the existing death states - char *name = copystring(fname); - firstpart = strtok(name, "."); - - namelist.Clear(); - namelist.Push(firstpart); - if (secondpart != NAME_None) - { - namelist.Push(secondpart); - } - - while ((c = strtok(nullptr, ".")) != nullptr) - { - FName cc = c; - namelist.Push(cc); - } - delete[] name; - return namelist; -} - -//=========================================================================== -// -// FindState (multiple names version) -// -// Finds a state that matches as many of the supplied names as possible. -// A state with more names than those provided does not match. -// A state with fewer names can match if there are no states with the exact -// same number of names. -// -// The search proceeds like this. For the current class, keeping matching -// names until there are no more. If both the argument list and the state -// are out of names, it's an exact match, so return it. If the state still -// has names, ignore it. If the argument list still has names, remember it. -// -//=========================================================================== - -FState *PClassActor::FindState(int numnames, FName *names, bool exact) const -{ - FStateLabels *labels = GetStateLabels(); - FState *best = nullptr; - - if (labels != nullptr) - { - int count = 0; - - // Find the best-matching label for this class. - while (labels != nullptr && count < numnames) - { - FName label = *names++; - FStateLabel *slabel = labels->FindLabel(label); - - if (slabel != nullptr) - { - count++; - labels = slabel->Children; - best = slabel->State; - } - else - { - break; - } - } - if (count < numnames && exact) - { - return nullptr; - } - } - return best; -} - -//========================================================================== -// -// Finds the state associated with the given string -// -//========================================================================== - -FState *PClassActor::FindStateByString(const char *name, bool exact) -{ - TArray &namelist = MakeStateNameList(name); - return FindState(namelist.Size(), &namelist[0], exact); -} - -//========================================================================== -// -// Get a state pointer from a symbolic label -// -//========================================================================== - -FState *FStateLabelStorage::GetState(int pos, PClassActor *cls, bool exact) -{ - if (pos >= 0x10000000) - { - return cls? cls->FindState(ENamedName(pos - 0x10000000)) : nullptr; - } - else if (pos > 0) - { - int val; - pos = (pos - 1) * 4; - memcpy(&val, &Storage[pos], sizeof(int)); - - if (val == 0) - { - FState *state; - memcpy(&state, &Storage[pos + sizeof(int)], sizeof(state)); - return state; - } - else if (cls != nullptr) - { - FName *labels = (FName*)&Storage[pos + sizeof(int)]; - return cls->FindState(val, labels, exact); - } - } - return nullptr; -} - -//========================================================================== -// -// State label conversion function for scripts -// -//========================================================================== - -/* -DEFINE_ACTION_FUNCTION(AActor, FindState) -{ - PARAM_SELF_PROLOGUE(AActor); - PARAM_INT(newstate); - PARAM_BOOL(exact) - ACTION_RETURN_STATE(StateLabels.GetState(newstate, self->GetClass(), exact)); -} -*/ - -//========================================================================== -// -// Search one list of state definitions for the given name -// -//========================================================================== - -FStateDefine *FStateDefinitions::FindStateLabelInList(TArray & list, FName name, bool create) -{ - for(unsigned i = 0; i &namelist = MakeStateNameList(name); - TArray *statelist = &StateLabels; - - for(unsigned i = 0; i < namelist.Size(); i++) - { - statedef = FindStateLabelInList(*statelist, namelist[i], true); - statelist = &statedef->Children; - } - return statedef; -} - -//========================================================================== -// -// Adds a new state to the curremt list -// -//========================================================================== - -void FStateDefinitions::SetStateLabel(const char *statename, FState *state, uint8_t defflags) -{ - FStateDefine *std = FindStateAddress(statename); - std->State = state; - std->DefineFlags = defflags; -} - -//========================================================================== -// -// Adds a new state to the current list -// -//========================================================================== - -void FStateDefinitions::AddStateLabel(const char *statename) -{ - intptr_t index = StateArray.Size(); - FStateDefine *std = FindStateAddress(statename); - std->State = (FState *)(index+1); - std->DefineFlags = SDF_INDEX; - laststate = nullptr; - lastlabel = index; -} - -//========================================================================== -// -// Returns the index a state label points to. May only be called before -// installing states. -// -//========================================================================== - -int FStateDefinitions::GetStateLabelIndex (FName statename) -{ - FStateDefine *std = FindStateLabelInList(StateLabels, statename, false); - if (std == nullptr) - { - return -1; - } - assert((size_t)std->State <= StateArray.Size() + 1); - return (int)((ptrdiff_t)std->State - 1); -} - -//========================================================================== -// -// Finds the state associated with the given name -// returns nullptr if none found -// -//========================================================================== - -FState *FStateDefinitions::FindState(const char * name) -{ - FStateDefine *statedef = nullptr; - - TArray &namelist = MakeStateNameList(name); - - TArray *statelist = &StateLabels; - for(unsigned i = 0; i < namelist.Size(); i++) - { - statedef = FindStateLabelInList(*statelist, namelist[i], false); - if (statedef == nullptr) - { - return nullptr; - } - statelist = &statedef->Children; - } - return statedef ? statedef->State : nullptr; -} - -//========================================================================== -// -// Creates the final list of states from the state definitions -// -//========================================================================== - -static int labelcmp(const void *a, const void *b) -{ - FStateLabel *A = (FStateLabel *)a; - FStateLabel *B = (FStateLabel *)b; - return ((int)A->Label.GetIndex() - (int)B->Label.GetIndex()); -} - -FStateLabels *FStateDefinitions::CreateStateLabelList(TArray & statelist) -{ - // First delete all empty labels from the list - for (int i = statelist.Size() - 1; i >= 0; i--) - { - if (statelist[i].Label == NAME_None || (statelist[i].State == nullptr && statelist[i].Children.Size() == 0)) - { - statelist.Delete(i); - } - } - - int count = statelist.Size(); - - if (count == 0) - { - return nullptr; - } - FStateLabels *list = (FStateLabels*)M_Malloc(sizeof(FStateLabels)+(count-1)*sizeof(FStateLabel)); - list->NumLabels = count; - - for (int i=0;iLabels[i].Label = statelist[i].Label; - list->Labels[i].State = statelist[i].State; - list->Labels[i].Children = CreateStateLabelList(statelist[i].Children); - } - qsort(list->Labels, count, sizeof(FStateLabel), labelcmp); - return list; -} - -//=========================================================================== -// -// InstallStates -// -// Creates the actor's state list from the current definition -// -//=========================================================================== - -void FStateDefinitions::InstallStates(PClassActor *info, DCoreActor *defaults) -{ - if (defaults == nullptr) - { - I_Error("Called InstallStates without actor defaults in %s", info->TypeName.GetChars()); - } - - - // First ensure we have a valid spawn state. - /* - FState *state = FindState("Spawn"); - - if (state == nullptr) - { - // A nullptr spawn state will crash the engine so set it to something valid. - SetStateLabel("Spawn", GetDefault()->SpawnState); - } - */ - - auto &sl = info->ActorInfo()->StateList; - if (sl != nullptr) - { - sl->Destroy(); - M_Free(sl); - } - sl = CreateStateLabelList(StateLabels); -} - -//=========================================================================== -// -// MakeStateDefines -// -// Creates a list of state definitions from an existing actor -// Used by Dehacked to modify an actor's state list -// -//=========================================================================== - -void FStateDefinitions::MakeStateList(const FStateLabels *list, TArray &dest) -{ - dest.Clear(); - if (list != nullptr) for (int i = 0; i < list->NumLabels; i++) - { - FStateDefine def; - - def.Label = list->Labels[i].Label; - def.State = list->Labels[i].State; - def.DefineFlags = SDF_STATE; - dest.Push(def); - if (list->Labels[i].Children != nullptr) - { - MakeStateList(list->Labels[i].Children, dest[dest.Size()-1].Children); - } - } -} - -void FStateDefinitions::MakeStateDefines(const PClassActor *cls) -{ - StateArray.Clear(); - laststate = nullptr; - laststatebeforelabel = nullptr; - lastlabel = -1; - - if (cls != nullptr && cls->GetStateLabels() != nullptr) - { - MakeStateList(cls->GetStateLabels(), StateLabels); - } - else - { - StateLabels.Clear(); - } -} - -//=========================================================================== -// -// AddStateDefines -// -// Adds a list of states to the current definitions -// -//=========================================================================== - -void FStateDefinitions::AddStateDefines(const FStateLabels *list) -{ - if (list != nullptr) for(int i = 0; i < list->NumLabels; i++) - { - if (list->Labels[i].Children == nullptr) - { - if (!FindStateLabelInList(StateLabels, list->Labels[i].Label, false)) - { - FStateDefine def; - - def.Label = list->Labels[i].Label; - def.State = list->Labels[i].State; - def.DefineFlags = SDF_STATE; - StateLabels.Push(def); - } - } - } -} - -//========================================================================== -// -// RetargetState(Pointer)s -// -// These functions are used when a goto follows one or more labels. -// Because multiple labels are permitted to occur consecutively with no -// intervening states, it is not enough to remember the last label defined -// and adjust it. So these functions search for all labels that point to -// the current position in the state array and give them a copy of the -// target string instead. -// -//========================================================================== - -void FStateDefinitions::RetargetStatePointers (intptr_t count, const char *target, TArray & statelist) -{ - for(unsigned i = 0;i 0) - { - RetargetStatePointers(count, target, statelist[i].Children); - } - } -} - -void FStateDefinitions::RetargetStates (intptr_t count, const char *target) -{ - RetargetStatePointers(count, target, StateLabels); -} - - -//========================================================================== -// -// ResolveGotoLabel -// -// Resolves any strings being stored in a state's NextState field -// -//========================================================================== - -FState *FStateDefinitions::ResolveGotoLabel (PClassActor *mytype, char *name) -{ - PClassActor *type = mytype; - FState *state; - char *namestart = name; - char *label, *offset, *pt; - int v; - - // Check for classname - if ((pt = strstr (name, "::")) != nullptr) - { - const char *classname = name; - *pt = '\0'; - name = pt + 2; - - // The classname may either be "Super" to identify this class's immediate - // superclass, or it may be the name of any class that this one derives from. - if (stricmp (classname, "Super") == 0) - { - type = ValidateActor(type->ParentClass); - } - else - { - // first check whether a state of the desired name exists - PClass *stype = PClass::FindClass (classname); - if (stype == nullptr) - { - I_Error ("%s is an unknown class.", classname); - } - if (!stype->IsDescendantOf (RUNTIME_CLASS(DCoreActor))) - { - I_Error ("%s is not an actor class, so it has no states.", stype->TypeName.GetChars()); - } - if (!stype->IsAncestorOf (type)) - { - I_Error ("%s is not derived from %s so cannot access its states.", - type->TypeName.GetChars(), stype->TypeName.GetChars()); - } - if (type != stype) - { - type = static_cast(stype); - } - } - } - label = name; - // Check for offset - offset = nullptr; - if ((pt = strchr (name, '+')) != nullptr) - { - *pt = '\0'; - offset = pt + 1; - } - v = offset ? (int)strtoll (offset, nullptr, 0) : 0; - - // Get the state's address. - if (type == mytype) - { - state = FindState (label); - } - else - { - state = type->FindStateByString(label, true); - } - - if (state != nullptr) - { - state += v; - } - else if (v != 0) - { - I_Error ("Attempt to get invalid state %s from actor %s.", label, type->TypeName.GetChars()); - } - else - { - Printf (TEXTCOLOR_RED "Attempt to get invalid state %s from actor %s.\n", label, type->TypeName.GetChars()); - } - delete[] namestart; // free the allocated string buffer - return state; -} - -//========================================================================== -// -// FixStatePointers -// -// Fixes an actor's default state pointers. -// -//========================================================================== - -void FStateDefinitions::FixStatePointers (PClassActor *actor, TArray & list) -{ - for (unsigned i = 0; i < list.Size(); i++) - { - if (list[i].DefineFlags == SDF_INDEX) - { - size_t v = (size_t)list[i].State; - list[i].State = actor->GetStates() + v - 1; - list[i].DefineFlags = SDF_STATE; - } - if (list[i].Children.Size() > 0) - { - FixStatePointers(actor, list[i].Children); - } - } -} - -//========================================================================== -// -// ResolveGotoLabels -// -// Resolves an actor's state pointers that were specified as jumps. -// -//========================================================================== - -void FStateDefinitions::ResolveGotoLabels (PClassActor *actor, TArray & list) -{ - for (unsigned i = 0; i < list.Size(); i++) - { - if (list[i].State != nullptr && list[i].DefineFlags == SDF_LABEL) - { // It's not a valid state, so it must be a label string. Resolve it. - list[i].State = ResolveGotoLabel (actor, (char *)list[i].State); - list[i].DefineFlags = SDF_STATE; - } - if (list[i].Children.Size() > 0) ResolveGotoLabels(actor, list[i].Children); - } -} - - -//========================================================================== -// -// SetGotoLabel -// -// sets a jump at the current state or retargets a label -// -//========================================================================== - -bool FStateDefinitions::SetGotoLabel(const char *string) -{ - // copy the text - this must be resolved later! - if (laststate != nullptr) - { // Following a state definition: Modify it. - laststate->NextState = (FState*)copystring(string); - laststate->DefineFlags = SDF_LABEL; - laststatebeforelabel = nullptr; - return true; - } - else if (lastlabel >= 0) - { // Following a label: Retarget it. - RetargetStates (lastlabel+1, string); - if (laststatebeforelabel != nullptr) - { - laststatebeforelabel->NextState = (FState*)copystring(string); - laststatebeforelabel->DefineFlags = SDF_LABEL; - laststatebeforelabel = nullptr; - } - return true; - } - return false; -} - -//========================================================================== -// -// SetStop -// -// sets a stop operation -// -//========================================================================== - -bool FStateDefinitions::SetStop() -{ - if (laststate != nullptr) - { - laststate->DefineFlags = SDF_STOP; - laststatebeforelabel = nullptr; - return true; - } - else if (lastlabel >=0) - { - RetargetStates (lastlabel+1, nullptr); - if (laststatebeforelabel != nullptr) - { - laststatebeforelabel->DefineFlags = SDF_STOP; - laststatebeforelabel = nullptr; - } - return true; - } - return false; -} - -//========================================================================== -// -// SetWait -// -// sets a wait or fail operation -// -//========================================================================== - -bool FStateDefinitions::SetWait() -{ - if (laststate != nullptr) - { - laststate->DefineFlags = SDF_WAIT; - laststatebeforelabel = nullptr; - return true; - } - return false; -} - -//========================================================================== -// -// SetLoop -// -// sets a loop operation -// -//========================================================================== - -bool FStateDefinitions::SetLoop() -{ - if (laststate != nullptr) - { - laststate->DefineFlags = SDF_INDEX; - laststate->NextState = (FState*)(lastlabel+1); - laststatebeforelabel = nullptr; - return true; - } - return false; -} - -//========================================================================== -// -// AddStates -// -// Adds some state to the current definition set. Returns the number of -// states added. Positive = no errors, negative = errors. -// -//========================================================================== - -int FStateDefinitions::AddStates(FState *state, const char *framechars, const FScriptPosition &sc) -{ - bool error = false; - int frame = 0; - int count = 0; - while (*framechars) - { - bool noframe = false; - - if (*framechars == '#') - noframe = true; - else if (*framechars == '^') - frame = '\\' - 'A'; - else - frame = (*framechars & 223) - 'A'; - - framechars++; - if (frame < 0 || frame > 28) - { - frame = 0; - error = true; - } - - state->Frame = frame; - StateArray.Push(*state); - SourceLines.Push(sc); - ++count; - } - laststate = &StateArray[StateArray.Size() - 1]; - laststatebeforelabel = laststate; - return !error ? count : -count; -} - -//========================================================================== -// -// FinishStates -// copies a state block and fixes all state links using the current list of labels -// -//========================================================================== - -int FStateDefinitions::FinishStates(PClassActor *actor) -{ - int count = StateArray.Size(); - - if (count > 0) - { - FState *realstates = (FState*)ClassDataAllocator.Alloc(count * sizeof(FState)); - int i; - - memcpy(realstates, &StateArray[0], count*sizeof(FState)); - actor->ActorInfo()->OwnedStates = realstates; - actor->ActorInfo()->NumOwnedStates = count; -// SaveStateSourceLines(realstates, SourceLines); todo - - // adjust the state pointers - // In the case new states are added these must be adjusted, too! - FixStatePointers(actor, StateLabels); - - // Fix state pointers that are gotos - ResolveGotoLabels(actor, StateLabels); - - for (i = 0; i < count; i++) - { - // resolve labels and jumps - switch (realstates[i].DefineFlags) - { - case SDF_STOP: // stop - realstates[i].NextState = nullptr; - break; - - case SDF_WAIT: // wait - realstates[i].NextState = &realstates[i]; - break; - - case SDF_NEXT: // next - realstates[i].NextState = (i < count-1 ? &realstates[i+1] : &realstates[0]); - break; - - case SDF_INDEX: // loop - realstates[i].NextState = &realstates[(size_t)realstates[i].NextState-1]; - break; - - case SDF_LABEL: - realstates[i].NextState = ResolveGotoLabel(actor, (char *)realstates[i].NextState); - break; - } - } - } - else - { - // Fix state pointers that are gotos - ResolveGotoLabels(actor, StateLabels); - } - return count; -} - - - -//========================================================================== -// -// Prints all state label info to the logfile -// -//========================================================================== - -void DumpStateHelper(FStateLabels *StateList, const FString &prefix) -{ - for (int i = 0; i < StateList->NumLabels; i++) - { - if (StateList->Labels[i].State != nullptr) - { - const PClassActor *owner = FState::StaticFindStateOwner(StateList->Labels[i].State); - if (owner == nullptr) - { - Printf(PRINT_LOG, "%s%s: invalid\n", prefix.GetChars(), StateList->Labels[i].Label.GetChars()); - } - else - { - Printf(PRINT_LOG, "%s%s: %s\n", prefix.GetChars(), StateList->Labels[i].Label.GetChars(), FState::StaticGetStateName(StateList->Labels[i].State).GetChars()); - } - } - if (StateList->Labels[i].Children != nullptr) - { - DumpStateHelper(StateList->Labels[i].Children, prefix + '.' + StateList->Labels[i].Label.GetChars()); - } - } -} - -CCMD(dumpstates) -{ - for (unsigned int i = 0; i < PClassActor::AllActorClasses.Size(); ++i) - { - PClassActor *info = PClassActor::AllActorClasses[i]; - Printf(PRINT_LOG, "State labels for %s\n", info->TypeName.GetChars()); - DumpStateHelper(info->GetStateLabels(), ""); - Printf(PRINT_LOG, "----------------------------\n"); - } -} - -//========================================================================== -// -// sets up the script-side version of states -// -//========================================================================== - -DEFINE_FIELD(FState, NextState) -DEFINE_FIELD(FState, sprite) -DEFINE_FIELD(FState, Tics) -DEFINE_FIELD_BIT(FState, StateFlags, bFullbright, STF_FULLBRIGHT) - - - -TArray actionParams; - -/* -bool FState::CallAction(DCoreActor *self, FStateParamInfo *info) -{ - if (ActionFunc != nullptr) - { - ActionCycles.Clock(); - - VMReturn ret; - ret.PointerAt((void **)stateret); - try - { - - VMValue params[3] = { self, stateowner, VMValue(info) }; - VMCallAction(ActionFunc, params, ActionFunc->ImplicitArgs, &ret, stateret != nullptr); - } - catch (CVMAbortException &err) - { - err.MaybePrintMessage(); - - if (stateowner != nullptr) - { - const char *callinfo = ""; - if (info != nullptr && info->mStateType == STATE_Psprite) - { - if (stateowner->IsKindOf(NAME_Weapon) && stateowner != self) callinfo = "weapon "; - else callinfo = "overlay "; - } - err.stacktrace.AppendFormat("Called from %sstate %s in %s\n", callinfo, FState::StaticGetStateName(this).GetChars(), stateowner->GetClass()->TypeName.GetChars()); - } - else - { - err.stacktrace.AppendFormat("Called from state %s\n", FState::StaticGetStateName(this).GetChars()); - } - - throw; - } - - ActionCycles.Unclock(); - return true; - } - else - { - return false; - } -} -*/ - -//========================================================================== -// -// -//========================================================================== - -int GetSpriteIndex(const char * spritename, bool add) -{ - return 0; -} - -/* -DEFINE_ACTION_FUNCTION(FState, ValidateSpriteFrame) -{ - PARAM_SELF_STRUCT_PROLOGUE(FState); - ACTION_RETURN_BOOL(self->Frame < sprites[self->sprite].numframes); -} -*/ - - diff --git a/source/core/states.h b/source/core/states.h deleted file mode 100644 index 318cc930789..00000000000 --- a/source/core/states.h +++ /dev/null @@ -1,262 +0,0 @@ -/* -** states.h -** -**--------------------------------------------------------------------------- -** Copyright 1998-2007 Randy Heit -** All rights reserved. -** -** Redistribution and use in source and binary forms, with or without -** modification, are permitted provided that the following conditions -** are met: -** -** 1. Redistributions of source code must retain the above copyright -** notice, this list of conditions and the following disclaimer. -** 2. Redistributions in binary form must reproduce the above copyright -** notice, this list of conditions and the following disclaimer in the -** documentation and/or other materials provided with the distribution. -** 3. The name of the author may not be used to endorse or promote products -** derived from this software without specific prior written permission. -** -** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -**--------------------------------------------------------------------------- -** -*/ - -#ifndef __INFO_H__ -#define __INFO_H__ - -#include -#include - -#include "dobject.h" - -class DCoreActor; -struct Baggage; -class FScanner; -struct FActorInfo; -class FIntCVar; -class FStateDefinitions; -class FInternalLightAssociation; -struct FState; - -struct FSpriteFrame -{ - FTextureID Texture[8]; - uint8_t RotMode; // 1, 5, 8 are the regular ones. Duke also has mirrored 3 and 7 frame options. -}; -struct FSpriteDef -{ - FName name; - uint8_t numframes; - uint16_t spriteframes; - - FTextureID GetSpriteFrame(int frame, int rot, DAngle ang, bool* mirror, bool flipagain = false); -}; - -extern TArray SpriteFrames; -extern TArray SpriteDefs; - -enum EStateDefineFlags -{ - SDF_NEXT = 0, - SDF_STATE = 1, - SDF_STOP = 2, - SDF_WAIT = 3, - SDF_LABEL = 4, - SDF_INDEX = 5, - SDF_MASK = 7, -}; - -enum EStateFlags -{ - STF_FULLBRIGHT = 4, // State is fullbright -}; - -enum EStateType : int // this must ensure proper alignment. -{ - STATE_Actor, - STATE_Psprite, - STATE_StateChain, -}; - -struct FStateParamInfo -{ - FState *mCallingState; - EStateType mStateType; - int mPSPIndex; -}; - - - -struct FState -{ - FState *NextState; - VMFunction *ActionFunc; - int16_t sprite; - int16_t Tics; - uint8_t Frame; - uint8_t StateFlags; - uint8_t DefineFlags; -public: - inline int GetFullbright() const - { - return (StateFlags & STF_FULLBRIGHT)? 0x10 /*RF_FULLBRIGHT*/ : 0; - } - inline int GetTics() const - { - return Tics; - } - inline FState *GetNextState() const - { - return NextState; - } - void SetAction(VMFunction *func) { ActionFunc = func; } - void ClearAction() { ActionFunc = NULL; } - //bool CallAction(AActor *self, AActor *stateowner, FStateParamInfo *stateinfo, FState **stateret); - - static PClassActor *StaticFindStateOwner (const FState *state); - static PClassActor *StaticFindStateOwner (const FState *state, PClassActor *info); - static FString StaticGetStateName(const FState *state, PClassActor *info = nullptr); - -}; - -struct FStateLabels; -struct FStateLabel -{ - FName Label; - FState *State; - FStateLabels *Children; -}; - -struct FStateLabels -{ - int NumLabels; - FStateLabel Labels[1]; - - FStateLabel *FindLabel (FName label); - - void Destroy(); // intentionally not a destructor! -}; - - -struct FStateLabelStorage -{ - TArray Storage; - - int AddPointer(FState *ptr) - { - if (ptr != nullptr) - { - int pos = Storage.Reserve(sizeof(ptr) + sizeof(int)); - memset(&Storage[pos], 0, sizeof(int)); - memcpy(&Storage[pos + sizeof(int)], &ptr, sizeof(ptr)); - return pos / 4 + 1; - } - else return 0; - } - - int AddNames(TArray &names) - { - int siz = names.Size(); - if (siz > 1) - { - int pos = Storage.Reserve(sizeof(int) + sizeof(FName) * names.Size()); - memcpy(&Storage[pos], &siz, sizeof(int)); - memcpy(&Storage[pos + sizeof(int)], &names[0], sizeof(FName) * names.Size()); - return pos / 4 + 1; - } - else - { - // don't store single name states in the array. - return names[0].GetIndex() + 0x10000000; - } - } - - FState *GetState(int pos, PClassActor *cls, bool exact = false); -}; - -extern FStateLabelStorage StateLabels; - -int GetSpriteIndex(const char * spritename, bool add = true); -TArray &MakeStateNameList(const char * fname); -void AddStateLight(FState *state, const char *lname); - - -//========================================================================== -// -// State parser -// -//========================================================================== -class FxExpression; - -struct FStateLabels; - -struct FStateDefine -{ - FName Label; - TArray Children; - FState *State; - uint8_t DefineFlags; -}; - -class FStateDefinitions -{ - TArray StateLabels; - FState *laststate; - FState *laststatebeforelabel; - intptr_t lastlabel; - TArray StateArray; - TArray SourceLines; - - static FStateDefine *FindStateLabelInList(TArray &list, FName name, bool create); - static FStateLabels *CreateStateLabelList(TArray &statelist); - static void MakeStateList(const FStateLabels *list, TArray &dest); - static void RetargetStatePointers(intptr_t count, const char *target, TArray & statelist); - FStateDefine *FindStateAddress(const char *name); - FState *FindState(const char *name); - - FState *ResolveGotoLabel(PClassActor *mytype, char *name); - static void FixStatePointers(PClassActor *actor, TArray & list); - void ResolveGotoLabels(PClassActor *actor, TArray & list); -public: - - FStateDefinitions() - { - laststate = NULL; - laststatebeforelabel = NULL; - lastlabel = -1; - } - - void SetStateLabel(const char *statename, FState *state, uint8_t defflags = SDF_STATE); - void AddStateLabel(const char *statename); - int GetStateLabelIndex (FName statename); - void InstallStates(PClassActor *info, DCoreActor *defaults); - int FinishStates(PClassActor *actor); - - void MakeStateDefines(const PClassActor *cls); - void AddStateDefines(const FStateLabels *list); - void RetargetStates (intptr_t count, const char *target); - - bool SetGotoLabel(const char *string); - bool SetStop(); - bool SetWait(); - bool SetLoop(); - int AddStates(FState* state, const char* framechars, const FScriptPosition& sc); - int GetStateCount() const { return StateArray.Size(); } -}; - - -void SaveStateSourceLines(FState *firststate, TArray &positions); -FScriptPosition & GetStateSource(FState *state); - - -#endif // __INFO_H__ diff --git a/source/games/sw/src/actor.cpp b/source/games/sw/src/actor.cpp index e97950fa3fb..3017a68fb3e 100644 --- a/source/games/sw/src/actor.cpp +++ b/source/games/sw/src/actor.cpp @@ -39,7 +39,6 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms #include "weapon.h" #include "sprite.h" #include "gamefuncs.h" -#include "ai.h" BEGIN_SW_NS @@ -115,11 +114,13 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) switch (meansofdeath) { case WPN_NM_LAVA: - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; break; case WPN_NM_SECTOR_SQUISH: - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; break; } @@ -134,9 +135,10 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) // Coolie actually explodes himself // he is the Sprite AND weapon case COOLIE_RUN_R0: - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; actor->vel.X *= 2; - actor->clearActionFunc(); + actor->user.ActorActionFunc = nullptr; actor->spr.Angles.Yaw += DAngle180; break; @@ -162,8 +164,9 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) InitPlasmaFountain(weapActor, actor); } - actor->ChangeStateEnd(); - actor->clearActionFunc(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; + actor->user.ActorActionFunc = nullptr; actor->vel.X = 12.5 + RandomRangeF(12.5); actor->user.jump_speed = -200 - RandomRange(250); DoActorBeginJump(actor); @@ -175,15 +178,16 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) // test for gibable dead bodies if (RandomRange(1000) > 500) actor->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); actor->vel.X = 0; actor->user.jump_speed = 0; DoActorBeginJump(actor); } - actor->user.__legacyState.RotNum = 0; + actor->user.RotNum = 0; - actor->clearActionFunc(); + actor->user.ActorActionFunc = nullptr; + //actor->user.ActorActionFunc = NullAnimator; if (!sw_ninjahack) actor->spr.Angles.Yaw = weapActor->spr.Angles.Yaw; break; @@ -195,13 +199,15 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) case EEL_RUN_R0: case STAR1: case SUMO_RUN_R0: - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; break; case UZI_SMOKE: if (RandomRange(1000) > 500) actor->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; // Rippers still gotta jump or they fall off walls weird if (actor->user.ID == RIPPER_RUN_R0 || actor->user.ID == RIPPER2_RUN_R0) { @@ -215,7 +221,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) actor->user.jump_speed = -10 - RandomRange(25); DoActorBeginJump(actor); } - actor->clearActionFunc(); + actor->user.ActorActionFunc = nullptr; // Get angle to player actor->spr.Angles.Yaw = (actor->user.targetActor->spr.pos - actor->spr.pos.Y).Angle() + DAngle180; break; @@ -223,7 +229,8 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) case UZI_SMOKE+1: // Shotgun if (RandomRange(1000) > 500) actor->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; // Rippers still gotta jump or they fall off walls weird if (actor->user.ID == RIPPER_RUN_R0 || actor->user.ID == RIPPER2_RUN_R0) @@ -237,7 +244,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) actor->user.jump_speed = -100 - RandomRange(250); } DoActorBeginJump(actor); - actor->clearActionFunc(); + actor->user.ActorActionFunc = nullptr; // Get angle to player actor->spr.Angles.Yaw = (actor->user.targetActor->spr.pos - actor->spr.pos).Angle() + DAngle180; break; @@ -247,7 +254,7 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) { case SKULL_R0: case BETTY_R0: - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); break; default: @@ -258,8 +265,9 @@ int DoActorDie(DSWActor* actor, DSWActor* weapActor, int meansofdeath) if (RandomRange(1000) > 500) actor->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actor->ChangeStateEnd(); - actor->clearActionFunc(); + ChangeState(actor, actor->user.StateEnd); + actor->user.RotNum = 0; + actor->user.ActorActionFunc = nullptr; actor->vel.X = 18.75 + RandomRangeF(25); actor->user.jump_speed = -300 - RandomRange(350); DoActorBeginJump(actor); @@ -531,11 +539,11 @@ void KeepActorOnFloor(DSWActor* actor) if ((sectp->extra & SECTFX_SINK) && depth > 35 && - actor->hasState(NAME_Swim)) + actor->user.ActorActionSet && actor->user.ActorActionSet->Swim) { if (actor->user.Flags & (SPR_SWIMMING)) { - if (!actor->checkStateGroup(NAME_Run) && !actor->checkStateGroup(NAME_Swim) && !actor->checkStateGroup(NAME_Stand)) + if (actor->user.Rot != actor->user.ActorActionSet->Run && actor->user.Rot != actor->user.ActorActionSet->Swim && actor->user.Rot != actor->user.ActorActionSet->Stand) { // was swimming but have now stopped actor->user.Flags &= ~(SPR_SWIMMING); @@ -544,9 +552,9 @@ void KeepActorOnFloor(DSWActor* actor) return; } - if (actor->checkStateGroup(NAME_Run)) + if (actor->user.Rot == actor->user.ActorActionSet->Run) { - actor->setStateGroup(NAME_Swim); + NewStateGroup(actor, actor->user.ActorActionSet->Swim); } // are swimming @@ -555,9 +563,9 @@ void KeepActorOnFloor(DSWActor* actor) else { // only start swimming if you are running - if (actor->checkStateGroup(NAME_Run) || actor->checkStateGroup(NAME_Swim)) + if (actor->user.Rot == actor->user.ActorActionSet->Run || actor->user.Rot == actor->user.ActorActionSet->Swim) { - actor->setStateGroup(NAME_Swim); + NewStateGroup(actor, actor->user.ActorActionSet->Swim); actor->spr.pos.Z = actor->user.oz = actor->user.loz - depth; actor->user.Flags |= (SPR_SWIMMING); actor->spr.cstat |= (CSTAT_SPRITE_YCENTER); @@ -656,12 +664,14 @@ int DoActorBeginJump(DSWActor* actor) actor->user.jump_grav = ACTOR_GRAVITY; // Change sprites state to jumping - if (actor->user.Flags & (SPR_DEAD)) - actor->setStateGroup(NAME_DeathJump); - else - actor->setStateGroup(NAME_Jump); - - actor->user.__legacyState.StateFallOverride = nullptr; + if (actor->user.ActorActionSet) + { + if (actor->user.Flags & (SPR_DEAD)) + NewStateGroup(actor, actor->user.ActorActionSet->DeathJump); + else + NewStateGroup(actor, actor->user.ActorActionSet->Jump); + } + actor->user.StateFallOverride = nullptr; //DO NOT CALL DoActorJump! DoActorStopFall can cause an infinite loop and //stack overflow if it is called. @@ -726,16 +736,19 @@ int DoActorBeginFall(DSWActor* actor) actor->user.jump_grav = ACTOR_GRAVITY; // Change sprites state to falling - if (actor->user.Flags & (SPR_DEAD)) + if (actor->user.ActorActionSet) { - actor->setStateGroup(NAME_DeathFall); - } - else - actor->setStateGroup(NAME_Fall); + if (actor->user.Flags & (SPR_DEAD)) + { + NewStateGroup(actor, actor->user.ActorActionSet->DeathFall); + } + else + NewStateGroup(actor, actor->user.ActorActionSet->Fall); - if (actor->user.__legacyState.StateFallOverride) - { - NewStateGroup(actor, actor->user.__legacyState.StateFallOverride); + if (actor->user.StateFallOverride) + { + NewStateGroup(actor, actor->user.StateFallOverride); + } } DoActorFall(actor); @@ -791,23 +804,23 @@ int DoActorStopFall(DSWActor* actor) } // Change sprites state to running - if (actor->user.__legacyState.ActorActionSet) + if (actor->user.ActorActionSet) { if (actor->user.Flags & (SPR_DEAD)) { - actor->setStateGroup(NAME_Dead); + NewStateGroup(actor, actor->user.ActorActionSet->Dead); PlaySound(DIGI_ACTORBODYFALL1, actor, v3df_none); } else { PlaySound(DIGI_ACTORHITGROUND, actor, v3df_none); - actor->setStateGroup(NAME_Run); + NewStateGroup(actor, actor->user.ActorActionSet->Run); - if ((actor->user.track >= 0) && (actor->user.jump_speed) > 800 && (actor->hasState(NAME_Sit))) + if ((actor->user.track >= 0) && (actor->user.jump_speed) > 800 && (actor->user.ActorActionSet->Sit)) { actor->user.WaitTics = 80; - actor->setStateGroup(NAME_Sit); + NewStateGroup(actor, actor->user.ActorActionSet->Sit); } } } @@ -952,148 +965,24 @@ int DoFall(DSWActor* actor) // //--------------------------------------------------------------------------- -// helpers +#include "saveable.h" -void DSWActor::ChangeStateEnd() +static saveable_code saveable_actor_code[] = { - ChangeState(this, user.__legacyState.StateEnd); - user.__legacyState.RotNum = 0; - -} + SAVE_CODE(DoActorDebris), + SAVE_CODE(DoFireFly), + SAVE_CODE(DoGenerateSewerDebris), + SAVE_CODE(DoActorDeathMove), +}; -Personality* DSWActor::getPersonality() +saveable_module saveable_actor = { - return nullptr; // not implemented yet. -} + // code + saveable_actor_code, + SIZ(saveable_actor_code), -static STATE** getLegacyState(ACTOR_ACTION_SET* a, FName label, int subl) -{ - if (label == NAME_Run) - { - return a->Run; - } - if (label == NAME_Swim) - { - return a->Swim; - } - if (label == NAME_DeathJump) - { - return a->DeathJump; - } - if (label == NAME_Jump) - { - return a->Jump; - } - if (label == NAME_DeathFall) - { - return a->DeathFall; - } - if (label == NAME_Fall) - { - return a->Fall; - } - if (label == NAME_Dead) - { - return a->Dead; - } - if (label == NAME_Sit) - { - return a->Sit; - } - if (label == NAME_Stand) - { - return a->Stand; - } - if (label == NAME_Death1) - { - return a->Death1; - } - if (label == NAME_Death2) - { - return a->Death2; - } - if (label == NAME_Duck) - { - return a->Duck; - } - if (label == NAME_Rise) - { - return a->Rise; - } - if (label == NAME_Fly) - { - return a->Fly; - } - if (label == NAME_Crawl) - { - return a->Crawl; - } - if (label == NAME_Pain) - { - return a->Pain; - } - if (label == NAME_Climb) - { - return a->Climb; - } - if (label == NAME_Special) - { - return a->Special[1]; // special[0] is never used anywhere - } - if (label == NAME_CloseAttack) - { - return a->CloseAttack[subl]; - } - if (label == NAME_Attack) - { - return a->Attack[subl]; - } - return nullptr; -} - -void DSWActor::setStateGroup(FName label, int subl) -{ - auto a = user.__legacyState.ActorActionSet; - if (a) NewStateGroup(this, getLegacyState(a, label, subl)); -} - -bool DSWActor::checkStateGroup(FName label, int subl) -{ - auto a = user.__legacyState.ActorActionSet; - if (!a) return false; - return user.__legacyState.Rot == getLegacyState(a, label, subl); -} - -bool DSWActor::hasState(FName label, int subl) -{ - auto a = user.__legacyState.ActorActionSet; - if (!a) return false; - return getLegacyState(a, label, subl) != nullptr; -} - -void DSWActor::setActionDecide() { user.ActorActionFunc = AF(DoActorDecide); } - -void DSWActor::callAction() -{ - callFunction(user.ActorActionFunc); -} - -void DSWActor::callStateAction() -{ - if (user.__legacyState.State && user.__legacyState.State->Animator) - callFunction(*user.__legacyState.State->Animator); -} - -int DSWActor::callFunction(VMFunction* func) -{ - int ret = 0; - if (func) - { - VMValue param[] = { this }; - VMReturn r(&ret); - VMCall(func, param, 1, &r, 1); - } - return ret; -} + // data + nullptr,0 +}; END_SW_NS diff --git a/source/games/sw/src/ai.cpp b/source/games/sw/src/ai.cpp index 25d6edbafbc..dd9e614a05e 100644 --- a/source/games/sw/src/ai.cpp +++ b/source/games/sw/src/ai.cpp @@ -40,9 +40,10 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR InitActorRunToward; bool DropAhead(DSWActor* actor, double min_height); -VMFunction* ChooseAction(DECISION decision[]); +ANIMATOR* ChooseAction(DECISION decision[]); #define CHOOSE2(value) (RANDOM_P2(1024) < (value)) @@ -67,7 +68,11 @@ bool ActorMoveHitReact(DSWActor* actor) // if you ran into a player - call close range functions DoActorPickClosePlayer(actor); auto action = ChooseAction(actor->user.Personality->TouchTarget); - actor->callFunction(action); + if (action) + { + (*action)(actor); + return true; + } } } return false; @@ -102,13 +107,15 @@ void DoActorSetSpeed(DSWActor* actor, uint8_t speed) if (actor->spr.cstat & (CSTAT_SPRITE_RESTORE)) return; - ASSERT(actor->user.__legacyState.Attrib); + ASSERT(actor->user.Attrib); actor->user.speed = speed; - int vel = actor->user.__legacyState.Attrib->Speed[speed]; + int vel; if (ActorFlaming(actor)) - vel = (vel * 3) >> 1; + vel = actor->user.Attrib->Speed[speed] + (actor->user.Attrib->Speed[speed] >> 1); + else + vel = actor->user.Attrib->Speed[speed]; actor->vel.X = vel * maptoworld; } @@ -121,7 +128,7 @@ void DoActorSetSpeed(DSWActor* actor, uint8_t speed) */ //--------------------------------------------------------------------------- -VMFunction* ChooseAction(DECISION decision[]) +ANIMATOR* ChooseAction(DECISION decision[]) { // !JIM! Here is an opportunity for some AI, instead of randomness! int random_value = RANDOM_P2(1024<<5)>>5; @@ -132,28 +139,11 @@ VMFunction* ChooseAction(DECISION decision[]) if (random_value <= decision[i].range) { - return *decision[i].action; - } - } -} - -int ChooseNoise(DECISIONB decision[]) -{ - // !JIM! Here is an opportunity for some AI, instead of randomness! - int random_value = RANDOM_P2(1024 << 5) >> 5; - - for (int i = 0; true; i++) - { - ASSERT(i < 10); - - if (random_value <= decision[i].range) - { - return decision[i].noise; + return decision[i].action; } } } - //--------------------------------------------------------------------------- /* !AIC - Sometimes just want the offset of the action @@ -179,14 +169,54 @@ int ChooseActionNumber(int16_t decision[]) // //--------------------------------------------------------------------------- -int DoActorNoise(DSWActor* actor, int noise) +int DoActorNoise(ANIMATOR* Action, DSWActor* actor) { - if (noise == attr_alert) + if (Action == InitActorAmbientNoise) { - if (!actor->hasU() || actor->user.DidAlert) // This only allowed once - return 0; + PlaySpriteSound(actor, attr_ambient, v3df_follow); + } + else if (Action == InitActorAlertNoise) + { + if (actor->hasU() && !actor->user.DidAlert) // This only allowed once + PlaySpriteSound(actor, attr_alert, v3df_follow); + } + else if (Action == InitActorAttackNoise) + { + PlaySpriteSound(actor, attr_attack, v3df_follow); + } + else if (Action == InitActorPainNoise) + { + PlaySpriteSound(actor, attr_pain, v3df_follow); + } + else if (Action == InitActorDieNoise) + { + PlaySpriteSound(actor, attr_die, v3df_none); + } + else if (Action == InitActorExtra1Noise) + { + PlaySpriteSound(actor, attr_extra1, v3df_follow); + } + else if (Action == InitActorExtra2Noise) + { + PlaySpriteSound(actor, attr_extra2, v3df_follow); + } + else if (Action == InitActorExtra3Noise) + { + PlaySpriteSound(actor, attr_extra3, v3df_follow); + } + else if (Action == InitActorExtra4Noise) + { + PlaySpriteSound(actor, attr_extra4, v3df_follow); + } + else if (Action == InitActorExtra5Noise) + { + PlaySpriteSound(actor, attr_extra5, v3df_follow); + } + else if (Action == InitActorExtra6Noise) + { + PlaySpriteSound(actor, attr_extra6, v3df_follow); } - PlaySpriteSound(actor, noise, v3df_follow); + return 0; } @@ -391,7 +421,7 @@ int DoActorOperate(DSWActor* actor) if (actor->user.ID == HORNET_RUN_R0 || actor->user.ID == EEL_RUN_R0 || actor->user.ID == BUNNY_RUN_R0) return false; - if (actor->checkStateGroup(NAME_Sit) || actor->checkStateGroup(NAME_Stand)) + if (actor->user.Rot == actor->user.ActorActionSet->Sit || actor->user.Rot == actor->user.ActorActionSet->Stand) return false; if ((actor->user.WaitTics -= ACTORMOVETICS) > 0) @@ -411,7 +441,7 @@ int DoActorOperate(DSWActor* actor) { actor->user.WaitTics = 2 * 120; - actor->setStateGroup(NAME_Sit); + NewStateGroup(actor, actor->user.ActorActionSet->Sit); } } @@ -427,9 +457,9 @@ int DoActorOperate(DSWActor* actor) DECISION GenericFlaming[] = { - {30, &AF(InitActorAttack)}, - {512, &AF(InitActorRunToward)}, - {1024, &AF(InitActorRunAway)}, + {30, InitActorAttack}, + {512, InitActorRunToward}, + {1024, InitActorRunAway}, }; /* @@ -443,9 +473,9 @@ DECISION GenericFlaming[] = do anymore and then this routine is called again. */ -VMFunction* DoActorActionDecide(DSWActor* actor) +ANIMATOR* DoActorActionDecide(DSWActor* actor) { - VMFunction* action; + ANIMATOR* action; bool ICanSee=false; // REMINDER: This function is not even called if SpriteControl doesn't let @@ -454,7 +484,7 @@ VMFunction* DoActorActionDecide(DSWActor* actor) ASSERT(actor->user.Personality); actor->user.Dist = 0; - action = AF(InitActorDecide); + action = InitActorDecide; // target is gone. if (actor->user.targetActor == nullptr) @@ -526,8 +556,8 @@ VMFunction* DoActorActionDecide(DSWActor* actor) actor->user.Flags &= ~(SPR_TARGETED); // as far as actor // knows, its not a // target any more - if (actor->hasState(NAME_Duck) && RANDOM_P2(1024<<8)>>8 < 100) - action = AF(InitActorDuck); + if (actor->user.ActorActionSet->Duck && RANDOM_P2(1024<<8)>>8 < 100) + action = InitActorDuck; else { if ((actor->user.ID == COOLG_RUN_R0 && (actor->spr.cstat & CSTAT_SPRITE_TRANSLUCENT)) || (actor->spr.cstat & CSTAT_SPRITE_INVISIBLE)) @@ -590,7 +620,7 @@ VMFunction* DoActorActionDecide(DSWActor* actor) //CON_Message("Surprised"); if (!actor->user.DidAlert && ICanSee) { - DoActorNoise(actor, attr_alert); + DoActorNoise(InitActorAlertNoise, actor); actor->user.DidAlert = true; } return action; @@ -600,14 +630,14 @@ VMFunction* DoActorActionDecide(DSWActor* actor) { // Player has not seen actor, to be fair let him know actor // are there - ; - DoActorNoise(actor, ChooseNoise(actor->user.Personality->Broadcast)); + DoActorNoise(ChooseAction(actor->user.Personality->Broadcast),actor); + //CON_Message("Actor Noise"); return action; } } } - //CON_Message("Couldn't resolve decide, &AF(InitActorDecide)"); + //CON_Message("Couldn't resolve decide, InitActorDecide"); return action; } @@ -619,16 +649,10 @@ VMFunction* DoActorActionDecide(DSWActor* actor) int InitActorDecide(DSWActor* actor) { - actor->setActionDecide(); + actor->user.ActorActionFunc = DoActorDecide; return DoActorDecide(actor); } -int InitActorSetDecide(DSWActor* actor) -{ - actor->setActionDecide(); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -637,14 +661,13 @@ int InitActorSetDecide(DSWActor* actor) int DoActorDecide(DSWActor* actor) { - VMFunction* actor_action; + ANIMATOR* actor_action; // See what to do next - actor_action = DoActorActionDecide(actor); // Fix for the GenericFlaming bug for actors that don't have attack states - if (actor_action == AF(InitActorAttack) && actor->user.WeaponNum == 0) + if (actor_action == InitActorAttack && actor->user.WeaponNum == 0) return 0; // Just let the actor do as it was doing before in this case // Target is gone. @@ -652,7 +675,7 @@ int DoActorDecide(DSWActor* actor) return 0; // zombie is attacking a player - if (actor_action == AF(InitActorAttack) && actor->user.ID == ZOMBIE_RUN_R0 && actor->user.targetActor->user.PlayerP) + if (actor_action == InitActorAttack && actor->user.ID == ZOMBIE_RUN_R0 && actor->user.targetActor->user.PlayerP) { // Don't let zombies shoot at master if (GetOwner(actor) == actor->user.targetActor) @@ -665,20 +688,124 @@ int DoActorDecide(DSWActor* actor) ASSERT(actor_action != nullptr); - if (actor_action != AF(InitActorDecide)) + if (actor_action != InitActorDecide) { // NOT staying put - actor->callFunction(actor_action); + (*actor_action)(actor); + //CON_Message("DoActorDecide: NOT Staying put"); } else { // Actually staying put - actor->setStateGroup(NAME_Stand); + NewStateGroup(actor, actor->user.ActorActionSet->Stand); + //CON_Message("DoActorDecide: Staying put"); } return 0; } +// Important note: The functions below are being checked for as state identifiers. +// But they are all identical content wise which makes MSVC merge them together into one. +// Assigning 'sw_snd_scratch' different values makes them different so that merging does not occur. +int sw_snd_scratch = 0; + + +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +int InitActorAlertNoise(DSWActor* actor) +{ + sw_snd_scratch = 1; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + + +int InitActorAmbientNoise(DSWActor* actor) +{ + sw_snd_scratch = 2; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorAttackNoise(DSWActor* actor) +{ + sw_snd_scratch = 3; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorPainNoise(DSWActor* actor) +{ + sw_snd_scratch = 4; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorDieNoise(DSWActor* actor) +{ + sw_snd_scratch = 5; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorExtra1Noise(DSWActor* actor) +{ + sw_snd_scratch = 6; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorExtra2Noise(DSWActor* actor) +{ + sw_snd_scratch = 7; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorExtra3Noise(DSWActor* actor) +{ + sw_snd_scratch = 8; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorExtra4Noise(DSWActor* actor) +{ + sw_snd_scratch = 9; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorExtra5Noise(DSWActor* actor) +{ + sw_snd_scratch = 10; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + +int InitActorExtra6Noise(DSWActor* actor) +{ + sw_snd_scratch = 11; + actor->user.ActorActionFunc = DoActorDecide; + + return 0; +} + + //--------------------------------------------------------------------------- /* !AIC KEY - Routines handle moving toward the player. @@ -687,12 +814,12 @@ int DoActorDecide(DSWActor* actor) int InitActorMoveCloser(DSWActor* actor) { - actor->user.ActorActionFunc = AF(DoActorMoveCloser); + actor->user.ActorActionFunc = DoActorMoveCloser; - if (!actor->checkStateGroup(NAME_Run)) - actor->setStateGroup(NAME_Run); + if (actor->user.Rot != actor->user.ActorActionSet->Run) + NewStateGroup(actor, actor->user.ActorActionSet->Run); - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); return 0; } @@ -715,8 +842,8 @@ int DoActorCantMoveCloser(DSWActor* actor) DoActorSetSpeed(actor, MID_SPEED); actor->user.Flags |= (SPR_FIND_PLAYER); - actor->setActionDecide(); - actor->setStateGroup(NAME_Run); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Run); } else { @@ -745,7 +872,7 @@ int DoActorMoveCloser(DSWActor* actor) } // Do a noise if ok - DoActorNoise(actor, ChooseNoise(actor->user.Personality->Broadcast)); + DoActorNoise(ChooseAction(actor->user.Personality->Broadcast), actor); // after moving a ways check to see if player is still in sight if (actor->user.DistCheck > 34.375) @@ -951,8 +1078,8 @@ int FindWanderTrack(DSWActor* actor) int InitActorRunAway(DSWActor* actor) { - actor->setActionDecide(); - actor->setStateGroup(NAME_Run); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Run); actor->user.track = FindTrackAwayFromPlayer(actor); @@ -980,8 +1107,8 @@ int InitActorRunAway(DSWActor* actor) int InitActorRunToward(DSWActor* actor) { - actor->setActionDecide(); - actor->setStateGroup(NAME_Run); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Run); InitActorReposition(actor); DoActorSetSpeed(actor, FAST_SPEED); @@ -1040,10 +1167,10 @@ int InitActorAttack(DSWActor* actor) return 0; } - actor->user.ActorActionFunc = AF(DoActorAttack); + actor->user.ActorActionFunc = DoActorAttack; // move into standing frame - //actor->setStateGroup(NAME_Stand); + //NewStateGroup(actor, actor->user.ActorActionSet->Stand); // face player when attacking actor->spr.Angles.Yaw = (actor->user.targetActor->spr.pos - actor->spr.pos).Angle(); @@ -1056,7 +1183,7 @@ int InitActorAttack(DSWActor* actor) } // Hari Kari for Ninja's - if (actor->hasState(NAME_Death2)) + if (actor->user.ActorActionSet->Death2) { const int SUICIDE_HEALTH_VALUE = 38; @@ -1064,15 +1191,15 @@ int InitActorAttack(DSWActor* actor) { if (CHOOSE2(100)) { - actor->setActionDecide(); - actor->setStateGroup(NAME_Death2); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Death2); return 0; } } } - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); return 0; } @@ -1087,30 +1214,32 @@ int DoActorAttack(DSWActor* actor) { int rand_num; - DoActorNoise(actor, ChooseNoise(actor->user.Personality->Broadcast)); + DoActorNoise(ChooseAction(actor->user.Personality->Broadcast),actor); double dist =(actor->spr.pos.XY() - actor->user.targetActor->spr.pos.XY()).Length(); auto pActor = GetPlayerSpriteNum(actor); - if ((actor->user.__legacyState.ActorActionSet->CloseAttack[0] && dist < CloseRangeDist(actor, actor->user.targetActor)) || + if ((actor->user.ActorActionSet->CloseAttack[0] && dist < CloseRangeDist(actor, actor->user.targetActor)) || (pActor && pActor->hasU() && pActor->user.WeaponNum == WPN_FIST)) // JBF: added null check { - rand_num = ChooseActionNumber(actor->user.__legacyState.ActorActionSet->CloseAttackPercent); + rand_num = ChooseActionNumber(actor->user.ActorActionSet->CloseAttackPercent); - actor->setStateGroup(NAME_CloseAttack, rand_num); + NewStateGroup(actor, actor->user.ActorActionSet->CloseAttack[rand_num]); } else { ASSERT(actor->user.WeaponNum != 0); - rand_num = ChooseActionNumber(actor->user.__legacyState.ActorActionSet->AttackPercent); + rand_num = ChooseActionNumber(actor->user.ActorActionSet->AttackPercent); ASSERT(rand_num < actor->user.WeaponNum); - actor->setStateGroup(NAME_Attack, rand_num); - actor->setActionDecide(); + NewStateGroup(actor, actor->user.ActorActionSet->Attack[rand_num]); + actor->user.ActorActionFunc = DoActorDecide; } + //actor->user.ActorActionFunc = DoActorDecide; + return 0; } @@ -1125,8 +1254,8 @@ int InitActorEvade(DSWActor* actor) // Evade is same thing as run away except when you get to the end of the track // you stop and take up the fight again. - actor->setActionDecide(); - actor->setStateGroup(NAME_Run); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Run); actor->user.track = FindTrackAwayFromPlayer(actor); @@ -1150,8 +1279,8 @@ int InitActorEvade(DSWActor* actor) int InitActorWanderAround(DSWActor* actor) { - actor->setActionDecide(); - actor->setStateGroup(NAME_Run); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Run); DoActorPickClosePlayer(actor); @@ -1175,8 +1304,8 @@ int InitActorWanderAround(DSWActor* actor) int InitActorFindPlayer(DSWActor* actor) { - actor->setActionDecide(); - actor->setStateGroup(NAME_Run); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Run); actor->user.track = FindTrackToPlayer(actor); @@ -1187,8 +1316,8 @@ int InitActorFindPlayer(DSWActor* actor) DoActorSetSpeed(actor, MID_SPEED); actor->user.Flags |= (SPR_FIND_PLAYER); - actor->setActionDecide(); - actor->setStateGroup(NAME_Run); + actor->user.ActorActionFunc = DoActorDecide; + NewStateGroup(actor, actor->user.ActorActionSet->Run); } else { @@ -1205,14 +1334,14 @@ int InitActorFindPlayer(DSWActor* actor) int InitActorDuck(DSWActor* actor) { - if (!actor->hasState(NAME_Duck)) + if (!actor->user.ActorActionSet->Duck) { - actor->setActionDecide(); + actor->user.ActorActionFunc = DoActorDecide; return 0; } - actor->user.ActorActionFunc = AF(DoActorDuck); - actor->setStateGroup(NAME_Duck); + actor->user.ActorActionFunc = DoActorDuck; + NewStateGroup(actor, actor->user.ActorActionSet->Duck); double dist = (actor->spr.pos.XY() - actor->user.targetActor->spr.pos.XY()).LengthSquared(); @@ -1227,7 +1356,7 @@ int InitActorDuck(DSWActor* actor) } - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); return 0; } @@ -1242,8 +1371,8 @@ int DoActorDuck(DSWActor* actor) { if ((actor->user.WaitTics -= ACTORMOVETICS) < 0) { - actor->setStateGroup(NAME_Rise); - actor->setActionDecide(); + NewStateGroup(actor, actor->user.ActorActionSet->Rise); + actor->user.ActorActionFunc = DoActorDecide; actor->user.Flags &= ~(SPR_TARGETED); } @@ -1562,11 +1691,11 @@ int InitActorReposition(DSWActor* actor) } - actor->user.ActorActionFunc = AF(DoActorReposition); + actor->user.ActorActionFunc = DoActorReposition; if (!(actor->user.Flags & SPR_SWIMMING)) - actor->setStateGroup(NAME_Run); + NewStateGroup(actor, actor->user.ActorActionSet->Run); - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); return 0; } @@ -1608,9 +1737,9 @@ int DoActorReposition(DSWActor* actor) int InitActorPause(DSWActor* actor) { - actor->user.ActorActionFunc = AF(DoActorPause); + actor->user.ActorActionFunc = DoActorPause; - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); return 0; } @@ -1627,12 +1756,69 @@ int DoActorPause(DSWActor* actor) // WaitTics is used by too much other actor code and causes problems here if ((actor->user.Vis -= ACTORMOVETICS) < 0) { - actor->setActionDecide(); + actor->user.ActorActionFunc = DoActorDecide; actor->user.Flags &= ~(SPR_TARGETED); } return 0; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +#include "saveable.h" +static saveable_code saveable_ai_code[] = +{ + SAVE_CODE(InitActorDecide), + SAVE_CODE(DoActorDecide), + SAVE_CODE(InitActorAlertNoise), + SAVE_CODE(InitActorAmbientNoise), + SAVE_CODE(InitActorAttackNoise), + SAVE_CODE(InitActorPainNoise), + SAVE_CODE(InitActorDieNoise), + SAVE_CODE(InitActorExtra1Noise), + SAVE_CODE(InitActorExtra2Noise), + SAVE_CODE(InitActorExtra3Noise), + SAVE_CODE(InitActorExtra4Noise), + SAVE_CODE(InitActorExtra5Noise), + SAVE_CODE(InitActorExtra6Noise), + SAVE_CODE(InitActorMoveCloser), + SAVE_CODE(DoActorMoveCloser), + SAVE_CODE(FindTrackToPlayer), + SAVE_CODE(FindTrackAwayFromPlayer), + SAVE_CODE(FindWanderTrack), + SAVE_CODE(InitActorRunAway), + SAVE_CODE(InitActorRunToward), + SAVE_CODE(InitActorAttack), + SAVE_CODE(DoActorAttack), + SAVE_CODE(InitActorEvade), + SAVE_CODE(InitActorWanderAround), + SAVE_CODE(InitActorFindPlayer), + SAVE_CODE(InitActorDuck), + SAVE_CODE(DoActorDuck), + SAVE_CODE(DoActorMoveJump), + SAVE_CODE(InitActorReposition), + SAVE_CODE(DoActorReposition), + SAVE_CODE(DoActorPause) +}; + +static saveable_data saveable_ai_data[] = +{ + SAVE_DATA(GenericFlaming) +}; + +saveable_module saveable_ai = +{ + // code + saveable_ai_code, + SIZ(saveable_ai_code), + + // data + saveable_ai_data, + SIZ(saveable_ai_data) +}; END_SW_NS diff --git a/source/games/sw/src/ai.h b/source/games/sw/src/ai.h index 8f889affa0b..6d5cade7c08 100644 --- a/source/games/sw/src/ai.h +++ b/source/games/sw/src/ai.h @@ -27,22 +27,13 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms #ifndef AI_H #define AI_H - -class VMFunction; BEGIN_SW_NS - // Call functions based on a random range value struct DECISION { int range; - VMNativeFunction** action; -}; - -struct DECISIONB -{ - int range; - int noise; + ANIMATOR* action; }; // Personality structure @@ -50,7 +41,7 @@ struct PERSONALITY { DECISION* Battle; DECISION* Offense; - DECISIONB* Broadcast; + DECISION* Broadcast; DECISION* Surprised; DECISION* Evasive; DECISION* LostTarget; @@ -83,6 +74,17 @@ bool CanSeePlayer(DSWActor* actor); int DoActorPickClosePlayer(DSWActor* actor); int InitActorDecide(DSWActor* actor); int DoActorDecide(DSWActor* actor); +int InitActorAlertNoise(DSWActor* actor); +int InitActorAmbientNoise(DSWActor* actor); +int InitActorAttackNoise(DSWActor* actor); +int InitActorPainNoise(DSWActor* actor); +int InitActorDieNoise(DSWActor* actor); +int InitActorExtra1Noise(DSWActor* actor); +int InitActorExtra2Noise(DSWActor* actor); +int InitActorExtra3Noise(DSWActor* actor); +int InitActorExtra4Noise(DSWActor* actor); +int InitActorExtra5Noise(DSWActor* actor); +int InitActorExtra6Noise(DSWActor* actor); int InitActorMoveCloser(DSWActor* actor); int DoActorCantMoveCloser(DSWActor* actor); int DoActorMoveCloser(DSWActor* actor); diff --git a/source/games/sw/src/break.cpp b/source/games/sw/src/break.cpp index e6d97d709c7..8e24403d284 100644 --- a/source/games/sw/src/break.cpp +++ b/source/games/sw/src/break.cpp @@ -1005,7 +1005,7 @@ bool NullActor(DSWActor* actor) return true; // does not have a STATE or FUNC to control it - if (!actor->user.__legacyState.State) + if (!actor->user.State) return true; // does not have a STATE or FUNC to control it diff --git a/source/games/sw/src/bunny.cpp b/source/games/sw/src/bunny.cpp index 713724747fe..5fad9a514d2 100644 --- a/source/games/sw/src/bunny.cpp +++ b/source/games/sw/src/bunny.cpp @@ -40,64 +40,61 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS int Bunny_Count = 0; +ANIMATOR DoActorMoveJump; +ANIMATOR DoBunnyMoveJump; +ANIMATOR DoBunnyQuickJump; DECISION BunnyBattle[] = { - {748, &AF(InitActorMoveCloser)}, - {750, &AF(InitActorSetDecide)}, - {760, &AF(InitActorSetDecide)}, - {1024, &AF(InitActorMoveCloser)} + {748, InitActorMoveCloser}, + {750, InitActorAlertNoise}, + {760, InitActorAttackNoise}, + {1024, InitActorMoveCloser} }; DECISION BunnyOffense[] = { - {600, &AF(InitActorMoveCloser)}, - {700, &AF(InitActorSetDecide)}, - {1024, &AF(InitActorMoveCloser)} + {600, InitActorMoveCloser}, + {700, InitActorAlertNoise}, + {1024, InitActorMoveCloser} }; -DECISIONB BunnyBroadcast[] = +DECISION BunnyBroadcast[] = { - {21, attr_alert}, - {51, attr_ambient}, - {1024, 0} -}; - -DECISIONB BunnyBroadcast2[] = -{ - {500, 0}, - {1020, 0}, - {1024, attr_ambient} + {21, InitActorAlertNoise}, + {51, InitActorAmbientNoise}, + {1024, InitActorDecide} }; DECISION BunnySurprised[] = { - {500, &AF(InitActorRunAway)}, - {701, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorDecide)} + {500, InitActorRunAway}, + {701, InitActorMoveCloser}, + {1024, InitActorDecide} }; DECISION BunnyEvasive[] = { - {500, &AF(InitActorWanderAround)}, - {1020, &AF(InitActorRunAway)}, - {1024, &AF(InitActorSetDecide)} + {500, InitActorWanderAround}, + {1020, InitActorRunAway}, + {1024, InitActorAmbientNoise} }; DECISION BunnyLostTarget[] = { - {900, &AF(InitActorFindPlayer)}, - {1024, &AF(InitActorWanderAround)} + {900, InitActorFindPlayer}, + {1024, InitActorWanderAround} }; DECISION BunnyCloseRange[] = { - {1024, &AF(InitActorAttack) }, + {1024, InitActorAttack }, +// {1024, InitActorReposition } }; DECISION BunnyWander[] = { - {1024, &AF(InitActorReposition)} + {1024, InitActorReposition} }; PERSONALITY WhiteBunnyPersonality = @@ -116,7 +113,7 @@ PERSONALITY BunnyPersonality = { BunnyEvasive, BunnyEvasive, - BunnyBroadcast2, + BunnyEvasive, BunnyWander, BunnyWander, BunnyWander, @@ -156,47 +153,49 @@ ATTRIBUTE WhiteBunnyAttrib = #define BUNNY_RUN_RATE 10 +ANIMATOR DoBunnyMove, NullBunny, DoActorDebris, DoBunnyGrowUp; + STATE s_BunnyRun[5][6] = { { - {BUNNY_RUN_R0 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[0][1]}, - {BUNNY_RUN_R0 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[0][2]}, - {BUNNY_RUN_R0 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[0][3]}, - {BUNNY_RUN_R0 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[0][4]}, - {BUNNY_RUN_R0 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyRun[0][5]}, - {BUNNY_RUN_R0 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[0][0]}, + {BUNNY_RUN_R0 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[0][1]}, + {BUNNY_RUN_R0 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[0][2]}, + {BUNNY_RUN_R0 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[0][3]}, + {BUNNY_RUN_R0 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[0][4]}, + {BUNNY_RUN_R0 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyRun[0][5]}, + {BUNNY_RUN_R0 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[0][0]}, }, { - {BUNNY_RUN_R1 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[1][1]}, - {BUNNY_RUN_R1 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[1][2]}, - {BUNNY_RUN_R1 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[1][3]}, - {BUNNY_RUN_R1 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[1][4]}, - {BUNNY_RUN_R1 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyRun[1][5]}, - {BUNNY_RUN_R1 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[1][0]}, + {BUNNY_RUN_R1 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[1][1]}, + {BUNNY_RUN_R1 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[1][2]}, + {BUNNY_RUN_R1 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[1][3]}, + {BUNNY_RUN_R1 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[1][4]}, + {BUNNY_RUN_R1 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyRun[1][5]}, + {BUNNY_RUN_R1 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[1][0]}, }, { - {BUNNY_RUN_R2 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[2][1]}, - {BUNNY_RUN_R2 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[2][2]}, - {BUNNY_RUN_R2 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[2][3]}, - {BUNNY_RUN_R2 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[2][4]}, - {BUNNY_RUN_R2 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyRun[2][5]}, - {BUNNY_RUN_R2 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[2][0]}, + {BUNNY_RUN_R2 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[2][1]}, + {BUNNY_RUN_R2 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[2][2]}, + {BUNNY_RUN_R2 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[2][3]}, + {BUNNY_RUN_R2 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[2][4]}, + {BUNNY_RUN_R2 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyRun[2][5]}, + {BUNNY_RUN_R2 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[2][0]}, }, { - {BUNNY_RUN_R3 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[3][1]}, - {BUNNY_RUN_R3 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[3][2]}, - {BUNNY_RUN_R3 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[3][3]}, - {BUNNY_RUN_R3 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[3][4]}, - {BUNNY_RUN_R3 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyRun[3][5]}, - {BUNNY_RUN_R3 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[3][0]}, + {BUNNY_RUN_R3 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[3][1]}, + {BUNNY_RUN_R3 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[3][2]}, + {BUNNY_RUN_R3 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[3][3]}, + {BUNNY_RUN_R3 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[3][4]}, + {BUNNY_RUN_R3 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyRun[3][5]}, + {BUNNY_RUN_R3 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[3][0]}, }, { - {BUNNY_RUN_R4 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[4][1]}, - {BUNNY_RUN_R4 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[4][2]}, - {BUNNY_RUN_R4 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[4][3]}, - {BUNNY_RUN_R4 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[4][4]}, - {BUNNY_RUN_R4 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyRun[4][5]}, - {BUNNY_RUN_R4 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, &AF(DoBunnyMove), &s_BunnyRun[4][0]}, + {BUNNY_RUN_R4 + 0, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[4][1]}, + {BUNNY_RUN_R4 + 1, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[4][2]}, + {BUNNY_RUN_R4 + 2, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[4][3]}, + {BUNNY_RUN_R4 + 3, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[4][4]}, + {BUNNY_RUN_R4 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyRun[4][5]}, + {BUNNY_RUN_R4 + 4, BUNNY_RUN_RATE | SF_TIC_ADJUST, DoBunnyMove, &s_BunnyRun[4][0]}, } }; @@ -217,33 +216,34 @@ STATE* sg_BunnyRun[] = ////////////////////// #define BUNNY_STAND_RATE 12 +ANIMATOR DoBunnyEat; STATE s_BunnyStand[5][3] = { { - {BUNNY_STAND_R0 + 0, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[0][1]}, - {BUNNY_STAND_R0 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyStand[0][2]}, - {BUNNY_STAND_R0 + 4, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[0][0]}, + {BUNNY_STAND_R0 + 0, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[0][1]}, + {BUNNY_STAND_R0 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyStand[0][2]}, + {BUNNY_STAND_R0 + 4, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[0][0]}, }, { - {BUNNY_STAND_R1 + 0, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[1][1]}, - {BUNNY_STAND_R1 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyStand[1][2]}, - {BUNNY_STAND_R1 + 4, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[1][0]}, + {BUNNY_STAND_R1 + 0, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[1][1]}, + {BUNNY_STAND_R1 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyStand[1][2]}, + {BUNNY_STAND_R1 + 4, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[1][0]}, }, { - {BUNNY_STAND_R2 + 0, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[2][1]}, - {BUNNY_STAND_R2 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyStand[2][2]}, - {BUNNY_STAND_R2 + 4, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[2][0]}, + {BUNNY_STAND_R2 + 0, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[2][1]}, + {BUNNY_STAND_R2 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyStand[2][2]}, + {BUNNY_STAND_R2 + 4, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[2][0]}, }, { - {BUNNY_STAND_R3 + 0, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[3][1]}, - {BUNNY_STAND_R3 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyStand[3][2]}, - {BUNNY_STAND_R3 + 4, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[3][0]}, + {BUNNY_STAND_R3 + 0, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[3][1]}, + {BUNNY_STAND_R3 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyStand[3][2]}, + {BUNNY_STAND_R3 + 4, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[3][0]}, }, { - {BUNNY_STAND_R4 + 0, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[4][1]}, - {BUNNY_STAND_R4 + 4, SF_QUICK_CALL, &AF(DoBunnyGrowUp), &s_BunnyStand[4][2]}, - {BUNNY_STAND_R4 + 4, BUNNY_STAND_RATE, &AF(DoBunnyEat), &s_BunnyStand[4][0]}, + {BUNNY_STAND_R4 + 0, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[4][1]}, + {BUNNY_STAND_R4 + 4, SF_QUICK_CALL, DoBunnyGrowUp, &s_BunnyStand[4][2]}, + {BUNNY_STAND_R4 + 4, BUNNY_STAND_RATE, DoBunnyEat, &s_BunnyStand[4][0]}, }, }; @@ -264,28 +264,29 @@ STATE* sg_BunnyStand[] = ////////////////////// #define BUNNY_SCREW_RATE 16 +ANIMATOR DoBunnyScrew; STATE s_BunnyScrew[5][2] = { { - {BUNNY_STAND_R0 + 0, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[0][1]}, - {BUNNY_STAND_R0 + 2, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[0][0]}, + {BUNNY_STAND_R0 + 0, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[0][1]}, + {BUNNY_STAND_R0 + 2, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[0][0]}, }, { - {BUNNY_STAND_R1 + 0, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[1][1]}, - {BUNNY_STAND_R1 + 2, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[1][0]}, + {BUNNY_STAND_R1 + 0, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[1][1]}, + {BUNNY_STAND_R1 + 2, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[1][0]}, }, { - {BUNNY_STAND_R2 + 0, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[2][1]}, - {BUNNY_STAND_R2 + 2, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[2][0]}, + {BUNNY_STAND_R2 + 0, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[2][1]}, + {BUNNY_STAND_R2 + 2, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[2][0]}, }, { - {BUNNY_STAND_R3 + 0, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[3][1]}, - {BUNNY_STAND_R3 + 2, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[3][0]}, + {BUNNY_STAND_R3 + 0, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[3][1]}, + {BUNNY_STAND_R3 + 2, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[3][0]}, }, { - {BUNNY_STAND_R4 + 0, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[4][1]}, - {BUNNY_STAND_R4 + 2, BUNNY_SCREW_RATE, &AF(DoBunnyScrew), &s_BunnyScrew[4][0]}, + {BUNNY_STAND_R4 + 0, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[4][1]}, + {BUNNY_STAND_R4 + 2, BUNNY_SCREW_RATE, DoBunnyScrew, &s_BunnyScrew[4][0]}, }, }; @@ -306,58 +307,60 @@ STATE* sg_BunnyScrew[] = ////////////////////// #define BUNNY_SWIPE_RATE 8 +ANIMATOR InitActorDecide; +ANIMATOR InitBunnySlash; STATE s_BunnySwipe[5][8] = { { - {BUNNY_SWIPE_R0 + 0, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[0][1]}, - {BUNNY_SWIPE_R0 + 1, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[0][2]}, - {BUNNY_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[0][3]}, - {BUNNY_SWIPE_R0 + 2, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[0][4]}, - {BUNNY_SWIPE_R0 + 3, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[0][5]}, - {BUNNY_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[0][6]}, - {BUNNY_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_BunnySwipe[0][7]}, - {BUNNY_SWIPE_R0 + 3, BUNNY_SWIPE_RATE, &AF(DoBunnyMove), &s_BunnySwipe[0][7]}, + {BUNNY_SWIPE_R0 + 0, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[0][1]}, + {BUNNY_SWIPE_R0 + 1, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[0][2]}, + {BUNNY_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[0][3]}, + {BUNNY_SWIPE_R0 + 2, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[0][4]}, + {BUNNY_SWIPE_R0 + 3, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[0][5]}, + {BUNNY_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[0][6]}, + {BUNNY_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_BunnySwipe[0][7]}, + {BUNNY_SWIPE_R0 + 3, BUNNY_SWIPE_RATE, DoBunnyMove, &s_BunnySwipe[0][7]}, }, { - {BUNNY_SWIPE_R1 + 0, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[1][1]}, - {BUNNY_SWIPE_R1 + 1, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[1][2]}, - {BUNNY_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[1][3]}, - {BUNNY_SWIPE_R1 + 2, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[1][4]}, - {BUNNY_SWIPE_R1 + 3, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[1][5]}, - {BUNNY_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[1][6]}, - {BUNNY_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_BunnySwipe[1][7]}, - {BUNNY_SWIPE_R1 + 3, BUNNY_SWIPE_RATE, &AF(DoBunnyMove), &s_BunnySwipe[1][7]}, + {BUNNY_SWIPE_R1 + 0, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[1][1]}, + {BUNNY_SWIPE_R1 + 1, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[1][2]}, + {BUNNY_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[1][3]}, + {BUNNY_SWIPE_R1 + 2, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[1][4]}, + {BUNNY_SWIPE_R1 + 3, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[1][5]}, + {BUNNY_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[1][6]}, + {BUNNY_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_BunnySwipe[1][7]}, + {BUNNY_SWIPE_R1 + 3, BUNNY_SWIPE_RATE, DoBunnyMove, &s_BunnySwipe[1][7]}, }, { - {BUNNY_SWIPE_R2 + 0, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[2][1]}, - {BUNNY_SWIPE_R2 + 1, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[2][2]}, - {BUNNY_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[2][3]}, - {BUNNY_SWIPE_R2 + 2, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[2][4]}, - {BUNNY_SWIPE_R2 + 3, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[2][5]}, - {BUNNY_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[2][6]}, - {BUNNY_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_BunnySwipe[2][7]}, - {BUNNY_SWIPE_R2 + 3, BUNNY_SWIPE_RATE, &AF(DoBunnyMove), &s_BunnySwipe[2][7]}, + {BUNNY_SWIPE_R2 + 0, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[2][1]}, + {BUNNY_SWIPE_R2 + 1, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[2][2]}, + {BUNNY_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[2][3]}, + {BUNNY_SWIPE_R2 + 2, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[2][4]}, + {BUNNY_SWIPE_R2 + 3, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[2][5]}, + {BUNNY_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[2][6]}, + {BUNNY_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_BunnySwipe[2][7]}, + {BUNNY_SWIPE_R2 + 3, BUNNY_SWIPE_RATE, DoBunnyMove, &s_BunnySwipe[2][7]}, }, { - {BUNNY_SWIPE_R3 + 0, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[3][1]}, - {BUNNY_SWIPE_R3 + 1, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[3][2]}, - {BUNNY_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[3][3]}, - {BUNNY_SWIPE_R3 + 2, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[3][4]}, - {BUNNY_SWIPE_R3 + 3, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[3][5]}, - {BUNNY_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[3][6]}, - {BUNNY_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_BunnySwipe[3][7]}, - {BUNNY_SWIPE_R3 + 3, BUNNY_SWIPE_RATE, &AF(DoBunnyMove), &s_BunnySwipe[3][7]}, + {BUNNY_SWIPE_R3 + 0, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[3][1]}, + {BUNNY_SWIPE_R3 + 1, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[3][2]}, + {BUNNY_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[3][3]}, + {BUNNY_SWIPE_R3 + 2, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[3][4]}, + {BUNNY_SWIPE_R3 + 3, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[3][5]}, + {BUNNY_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[3][6]}, + {BUNNY_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_BunnySwipe[3][7]}, + {BUNNY_SWIPE_R3 + 3, BUNNY_SWIPE_RATE, DoBunnyMove, &s_BunnySwipe[3][7]}, }, { - {BUNNY_SWIPE_R4 + 0, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[4][1]}, - {BUNNY_SWIPE_R4 + 1, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[4][2]}, - {BUNNY_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[4][3]}, - {BUNNY_SWIPE_R4 + 2, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[4][4]}, - {BUNNY_SWIPE_R4 + 3, BUNNY_SWIPE_RATE, &AF(NullBunny), &s_BunnySwipe[4][5]}, - {BUNNY_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitBunnySlash), &s_BunnySwipe[4][6]}, - {BUNNY_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_BunnySwipe[4][7]}, - {BUNNY_SWIPE_R4 + 3, BUNNY_SWIPE_RATE, &AF(DoBunnyMove), &s_BunnySwipe[4][7]}, + {BUNNY_SWIPE_R4 + 0, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[4][1]}, + {BUNNY_SWIPE_R4 + 1, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[4][2]}, + {BUNNY_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[4][3]}, + {BUNNY_SWIPE_R4 + 2, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[4][4]}, + {BUNNY_SWIPE_R4 + 3, BUNNY_SWIPE_RATE, NullBunny, &s_BunnySwipe[4][5]}, + {BUNNY_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, InitBunnySlash, &s_BunnySwipe[4][6]}, + {BUNNY_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_BunnySwipe[4][7]}, + {BUNNY_SWIPE_R4 + 3, BUNNY_SWIPE_RATE, DoBunnyMove, &s_BunnySwipe[4][7]}, } }; @@ -379,23 +382,24 @@ STATE* sg_BunnySwipe[] = ////////////////////// #define BUNNY_HEART_RATE 14 +ANIMATOR DoBunnyStandKill; STATE s_BunnyHeart[5][4] = { { - {BUNNY_SWIPE_R0 + 0, BUNNY_HEART_RATE, &AF(DoBunnyStandKill), &s_BunnyHeart[0][0]}, + {BUNNY_SWIPE_R0 + 0, BUNNY_HEART_RATE, DoBunnyStandKill, &s_BunnyHeart[0][0]}, }, { - {BUNNY_SWIPE_R1 + 0, BUNNY_HEART_RATE, &AF(DoBunnyStandKill), &s_BunnyHeart[1][0]}, + {BUNNY_SWIPE_R1 + 0, BUNNY_HEART_RATE, DoBunnyStandKill, &s_BunnyHeart[1][0]}, }, { - {BUNNY_SWIPE_R2 + 0, BUNNY_HEART_RATE, &AF(DoBunnyStandKill), &s_BunnyHeart[2][0]}, + {BUNNY_SWIPE_R2 + 0, BUNNY_HEART_RATE, DoBunnyStandKill, &s_BunnyHeart[2][0]}, }, { - {BUNNY_SWIPE_R3 + 0, BUNNY_HEART_RATE, &AF(DoBunnyStandKill), &s_BunnyHeart[3][0]}, + {BUNNY_SWIPE_R3 + 0, BUNNY_HEART_RATE, DoBunnyStandKill, &s_BunnyHeart[3][0]}, }, { - {BUNNY_SWIPE_R4 + 0, BUNNY_HEART_RATE, &AF(DoBunnyStandKill), &s_BunnyHeart[4][0]}, + {BUNNY_SWIPE_R4 + 0, BUNNY_HEART_RATE, DoBunnyStandKill, &s_BunnyHeart[4][0]}, } }; @@ -416,23 +420,24 @@ STATE* sg_BunnyHeart[] = ////////////////////// #define BUNNY_PAIN_RATE 38 +ANIMATOR DoBunnyPain; STATE s_BunnyPain[5][1] = { { - {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, &AF(DoBunnyPain), &s_BunnyPain[0][0]}, + {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, DoBunnyPain, &s_BunnyPain[0][0]}, }, { - {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, &AF(DoBunnyPain), &s_BunnyPain[1][0]}, + {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, DoBunnyPain, &s_BunnyPain[1][0]}, }, { - {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, &AF(DoBunnyPain), &s_BunnyPain[2][0]}, + {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, DoBunnyPain, &s_BunnyPain[2][0]}, }, { - {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, &AF(DoBunnyPain), &s_BunnyPain[3][0]}, + {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, DoBunnyPain, &s_BunnyPain[3][0]}, }, { - {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, &AF(DoBunnyPain), &s_BunnyPain[4][0]}, + {BUNNY_SWIPE_R0 + 0, BUNNY_PAIN_RATE, DoBunnyPain, &s_BunnyPain[4][0]}, } }; @@ -456,24 +461,24 @@ STATE* sg_BunnyPain[] = STATE s_BunnyJump[5][6] = { { - {BUNNY_RUN_R0 + 1, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[0][1]}, - {BUNNY_RUN_R0 + 2, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[0][1]}, + {BUNNY_RUN_R0 + 1, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[0][1]}, + {BUNNY_RUN_R0 + 2, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[0][1]}, }, { - {BUNNY_RUN_R1 + 1, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[1][1]}, - {BUNNY_RUN_R1 + 2, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[1][1]}, + {BUNNY_RUN_R1 + 1, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[1][1]}, + {BUNNY_RUN_R1 + 2, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[1][1]}, }, { - {BUNNY_RUN_R2 + 1, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[2][1]}, - {BUNNY_RUN_R2 + 2, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[2][1]}, + {BUNNY_RUN_R2 + 1, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[2][1]}, + {BUNNY_RUN_R2 + 2, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[2][1]}, }, { - {BUNNY_RUN_R3 + 1, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[3][1]}, - {BUNNY_RUN_R3 + 2, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[3][1]}, + {BUNNY_RUN_R3 + 1, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[3][1]}, + {BUNNY_RUN_R3 + 2, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[3][1]}, }, { - {BUNNY_RUN_R4 + 1, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[4][1]}, - {BUNNY_RUN_R4 + 2, BUNNY_JUMP_RATE, &AF(DoBunnyMoveJump), &s_BunnyJump[4][1]}, + {BUNNY_RUN_R4 + 1, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[4][1]}, + {BUNNY_RUN_R4 + 2, BUNNY_JUMP_RATE, DoBunnyMoveJump, &s_BunnyJump[4][1]}, } }; @@ -499,19 +504,19 @@ STATE* sg_BunnyJump[] = STATE s_BunnyFall[5][6] = { { - {BUNNY_RUN_R0 + 3, BUNNY_FALL_RATE, &AF(DoBunnyMoveJump), &s_BunnyFall[0][0]}, + {BUNNY_RUN_R0 + 3, BUNNY_FALL_RATE, DoBunnyMoveJump, &s_BunnyFall[0][0]}, }, { - {BUNNY_RUN_R1 + 3, BUNNY_FALL_RATE, &AF(DoBunnyMoveJump), &s_BunnyFall[1][0]}, + {BUNNY_RUN_R1 + 3, BUNNY_FALL_RATE, DoBunnyMoveJump, &s_BunnyFall[1][0]}, }, { - {BUNNY_RUN_R2 + 3, BUNNY_FALL_RATE, &AF(DoBunnyMoveJump), &s_BunnyFall[2][0]}, + {BUNNY_RUN_R2 + 3, BUNNY_FALL_RATE, DoBunnyMoveJump, &s_BunnyFall[2][0]}, }, { - {BUNNY_RUN_R3 + 3, BUNNY_FALL_RATE, &AF(DoBunnyMoveJump), &s_BunnyFall[3][0]}, + {BUNNY_RUN_R3 + 3, BUNNY_FALL_RATE, DoBunnyMoveJump, &s_BunnyFall[3][0]}, }, { - {BUNNY_RUN_R4 + 3, BUNNY_FALL_RATE, &AF(DoBunnyMoveJump), &s_BunnyFall[4][0]}, + {BUNNY_RUN_R4 + 3, BUNNY_FALL_RATE, DoBunnyMoveJump, &s_BunnyFall[4][0]}, } }; @@ -538,29 +543,29 @@ int DoBunnyBeginJumpAttack(DSWActor* actor); STATE s_BunnyJumpAttack[5][6] = { { - {BUNNY_RUN_R0 + 1, BUNNY_JUMP_ATTACK_RATE, &AF(NullBunny), &s_BunnyJumpAttack[0][1]}, - {BUNNY_RUN_R0 + 1, 0 | SF_QUICK_CALL, &AF(DoBunnyBeginJumpAttack), &s_BunnyJumpAttack[0][2]}, - {BUNNY_RUN_R0 + 2, BUNNY_JUMP_ATTACK_RATE, &AF(DoBunnyMoveJump), &s_BunnyJumpAttack[0][2]}, + {BUNNY_RUN_R0 + 1, BUNNY_JUMP_ATTACK_RATE, NullBunny, &s_BunnyJumpAttack[0][1]}, + {BUNNY_RUN_R0 + 1, 0 | SF_QUICK_CALL, DoBunnyBeginJumpAttack, &s_BunnyJumpAttack[0][2]}, + {BUNNY_RUN_R0 + 2, BUNNY_JUMP_ATTACK_RATE, DoBunnyMoveJump, &s_BunnyJumpAttack[0][2]}, }, { - {BUNNY_RUN_R1 + 1, BUNNY_JUMP_ATTACK_RATE, &AF(NullBunny), &s_BunnyJumpAttack[1][1]}, - {BUNNY_RUN_R1 + 1, 0 | SF_QUICK_CALL, &AF(DoBunnyBeginJumpAttack), &s_BunnyJumpAttack[1][2]}, - {BUNNY_RUN_R1 + 2, BUNNY_JUMP_ATTACK_RATE, &AF(DoBunnyMoveJump), &s_BunnyJumpAttack[1][2]}, + {BUNNY_RUN_R1 + 1, BUNNY_JUMP_ATTACK_RATE, NullBunny, &s_BunnyJumpAttack[1][1]}, + {BUNNY_RUN_R1 + 1, 0 | SF_QUICK_CALL, DoBunnyBeginJumpAttack, &s_BunnyJumpAttack[1][2]}, + {BUNNY_RUN_R1 + 2, BUNNY_JUMP_ATTACK_RATE, DoBunnyMoveJump, &s_BunnyJumpAttack[1][2]}, }, { - {BUNNY_RUN_R2 + 1, BUNNY_JUMP_ATTACK_RATE, &AF(NullBunny), &s_BunnyJumpAttack[2][1]}, - {BUNNY_RUN_R2 + 1, 0 | SF_QUICK_CALL, &AF(DoBunnyBeginJumpAttack), &s_BunnyJumpAttack[2][2]}, - {BUNNY_RUN_R2 + 2, BUNNY_JUMP_ATTACK_RATE, &AF(DoBunnyMoveJump), &s_BunnyJumpAttack[2][2]}, + {BUNNY_RUN_R2 + 1, BUNNY_JUMP_ATTACK_RATE, NullBunny, &s_BunnyJumpAttack[2][1]}, + {BUNNY_RUN_R2 + 1, 0 | SF_QUICK_CALL, DoBunnyBeginJumpAttack, &s_BunnyJumpAttack[2][2]}, + {BUNNY_RUN_R2 + 2, BUNNY_JUMP_ATTACK_RATE, DoBunnyMoveJump, &s_BunnyJumpAttack[2][2]}, }, { - {BUNNY_RUN_R3 + 1, BUNNY_JUMP_ATTACK_RATE, &AF(NullBunny), &s_BunnyJumpAttack[3][1]}, - {BUNNY_RUN_R3 + 1, 0 | SF_QUICK_CALL, &AF(DoBunnyBeginJumpAttack), &s_BunnyJumpAttack[3][2]}, - {BUNNY_RUN_R3 + 2, BUNNY_JUMP_ATTACK_RATE, &AF(DoBunnyMoveJump), &s_BunnyJumpAttack[3][2]}, + {BUNNY_RUN_R3 + 1, BUNNY_JUMP_ATTACK_RATE, NullBunny, &s_BunnyJumpAttack[3][1]}, + {BUNNY_RUN_R3 + 1, 0 | SF_QUICK_CALL, DoBunnyBeginJumpAttack, &s_BunnyJumpAttack[3][2]}, + {BUNNY_RUN_R3 + 2, BUNNY_JUMP_ATTACK_RATE, DoBunnyMoveJump, &s_BunnyJumpAttack[3][2]}, }, { - {BUNNY_RUN_R4 + 1, BUNNY_JUMP_ATTACK_RATE, &AF(NullBunny), &s_BunnyJumpAttack[4][1]}, - {BUNNY_RUN_R4 + 1, 0 | SF_QUICK_CALL, &AF(DoBunnyBeginJumpAttack), &s_BunnyJumpAttack[4][2]}, - {BUNNY_RUN_R4 + 2, BUNNY_JUMP_ATTACK_RATE, &AF(DoBunnyMoveJump), &s_BunnyJumpAttack[4][2]}, + {BUNNY_RUN_R4 + 1, BUNNY_JUMP_ATTACK_RATE, NullBunny, &s_BunnyJumpAttack[4][1]}, + {BUNNY_RUN_R4 + 1, 0 | SF_QUICK_CALL, DoBunnyBeginJumpAttack, &s_BunnyJumpAttack[4][2]}, + {BUNNY_RUN_R4 + 2, BUNNY_JUMP_ATTACK_RATE, DoBunnyMoveJump, &s_BunnyJumpAttack[4][2]}, } }; @@ -582,27 +587,28 @@ STATE* sg_BunnyJumpAttack[] = ////////////////////// #define BUNNY_DIE_RATE 16 +ANIMATOR BunnySpew; STATE s_BunnyDie[] = { - {BUNNY_DIE + 0, BUNNY_DIE_RATE, &AF(NullBunny), &s_BunnyDie[1]}, - {BUNNY_DIE + 0, SF_QUICK_CALL, &AF(BunnySpew), &s_BunnyDie[2]}, - {BUNNY_DIE + 1, BUNNY_DIE_RATE, &AF(NullBunny), &s_BunnyDie[3]}, - {BUNNY_DIE + 2, BUNNY_DIE_RATE, &AF(NullBunny), &s_BunnyDie[4]}, - {BUNNY_DIE + 2, BUNNY_DIE_RATE, &AF(NullBunny), &s_BunnyDie[5]}, - {BUNNY_DEAD, BUNNY_DIE_RATE, &AF(DoActorDebris), &s_BunnyDie[5]}, + {BUNNY_DIE + 0, BUNNY_DIE_RATE, NullBunny, &s_BunnyDie[1]}, + {BUNNY_DIE + 0, SF_QUICK_CALL, BunnySpew, &s_BunnyDie[2]}, + {BUNNY_DIE + 1, BUNNY_DIE_RATE, NullBunny, &s_BunnyDie[3]}, + {BUNNY_DIE + 2, BUNNY_DIE_RATE, NullBunny, &s_BunnyDie[4]}, + {BUNNY_DIE + 2, BUNNY_DIE_RATE, NullBunny, &s_BunnyDie[5]}, + {BUNNY_DEAD, BUNNY_DIE_RATE, DoActorDebris, &s_BunnyDie[5]}, }; #define BUNNY_DEAD_RATE 8 STATE s_BunnyDead[] = { - {BUNNY_DIE + 0, BUNNY_DEAD_RATE, nullptr, &s_BunnyDie[1]}, - {BUNNY_DIE + 0, SF_QUICK_CALL, &AF(BunnySpew), &s_BunnyDie[2]}, - {BUNNY_DIE + 1, BUNNY_DEAD_RATE, nullptr, &s_BunnyDead[3]}, - {BUNNY_DIE + 2, BUNNY_DEAD_RATE, nullptr, &s_BunnyDead[4]}, - {BUNNY_DEAD, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_BunnyDead[5]}, - {BUNNY_DEAD, BUNNY_DEAD_RATE, &AF(DoActorDebris), &s_BunnyDead[5]}, + {BUNNY_DIE + 0, BUNNY_DEAD_RATE, NullAnimator, &s_BunnyDie[1]}, + {BUNNY_DIE + 0, SF_QUICK_CALL, BunnySpew, &s_BunnyDie[2]}, + {BUNNY_DIE + 1, BUNNY_DEAD_RATE, NullAnimator, &s_BunnyDead[3]}, + {BUNNY_DIE + 2, BUNNY_DEAD_RATE, NullAnimator, &s_BunnyDead[4]}, + {BUNNY_DEAD, SF_QUICK_CALL, QueueFloorBlood, &s_BunnyDead[5]}, + {BUNNY_DEAD, BUNNY_DEAD_RATE, DoActorDebris, &s_BunnyDead[5]}, }; STATE* sg_BunnyDie[] = @@ -617,12 +623,12 @@ STATE* sg_BunnyDead[] = STATE s_BunnyDeathJump[] = { - {BUNNY_DIE + 0, BUNNY_DIE_RATE, &AF(DoActorDeathMove), &s_BunnyDeathJump[0]} + {BUNNY_DIE + 0, BUNNY_DIE_RATE, DoActorDeathMove, &s_BunnyDeathJump[0]} }; STATE s_BunnyDeathFall[] = { - {BUNNY_DIE + 1, BUNNY_DIE_RATE, &AF(DoActorDeathMove), &s_BunnyDeathFall[0]} + {BUNNY_DIE + 1, BUNNY_DIE_RATE, DoActorDeathMove, &s_BunnyDeathFall[0]} }; STATE* sg_BunnyDeathJump[] = @@ -725,6 +731,8 @@ ACTOR_ACTION_SET BunnyWhiteActionSet = int SetupBunny(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, BUNNY_RUN_R0, s_BunnyRun[0]); @@ -734,8 +742,8 @@ int SetupBunny(DSWActor* actor) Bunny_Count++; ChangeState(actor, s_BunnyRun[0]); - actor->user.__legacyState.StateEnd = s_BunnyDie; - actor->user.__legacyState.Rot = sg_BunnyRun; + actor->user.StateEnd = s_BunnyDie; + actor->user.Rot = sg_BunnyRun; actor->user.ShellNum = 0; // Not Pregnant right now actor->user.FlagOwner = 0; @@ -744,7 +752,7 @@ int SetupBunny(DSWActor* actor) if (actor->spr.pal == PALETTE_PLAYER1) { EnemyDefaults(actor, &BunnyWhiteActionSet, &WhiteBunnyPersonality); - actor->user.__legacyState.Attrib = &WhiteBunnyAttrib; + actor->user.Attrib = &WhiteBunnyAttrib; actor->spr.scale = DVector2(1.5, 1.40625); actor->clipdist = 12.5; @@ -755,7 +763,7 @@ int SetupBunny(DSWActor* actor) else if (actor->spr.pal == PALETTE_PLAYER8) // Male Rabbit { EnemyDefaults(actor, &BunnyActionSet, &BunnyPersonality); - actor->user.__legacyState.Attrib = &BunnyAttrib; + actor->user.Attrib = &BunnyAttrib; if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) actor->user.Health = 20; @@ -765,7 +773,7 @@ int SetupBunny(DSWActor* actor) { // Female Rabbit EnemyDefaults(actor, &BunnyActionSet, &BunnyPersonality); - actor->user.__legacyState.Attrib = &BunnyAttrib; + actor->user.Attrib = &BunnyAttrib; actor->user.spal = actor->spr.pal = PALETTE_PLAYER0; actor->user.Flag1 = SEC(5); //actor->spr.shade = 0; // darker @@ -1170,8 +1178,8 @@ void BunnyHatch(DSWActor* actor) actorNew->user.ShellNum = 0; // Not Pregnant right now - actorNew->setStateGroup(NAME_Jump); - actorNew->user.ActorActionFunc = AF(DoActorMoveJump); + NewStateGroup(actorNew, actorNew->user.ActorActionSet->Jump); + actorNew->user.ActorActionFunc = DoActorMoveJump; DoActorSetSpeed(actorNew, FAST_SPEED); PickJumpMaxSpeed(actorNew, -600); @@ -1218,8 +1226,8 @@ DSWActor* BunnyHatch2(DSWActor* actor) actorNew->user.ShellNum = 0; // Not Pregnant right now - actorNew->setStateGroup(NAME_Jump); - actorNew->user.ActorActionFunc = AF(DoActorMoveJump); + NewStateGroup(actorNew, actorNew->user.ActorActionSet->Jump); + actorNew->user.ActorActionFunc = DoActorMoveJump; DoActorSetSpeed(actorNew, FAST_SPEED); if (TEST_BOOL3(actor)) { @@ -1289,7 +1297,7 @@ int DoBunnyMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); // stay on floor unless doing certain things if (!(actor->user.Flags & (SPR_JUMPING | SPR_FALLING))) @@ -1308,7 +1316,7 @@ int DoBunnyMove(DSWActor* actor) actor->spr.Angles.Yaw = RandomAngle(); actor->user.jump_speed = -350; DoActorBeginJump(actor); - actor->user.ActorActionFunc = AF(DoActorMoveJump); + actor->user.ActorActionFunc = DoActorMoveJump; } } @@ -1469,8 +1477,34 @@ int DoBunnyGrowUp(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_bunny_code[] = +{ + SAVE_CODE(DoBunnyBeginJumpAttack), + SAVE_CODE(DoBunnyMoveJump), + SAVE_CODE(DoPickCloseBunny), + SAVE_CODE(DoBunnyQuickJump), + SAVE_CODE(NullBunny), + SAVE_CODE(DoBunnyPain), + SAVE_CODE(DoBunnyRipHeart), + SAVE_CODE(DoBunnyStandKill), + SAVE_CODE(DoBunnyMove), + SAVE_CODE(BunnySpew), + SAVE_CODE(DoBunnyEat), + SAVE_CODE(DoBunnyScrew), + SAVE_CODE(DoBunnyGrowUp), +}; + static saveable_data saveable_bunny_data[] = { + SAVE_DATA(BunnyBattle), + SAVE_DATA(BunnyOffense), + SAVE_DATA(BunnyBroadcast), + SAVE_DATA(BunnySurprised), + SAVE_DATA(BunnyEvasive), + SAVE_DATA(BunnyLostTarget), + SAVE_DATA(BunnyCloseRange), + SAVE_DATA(BunnyWander), + SAVE_DATA(WhiteBunnyPersonality), SAVE_DATA(BunnyPersonality), @@ -1511,8 +1545,8 @@ static saveable_data saveable_bunny_data[] = saveable_module saveable_bunny = { // code - nullptr, - 0, + saveable_bunny_code, + SIZ(saveable_bunny_code), // data saveable_bunny_data, diff --git a/source/games/sw/src/coolg.cpp b/source/games/sw/src/coolg.cpp index aed5aab913c..7bdaac188ab 100644 --- a/source/games/sw/src/coolg.cpp +++ b/source/games/sw/src/coolg.cpp @@ -37,56 +37,62 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR DoCoolgCircle,InitCoolgCircle; + const int COOLG_BOB_AMT = 8; DECISION CoolgBattle[] = { - {50, &AF(InitCoolgCircle ) }, - {450, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorAttack ) } + {50, InitCoolgCircle }, + {450, InitActorMoveCloser }, + //{456, InitActorAmbientNoise }, + //{760, InitActorRunAway }, + {1024, InitActorAttack } }; DECISION CoolgOffense[] = { - {449, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorAttack ) } + {449, InitActorMoveCloser }, + //{554, InitActorAmbientNoise }, + {1024, InitActorAttack } }; -DECISIONB CoolgBroadcast[] = +DECISION CoolgBroadcast[] = { - {1, attr_ambient }, - {1024, 0 } + //{1, InitActorAlertNoise }, + {1, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION CoolgSurprised[] = { - {100, &AF(InitCoolgCircle ) }, - {701, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorDecide ) } + {100, InitCoolgCircle }, + {701, InitActorMoveCloser }, + {1024, InitActorDecide } }; DECISION CoolgEvasive[] = { - {20, &AF(InitCoolgCircle) }, - {1024, &AF(InitActorRunAway) }, + {20, InitCoolgCircle }, + {1024, InitActorRunAway }, }; DECISION CoolgLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION CoolgCloseRange[] = { - {800, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {800, InitActorAttack }, + {1024, InitActorReposition } }; DECISION CoolgTouchTarget[] = { //{50, InitCoolgCircle }, - {1024, &AF(InitActorAttack) }, + {1024, InitActorAttack }, }; PERSONALITY CoolgPersonality = @@ -120,37 +126,39 @@ ATTRIBUTE CoolgAttrib = #define COOLG_RUN_RATE 40 +ANIMATOR DoCoolgMove,DoStayOnFloor, DoActorDebris, NullCoolg, DoCoolgBirth; + STATE s_CoolgRun[5][4] = { { - {COOLG_RUN_R0 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[0][1]}, - {COOLG_RUN_R0 + 1, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[0][2]}, - {COOLG_RUN_R0 + 2, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[0][3]}, - {COOLG_RUN_R0 + 3, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[0][0]}, + {COOLG_RUN_R0 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[0][1]}, + {COOLG_RUN_R0 + 1, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[0][2]}, + {COOLG_RUN_R0 + 2, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[0][3]}, + {COOLG_RUN_R0 + 3, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[0][0]}, }, { - {COOLG_RUN_R1 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[1][1]}, - {COOLG_RUN_R1 + 1, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[1][2]}, - {COOLG_RUN_R1 + 2, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[1][3]}, - {COOLG_RUN_R1 + 3, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[1][0]}, + {COOLG_RUN_R1 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[1][1]}, + {COOLG_RUN_R1 + 1, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[1][2]}, + {COOLG_RUN_R1 + 2, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[1][3]}, + {COOLG_RUN_R1 + 3, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[1][0]}, }, { - {COOLG_RUN_R2 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[2][1]}, - {COOLG_RUN_R2 + 1, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[2][2]}, - {COOLG_RUN_R2 + 2, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[2][3]}, - {COOLG_RUN_R2 + 3, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[2][0]}, + {COOLG_RUN_R2 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[2][1]}, + {COOLG_RUN_R2 + 1, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[2][2]}, + {COOLG_RUN_R2 + 2, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[2][3]}, + {COOLG_RUN_R2 + 3, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[2][0]}, }, { - {COOLG_RUN_R3 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[3][1]}, - {COOLG_RUN_R3 + 1, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[3][2]}, - {COOLG_RUN_R3 + 2, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[3][3]}, - {COOLG_RUN_R3 + 3, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[3][0]}, + {COOLG_RUN_R3 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[3][1]}, + {COOLG_RUN_R3 + 1, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[3][2]}, + {COOLG_RUN_R3 + 2, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[3][3]}, + {COOLG_RUN_R3 + 3, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[3][0]}, }, { - {COOLG_RUN_R4 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[4][1]}, - {COOLG_RUN_R4 + 1, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[4][2]}, - {COOLG_RUN_R4 + 2, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[4][3]}, - {COOLG_RUN_R4 + 3, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgRun[4][0]}, + {COOLG_RUN_R4 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[4][1]}, + {COOLG_RUN_R4 + 1, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[4][2]}, + {COOLG_RUN_R4 + 2, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[4][3]}, + {COOLG_RUN_R4 + 3, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgRun[4][0]}, } }; @@ -173,19 +181,19 @@ STATE* sg_CoolgRun[] = STATE s_CoolgStand[5][1] = { { - {COOLG_RUN_R0 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgStand[0][0]}, + {COOLG_RUN_R0 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgStand[0][0]}, }, { - {COOLG_RUN_R1 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgStand[1][0]}, + {COOLG_RUN_R1 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgStand[1][0]}, }, { - {COOLG_RUN_R2 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgStand[2][0]}, + {COOLG_RUN_R2 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgStand[2][0]}, }, { - {COOLG_RUN_R3 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgStand[3][0]}, + {COOLG_RUN_R3 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgStand[3][0]}, }, { - {COOLG_RUN_R4 + 0, COOLG_RUN_RATE, &AF(DoCoolgMove), &s_CoolgStand[4][0]}, + {COOLG_RUN_R4 + 0, COOLG_RUN_RATE, DoCoolgMove, &s_CoolgStand[4][0]}, } }; @@ -205,48 +213,49 @@ STATE* sg_CoolgStand[] = ////////////////////// #define COOLG_RATE 16 +ANIMATOR InitCoolgBash; STATE s_CoolgClub[5][6] = { { - {COOLG_CLUB_R0 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[0][1]}, - {COOLG_RUN_R0 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[0][2]}, - {COOLG_CLUB_R0 + 1, 0|SF_QUICK_CALL, &AF(InitCoolgBash), &s_CoolgClub[0][3]}, - {COOLG_CLUB_R0 + 1, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[0][4]}, - {COOLG_CLUB_R0 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgClub[0][5]}, - {COOLG_CLUB_R0 + 1, COOLG_RATE, &AF(DoCoolgMove), &s_CoolgClub[0][5]} + {COOLG_CLUB_R0 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[0][1]}, + {COOLG_RUN_R0 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[0][2]}, + {COOLG_CLUB_R0 + 1, 0|SF_QUICK_CALL, InitCoolgBash, &s_CoolgClub[0][3]}, + {COOLG_CLUB_R0 + 1, COOLG_RATE, NullCoolg, &s_CoolgClub[0][4]}, + {COOLG_CLUB_R0 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgClub[0][5]}, + {COOLG_CLUB_R0 + 1, COOLG_RATE, DoCoolgMove, &s_CoolgClub[0][5]} }, { - {COOLG_CLUB_R1 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[1][1]}, - {COOLG_RUN_R1 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[1][2]}, - {COOLG_CLUB_R1 + 1, 0|SF_QUICK_CALL, &AF(InitCoolgBash), &s_CoolgClub[1][3]}, - {COOLG_CLUB_R1 + 1, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[1][4]}, - {COOLG_CLUB_R1 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgClub[1][5]}, - {COOLG_CLUB_R1 + 1, COOLG_RATE, &AF(DoCoolgMove), &s_CoolgClub[1][5]} + {COOLG_CLUB_R1 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[1][1]}, + {COOLG_RUN_R1 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[1][2]}, + {COOLG_CLUB_R1 + 1, 0|SF_QUICK_CALL, InitCoolgBash, &s_CoolgClub[1][3]}, + {COOLG_CLUB_R1 + 1, COOLG_RATE, NullCoolg, &s_CoolgClub[1][4]}, + {COOLG_CLUB_R1 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgClub[1][5]}, + {COOLG_CLUB_R1 + 1, COOLG_RATE, DoCoolgMove, &s_CoolgClub[1][5]} }, { - {COOLG_CLUB_R2 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[2][1]}, - {COOLG_RUN_R2 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[2][2]}, - {COOLG_CLUB_R2 + 1, 0|SF_QUICK_CALL, &AF(InitCoolgBash), &s_CoolgClub[2][3]}, - {COOLG_CLUB_R2 + 1, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[2][4]}, - {COOLG_CLUB_R2 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgClub[2][5]}, - {COOLG_CLUB_R2 + 1, COOLG_RATE, &AF(DoCoolgMove), &s_CoolgClub[2][5]} + {COOLG_CLUB_R2 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[2][1]}, + {COOLG_RUN_R2 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[2][2]}, + {COOLG_CLUB_R2 + 1, 0|SF_QUICK_CALL, InitCoolgBash, &s_CoolgClub[2][3]}, + {COOLG_CLUB_R2 + 1, COOLG_RATE, NullCoolg, &s_CoolgClub[2][4]}, + {COOLG_CLUB_R2 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgClub[2][5]}, + {COOLG_CLUB_R2 + 1, COOLG_RATE, DoCoolgMove, &s_CoolgClub[2][5]} }, { - {COOLG_CLUB_R3 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[3][1]}, - {COOLG_RUN_R3 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[3][2]}, - {COOLG_CLUB_R3 + 1, 0|SF_QUICK_CALL, &AF(InitCoolgBash), &s_CoolgClub[3][3]}, - {COOLG_CLUB_R3 + 1, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[3][4]}, - {COOLG_CLUB_R3 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgClub[3][5]}, - {COOLG_CLUB_R3 + 1, COOLG_RATE, &AF(DoCoolgMove), &s_CoolgClub[3][5]} + {COOLG_CLUB_R3 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[3][1]}, + {COOLG_RUN_R3 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[3][2]}, + {COOLG_CLUB_R3 + 1, 0|SF_QUICK_CALL, InitCoolgBash, &s_CoolgClub[3][3]}, + {COOLG_CLUB_R3 + 1, COOLG_RATE, NullCoolg, &s_CoolgClub[3][4]}, + {COOLG_CLUB_R3 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgClub[3][5]}, + {COOLG_CLUB_R3 + 1, COOLG_RATE, DoCoolgMove, &s_CoolgClub[3][5]} }, { - {COOLG_CLUB_R4 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[4][1]}, - {COOLG_RUN_R4 + 0, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[4][2]}, - {COOLG_CLUB_R4 + 1, 0|SF_QUICK_CALL, &AF(InitCoolgBash), &s_CoolgClub[4][3]}, - {COOLG_CLUB_R4 + 1, COOLG_RATE, &AF(NullCoolg), &s_CoolgClub[4][4]}, - {COOLG_CLUB_R4 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgClub[4][5]}, - {COOLG_CLUB_R4 + 1, COOLG_RATE, &AF(DoCoolgMove), &s_CoolgClub[4][5]} + {COOLG_CLUB_R4 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[4][1]}, + {COOLG_RUN_R4 + 0, COOLG_RATE, NullCoolg, &s_CoolgClub[4][2]}, + {COOLG_CLUB_R4 + 1, 0|SF_QUICK_CALL, InitCoolgBash, &s_CoolgClub[4][3]}, + {COOLG_CLUB_R4 + 1, COOLG_RATE, NullCoolg, &s_CoolgClub[4][4]}, + {COOLG_CLUB_R4 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgClub[4][5]}, + {COOLG_CLUB_R4 + 1, COOLG_RATE, DoCoolgMove, &s_CoolgClub[4][5]} } }; @@ -265,54 +274,55 @@ STATE* sg_CoolgClub[] = // ////////////////////// +ANIMATOR InitCoolgFire; #define COOLG_FIRE_RATE 12 STATE s_CoolgAttack[5][7] = { { - {COOLG_FIRE_R0 + 0, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[0][1]}, - {COOLG_FIRE_R0 + 1, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[0][2]}, - {COOLG_FIRE_R0 + 2, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[0][3]}, - {COOLG_FIRE_R0 + 2, 0|SF_QUICK_CALL, &AF(InitCoolgFire), &s_CoolgAttack[0][4]}, - {COOLG_FIRE_R0 + 2, COOLG_FIRE_RATE, &AF(NullCoolg), &s_CoolgAttack[0][5]}, - {COOLG_FIRE_R0 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgAttack[0][6]}, - {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, &AF(DoCoolgMove), &s_CoolgAttack[0][6]} + {COOLG_FIRE_R0 + 0, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[0][1]}, + {COOLG_FIRE_R0 + 1, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[0][2]}, + {COOLG_FIRE_R0 + 2, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[0][3]}, + {COOLG_FIRE_R0 + 2, 0|SF_QUICK_CALL, InitCoolgFire, &s_CoolgAttack[0][4]}, + {COOLG_FIRE_R0 + 2, COOLG_FIRE_RATE, NullCoolg, &s_CoolgAttack[0][5]}, + {COOLG_FIRE_R0 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgAttack[0][6]}, + {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, DoCoolgMove, &s_CoolgAttack[0][6]} }, { - {COOLG_FIRE_R1 + 0, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[1][1]}, - {COOLG_FIRE_R1 + 1, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[1][2]}, - {COOLG_FIRE_R1 + 2, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[1][3]}, - {COOLG_FIRE_R1 + 2, 0|SF_QUICK_CALL, &AF(InitCoolgFire), &s_CoolgAttack[1][4]}, - {COOLG_FIRE_R1 + 2, COOLG_FIRE_RATE, &AF(NullCoolg), &s_CoolgAttack[1][5]}, - {COOLG_FIRE_R1 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgAttack[1][6]}, - {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, &AF(DoCoolgMove), &s_CoolgAttack[1][6]} + {COOLG_FIRE_R1 + 0, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[1][1]}, + {COOLG_FIRE_R1 + 1, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[1][2]}, + {COOLG_FIRE_R1 + 2, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[1][3]}, + {COOLG_FIRE_R1 + 2, 0|SF_QUICK_CALL, InitCoolgFire, &s_CoolgAttack[1][4]}, + {COOLG_FIRE_R1 + 2, COOLG_FIRE_RATE, NullCoolg, &s_CoolgAttack[1][5]}, + {COOLG_FIRE_R1 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgAttack[1][6]}, + {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, DoCoolgMove, &s_CoolgAttack[1][6]} }, { - {COOLG_FIRE_R2 + 0, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[2][1]}, - {COOLG_FIRE_R2 + 1, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[2][2]}, - {COOLG_FIRE_R2 + 2, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[2][3]}, - {COOLG_FIRE_R2 + 2, 0|SF_QUICK_CALL, &AF(InitCoolgFire), &s_CoolgAttack[2][4]}, - {COOLG_FIRE_R2 + 2, COOLG_FIRE_RATE, &AF(NullCoolg), &s_CoolgAttack[2][5]}, - {COOLG_FIRE_R2 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgAttack[2][6]}, - {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, &AF(DoCoolgMove), &s_CoolgAttack[2][6]} + {COOLG_FIRE_R2 + 0, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[2][1]}, + {COOLG_FIRE_R2 + 1, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[2][2]}, + {COOLG_FIRE_R2 + 2, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[2][3]}, + {COOLG_FIRE_R2 + 2, 0|SF_QUICK_CALL, InitCoolgFire, &s_CoolgAttack[2][4]}, + {COOLG_FIRE_R2 + 2, COOLG_FIRE_RATE, NullCoolg, &s_CoolgAttack[2][5]}, + {COOLG_FIRE_R2 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgAttack[2][6]}, + {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, DoCoolgMove, &s_CoolgAttack[2][6]} }, { - {COOLG_RUN_R3 + 0, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[3][1]}, - {COOLG_RUN_R3 + 1, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[3][2]}, - {COOLG_RUN_R3 + 2, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[3][3]}, - {COOLG_RUN_R3 + 2, 0|SF_QUICK_CALL, &AF(InitCoolgFire), &s_CoolgAttack[3][4]}, - {COOLG_RUN_R3 + 2, COOLG_FIRE_RATE, &AF(NullCoolg), &s_CoolgAttack[3][5]}, - {COOLG_RUN_R3 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgAttack[3][6]}, - {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, &AF(DoCoolgMove), &s_CoolgAttack[3][6]} + {COOLG_RUN_R3 + 0, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[3][1]}, + {COOLG_RUN_R3 + 1, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[3][2]}, + {COOLG_RUN_R3 + 2, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[3][3]}, + {COOLG_RUN_R3 + 2, 0|SF_QUICK_CALL, InitCoolgFire, &s_CoolgAttack[3][4]}, + {COOLG_RUN_R3 + 2, COOLG_FIRE_RATE, NullCoolg, &s_CoolgAttack[3][5]}, + {COOLG_RUN_R3 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgAttack[3][6]}, + {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, DoCoolgMove, &s_CoolgAttack[3][6]} }, { - {COOLG_RUN_R4 + 0, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[4][1]}, - {COOLG_RUN_R4 + 1, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[4][2]}, - {COOLG_RUN_R4 + 2, COOLG_FIRE_RATE*2, &AF(NullCoolg), &s_CoolgAttack[4][3]}, - {COOLG_RUN_R4 + 2, 0|SF_QUICK_CALL, &AF(InitCoolgFire), &s_CoolgAttack[4][4]}, - {COOLG_RUN_R4 + 2, COOLG_FIRE_RATE, &AF(NullCoolg), &s_CoolgAttack[4][5]}, - {COOLG_RUN_R4 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CoolgAttack[4][6]}, - {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, &AF(DoCoolgMove), &s_CoolgAttack[4][6]} + {COOLG_RUN_R4 + 0, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[4][1]}, + {COOLG_RUN_R4 + 1, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[4][2]}, + {COOLG_RUN_R4 + 2, COOLG_FIRE_RATE*2, NullCoolg, &s_CoolgAttack[4][3]}, + {COOLG_RUN_R4 + 2, 0|SF_QUICK_CALL, InitCoolgFire, &s_CoolgAttack[4][4]}, + {COOLG_RUN_R4 + 2, COOLG_FIRE_RATE, NullCoolg, &s_CoolgAttack[4][5]}, + {COOLG_RUN_R4 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_CoolgAttack[4][6]}, + {COOLG_RUN_R0 + 2, COOLG_FIRE_RATE, DoCoolgMove, &s_CoolgAttack[4][6]} } }; @@ -332,28 +342,29 @@ STATE* sg_CoolgAttack[] = ////////////////////// #define COOLG_PAIN_RATE 15 +ANIMATOR DoCoolgPain; STATE s_CoolgPain[5][2] = { { - {COOLG_PAIN_R0 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[0][1]}, - {COOLG_PAIN_R0 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[0][1]}, + {COOLG_PAIN_R0 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[0][1]}, + {COOLG_PAIN_R0 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[0][1]}, }, { - {COOLG_RUN_R1 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[1][1]}, - {COOLG_RUN_R1 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[1][1]}, + {COOLG_RUN_R1 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[1][1]}, + {COOLG_RUN_R1 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[1][1]}, }, { - {COOLG_RUN_R2 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[2][1]}, - {COOLG_RUN_R2 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[2][1]}, + {COOLG_RUN_R2 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[2][1]}, + {COOLG_RUN_R2 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[2][1]}, }, { - {COOLG_RUN_R3 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[3][1]}, - {COOLG_RUN_R3 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[3][1]}, + {COOLG_RUN_R3 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[3][1]}, + {COOLG_RUN_R3 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[3][1]}, }, { - {COOLG_RUN_R4 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[4][1]}, - {COOLG_RUN_R4 + 0, COOLG_PAIN_RATE, &AF(DoCoolgPain), &s_CoolgPain[4][1]}, + {COOLG_RUN_R4 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[4][1]}, + {COOLG_RUN_R4 + 0, COOLG_PAIN_RATE, DoCoolgPain, &s_CoolgPain[4][1]}, }, }; @@ -377,14 +388,15 @@ STATE* sg_CoolgPain[] = #define COOLG_DIE 4307 #define COOLG_DEAD 4307+5 +ANIMATOR DoCoolgDeath; STATE s_CoolgDie[] = { - {COOLG_DIE + 0, COOLG_DIE_RATE, &AF(DoCoolgDeath), &s_CoolgDie[1]}, - {COOLG_DIE + 1, COOLG_DIE_RATE, &AF(DoCoolgDeath), &s_CoolgDie[2]}, - {COOLG_DIE + 2, COOLG_DIE_RATE, &AF(DoCoolgDeath), &s_CoolgDie[3]}, - {COOLG_DIE + 3, COOLG_DIE_RATE, &AF(DoCoolgDeath), &s_CoolgDie[4]}, - {COOLG_DIE + 4, COOLG_DIE_RATE, &AF(DoCoolgDeath), &s_CoolgDie[5]}, - {COOLG_DIE + 5, COOLG_DIE_RATE, &AF(DoCoolgDeath), &s_CoolgDie[5]}, + {COOLG_DIE + 0, COOLG_DIE_RATE, DoCoolgDeath, &s_CoolgDie[1]}, + {COOLG_DIE + 1, COOLG_DIE_RATE, DoCoolgDeath, &s_CoolgDie[2]}, + {COOLG_DIE + 2, COOLG_DIE_RATE, DoCoolgDeath, &s_CoolgDie[3]}, + {COOLG_DIE + 3, COOLG_DIE_RATE, DoCoolgDeath, &s_CoolgDie[4]}, + {COOLG_DIE + 4, COOLG_DIE_RATE, DoCoolgDeath, &s_CoolgDie[5]}, + {COOLG_DIE + 5, COOLG_DIE_RATE, DoCoolgDeath, &s_CoolgDie[5]}, }; STATE* sg_CoolgDie[] = @@ -394,8 +406,8 @@ STATE* sg_CoolgDie[] = STATE s_CoolgDead[] = { - {COOLG_DEAD, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_CoolgDead[1]}, - {COOLG_DEAD, COOLG_DIE_RATE, &AF(DoActorDebris), &s_CoolgDead[1]}, + {COOLG_DEAD, SF_QUICK_CALL, QueueFloorBlood, &s_CoolgDead[1]}, + {COOLG_DEAD, COOLG_DIE_RATE, DoActorDebris, &s_CoolgDead[1]}, }; STATE* sg_CoolgDead[] = @@ -414,17 +426,17 @@ STATE* sg_CoolgDead[] = STATE s_CoolgBirth[] = { - {COOLG_BIRTH + 0, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[1]}, - {COOLG_BIRTH + 1, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[2]}, - {COOLG_BIRTH + 2, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[3]}, - {COOLG_BIRTH + 3, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[4]}, - {COOLG_BIRTH + 4, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[5]}, - {COOLG_BIRTH + 5, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[6]}, - {COOLG_BIRTH + 6, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[7]}, - {COOLG_BIRTH + 7, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[8]}, - {COOLG_BIRTH + 8, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[9]}, - {COOLG_BIRTH + 8, COOLG_BIRTH_RATE, nullptr, &s_CoolgBirth[10]}, - {COOLG_BIRTH + 8, 0|SF_QUICK_CALL, &AF(DoCoolgBirth), &s_CoolgBirth[10]} + {COOLG_BIRTH + 0, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[1]}, + {COOLG_BIRTH + 1, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[2]}, + {COOLG_BIRTH + 2, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[3]}, + {COOLG_BIRTH + 3, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[4]}, + {COOLG_BIRTH + 4, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[5]}, + {COOLG_BIRTH + 5, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[6]}, + {COOLG_BIRTH + 6, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[7]}, + {COOLG_BIRTH + 7, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[8]}, + {COOLG_BIRTH + 8, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[9]}, + {COOLG_BIRTH + 8, COOLG_BIRTH_RATE, NullAnimator, &s_CoolgBirth[10]}, + {COOLG_BIRTH + 8, 0|SF_QUICK_CALL, DoCoolgBirth, &s_CoolgBirth[10]} }; STATE* sg_CoolgBirth[] = @@ -513,6 +525,8 @@ void CoolgCommon(DSWActor* actor) int SetupCoolg(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,COOLG_RUN_R0,s_CoolgRun[0]); @@ -520,10 +534,10 @@ int SetupCoolg(DSWActor* actor) } ChangeState(actor, s_CoolgRun[0]); - actor->user.__legacyState.Attrib = &CoolgAttrib; + actor->user.Attrib = &CoolgAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_CoolgDie; - actor->user.__legacyState.Rot = sg_CoolgRun; + actor->user.StateEnd = s_CoolgDie; + actor->user.Rot = sg_CoolgRun; EnemyDefaults(actor, &CoolgActionSet, &CoolgPersonality); @@ -534,14 +548,6 @@ int SetupCoolg(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWCoolg, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupCoolg(self); - return 0; -} - - //--------------------------------------------------------------------------- // // @@ -550,18 +556,20 @@ DEFINE_ACTION_FUNCTION(DSWCoolg, Initialize) int NewCoolg(DSWActor* actor) { + ANIMATOR DoActorDecide; + auto actorNew = SpawnActor(STAT_ENEMY, COOLG_RUN_R0, &s_CoolgBirth[0], actor->sector(), actor->spr.pos, actor->spr.Angles.Yaw, 50/16.); ChangeState(actorNew, &s_CoolgBirth[0]); - actorNew->user.__legacyState.StateEnd = s_CoolgDie; - actorNew->user.__legacyState.Rot = sg_CoolgRun; + actorNew->user.StateEnd = s_CoolgDie; + actorNew->user.Rot = sg_CoolgRun; actorNew->spr.pal = actorNew->user.spal = actor->user.spal; - actorNew->user.__legacyState.ActorActionSet = &CoolgActionSet; + actorNew->user.ActorActionSet = &CoolgActionSet; actorNew->spr.shade = actor->spr.shade; actorNew->user.Personality = &CoolgPersonality; - actorNew->user.__legacyState.Attrib = &CoolgAttrib; + actorNew->user.Attrib = &CoolgAttrib; // special case Level.addKillCount(); @@ -579,13 +587,15 @@ int NewCoolg(DSWActor* actor) int DoCoolgBirth(DSWActor* actor) { + ANIMATOR DoActorDecide; + actor->user.Health = HEALTH_COOLIE_GHOST; - actor->user.__legacyState.Attrib = &CoolgAttrib; + actor->user.Attrib = &CoolgAttrib; DoActorSetSpeed(actor, NORM_SPEED); ChangeState(actor, s_CoolgRun[0]); - actor->user.__legacyState.StateEnd = s_CoolgDie; - actor->user.__legacyState.Rot = sg_CoolgRun; + actor->user.StateEnd = s_CoolgDie; + actor->user.Rot = sg_CoolgRun; EnemyDefaults(actor, &CoolgActionSet, &CoolgPersonality); // special case @@ -703,9 +713,9 @@ int DoCoolgMatchPlayerZ(DSWActor* actor) int InitCoolgCircle(DSWActor* actor) { - actor->user.ActorActionFunc = AF(DoCoolgCircle); + actor->user.ActorActionFunc = DoCoolgCircle; - actor->setStateGroup(NAME_Run); + NewStateGroup(actor, actor->user.ActorActionSet->Run); // set it close DoActorSetSpeed(actor, FAST_SPEED); @@ -725,7 +735,7 @@ int InitCoolgCircle(DSWActor* actor) actor->user.WaitTics = (RandomRange(3)+1) * 120; - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); return 0; } @@ -810,7 +820,7 @@ int DoCoolgDeath(DSWActor* actor) { actor->user.Flags &= ~(SPR_FALLING|SPR_SLIDING); actor->spr.cstat &= ~(CSTAT_SPRITE_YFLIP); // If upside down, reset it - actor->setStateGroup(NAME_Dead); + NewStateGroup(actor, actor->user.ActorActionSet->Dead); return 0; } @@ -891,7 +901,7 @@ int DoCoolgMove(DSWActor* actor) ActorFollowTrack(actor, ACTORMOVETICS); else { - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); } if (RANDOM_P2(1024) < 32 && !(actor->spr.cstat & CSTAT_SPRITE_INVISIBLE)) @@ -931,8 +941,28 @@ int DoCoolgPain(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_coolg_code[] = +{ + SAVE_CODE(DoCoolgBirth), + SAVE_CODE(NullCoolg), + SAVE_CODE(InitCoolgCircle), + SAVE_CODE(DoCoolgCircle), + SAVE_CODE(DoCoolgDeath), + SAVE_CODE(DoCoolgMove), + SAVE_CODE(DoCoolgPain), +}; + static saveable_data saveable_coolg_data[] = { + SAVE_DATA(CoolgBattle), + SAVE_DATA(CoolgOffense), + SAVE_DATA(CoolgBroadcast), + SAVE_DATA(CoolgSurprised), + SAVE_DATA(CoolgEvasive), + SAVE_DATA(CoolgLostTarget), + SAVE_DATA(CoolgCloseRange), + SAVE_DATA(CoolgTouchTarget), + SAVE_DATA(CoolgPersonality), SAVE_DATA(CoolgAttrib), @@ -960,7 +990,8 @@ static saveable_data saveable_coolg_data[] = saveable_module saveable_coolg = { // code - nullptr, 0, + saveable_coolg_code, + SIZ(saveable_coolg_code), // data saveable_coolg_data, diff --git a/source/games/sw/src/coolie.cpp b/source/games/sw/src/coolie.cpp index 1d9a6f13241..d85f2fbee58 100644 --- a/source/games/sw/src/coolie.cpp +++ b/source/games/sw/src/coolie.cpp @@ -37,50 +37,53 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR InitCoolieCharge; + DECISION CoolieBattle[] = { - {700, &AF(InitCoolieCharge ) }, - {990, &AF(InitActorMoveCloser ) }, - {1000, &AF(InitActorSetDecide)}, - {1024, &AF(InitActorRunAway ) } + {700, InitCoolieCharge }, + {990, InitActorMoveCloser }, + {1000, InitActorAttackNoise }, + {1024, InitActorRunAway } }; DECISION CoolieOffense[] = { - {700, &AF(InitCoolieCharge ) }, - {1015, &AF(InitActorMoveCloser ) }, - {1024, &AF(InitActorSetDecide) } + {700, InitCoolieCharge }, + {1015, InitActorMoveCloser }, + {1024, InitActorAttackNoise } }; -DECISIONB CoolieBroadcast[] = +DECISION CoolieBroadcast[] = { - {16, attr_ambient }, - {1024, 0 } + //{1, InitActorAlertNoise }, + {16, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION CoolieSurprised[] = { - {700, &AF(InitActorMoveCloser ) }, - {703, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorDecide ) } + {700, InitActorMoveCloser }, + {703, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION CoolieEvasive[] = { - {10, &AF(InitActorEvade) }, + {10, InitActorEvade }, {1024, nullptr } }; DECISION CoolieLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION CoolieCloseRange[] = { - {400, &AF(InitCoolieCharge ) }, - {1024, &AF(InitActorReposition) } + {400, InitCoolieCharge }, + {1024, InitActorReposition } }; PERSONALITY CooliePersonality = @@ -116,37 +119,41 @@ ATTRIBUTE CoolieAttrib = #define COOLIE_RATE 12 +ANIMATOR DoCoolieMove,NullCoolie,DoStayOnFloor, + DoActorDebris, SpawnCoolieExp, + SpawnCoolg; + STATE s_CoolieRun[5][4] = { { - {COOLIE_RUN_R0 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[0][1]}, - {COOLIE_RUN_R0 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[0][2]}, - {COOLIE_RUN_R0 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[0][3]}, - {COOLIE_RUN_R0 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[0][0]} + {COOLIE_RUN_R0 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[0][1]}, + {COOLIE_RUN_R0 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[0][2]}, + {COOLIE_RUN_R0 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[0][3]}, + {COOLIE_RUN_R0 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[0][0]} }, { - {COOLIE_RUN_R1 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[1][1]}, - {COOLIE_RUN_R1 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[1][2]}, - {COOLIE_RUN_R1 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[1][3]}, - {COOLIE_RUN_R1 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[1][0]} + {COOLIE_RUN_R1 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[1][1]}, + {COOLIE_RUN_R1 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[1][2]}, + {COOLIE_RUN_R1 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[1][3]}, + {COOLIE_RUN_R1 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[1][0]} }, { - {COOLIE_RUN_R2 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[2][1]}, - {COOLIE_RUN_R2 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[2][2]}, - {COOLIE_RUN_R2 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[2][3]}, - {COOLIE_RUN_R2 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[2][0]} + {COOLIE_RUN_R2 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[2][1]}, + {COOLIE_RUN_R2 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[2][2]}, + {COOLIE_RUN_R2 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[2][3]}, + {COOLIE_RUN_R2 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[2][0]} }, { - {COOLIE_RUN_R3 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[3][1]}, - {COOLIE_RUN_R3 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[3][2]}, - {COOLIE_RUN_R3 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[3][3]}, - {COOLIE_RUN_R3 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[3][0]} + {COOLIE_RUN_R3 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[3][1]}, + {COOLIE_RUN_R3 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[3][2]}, + {COOLIE_RUN_R3 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[3][3]}, + {COOLIE_RUN_R3 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[3][0]} }, { - {COOLIE_RUN_R4 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[4][1]}, - {COOLIE_RUN_R4 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[4][2]}, - {COOLIE_RUN_R4 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[4][3]}, - {COOLIE_RUN_R4 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieRun[4][0]}, + {COOLIE_RUN_R4 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[4][1]}, + {COOLIE_RUN_R4 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[4][2]}, + {COOLIE_RUN_R4 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[4][3]}, + {COOLIE_RUN_R4 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieRun[4][0]}, } }; @@ -167,37 +174,41 @@ STATE* sg_CoolieRun[] = #define COOLIE_RATE 12 +ANIMATOR DoCoolieMove,NullCoolie,DoStayOnFloor, + DoActorDebris, SpawnCoolieExp, + SpawnCoolg; + STATE s_CoolieCharge[5][4] = { { - {COOLIE_CHARGE_R0 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[0][1]}, - {COOLIE_CHARGE_R0 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[0][2]}, - {COOLIE_CHARGE_R0 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[0][3]}, - {COOLIE_CHARGE_R0 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[0][0]} + {COOLIE_CHARGE_R0 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[0][1]}, + {COOLIE_CHARGE_R0 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[0][2]}, + {COOLIE_CHARGE_R0 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[0][3]}, + {COOLIE_CHARGE_R0 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[0][0]} }, { - {COOLIE_CHARGE_R1 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[1][1]}, - {COOLIE_CHARGE_R1 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[1][2]}, - {COOLIE_CHARGE_R1 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[1][3]}, - {COOLIE_CHARGE_R1 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[1][0]} + {COOLIE_CHARGE_R1 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[1][1]}, + {COOLIE_CHARGE_R1 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[1][2]}, + {COOLIE_CHARGE_R1 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[1][3]}, + {COOLIE_CHARGE_R1 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[1][0]} }, { - {COOLIE_CHARGE_R2 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[2][1]}, - {COOLIE_CHARGE_R2 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[2][2]}, - {COOLIE_CHARGE_R2 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[2][3]}, - {COOLIE_CHARGE_R2 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[2][0]} + {COOLIE_CHARGE_R2 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[2][1]}, + {COOLIE_CHARGE_R2 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[2][2]}, + {COOLIE_CHARGE_R2 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[2][3]}, + {COOLIE_CHARGE_R2 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[2][0]} }, { - {COOLIE_CHARGE_R3 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[3][1]}, - {COOLIE_CHARGE_R3 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[3][2]}, - {COOLIE_CHARGE_R3 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[3][3]}, - {COOLIE_CHARGE_R3 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[3][0]} + {COOLIE_CHARGE_R3 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[3][1]}, + {COOLIE_CHARGE_R3 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[3][2]}, + {COOLIE_CHARGE_R3 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[3][3]}, + {COOLIE_CHARGE_R3 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[3][0]} }, { - {COOLIE_CHARGE_R4 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[4][1]}, - {COOLIE_CHARGE_R4 + 1, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[4][2]}, - {COOLIE_CHARGE_R4 + 2, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[4][3]}, - {COOLIE_CHARGE_R4 + 3, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieCharge[4][0]}, + {COOLIE_CHARGE_R4 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[4][1]}, + {COOLIE_CHARGE_R4 + 1, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[4][2]}, + {COOLIE_CHARGE_R4 + 2, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[4][3]}, + {COOLIE_CHARGE_R4 + 3, COOLIE_RATE, DoCoolieMove, &s_CoolieCharge[4][0]}, } }; @@ -219,19 +230,19 @@ STATE* sg_CoolieCharge[] = STATE s_CoolieStand[5][6] = { { - {COOLIE_RUN_R0 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieStand[0][0]} + {COOLIE_RUN_R0 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieStand[0][0]} }, { - {COOLIE_RUN_R1 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieStand[1][0]} + {COOLIE_RUN_R1 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieStand[1][0]} }, { - {COOLIE_RUN_R2 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieStand[2][0]} + {COOLIE_RUN_R2 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieStand[2][0]} }, { - {COOLIE_RUN_R3 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieStand[3][0]} + {COOLIE_RUN_R3 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieStand[3][0]} }, { - {COOLIE_RUN_R4 + 0, COOLIE_RATE, &AF(DoCoolieMove), &s_CoolieStand[4][0]} + {COOLIE_RUN_R4 + 0, COOLIE_RATE, DoCoolieMove, &s_CoolieStand[4][0]} } }; @@ -251,23 +262,29 @@ STATE* sg_CoolieStand[] = ////////////////////// #define COOLIE_PAIN_RATE 60 +ANIMATOR CooliePain; STATE s_CooliePain[5][1] = { { - {COOLIE_PAIN_R0 + 0, COOLIE_PAIN_RATE, &AF(CooliePain), &s_CooliePain[0][0]}, + {COOLIE_PAIN_R0 + 0, COOLIE_PAIN_RATE, CooliePain, &s_CooliePain[0][0]}, + //{COOLIE_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_CooliePain[0][0]} }, { - {COOLIE_PAIN_R1 + 0, COOLIE_PAIN_RATE, &AF(CooliePain), &s_CooliePain[1][0]}, + {COOLIE_PAIN_R1 + 0, COOLIE_PAIN_RATE, CooliePain, &s_CooliePain[1][0]}, + //{COOLIE_PAIN_R1 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_CooliePain[1][0]} }, { - {COOLIE_PAIN_R2 + 0, COOLIE_PAIN_RATE, &AF(CooliePain), &s_CooliePain[2][0]}, + {COOLIE_PAIN_R2 + 0, COOLIE_PAIN_RATE, CooliePain, &s_CooliePain[2][0]}, + //{COOLIE_PAIN_R2 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_CooliePain[2][0]} }, { - {COOLIE_PAIN_R3 + 0, COOLIE_PAIN_RATE, &AF(CooliePain), &s_CooliePain[3][0]}, + {COOLIE_PAIN_R3 + 0, COOLIE_PAIN_RATE, CooliePain, &s_CooliePain[3][0]}, + //{COOLIE_PAIN_R3 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_CooliePain[3][0]} }, { - {COOLIE_PAIN_R4 + 0, COOLIE_PAIN_RATE, &AF(CooliePain), &s_CooliePain[4][0]}, + {COOLIE_PAIN_R4 + 0, COOLIE_PAIN_RATE, CooliePain, &s_CooliePain[4][0]}, + //{COOLIE_PAIN_R4 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_CooliePain[4][0]} } }; @@ -287,25 +304,26 @@ STATE* sg_CooliePain[] = ////////////////////// #define COOLIE_DIE_RATE 30 +ANIMATOR DoCoolieWaitBirth; STATE s_CoolieDie[] = { - {COOLIE_DIE + 0, COOLIE_DIE_RATE, &AF(NullCoolie), &s_CoolieDie[1]}, + {COOLIE_DIE + 0, COOLIE_DIE_RATE, NullCoolie, &s_CoolieDie[1]}, - {COOLIE_DIE + 0, 0|SF_QUICK_CALL, &AF(SpawnCoolieExp), &s_CoolieDie[2]}, + {COOLIE_DIE + 0, 0|SF_QUICK_CALL, SpawnCoolieExp, &s_CoolieDie[2]}, - {COOLIE_DIE + 1, COOLIE_DIE_RATE, &AF(NullCoolie), &s_CoolieDie[3]}, - {COOLIE_DIE + 2, COOLIE_DIE_RATE, &AF(NullCoolie), &s_CoolieDie[4]}, - {COOLIE_DIE + 3, COOLIE_DIE_RATE, &AF(NullCoolie), &s_CoolieDie[5]}, - {COOLIE_DIE + 4, COOLIE_DIE_RATE, &AF(NullCoolie), &s_CoolieDie[6]}, - {COOLIE_DIE + 5, COOLIE_DIE_RATE, &AF(NullCoolie), &s_CoolieDie[7]}, - {COOLIE_DIE + 6, COOLIE_DIE_RATE, &AF(NullCoolie), &s_CoolieDie[8]}, - {COOLIE_DIE + 7, COOLIE_DIE_RATE, &AF(DoCoolieWaitBirth), &s_CoolieDie[8]}, + {COOLIE_DIE + 1, COOLIE_DIE_RATE, NullCoolie, &s_CoolieDie[3]}, + {COOLIE_DIE + 2, COOLIE_DIE_RATE, NullCoolie, &s_CoolieDie[4]}, + {COOLIE_DIE + 3, COOLIE_DIE_RATE, NullCoolie, &s_CoolieDie[5]}, + {COOLIE_DIE + 4, COOLIE_DIE_RATE, NullCoolie, &s_CoolieDie[6]}, + {COOLIE_DIE + 5, COOLIE_DIE_RATE, NullCoolie, &s_CoolieDie[7]}, + {COOLIE_DIE + 6, COOLIE_DIE_RATE, NullCoolie, &s_CoolieDie[8]}, + {COOLIE_DIE + 7, COOLIE_DIE_RATE, DoCoolieWaitBirth, &s_CoolieDie[8]}, - {COOLIE_DIE + 7, COOLIE_DIE_RATE*5, &AF(DoActorDebris), &s_CoolieDie[10]}, - {COOLIE_DIE + 7, 0|SF_QUICK_CALL, &AF(SpawnCoolg), &s_CoolieDie[11]}, - {COOLIE_DEAD_NOHEAD, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_CoolieDie[12]}, - {COOLIE_DEAD_NOHEAD, COOLIE_DIE_RATE, &AF(DoActorDebris), &s_CoolieDie[12]} + {COOLIE_DIE + 7, COOLIE_DIE_RATE*5, DoActorDebris, &s_CoolieDie[10]}, + {COOLIE_DIE + 7, 0|SF_QUICK_CALL, SpawnCoolg, &s_CoolieDie[11]}, + {COOLIE_DEAD_NOHEAD, SF_QUICK_CALL, QueueFloorBlood, &s_CoolieDie[12]}, + {COOLIE_DEAD_NOHEAD, COOLIE_DIE_RATE, DoActorDebris, &s_CoolieDie[12]} }; STATE* sg_CoolieDie[] = @@ -315,7 +333,7 @@ STATE* sg_CoolieDie[] = STATE s_CoolieDead[] = { - {COOLIE_DEAD, COOLIE_DIE_RATE, &AF(DoActorDebris), &s_CoolieDead[0]}, + {COOLIE_DEAD, COOLIE_DIE_RATE, DoActorDebris, &s_CoolieDead[0]}, }; STATE* sg_CoolieDead[] = @@ -391,7 +409,7 @@ void EnemyDefaults(DSWActor* actor, ACTOR_ACTION_SET* action, PERSONALITY* perso actor->user.spal = actor->spr.pal; - actor->user.__legacyState.RotNum = 5; + actor->user.RotNum = 5; actor->clipdist = 16; actor->user.zclip = 48; @@ -409,11 +427,11 @@ void EnemyDefaults(DSWActor* actor, ACTOR_ACTION_SET* action, PERSONALITY* perso actor->spr.cstat |= (CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); actor->spr.extra |= (SPRX_PLAYER_OR_ENEMY); - actor->spr.picnum = actor->user.__legacyState.State->Pic; + actor->spr.picnum = actor->user.State->Pic; change_actor_stat(actor, STAT_ENEMY); actor->user.Personality = person; - actor->user.__legacyState.ActorActionSet = action; + actor->user.ActorActionSet = action; DoActorZrange(actor); @@ -450,14 +468,14 @@ void EnemyDefaults(DSWActor* actor, ACTOR_ACTION_SET* action, PERSONALITY* perso if (!action) return; - actor->setStateGroup(NAME_Run); + NewStateGroup(actor, actor->user.ActorActionSet->Run); - actor->setActionDecide(); + actor->user.ActorActionFunc = DoActorDecide; // find the number of long range attacks - for (wpn = wpn_cnt = 0; wpn < SIZ(actor->user.__legacyState.ActorActionSet->Attack); wpn++) + for (wpn = wpn_cnt = 0; wpn < SIZ(actor->user.ActorActionSet->Attack); wpn++) { - if (actor->hasState(NAME_Attack, wpn)) + if (actor->user.ActorActionSet->Attack[wpn]) wpn_cnt++; else break; @@ -470,6 +488,8 @@ void EnemyDefaults(DSWActor* actor, ACTOR_ACTION_SET* action, PERSONALITY* perso int SetupCoolie(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,COOLIE_RUN_R0,s_CoolieRun[0]); @@ -477,10 +497,10 @@ int SetupCoolie(DSWActor* actor) } ChangeState(actor,s_CoolieRun[0]); - actor->user.__legacyState.Attrib = &CoolieAttrib; + actor->user.Attrib = &CoolieAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_CoolieDie; - actor->user.__legacyState.Rot = sg_CoolieRun; + actor->user.StateEnd = s_CoolieDie; + actor->user.Rot = sg_CoolieRun; EnemyDefaults(actor, &CoolieActionSet, &CooliePersonality); @@ -491,12 +511,6 @@ int SetupCoolie(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWCoolie, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupCoolie(self); - return 0; -} //--------------------------------------------------------------------------- // @@ -574,7 +588,7 @@ int DoCoolieMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); KeepActorOnFloor(actor); @@ -639,8 +653,26 @@ int DoCoolieWaitBirth(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_coolie_code[] = +{ + SAVE_CODE(SpawnCoolg), + SAVE_CODE(CooliePain), + SAVE_CODE(NullCoolie), + SAVE_CODE(DoCoolieMove), + SAVE_CODE(InitCoolieCharge), + SAVE_CODE(DoCoolieWaitBirth), +}; + static saveable_data saveable_coolie_data[] = { + SAVE_DATA(CoolieBattle), + SAVE_DATA(CoolieOffense), + SAVE_DATA(CoolieBroadcast), + SAVE_DATA(CoolieSurprised), + SAVE_DATA(CoolieEvasive), + SAVE_DATA(CoolieLostTarget), + SAVE_DATA(CoolieCloseRange), + SAVE_DATA(CooliePersonality), SAVE_DATA(CoolieAttrib), @@ -664,7 +696,8 @@ static saveable_data saveable_coolie_data[] = saveable_module saveable_coolie = { // code - nullptr, 0, + saveable_coolie_code, + SIZ(saveable_coolie_code), // data saveable_coolie_data, diff --git a/source/games/sw/src/draw.cpp b/source/games/sw/src/draw.cpp index b0a753c18b6..376e491ed88 100644 --- a/source/games/sw/src/draw.cpp +++ b/source/games/sw/src/draw.cpp @@ -108,7 +108,7 @@ int GetRotation(tspriteArray& tsprites, int tSpriteNum, const DVector2& view) tspritetype* tsp = tsprites.get(tSpriteNum); auto ownerActor = static_cast(tsp->ownerActor); - if (!ownerActor->hasU() || ownerActor->user.__legacyState.RotNum == 0) + if (!ownerActor->hasU() || ownerActor->user.RotNum == 0) return 0; // Get which of the 8 angles of the sprite to draw (0-7) @@ -117,7 +117,7 @@ int GetRotation(tspriteArray& tsprites, int tSpriteNum, const DVector2& view) rotation = (tsp->Angles.Yaw + DAngle180 + DAngle22_5 * 0.5 - angle2).Buildang() & 2047; rotation = (rotation >> 8) & 7; - if (ownerActor->user.__legacyState.RotNum == 5) + if (ownerActor->user.RotNum == 5) { if ((ownerActor->user.Flags & SPR_XFLIP_TOGGLE)) { @@ -183,10 +183,10 @@ int SetActorRotation(tspriteArray& tsprites, int tSpriteNum, const DVector2& vie if (!ownerActor->hasU()) return 0; // don't modify ANY tu vars - back them up! - STATE* State = ownerActor->user.__legacyState.State; - STATE* StateStart = ownerActor->user.__legacyState.StateStart; + STATE* State = ownerActor->user.State; + STATE* StateStart = ownerActor->user.StateStart; - if (ownerActor->user.__legacyState.RotNum == 0) + if (ownerActor->user.RotNum == 0) return 0; // Get the offset into the State animation @@ -198,7 +198,7 @@ int SetActorRotation(tspriteArray& tsprites, int tSpriteNum, const DVector2& vie ASSERT(Rotation < 5); // Reset the State animation start based on the Rotation - StateStart = ownerActor->user.__legacyState.Rot[Rotation]; + StateStart = ownerActor->user.Rot[Rotation]; // Set the sprites state State = StateStart + StateOffset; @@ -511,10 +511,10 @@ void DoStarView(tspritetype* tsp, DSWActor* tActor, double viewz) if (abs(zdiff) > 24) { - if (tActor->user.__legacyState.StateStart == s_StarStuck) - tsp->picnum = s_StarDownStuck[tActor->user.__legacyState.State - s_StarStuck].Pic; + if (tActor->user.StateStart == s_StarStuck) + tsp->picnum = s_StarDownStuck[tActor->user.State - s_StarStuck].Pic; else - tsp->picnum = s_StarDown[tActor->user.__legacyState.State - s_Star].Pic; + tsp->picnum = s_StarDown[tActor->user.State - s_Star].Pic; if (zdiff > 0) tsp->cstat |= (CSTAT_SPRITE_YFLIP); @@ -702,7 +702,7 @@ static void analyzesprites(tspriteArray& tsprites, const DVector3& viewpos, doub } // rotation - if (tActor->user.__legacyState.RotNum > 0) + if (tActor->user.RotNum > 0) SetActorRotation(tsprites, tSpriteNum, viewpos.XY()); if (tActor->user.motion_blur_num) @@ -1093,13 +1093,13 @@ void PreDrawStackedWater(void) // copy everything reasonable from the user that // analyzesprites() needs to draw the image - actorNew->user.__legacyState.State = itActor2->user.__legacyState.State; - actorNew->user.__legacyState.Rot = itActor2->user.__legacyState.Rot; - actorNew->user.__legacyState.StateStart = itActor2->user.__legacyState.StateStart; - actorNew->user.__legacyState.StateEnd = itActor2->user.__legacyState.StateEnd; + actorNew->user.State = itActor2->user.State; + actorNew->user.Rot = itActor2->user.Rot; + actorNew->user.StateStart = itActor2->user.StateStart; + actorNew->user.StateEnd = itActor2->user.StateEnd; actorNew->user.Flags = itActor2->user.Flags; actorNew->user.Flags2 = itActor2->user.Flags2; - actorNew->user.__legacyState.RotNum = itActor2->user.__legacyState.RotNum; + actorNew->user.RotNum = itActor2->user.RotNum; actorNew->user.ID = itActor2->user.ID; actorNew->user.PlayerP = itActor2->user.PlayerP; diff --git a/source/games/sw/src/eel.cpp b/source/games/sw/src/eel.cpp index 4b42d694bf4..baa70c4cd8a 100644 --- a/source/games/sw/src/eel.cpp +++ b/source/games/sw/src/eel.cpp @@ -38,52 +38,54 @@ BEGIN_SW_NS DECISION EelBattle[] = { - {649, &AF(InitActorMoveCloser) }, - {650, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorMoveCloser) } + {649, InitActorMoveCloser }, + {650, InitActorAlertNoise }, + {1024, InitActorMoveCloser } }; DECISION EelOffense[] = { - {649, &AF(InitActorMoveCloser) }, - {750, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorMoveCloser) } + {649, InitActorMoveCloser }, + {750, InitActorAlertNoise }, + {1024, InitActorMoveCloser } }; -DECISIONB EelBroadcast[] = +DECISION EelBroadcast[] = { - {3, attr_alert }, - {6, attr_ambient }, - {1024, 0 } + {3, InitActorAlertNoise }, + {6, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION EelSurprised[] = { - {701, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorDecide ) } + {701, InitActorMoveCloser }, + {1024, InitActorDecide } }; DECISION EelEvasive[] = { - { 790, &AF(InitActorRunAway ) }, - {1024, &AF(InitActorMoveCloser) }, + { 790, InitActorRunAway }, + {1024, InitActorMoveCloser }, }; DECISION EelLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION EelCloseRange[] = { - {950, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {950, InitActorAttack }, + {1024, InitActorReposition } }; +ANIMATOR InitEelFire; + DECISION EelTouchTarget[] = { - {1024, &AF(InitActorAttack) }, + {1024, InitActorAttack }, }; PERSONALITY EelPersonality = @@ -116,37 +118,39 @@ ATTRIBUTE EelAttrib = #define EEL_RUN_RATE 20 +ANIMATOR DoEelMove,DoStayOnFloor, DoActorDebris, NullEel; + STATE s_EelRun[5][4] = { { - {EEL_RUN_R0 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[0][1]}, - {EEL_RUN_R0 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[0][2]}, - {EEL_RUN_R0 + 2, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[0][3]}, - {EEL_RUN_R0 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[0][0]}, + {EEL_RUN_R0 + 0, EEL_RUN_RATE, DoEelMove, &s_EelRun[0][1]}, + {EEL_RUN_R0 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[0][2]}, + {EEL_RUN_R0 + 2, EEL_RUN_RATE, DoEelMove, &s_EelRun[0][3]}, + {EEL_RUN_R0 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[0][0]}, }, { - {EEL_RUN_R1 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[1][1]}, - {EEL_RUN_R1 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[1][2]}, - {EEL_RUN_R1 + 2, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[1][3]}, - {EEL_RUN_R1 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[1][0]}, + {EEL_RUN_R1 + 0, EEL_RUN_RATE, DoEelMove, &s_EelRun[1][1]}, + {EEL_RUN_R1 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[1][2]}, + {EEL_RUN_R1 + 2, EEL_RUN_RATE, DoEelMove, &s_EelRun[1][3]}, + {EEL_RUN_R1 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[1][0]}, }, { - {EEL_RUN_R2 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[2][1]}, - {EEL_RUN_R2 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[2][2]}, - {EEL_RUN_R2 + 2, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[2][3]}, - {EEL_RUN_R2 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[2][0]}, + {EEL_RUN_R2 + 0, EEL_RUN_RATE, DoEelMove, &s_EelRun[2][1]}, + {EEL_RUN_R2 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[2][2]}, + {EEL_RUN_R2 + 2, EEL_RUN_RATE, DoEelMove, &s_EelRun[2][3]}, + {EEL_RUN_R2 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[2][0]}, }, { - {EEL_RUN_R3 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[3][1]}, - {EEL_RUN_R3 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[3][2]}, - {EEL_RUN_R3 + 2, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[3][3]}, - {EEL_RUN_R3 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[3][0]}, + {EEL_RUN_R3 + 0, EEL_RUN_RATE, DoEelMove, &s_EelRun[3][1]}, + {EEL_RUN_R3 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[3][2]}, + {EEL_RUN_R3 + 2, EEL_RUN_RATE, DoEelMove, &s_EelRun[3][3]}, + {EEL_RUN_R3 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[3][0]}, }, { - {EEL_RUN_R4 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[4][1]}, - {EEL_RUN_R4 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[4][2]}, - {EEL_RUN_R4 + 2, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[4][3]}, - {EEL_RUN_R4 + 1, EEL_RUN_RATE, &AF(DoEelMove), &s_EelRun[4][0]}, + {EEL_RUN_R4 + 0, EEL_RUN_RATE, DoEelMove, &s_EelRun[4][1]}, + {EEL_RUN_R4 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[4][2]}, + {EEL_RUN_R4 + 2, EEL_RUN_RATE, DoEelMove, &s_EelRun[4][3]}, + {EEL_RUN_R4 + 1, EEL_RUN_RATE, DoEelMove, &s_EelRun[4][0]}, } }; @@ -169,19 +173,19 @@ STATE* sg_EelRun[] = STATE s_EelStand[5][1] = { { - {EEL_RUN_R0 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelStand[0][0]}, + {EEL_RUN_R0 + 0, EEL_RUN_RATE, DoEelMove, &s_EelStand[0][0]}, }, { - {EEL_RUN_R1 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelStand[1][0]}, + {EEL_RUN_R1 + 0, EEL_RUN_RATE, DoEelMove, &s_EelStand[1][0]}, }, { - {EEL_RUN_R2 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelStand[2][0]}, + {EEL_RUN_R2 + 0, EEL_RUN_RATE, DoEelMove, &s_EelStand[2][0]}, }, { - {EEL_RUN_R3 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelStand[3][0]}, + {EEL_RUN_R3 + 0, EEL_RUN_RATE, DoEelMove, &s_EelStand[3][0]}, }, { - {EEL_RUN_R4 + 0, EEL_RUN_RATE, &AF(DoEelMove), &s_EelStand[4][0]}, + {EEL_RUN_R4 + 0, EEL_RUN_RATE, DoEelMove, &s_EelStand[4][0]}, } }; @@ -200,54 +204,55 @@ STATE* sg_EelStand[] = // ////////////////////// +ANIMATOR InitEelFire, EelShock; #define EEL_FIRE_RATE 12 STATE s_EelAttack[5][7] = { { - {EEL_FIRE_R0 + 0, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[0][1]}, - {EEL_FIRE_R0 + 1, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[0][2]}, - {EEL_FIRE_R0 + 2, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[0][3]}, - {EEL_FIRE_R0 + 2, 0|SF_QUICK_CALL, &AF(InitEelFire), &s_EelAttack[0][4]}, - {EEL_FIRE_R0 + 2, EEL_FIRE_RATE, &AF(NullEel), &s_EelAttack[0][5]}, - {EEL_FIRE_R0 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_EelAttack[0][6]}, - {EEL_RUN_R0 + 3, EEL_FIRE_RATE, &AF(DoEelMove), &s_EelAttack[0][6]} + {EEL_FIRE_R0 + 0, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[0][1]}, + {EEL_FIRE_R0 + 1, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[0][2]}, + {EEL_FIRE_R0 + 2, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[0][3]}, + {EEL_FIRE_R0 + 2, 0|SF_QUICK_CALL, InitEelFire, &s_EelAttack[0][4]}, + {EEL_FIRE_R0 + 2, EEL_FIRE_RATE, NullEel, &s_EelAttack[0][5]}, + {EEL_FIRE_R0 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_EelAttack[0][6]}, + {EEL_RUN_R0 + 3, EEL_FIRE_RATE, DoEelMove, &s_EelAttack[0][6]} }, { - {EEL_FIRE_R1 + 0, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[1][1]}, - {EEL_FIRE_R1 + 1, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[1][2]}, - {EEL_FIRE_R1 + 2, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[1][3]}, - {EEL_FIRE_R1 + 2, 0|SF_QUICK_CALL, &AF(InitEelFire), &s_EelAttack[1][5]}, - {EEL_FIRE_R1 + 2, EEL_FIRE_RATE, &AF(NullEel), &s_EelAttack[1][6]}, - {EEL_FIRE_R1 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_EelAttack[1][7]}, - {EEL_RUN_R0 + 3, EEL_FIRE_RATE, &AF(DoEelMove), &s_EelAttack[1][7]} + {EEL_FIRE_R1 + 0, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[1][1]}, + {EEL_FIRE_R1 + 1, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[1][2]}, + {EEL_FIRE_R1 + 2, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[1][3]}, + {EEL_FIRE_R1 + 2, 0|SF_QUICK_CALL, InitEelFire, &s_EelAttack[1][5]}, + {EEL_FIRE_R1 + 2, EEL_FIRE_RATE, NullEel, &s_EelAttack[1][6]}, + {EEL_FIRE_R1 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_EelAttack[1][7]}, + {EEL_RUN_R0 + 3, EEL_FIRE_RATE, DoEelMove, &s_EelAttack[1][7]} }, { - {EEL_FIRE_R2 + 0, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[2][1]}, - {EEL_FIRE_R2 + 1, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[2][2]}, - {EEL_FIRE_R2 + 2, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[2][3]}, - {EEL_FIRE_R2 + 2, 0|SF_QUICK_CALL, &AF(InitEelFire), &s_EelAttack[2][4]}, - {EEL_FIRE_R2 + 2, EEL_FIRE_RATE, &AF(NullEel), &s_EelAttack[2][5]}, - {EEL_FIRE_R2 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_EelAttack[2][6]}, - {EEL_RUN_R0 + 3, EEL_FIRE_RATE, &AF(DoEelMove), &s_EelAttack[2][6]} + {EEL_FIRE_R2 + 0, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[2][1]}, + {EEL_FIRE_R2 + 1, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[2][2]}, + {EEL_FIRE_R2 + 2, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[2][3]}, + {EEL_FIRE_R2 + 2, 0|SF_QUICK_CALL, InitEelFire, &s_EelAttack[2][4]}, + {EEL_FIRE_R2 + 2, EEL_FIRE_RATE, NullEel, &s_EelAttack[2][5]}, + {EEL_FIRE_R2 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_EelAttack[2][6]}, + {EEL_RUN_R0 + 3, EEL_FIRE_RATE, DoEelMove, &s_EelAttack[2][6]} }, { - {EEL_RUN_R3 + 0, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[3][1]}, - {EEL_RUN_R3 + 1, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[3][2]}, - {EEL_RUN_R3 + 2, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[3][3]}, - {EEL_RUN_R3 + 2, 0|SF_QUICK_CALL, &AF(InitEelFire), &s_EelAttack[3][4]}, - {EEL_RUN_R3 + 2, EEL_FIRE_RATE, &AF(NullEel), &s_EelAttack[3][5]}, - {EEL_RUN_R3 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_EelAttack[3][6]}, - {EEL_RUN_R0 + 3, EEL_FIRE_RATE, &AF(DoEelMove), &s_EelAttack[3][6]} + {EEL_RUN_R3 + 0, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[3][1]}, + {EEL_RUN_R3 + 1, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[3][2]}, + {EEL_RUN_R3 + 2, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[3][3]}, + {EEL_RUN_R3 + 2, 0|SF_QUICK_CALL, InitEelFire, &s_EelAttack[3][4]}, + {EEL_RUN_R3 + 2, EEL_FIRE_RATE, NullEel, &s_EelAttack[3][5]}, + {EEL_RUN_R3 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_EelAttack[3][6]}, + {EEL_RUN_R0 + 3, EEL_FIRE_RATE, DoEelMove, &s_EelAttack[3][6]} }, { - {EEL_RUN_R4 + 0, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[4][1]}, - {EEL_RUN_R4 + 1, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[4][2]}, - {EEL_RUN_R4 + 2, EEL_FIRE_RATE*2, &AF(NullEel), &s_EelAttack[4][3]}, - {EEL_RUN_R4 + 2, 0|SF_QUICK_CALL, &AF(InitEelFire), &s_EelAttack[4][4]}, - {EEL_RUN_R4 + 2, EEL_FIRE_RATE, &AF(NullEel), &s_EelAttack[4][5]}, - {EEL_RUN_R4 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_EelAttack[4][6]}, - {EEL_RUN_R0 + 3, EEL_FIRE_RATE, &AF(DoEelMove), &s_EelAttack[4][6]} + {EEL_RUN_R4 + 0, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[4][1]}, + {EEL_RUN_R4 + 1, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[4][2]}, + {EEL_RUN_R4 + 2, EEL_FIRE_RATE*2, NullEel, &s_EelAttack[4][3]}, + {EEL_RUN_R4 + 2, 0|SF_QUICK_CALL, InitEelFire, &s_EelAttack[4][4]}, + {EEL_RUN_R4 + 2, EEL_FIRE_RATE, NullEel, &s_EelAttack[4][5]}, + {EEL_RUN_R4 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_EelAttack[4][6]}, + {EEL_RUN_R0 + 3, EEL_FIRE_RATE, DoEelMove, &s_EelAttack[4][6]} } }; @@ -269,14 +274,15 @@ STATE* sg_EelAttack[] = #define EEL_DIE_RATE 20 +ANIMATOR DoEelDeath; STATE s_EelDie[] = { - {EEL_DIE + 0, EEL_DIE_RATE, &AF(DoEelDeath), &s_EelDie[1]}, - {EEL_DIE + 0, EEL_DIE_RATE, &AF(DoEelDeath), &s_EelDie[2]}, - {EEL_DIE + 0, EEL_DIE_RATE, &AF(DoEelDeath), &s_EelDie[3]}, - {EEL_DIE + 0, EEL_DIE_RATE, &AF(DoEelDeath), &s_EelDie[4]}, - {EEL_DIE + 0, EEL_DIE_RATE, &AF(DoEelDeath), &s_EelDie[5]}, - {EEL_DIE + 0, EEL_DIE_RATE, &AF(DoEelDeath), &s_EelDie[5]}, + {EEL_DIE + 0, EEL_DIE_RATE, DoEelDeath, &s_EelDie[1]}, + {EEL_DIE + 0, EEL_DIE_RATE, DoEelDeath, &s_EelDie[2]}, + {EEL_DIE + 0, EEL_DIE_RATE, DoEelDeath, &s_EelDie[3]}, + {EEL_DIE + 0, EEL_DIE_RATE, DoEelDeath, &s_EelDie[4]}, + {EEL_DIE + 0, EEL_DIE_RATE, DoEelDeath, &s_EelDie[5]}, + {EEL_DIE + 0, EEL_DIE_RATE, DoEelDeath, &s_EelDie[5]}, }; STATE* sg_EelDie[] = @@ -286,7 +292,8 @@ STATE* sg_EelDie[] = STATE s_EelDead[] = { - {EEL_DEAD, EEL_DIE_RATE, &AF(DoActorDebris), &s_EelDead[0]}, +// {EEL_DEAD, SF_QUICK_CALL , QueueFloorBlood, &s_EelDead[1]}, + {EEL_DEAD, EEL_DIE_RATE, DoActorDebris, &s_EelDead[0]}, }; STATE* sg_EelDead[] = @@ -377,6 +384,8 @@ void EelCommon(DSWActor* actor) int SetupEel(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,EEL_RUN_R0,s_EelRun[0]); @@ -384,10 +393,10 @@ int SetupEel(DSWActor* actor) } ChangeState(actor, s_EelRun[0]); - actor->user.__legacyState.Attrib = &EelAttrib; + actor->user.Attrib = &EelAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_EelDie; - actor->user.__legacyState.Rot = sg_EelRun; + actor->user.StateEnd = s_EelDie; + actor->user.Rot = sg_EelRun; EnemyDefaults(actor, &EelActionSet, &EelPersonality); @@ -401,13 +410,6 @@ int SetupEel(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWEel, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupEel(self); - return 0; -} - //--------------------------------------------------------------------------- // @@ -562,7 +564,7 @@ int DoEelDeath(DSWActor* actor) actor->spr.cstat |= (CSTAT_SPRITE_XFLIP); if (RandomRange(1000) > 500) actor->spr.cstat |= (CSTAT_SPRITE_YFLIP); - actor->setStateGroup(NAME_Dead); + NewStateGroup(actor, actor->user.ActorActionSet->Dead); return 0; } @@ -577,10 +579,10 @@ int DoEelDeath(DSWActor* actor) int DoEelMove(DSWActor* actor) { - ASSERT(actor->user.__legacyState.Rot != nullptr); + ASSERT(actor->user.Rot != nullptr); if (SpriteOverlap(actor, actor->user.targetActor)) - actor->setStateGroup(NAME_CloseAttack, 0); + NewStateGroup(actor, actor->user.ActorActionSet->CloseAttack[0]); if (actor->user.Flags & (SPR_SLIDING)) DoActorSlide(actor); @@ -588,7 +590,7 @@ int DoEelMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); DoEelMatchPlayerZ(actor); @@ -607,8 +609,24 @@ int DoEelMove(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_eel_code[] = +{ + SAVE_CODE(DoEelMatchPlayerZ), + SAVE_CODE(DoEelDeath), + SAVE_CODE(DoEelMove) +}; + static saveable_data saveable_eel_data[] = { + SAVE_DATA(EelBattle), + SAVE_DATA(EelOffense), + SAVE_DATA(EelBroadcast), + SAVE_DATA(EelSurprised), + SAVE_DATA(EelEvasive), + SAVE_DATA(EelLostTarget), + SAVE_DATA(EelCloseRange), + SAVE_DATA(EelTouchTarget), + SAVE_DATA(EelPersonality), SAVE_DATA(EelAttrib), @@ -630,7 +648,8 @@ static saveable_data saveable_eel_data[] = saveable_module saveable_eel = { // code - nullptr, 0, + saveable_eel_code, + SIZ(saveable_eel_code), // data saveable_eel_data, diff --git a/source/games/sw/src/game.cpp b/source/games/sw/src/game.cpp index fde53f36ec3..93ae9f30c13 100644 --- a/source/games/sw/src/game.cpp +++ b/source/games/sw/src/game.cpp @@ -178,6 +178,8 @@ void markgcroots() void pClearSpriteList(DSWPlayer* pp); +extern int sw_snd_scratch; + int GameVersion = 20; bool NoMeters = false; @@ -310,7 +312,8 @@ void GameInterface::app_init() else Printf("SHADOW WARRIOR(tm) Version 1.2\n"); - Printf("Copyright (c) 1997 3D Realms Entertainment\n"); + if (sw_snd_scratch == 0) // This is always 0 at this point - this check is only here to prevent whole program optimization from eliminating the variable. + Printf("Copyright (c) 1997 3D Realms Entertainment\n"); registerosdcommands(); diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 550952c23f9..2cc2fe8ab62 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -48,8 +48,6 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms #include "gameinput.h" #include "serialize_obj.h" #include "texturemanager.h" -#include "states.h" -#include "vm.h" EXTERN_CVAR(Bool, sw_ninjahack) EXTERN_CVAR(Bool, sw_darts) @@ -335,24 +333,15 @@ class DPanelSprite; struct ANIM; class DSWActor; +typedef int ANIMATOR (DSWActor* actor); typedef void pANIMATOR (DPanelSprite*); typedef void (*soANIMATORp) (SECTOR_OBJECT*); -// this needs to work with incomplete data, so avoid the asserting macros. -#define DEF_ANIMATOR(func) \ - int func(DSWActor*); \ - DEFINE_ACTION_FUNCTION_NATIVE(DSWActor, func, func) \ - { \ - auto self = (DSWActor *)(param[0].a); \ - ACTION_RETURN_INT(func(self)); \ - } -#define AF(func) DSWActor_##func##_VMPtr - struct STATE { short Pic; int Tics; - VMNativeFunction** Animator; // go through the scripting interface + ANIMATOR* Animator; STATE* NextState; }; @@ -378,6 +367,7 @@ enum FOOT_TYPE {WATER_FOOT, BLOOD_FOOT}; extern FOOT_TYPE FootMode; +ANIMATOR QueueFloorBlood; // Weapon.c int QueueFootPrint(DSWActor*); // Weapon.c void QueueLoWangs(DSWActor*); // Weapon.c int SpawnShell(DSWActor* actor, int ShellNum); // JWeapon.c @@ -692,23 +682,16 @@ struct USER TArray WallShade; walltype* WallP; // operate on wall instead of sprite - VMFunction* ActorActionFunc; + STATE* State; + STATE* *Rot; + STATE* StateStart; + STATE* StateEnd; + STATE* *StateFallOverride; // a bit kludgy - override std fall state + + ANIMATOR* ActorActionFunc; + ACTOR_ACTION_SET* ActorActionSet; PERSONALITY* Personality; - - struct LegacyState - { - STATE* State; - STATE** Rot; - STATE* StateStart; - STATE* StateEnd; - STATE** StateFallOverride; // a bit kludgy - override std fall state - ACTOR_ACTION_SET* ActorActionSet; - int16_t RotNum; - ATTRIBUTE* Attrib; - - }; - LegacyState __legacyState; - + ATTRIBUTE* Attrib; SECTOR_OBJECT* sop_parent; // denotes that this sprite is a part of the // sector object - contains info for the SO @@ -734,6 +717,7 @@ struct USER int Flags2; int Tics; + int16_t RotNum; int16_t ID; // Health/Pain related @@ -1202,18 +1186,11 @@ enum extern TRACK Track[MAX_TRACKS]; -enum -{ - SOType_None = 0, - SOType_Floor = 1, - SOType_Tornado = 2, - SOType_AutoTurret = 3 -}; - struct SECTOR_OBJECT { - bool PreMoveScale; - uint8_t AnimType; + soANIMATORp PreMoveAnimator; + soANIMATORp PostMoveAnimator; + soANIMATORp Animator; TObjPtr controller; TObjPtr sp_child; // child sprite that holds info for the sector object @@ -1388,6 +1365,8 @@ extern SECTOR_OBJECT SectorObject[MAX_SECTOR_OBJECTS]; // /////////////////////////////////////////////////////////////////////////////////////////// +ANIMATOR NullAnimator; + int NewStateGroup(DSWActor* actor, STATE* SpriteGroup[]); DVector3 SectorMidPoint(sectortype* sectp); void SpawnUser(DSWActor* actor, short id, STATE* state); @@ -1435,6 +1414,8 @@ void StopPlayerSound(DSWPlayer* pp, int which = -1); bool SoundValidAndActive(DSWActor* spr, int channel); +ANIMATOR DoActorBeginJump,DoActorJump,DoActorBeginFall,DoActorFall,DoActorDeathMove; + struct BREAK_INFO; int SpawnShrap(DSWActor*, DSWActor*, int = -1, BREAK_INFO* breakinfo = nullptr); @@ -2192,301 +2173,6 @@ extern USERSAVE puser[MAX_SW_PLAYERS_REG]; constexpr double JUMP_FACTOR = 1. / 256.; - -// declare all used state animators here for now. - -DEF_ANIMATOR(DoBunnyMove) -DEF_ANIMATOR(DoBunnyGrowUp) -DEF_ANIMATOR(DoBunnyEat) -DEF_ANIMATOR(DoBunnyScrew) -DEF_ANIMATOR(NullBunny) -DEF_ANIMATOR(InitBunnySlash) -DEF_ANIMATOR(DoBunnyStandKill) -DEF_ANIMATOR(DoBunnyPain) -DEF_ANIMATOR(DoBunnyMoveJump) -DEF_ANIMATOR(DoBunnyBeginJumpAttack) -DEF_ANIMATOR(BunnySpew) - -DEF_ANIMATOR(DoCoolgMove) -DEF_ANIMATOR(NullCoolg) -DEF_ANIMATOR(InitCoolgBash) -DEF_ANIMATOR(InitCoolgFire) -DEF_ANIMATOR(DoCoolgPain) -DEF_ANIMATOR(DoCoolgDeath) -DEF_ANIMATOR(DoCoolgBirth) - -DEF_ANIMATOR(DoCoolieMove) -DEF_ANIMATOR(CooliePain) -DEF_ANIMATOR(NullCoolie) -DEF_ANIMATOR(SpawnCoolieExp) -DEF_ANIMATOR(DoCoolieWaitBirth) -DEF_ANIMATOR(SpawnCoolg) - -DEF_ANIMATOR(DoEelMove) -DEF_ANIMATOR(InitEelFire) -DEF_ANIMATOR(NullEel) -DEF_ANIMATOR(DoEelDeath) - -DEF_ANIMATOR(NullGirlNinja) -DEF_ANIMATOR(DoGirlNinjaMove) -DEF_ANIMATOR(DoGirlNinjaPain) -DEF_ANIMATOR(DoGirlNinjaSpecial) - -DEF_ANIMATOR(InitEnemyMine) -DEF_ANIMATOR(InitEnemyCrossbow) - -DEF_ANIMATOR(DoGoroMove) -DEF_ANIMATOR(NullGoro) -DEF_ANIMATOR(InitGoroChop) -DEF_ANIMATOR(DoGoroPain) -DEF_ANIMATOR(InitEnemyFireball) - -DEF_ANIMATOR(DoHornetMove) -DEF_ANIMATOR(DoHornetDeath) - -DEF_ANIMATOR(BloodSprayFall) -DEF_ANIMATOR(DoSuicide) -DEF_ANIMATOR(DoRadiationCloud) -DEF_ANIMATOR(DoChemBomb) -DEF_ANIMATOR(DoCaltrops) -DEF_ANIMATOR(DoCaltropsStick) -DEF_ANIMATOR(DoCarryFlag) -DEF_ANIMATOR(DoCarryFlagNoDet) -DEF_ANIMATOR(DoFlag) -DEF_ANIMATOR(DoPhosphorus) -DEF_ANIMATOR(DoBloodSpray) -DEF_ANIMATOR(DoWallBloodDrip) - -DEF_ANIMATOR(DoLavaMove) -DEF_ANIMATOR(NullLava) -DEF_ANIMATOR(InitLavaThrow) -DEF_ANIMATOR(InitLavaFlame) - -DEF_ANIMATOR(DoActorDeathMove) -DEF_ANIMATOR(QueueFloorBlood) -DEF_ANIMATOR(DoActorDebris) -DEF_ANIMATOR(InitActorDecide) - -DEF_ANIMATOR(DoToiletGirl) -DEF_ANIMATOR(ToiletGirlPain) -DEF_ANIMATOR(ToiletGirlUzi) -DEF_ANIMATOR(InitEnemyUzi) -DEF_ANIMATOR(DoWashGirl) -DEF_ANIMATOR(WashGirlUzi) -DEF_ANIMATOR(DoTrashCan) -DEF_ANIMATOR(TrashCanPain) -DEF_ANIMATOR(PachinkoLightOperate) -DEF_ANIMATOR(Pachinko1Operate) -DEF_ANIMATOR(PachinkoCheckWin) -DEF_ANIMATOR(DoCarGirl) -DEF_ANIMATOR(CarGirlPain) -DEF_ANIMATOR(CarGirlUzi) -DEF_ANIMATOR(DoMechanicGirl) -DEF_ANIMATOR(MechanicGirlPain) -DEF_ANIMATOR(MechanicGirlDrill) -DEF_ANIMATOR(DoSailorGirl) -DEF_ANIMATOR(SailorGirlPain) -DEF_ANIMATOR(SailorGirlThrow) -DEF_ANIMATOR(DoPruneGirl) -DEF_ANIMATOR(PruneGirlPain) -DEF_ANIMATOR(WashGirlPain) - -DEF_ANIMATOR(DoNinjaMove) -DEF_ANIMATOR(NullNinja) -DEF_ANIMATOR(DoNinjaCeiling) -DEF_ANIMATOR(DoNinjaPain) -DEF_ANIMATOR(InitEnemyStar) -DEF_ANIMATOR(InitEnemyMirv) -DEF_ANIMATOR(InitEnemyNapalm) -DEF_ANIMATOR(InitEnemyRocket) -DEF_ANIMATOR(InitSpriteGrenade) -DEF_ANIMATOR(InitFlashBomb) -DEF_ANIMATOR(CheckFire) -DEF_ANIMATOR(DoNinjaSpecial) -DEF_ANIMATOR(DoNinjaGrabThroat) -DEF_ANIMATOR(DoNinjaHariKari) - -DEF_ANIMATOR(DoRipperMove) -DEF_ANIMATOR(NullRipper) -DEF_ANIMATOR(InitRipperSlash) -DEF_ANIMATOR(DoRipperStandHeart) -DEF_ANIMATOR(DoRipperHang) -DEF_ANIMATOR(DoRipperPain) -DEF_ANIMATOR(DoRipperMoveJump) -DEF_ANIMATOR(DoRipperBeginJumpAttack) -DEF_ANIMATOR(DoRipperHangJF) - -DEF_ANIMATOR(DoRipper2Move) -DEF_ANIMATOR(NullRipper2) -DEF_ANIMATOR(DoRipper2Hang) -DEF_ANIMATOR(DoRipper2Pain) -DEF_ANIMATOR(DoRipper2MoveJump) -DEF_ANIMATOR(DoRipper2BeginJumpAttack) -DEF_ANIMATOR(DoRipper2HangJF) -DEF_ANIMATOR(DoRipper2StandHeart) -DEF_ANIMATOR(ChestRipper2) - -DEF_ANIMATOR(DoSerpMove) -DEF_ANIMATOR(NullSerp) -DEF_ANIMATOR(InitSerpSlash) -DEF_ANIMATOR(InitSerpRing) -DEF_ANIMATOR(InitSerpSpell) -DEF_ANIMATOR(InitSerpMonstSpell) -DEF_ANIMATOR(DoDeathSpecial) - -DEF_ANIMATOR(DoSkelMove) -DEF_ANIMATOR(NullSkel) -DEF_ANIMATOR(InitSkelSlash) -DEF_ANIMATOR(InitSkelSpell) -DEF_ANIMATOR(DoSkelPain) -DEF_ANIMATOR(DoSkelInitTeleport) -DEF_ANIMATOR(DoSkelTeleport) -DEF_ANIMATOR(DoSkelTermTeleport) - -DEF_ANIMATOR(DoSkullWait) -DEF_ANIMATOR(DoSerpRing) -DEF_ANIMATOR(DoSkullJump) -DEF_ANIMATOR(DoDamageTest) -DEF_ANIMATOR(DoSkullSpawnShrap) -DEF_ANIMATOR(DoBettyWait) -DEF_ANIMATOR(DoBettyJump) - -DEF_ANIMATOR(DoSumoMove) -DEF_ANIMATOR(NullSumo) -DEF_ANIMATOR(InitSumoFart) -DEF_ANIMATOR(InitSumoClap) -DEF_ANIMATOR(InitSumoStomp) -DEF_ANIMATOR(DoSumoDeathMelt) - -DEF_ANIMATOR(DoDefaultStat) -DEF_ANIMATOR(DoPuff) -DEF_ANIMATOR(DoRailPuff) -DEF_ANIMATOR(DoTracer) -DEF_ANIMATOR(DoEMP) -DEF_ANIMATOR(DoEMPBurst) -DEF_ANIMATOR(DoFastShrapJumpFall) - -DEF_ANIMATOR(DoTankShell) -DEF_ANIMATOR(DoVehicleSmoke) -DEF_ANIMATOR(DoWaterSmoke) -DEF_ANIMATOR(DoUziSmoke) -DEF_ANIMATOR(DoShotgunSmoke) -DEF_ANIMATOR(DoUziBullet) -DEF_ANIMATOR(DoBubble) -DEF_ANIMATOR(DoCrossBolt) -DEF_ANIMATOR(DoStar) -DEF_ANIMATOR(DoLavaBoulder) -DEF_ANIMATOR(DoShrapDamage) -DEF_ANIMATOR(DoVulcanBoulder) -DEF_ANIMATOR(DoGrenade) -DEF_ANIMATOR(DoMineStuck) -DEF_ANIMATOR(DoMine) -DEF_ANIMATOR(DoMineSpark) -DEF_ANIMATOR(DoMeteor) -DEF_ANIMATOR(DoMirvMissile) -DEF_ANIMATOR(DoSerpMeteor) -DEF_ANIMATOR(DoSpear) -DEF_ANIMATOR(DoRocket) -DEF_ANIMATOR(DoRail) -DEF_ANIMATOR(DoLaser) -DEF_ANIMATOR(DoMicro) -DEF_ANIMATOR(DoMicroMini) -DEF_ANIMATOR(DoBoltThinMan) -DEF_ANIMATOR(DoBoltSeeker) -DEF_ANIMATOR(DoBoltFatMan) -DEF_ANIMATOR(DoBoltShrapnel) -DEF_ANIMATOR(DoCoolgFire) -DEF_ANIMATOR(DoCoolgDrip) -DEF_ANIMATOR(DoPlasma) -DEF_ANIMATOR(DoShrapJumpFall) - -DEF_ANIMATOR(DoTracerShrap) -DEF_ANIMATOR(DoVomitSplash) -DEF_ANIMATOR(DoVomit) -DEF_ANIMATOR(DoMirv) -DEF_ANIMATOR(DoBloodWorm) -DEF_ANIMATOR(DoNapalm) -DEF_ANIMATOR(DoRing) -DEF_ANIMATOR(DoFireball) -DEF_ANIMATOR(DoBreakFlames) -DEF_ANIMATOR(DoFireballFlames) -DEF_ANIMATOR(DoSectorExp) -DEF_ANIMATOR(SpawnShrapX) -DEF_ANIMATOR(DoExpDamageTest) -DEF_ANIMATOR(DoMineExpMine) -DEF_ANIMATOR(DoMineExp) -DEF_ANIMATOR(SpawnGrenadeSmallExp) -DEF_ANIMATOR(DoElectro) -DEF_ANIMATOR(DoTeleRipper) -DEF_ANIMATOR(DoPlasmaDone) -DEF_ANIMATOR(DoPlasmaFountain) -DEF_ANIMATOR(DoFootPrints) -DEF_ANIMATOR(DoPlayerSpriteReset) - -DEF_ANIMATOR(DoFloorBlood) -DEF_ANIMATOR(DoWallBlood) - -DEF_ANIMATOR(DoGet) -DEF_ANIMATOR(DoCoin) -DEF_ANIMATOR(DoFireFly) - -DEF_ANIMATOR(DoZillaMove) -DEF_ANIMATOR(DoZillaStomp) -DEF_ANIMATOR(NullZilla) -DEF_ANIMATOR(InitZillaRail) -DEF_ANIMATOR(InitZillaRocket) -DEF_ANIMATOR(DoZillaDeathMelt) - -DEF_ANIMATOR(DoZombieMove) -DEF_ANIMATOR(NullZombie) -DEF_ANIMATOR(DoZombiePain) -DEF_ANIMATOR(InitEnemyNuke) -DEF_ANIMATOR(InitEnemyRail) - -DEF_ANIMATOR(InitActorRunAway) -DEF_ANIMATOR(InitActorAttack) -DEF_ANIMATOR(InitActorDuck) -DEF_ANIMATOR(InitActorEvade) -DEF_ANIMATOR(InitActorFindPlayer) -DEF_ANIMATOR(InitActorMoveCloser) -DEF_ANIMATOR(InitActorReposition) -DEF_ANIMATOR(InitActorWanderAround) -DEF_ANIMATOR(InitCoolgCircle) -DEF_ANIMATOR(InitCoolieCharge) -DEF_ANIMATOR(InitHornetCircle) -DEF_ANIMATOR(InitHornetSting) -DEF_ANIMATOR(InitRipper2Charge) -DEF_ANIMATOR(InitRipper2Hang) -DEF_ANIMATOR(InitRipperHang) -DEF_ANIMATOR(InitActorRunToward) -DEF_ANIMATOR(InitActorSetDecide) -DEF_ANIMATOR(DoActorDecide) -DEF_ANIMATOR(DoActorMoveJump) -DEF_ANIMATOR(DoActorDuck) -DEF_ANIMATOR(NinjaJumpActionFunc) -DEF_ANIMATOR(DoActorMoveCloser) -DEF_ANIMATOR(DoActorAttack) -DEF_ANIMATOR(DoActorReposition) -DEF_ANIMATOR(DoCoolgCircle) -DEF_ANIMATOR(DoHornetCircle) -DEF_ANIMATOR(GenerateDrips) -DEF_ANIMATOR(DoSpawnSpot) -DEF_ANIMATOR(DoGrating) -DEF_ANIMATOR(DoVator) -DEF_ANIMATOR(DoVatorAuto) -DEF_ANIMATOR(DoRotator) -DEF_ANIMATOR(DoActorPause) -DEF_ANIMATOR(DoSlidor) -DEF_ANIMATOR(DoSpike) -DEF_ANIMATOR(DoSpikeAuto) -DEF_ANIMATOR(DoLavaErupt) -DEF_ANIMATOR(SpawnVehicleSmoke) -DEF_ANIMATOR(DoLaserStart) -DEF_ANIMATOR(DoTracerStart) -DEF_ANIMATOR(DoRailStart) - -DEF_ANIMATOR(DoGenerateSewerDebris) - END_SW_NS #endif diff --git a/source/games/sw/src/girlninj.cpp b/source/games/sw/src/girlninj.cpp index bc6a7bed20e..9fb584b0745 100644 --- a/source/games/sw/src/girlninj.cpp +++ b/source/games/sw/src/girlninj.cpp @@ -42,44 +42,50 @@ BEGIN_SW_NS DECISION GirlNinjaBattle[] = { - {499, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorAttack)} + {499, InitActorMoveCloser}, + //{509, InitActorAmbientNoise}, + //{710, InitActorRunAway}, + {1024, InitActorAttack} }; DECISION GirlNinjaOffense[] = { - {499, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorAttack)} + {499, InitActorMoveCloser}, + //{509, InitActorAmbientNoise}, + {1024, InitActorAttack} }; -DECISIONB GirlNinjaBroadcast[] = +DECISION GirlNinjaBroadcast[] = { - {6, attr_ambient}, - {1024, 0} + //{1, InitActorAlertNoise}, + {6, InitActorAmbientNoise}, + {1024, InitActorDecide} }; DECISION GirlNinjaSurprised[] = { - {701, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorDecide)} + {701, InitActorMoveCloser}, + {1024, InitActorDecide} }; DECISION GirlNinjaEvasive[] = { - {400, &AF(InitActorDuck)}, // 100 + {400, InitActorDuck}, // 100 +// {300, InitActorEvade}, +// {800, InitActorRunAway}, {1024, nullptr} }; DECISION GirlNinjaLostTarget[] = { - {900, &AF(InitActorFindPlayer)}, - {1024, &AF(InitActorWanderAround)} + {900, InitActorFindPlayer}, + {1024, InitActorWanderAround} }; DECISION GirlNinjaCloseRange[] = { - {900, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {900, InitActorAttack }, + {1024, InitActorReposition } }; /* @@ -118,40 +124,43 @@ ATTRIBUTE GirlNinjaAttrib = // ////////////////////// +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, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[0][1]}, - {GIRLNINJA_RUN_R0 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[0][2]}, - {GIRLNINJA_RUN_R0 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[0][3]}, - {GIRLNINJA_RUN_R0 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[0][0]}, + {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, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[1][1]}, - {GIRLNINJA_RUN_R1 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[1][2]}, - {GIRLNINJA_RUN_R1 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[1][3]}, - {GIRLNINJA_RUN_R1 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[1][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, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[2][1]}, - {GIRLNINJA_RUN_R2 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[2][2]}, - {GIRLNINJA_RUN_R2 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[2][3]}, - {GIRLNINJA_RUN_R2 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[2][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, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[3][1]}, - {GIRLNINJA_RUN_R3 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[3][2]}, - {GIRLNINJA_RUN_R3 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[3][3]}, - {GIRLNINJA_RUN_R3 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[3][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, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[4][1]}, - {GIRLNINJA_RUN_R4 + 1, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[4][2]}, - {GIRLNINJA_RUN_R4 + 2, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[4][3]}, - {GIRLNINJA_RUN_R4 + 3, GIRLNINJA_RATE | SF_TIC_ADJUST, &AF(DoGirlNinjaMove), &s_GirlNinjaRun[4][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]}, }, }; @@ -177,19 +186,19 @@ STATE* sg_GirlNinjaRun[] = STATE s_GirlNinjaStand[5][1] = { { - {GIRLNINJA_STAND_R0 + 0, GIRLNINJA_STAND_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaStand[0][0]}, + {GIRLNINJA_STAND_R0 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[0][0]}, }, { - {GIRLNINJA_STAND_R1 + 0, GIRLNINJA_STAND_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaStand[1][0]}, + {GIRLNINJA_STAND_R1 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[1][0]}, }, { - {GIRLNINJA_STAND_R2 + 0, GIRLNINJA_STAND_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaStand[2][0]}, + {GIRLNINJA_STAND_R2 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[2][0]}, }, { - {GIRLNINJA_STAND_R3 + 0, GIRLNINJA_STAND_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaStand[3][0]}, + {GIRLNINJA_STAND_R3 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[3][0]}, }, { - {GIRLNINJA_STAND_R4 + 0, GIRLNINJA_STAND_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaStand[4][0]}, + {GIRLNINJA_STAND_R4 + 0, GIRLNINJA_STAND_RATE, DoGirlNinjaMove, &s_GirlNinjaStand[4][0]}, }, }; @@ -214,30 +223,30 @@ STATE* sg_GirlNinjaStand[] = STATE s_GirlNinjaRise[5][3] = { { - {GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_RISE_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[0][1]}, - {GIRLNINJA_STAND_R0 + 0, GIRLNINJA_STAND_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[0][2]}, + {GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[0][1]}, + {GIRLNINJA_STAND_R0 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[0][2]}, {0, 0, nullptr, (STATE*)sg_GirlNinjaRun}, // JBF: sg_GirlNinjaRun really is supposed to be the // pointer to the state group. See StateControl() where - // it says "if (!actor->user.__legacyState.State->Pic)". + // it says "if (!actor->user.State->Pic)". }, { - {GIRLNINJA_KNEEL_R1 + 0, GIRLNINJA_RISE_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[1][1]}, - {GIRLNINJA_STAND_R1 + 0, GIRLNINJA_STAND_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[1][2]}, + {GIRLNINJA_KNEEL_R1 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[1][1]}, + {GIRLNINJA_STAND_R1 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[1][2]}, {0, 0, nullptr, (STATE*)sg_GirlNinjaRun}, }, { - {GIRLNINJA_KNEEL_R2 + 0, GIRLNINJA_RISE_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[2][1]}, - {GIRLNINJA_STAND_R2 + 0, GIRLNINJA_STAND_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[2][2]}, + {GIRLNINJA_KNEEL_R2 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[2][1]}, + {GIRLNINJA_STAND_R2 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[2][2]}, {0, 0, nullptr, (STATE*)sg_GirlNinjaRun}, }, { - {GIRLNINJA_KNEEL_R3 + 0, GIRLNINJA_RISE_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[3][1]}, - {GIRLNINJA_STAND_R3 + 0, GIRLNINJA_STAND_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[3][2]}, + {GIRLNINJA_KNEEL_R3 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[3][1]}, + {GIRLNINJA_STAND_R3 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[3][2]}, {0, 0, nullptr, (STATE*)sg_GirlNinjaRun}, }, { - {GIRLNINJA_KNEEL_R4 + 0, GIRLNINJA_RISE_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[4][1]}, - {GIRLNINJA_STAND_R4 + 0, GIRLNINJA_STAND_RATE, &AF(NullGirlNinja), &s_GirlNinjaRise[4][2]}, + {GIRLNINJA_KNEEL_R4 + 0, GIRLNINJA_RISE_RATE, NullGirlNinja, &s_GirlNinjaRise[4][1]}, + {GIRLNINJA_STAND_R4 + 0, GIRLNINJA_STAND_RATE, NullGirlNinja, &s_GirlNinjaRise[4][2]}, {0, 0, nullptr, (STATE*)sg_GirlNinjaRun}, }, }; @@ -264,24 +273,24 @@ STATE* sg_GirlNinjaRise[] = STATE s_GirlNinjaDuck[5][2] = { { - {GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_DUCK_RATE, &AF(NullGirlNinja), &s_GirlNinjaDuck[0][1]}, - {GIRLNINJA_CRAWL_R0 + 0, GIRLNINJA_CRAWL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaDuck[0][1]}, + {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, &AF(NullGirlNinja), &s_GirlNinjaDuck[1][1]}, - {GIRLNINJA_CRAWL_R1 + 0, GIRLNINJA_CRAWL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaDuck[1][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, &AF(NullGirlNinja), &s_GirlNinjaDuck[2][1]}, - {GIRLNINJA_CRAWL_R2 + 0, GIRLNINJA_CRAWL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaDuck[2][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, &AF(NullGirlNinja), &s_GirlNinjaDuck[3][1]}, - {GIRLNINJA_CRAWL_R3 + 0, GIRLNINJA_CRAWL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaDuck[3][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, &AF(NullGirlNinja), &s_GirlNinjaDuck[4][1]}, - {GIRLNINJA_CRAWL_R4 + 0, GIRLNINJA_CRAWL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaDuck[4][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]}, }, }; @@ -305,19 +314,19 @@ STATE* sg_GirlNinjaDuck[] = STATE s_GirlNinjaSit[5][1] = { { - {GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_RISE_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSit[0][0]}, + {GIRLNINJA_KNEEL_R0 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[0][0]}, }, { - {GIRLNINJA_KNEEL_R1 + 0, GIRLNINJA_RISE_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSit[1][0]}, + {GIRLNINJA_KNEEL_R1 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[1][0]}, }, { - {GIRLNINJA_KNEEL_R2 + 0, GIRLNINJA_RISE_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSit[2][0]}, + {GIRLNINJA_KNEEL_R2 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[2][0]}, }, { - {GIRLNINJA_KNEEL_R3 + 0, GIRLNINJA_RISE_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSit[3][0]}, + {GIRLNINJA_KNEEL_R3 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[3][0]}, }, { - {GIRLNINJA_KNEEL_R4 + 0, GIRLNINJA_RISE_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSit[4][0]}, + {GIRLNINJA_KNEEL_R4 + 0, GIRLNINJA_RISE_RATE, DoGirlNinjaMove, &s_GirlNinjaSit[4][0]}, }, }; @@ -343,24 +352,24 @@ STATE* sg_GirlNinjaSit[] = STATE s_GirlNinjaJump[5][2] = { { - {GIRLNINJA_JUMP_R0 + 0, GIRLNINJA_JUMP_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[0][1]}, - {GIRLNINJA_JUMP_R0 + 1, GIRLNINJA_JUMP_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[0][1]}, + {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, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[1][1]}, - {GIRLNINJA_JUMP_R1 + 1, GIRLNINJA_JUMP_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[1][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, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[2][1]}, - {GIRLNINJA_JUMP_R2 + 1, GIRLNINJA_JUMP_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[2][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, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[3][1]}, - {GIRLNINJA_JUMP_R3 + 1, GIRLNINJA_JUMP_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[3][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, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[4][1]}, - {GIRLNINJA_JUMP_R4 + 1, GIRLNINJA_JUMP_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaJump[4][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]}, }, }; @@ -386,24 +395,24 @@ STATE* sg_GirlNinjaJump[] = STATE s_GirlNinjaFall[5][2] = { { - {GIRLNINJA_JUMP_R0 + 1, GIRLNINJA_FALL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[0][1]}, - {GIRLNINJA_JUMP_R0 + 2, GIRLNINJA_FALL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[0][1]}, + {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, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[1][1]}, - {GIRLNINJA_JUMP_R1 + 2, GIRLNINJA_FALL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[1][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, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[2][1]}, - {GIRLNINJA_JUMP_R2 + 2, GIRLNINJA_FALL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[2][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, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[3][1]}, - {GIRLNINJA_JUMP_R3 + 2, GIRLNINJA_FALL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[3][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, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[4][1]}, - {GIRLNINJA_JUMP_R4 + 2, GIRLNINJA_FALL_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaFall[4][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]}, }, }; @@ -424,23 +433,24 @@ STATE* sg_GirlNinjaFall[] = ////////////////////// #define GIRLNINJA_PAIN_RATE 15 +ANIMATOR DoGirlNinjaPain; STATE s_GirlNinjaPain[5][1] = { { - {GIRLNINJA_PAIN_R0 + 0, GIRLNINJA_PAIN_RATE, &AF(DoGirlNinjaPain), &s_GirlNinjaPain[0][0]}, + {GIRLNINJA_PAIN_R0 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[0][0]}, }, { - {GIRLNINJA_PAIN_R1 + 0, GIRLNINJA_PAIN_RATE, &AF(DoGirlNinjaPain), &s_GirlNinjaPain[1][0]}, + {GIRLNINJA_PAIN_R1 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[1][0]}, }, { - {GIRLNINJA_PAIN_R2 + 0, GIRLNINJA_PAIN_RATE, &AF(DoGirlNinjaPain), &s_GirlNinjaPain[2][0]}, + {GIRLNINJA_PAIN_R2 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[2][0]}, }, { - {GIRLNINJA_PAIN_R3 + 0, GIRLNINJA_PAIN_RATE, &AF(DoGirlNinjaPain), &s_GirlNinjaPain[3][0]}, + {GIRLNINJA_PAIN_R3 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[3][0]}, }, { - {GIRLNINJA_PAIN_R4 + 0, GIRLNINJA_PAIN_RATE, &AF(DoGirlNinjaPain), &s_GirlNinjaPain[4][0]}, + {GIRLNINJA_PAIN_R4 + 0, GIRLNINJA_PAIN_RATE, DoGirlNinjaPain, &s_GirlNinjaPain[4][0]}, }, }; @@ -460,48 +470,49 @@ STATE* sg_GirlNinjaPain[] = ////////////////////// #define GIRLNINJA_STICKY_RATE 32 +ANIMATOR InitEnemyMine; STATE s_GirlNinjaSticky[5][6] = { { - {GIRLNINJA_THROW_R0 + 0, GIRLNINJA_STICKY_RATE * 2, &AF(NullGirlNinja), &s_GirlNinjaSticky[0][1]}, - {GIRLNINJA_THROW_R0 + 0, GIRLNINJA_STICKY_RATE, &AF(NullGirlNinja), &s_GirlNinjaSticky[0][2]}, - {GIRLNINJA_THROW_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyMine), &s_GirlNinjaSticky[0][3]}, - {GIRLNINJA_THROW_R0 + 1, GIRLNINJA_STICKY_RATE * 2, &AF(NullGirlNinja), &s_GirlNinjaSticky[0][4]}, - {GIRLNINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaSticky[0][5]}, - {GIRLNINJA_THROW_R0 + 2, GIRLNINJA_STICKY_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSticky[0][5]}, + {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, &AF(NullGirlNinja), &s_GirlNinjaSticky[1][1]}, - {GIRLNINJA_THROW_R1 + 0, GIRLNINJA_STICKY_RATE, &AF(NullGirlNinja), &s_GirlNinjaSticky[1][2]}, - {GIRLNINJA_THROW_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyMine), &s_GirlNinjaSticky[1][3]}, - {GIRLNINJA_THROW_R1 + 1, GIRLNINJA_STICKY_RATE * 2, &AF(NullGirlNinja), &s_GirlNinjaSticky[1][4]}, - {GIRLNINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaSticky[1][5]}, - {GIRLNINJA_THROW_R1 + 2, GIRLNINJA_STICKY_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSticky[1][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, &AF(NullGirlNinja), &s_GirlNinjaSticky[2][1]}, - {GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE, &AF(NullGirlNinja), &s_GirlNinjaSticky[2][2]}, - {GIRLNINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyMine), &s_GirlNinjaSticky[2][3]}, - {GIRLNINJA_THROW_R2 + 1, GIRLNINJA_STICKY_RATE * 2, &AF(NullGirlNinja), &s_GirlNinjaSticky[2][4]}, - {GIRLNINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaSticky[2][5]}, - {GIRLNINJA_THROW_R2 + 2, GIRLNINJA_STICKY_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSticky[2][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, &AF(NullGirlNinja), &s_GirlNinjaSticky[3][1]}, - {GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE, &AF(NullGirlNinja), &s_GirlNinjaSticky[3][2]}, - {GIRLNINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyMine), &s_GirlNinjaSticky[3][3]}, - {GIRLNINJA_THROW_R2 + 1, GIRLNINJA_STICKY_RATE * 2, &AF(NullGirlNinja), &s_GirlNinjaSticky[3][4]}, - {GIRLNINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaSticky[3][5]}, - {GIRLNINJA_THROW_R2 + 2, GIRLNINJA_STICKY_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSticky[3][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, &AF(NullGirlNinja), &s_GirlNinjaSticky[4][1]}, - {GIRLNINJA_THROW_R2 + 0, GIRLNINJA_STICKY_RATE, &AF(NullGirlNinja), &s_GirlNinjaSticky[4][2]}, - {GIRLNINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyMine), &s_GirlNinjaSticky[4][3]}, - {GIRLNINJA_THROW_R2 + 1, GIRLNINJA_STICKY_RATE * 2, &AF(NullGirlNinja), &s_GirlNinjaSticky[4][4]}, - {GIRLNINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaSticky[4][5]}, - {GIRLNINJA_THROW_R2 + 2, GIRLNINJA_STICKY_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaSticky[4][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]}, }, }; @@ -522,43 +533,44 @@ STATE* sg_GirlNinjaSticky[] = ////////////////////// #define GIRLNINJA_CROSSBOW_RATE 14 +ANIMATOR InitEnemyCrossbow; STATE s_GirlNinjaCrossbow[5][5] = { { - {GIRLNINJA_FIRE_R0 + 0, GIRLNINJA_CROSSBOW_RATE * 2, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[0][1]}, - {GIRLNINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyCrossbow), &s_GirlNinjaCrossbow[0][2]}, - {GIRLNINJA_FIRE_R0 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[0][3]}, - {GIRLNINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaCrossbow[0][4]}, - {GIRLNINJA_FIRE_R0 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaCrossbow[0][4]}, + {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, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[1][1]}, - {GIRLNINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyCrossbow), &s_GirlNinjaCrossbow[1][2]}, - {GIRLNINJA_FIRE_R1 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[1][3]}, - {GIRLNINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaCrossbow[1][4]}, - {GIRLNINJA_FIRE_R1 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaCrossbow[1][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, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[2][1]}, - {GIRLNINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyCrossbow), &s_GirlNinjaCrossbow[2][2]}, - {GIRLNINJA_FIRE_R2 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[2][3]}, - {GIRLNINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaCrossbow[2][4]}, - {GIRLNINJA_FIRE_R2 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaCrossbow[2][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, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[3][1]}, - {GIRLNINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyCrossbow), &s_GirlNinjaCrossbow[3][2]}, - {GIRLNINJA_FIRE_R3 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[3][3]}, - {GIRLNINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaCrossbow[3][4]}, - {GIRLNINJA_FIRE_R3 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaCrossbow[3][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, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[4][1]}, - {GIRLNINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyCrossbow), &s_GirlNinjaCrossbow[4][2]}, - {GIRLNINJA_FIRE_R4 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(NullGirlNinja), &s_GirlNinjaCrossbow[4][3]}, - {GIRLNINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_GirlNinjaCrossbow[4][4]}, - {GIRLNINJA_FIRE_R4 + 1, GIRLNINJA_CROSSBOW_RATE, &AF(DoGirlNinjaMove), &s_GirlNinjaCrossbow[4][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]}, }, }; @@ -581,43 +593,44 @@ STATE* sg_GirlNinjaCrossbow[] = ////////////////////// #define GIRLNINJA_DIE_RATE 30 +ANIMATOR DoGirlNinjaSpecial; STATE s_GirlNinjaDie[] = { - {GIRLNINJA_DIE + 0, GIRLNINJA_DIE_RATE*2, &AF(NullGirlNinja), &s_GirlNinjaDie[1]}, - {GIRLNINJA_DIE + 1, GIRLNINJA_DIE_RATE, &AF(NullGirlNinja), &s_GirlNinjaDie[2]}, - {GIRLNINJA_DIE + 2, GIRLNINJA_DIE_RATE, &AF(NullGirlNinja), &s_GirlNinjaDie[3]}, - {GIRLNINJA_DIE + 3, GIRLNINJA_DIE_RATE, &AF(NullGirlNinja), &s_GirlNinjaDie[4]}, - {GIRLNINJA_DIE + 4, GIRLNINJA_DIE_RATE, &AF(NullGirlNinja), &s_GirlNinjaDie[5]}, - {GIRLNINJA_DIE + 5, GIRLNINJA_DIE_RATE, &AF(NullGirlNinja), &s_GirlNinjaDie[6]}, - {GIRLNINJA_DIE + 6, GIRLNINJA_DIE_RATE, &AF(NullGirlNinja), &s_GirlNinjaDie[7]}, - {GIRLNINJA_DIE + 6, SF_QUICK_CALL, &AF(DoGirlNinjaSpecial), &s_GirlNinjaDie[8]}, - {GIRLNINJA_DIE + 7, GIRLNINJA_DIE_RATE, &AF(NullGirlNinja), &s_GirlNinjaDie[9]}, - {GIRLNINJA_DIE + 8, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_GirlNinjaDie[10]}, - {GIRLNINJA_DIE + 8, GIRLNINJA_DIE_RATE, &AF(DoActorDebris), &s_GirlNinjaDie[10]}, + {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, &AF(DoActorDebris), &s_GirlNinjaDead[1]}, - {GIRLNINJA_DIE + 7, SF_QUICK_CALL, &AF(DoGirlNinjaSpecial), &s_GirlNinjaDead[2]}, - {GIRLNINJA_DIE + 7, GIRLNINJA_DIE_RATE, &AF(DoActorDebris), &s_GirlNinjaDead[3]}, - {GIRLNINJA_DIE + 8, SF_QUICK_CALL, &AF(QueueFloorBlood),&s_GirlNinjaDead[4]}, - {GIRLNINJA_DIE + 8, GIRLNINJA_DIE_RATE, &AF(DoActorDebris), &s_GirlNinjaDead[4]}, + {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, &AF(DoActorDeathMove), &s_GirlNinjaDeathJump[1]}, - {GIRLNINJA_DIE + 1, GIRLNINJA_DIE_RATE, &AF(DoActorDeathMove), &s_GirlNinjaDeathJump[2]}, - {GIRLNINJA_DIE + 2, GIRLNINJA_DIE_RATE, &AF(DoActorDeathMove), &s_GirlNinjaDeathJump[2]}, + {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, &AF(DoActorDeathMove), &s_GirlNinjaDeathFall[1]}, - {GIRLNINJA_DIE + 4, GIRLNINJA_DIE_RATE, &AF(DoActorDeathMove), &s_GirlNinjaDeathFall[1]}, + {GIRLNINJA_DIE + 3, GIRLNINJA_DIE_RATE, DoActorDeathMove, &s_GirlNinjaDeathFall[1]}, + {GIRLNINJA_DIE + 4, GIRLNINJA_DIE_RATE, DoActorDeathMove, &s_GirlNinjaDeathFall[1]}, }; /* @@ -705,17 +718,19 @@ ACTOR_ACTION_SET GirlNinjaActionSet = int SetupGirlNinja(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, GIRLNINJA_RUN_R0, s_GirlNinjaRun[0]); actor->user.Health = (Skill < MinEnemySkill - 1) ? 50 : 100; } - actor->user.__legacyState.StateEnd = s_GirlNinjaDie; - actor->user.__legacyState.Rot = sg_GirlNinjaRun; + actor->user.StateEnd = s_GirlNinjaDie; + actor->user.Rot = sg_GirlNinjaRun; actor->spr.scale = DVector2(0.796875, 0.671875); - actor->user.__legacyState.Attrib = &GirlNinjaAttrib; + actor->user.Attrib = &GirlNinjaAttrib; actor->spr.pal = actor->user.spal = 26; EnemyDefaults(actor, &GirlNinjaActionSet, &GirlNinjaPersonality); @@ -728,14 +743,6 @@ int SetupGirlNinja(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWGirlNinja, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupGirlNinja(self); - return 0; -} - - //--------------------------------------------------------------------------- // // @@ -762,7 +769,7 @@ int DoGirlNinjaMove(DSWActor* actor) ActorFollowTrack(actor, ACTORMOVETICS); else { - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); } // stay on floor unless doing certain things @@ -862,8 +869,25 @@ int DoGirlNinjaSpecial(DSWActor* actor) #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), @@ -903,7 +927,9 @@ static saveable_data saveable_girlninj_data[] = saveable_module saveable_girlninj = { // code - nullptr, 0, + saveable_girlninj_code, + SIZ(saveable_girlninj_code), + // data saveable_girlninj_data, SIZ(saveable_girlninj_data) diff --git a/source/games/sw/src/goro.cpp b/source/games/sw/src/goro.cpp index 44f813ebf9b..0f652f3c31b 100644 --- a/source/games/sw/src/goro.cpp +++ b/source/games/sw/src/goro.cpp @@ -43,46 +43,46 @@ BEGIN_SW_NS DECISION GoroBattle[] = { - {697, &AF(InitActorMoveCloser ) }, - {700, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {697, InitActorMoveCloser }, + {700, InitActorAmbientNoise }, + {1024, InitActorAttack } }; DECISION GoroOffense[] = { - {797, &AF(InitActorMoveCloser ) }, - {800, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {797, InitActorMoveCloser }, + {800, InitActorAttackNoise }, + {1024, InitActorAttack } }; -DECISIONB GoroBroadcast[] = +DECISION GoroBroadcast[] = { - {3, attr_ambient }, - {1024, 0 } + {3, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION GoroSurprised[] = { - {701, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorDecide ) } + {701, InitActorMoveCloser }, + {1024, InitActorDecide } }; DECISION GoroEvasive[] = { - {10, &AF(InitActorEvade ) }, - {1024, &AF(InitActorMoveCloser) } + {10, InitActorEvade }, + {1024, InitActorMoveCloser } }; DECISION GoroLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION GoroCloseRange[] = { - {700, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {700, InitActorAttack }, + {1024, InitActorReposition } }; PERSONALITY GoroPersonality = @@ -118,37 +118,39 @@ ATTRIBUTE GoroAttrib = #define GORO_RUN_RATE 18 +ANIMATOR DoGoroMove,NullGoro,DoActorDebris,InitEnemyFireball; + STATE s_GoroRun[5][4] = { { - {GORO_RUN_R0 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[0][1]}, - {GORO_RUN_R0 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[0][2]}, - {GORO_RUN_R0 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[0][3]}, - {GORO_RUN_R0 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[0][0]}, + {GORO_RUN_R0 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[0][1]}, + {GORO_RUN_R0 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[0][2]}, + {GORO_RUN_R0 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[0][3]}, + {GORO_RUN_R0 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[0][0]}, }, { - {GORO_RUN_R1 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[1][1]}, - {GORO_RUN_R1 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[1][2]}, - {GORO_RUN_R1 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[1][3]}, - {GORO_RUN_R1 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[1][0]}, + {GORO_RUN_R1 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[1][1]}, + {GORO_RUN_R1 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[1][2]}, + {GORO_RUN_R1 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[1][3]}, + {GORO_RUN_R1 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[1][0]}, }, { - {GORO_RUN_R2 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[2][1]}, - {GORO_RUN_R2 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[2][2]}, - {GORO_RUN_R2 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[2][3]}, - {GORO_RUN_R2 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[2][0]}, + {GORO_RUN_R2 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[2][1]}, + {GORO_RUN_R2 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[2][2]}, + {GORO_RUN_R2 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[2][3]}, + {GORO_RUN_R2 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[2][0]}, }, { - {GORO_RUN_R3 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[3][1]}, - {GORO_RUN_R3 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[3][2]}, - {GORO_RUN_R3 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[3][3]}, - {GORO_RUN_R3 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[3][0]}, + {GORO_RUN_R3 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[3][1]}, + {GORO_RUN_R3 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[3][2]}, + {GORO_RUN_R3 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[3][3]}, + {GORO_RUN_R3 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[3][0]}, }, { - {GORO_RUN_R4 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[4][1]}, - {GORO_RUN_R4 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[4][2]}, - {GORO_RUN_R4 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[4][3]}, - {GORO_RUN_R4 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, &AF(DoGoroMove), &s_GoroRun[4][0]}, + {GORO_RUN_R4 + 0, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[4][1]}, + {GORO_RUN_R4 + 1, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[4][2]}, + {GORO_RUN_R4 + 2, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[4][3]}, + {GORO_RUN_R4 + 3, GORO_RUN_RATE|SF_TIC_ADJUST, DoGoroMove, &s_GoroRun[4][0]}, } }; @@ -169,53 +171,55 @@ STATE* sg_GoroRun[] = ////////////////////// #define GORO_CHOP_RATE 14 +ANIMATOR InitActorDecide; +ANIMATOR InitGoroChop; STATE s_GoroChop[5][7] = { { - {GORO_CHOP_R0 + 0, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[0][1]}, - {GORO_CHOP_R0 + 1, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[0][2]}, - {GORO_CHOP_R0 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[0][3]}, - {GORO_CHOP_R0 + 2, 0|SF_QUICK_CALL, &AF(InitGoroChop), &s_GoroChop[0][4]}, - {GORO_CHOP_R0 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[0][5]}, - {GORO_CHOP_R0 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroChop[0][6]}, - {GORO_CHOP_R0 + 2, GORO_CHOP_RATE, &AF(DoGoroMove), &s_GoroChop[0][6]}, + {GORO_CHOP_R0 + 0, GORO_CHOP_RATE, NullGoro, &s_GoroChop[0][1]}, + {GORO_CHOP_R0 + 1, GORO_CHOP_RATE, NullGoro, &s_GoroChop[0][2]}, + {GORO_CHOP_R0 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[0][3]}, + {GORO_CHOP_R0 + 2, 0|SF_QUICK_CALL, InitGoroChop, &s_GoroChop[0][4]}, + {GORO_CHOP_R0 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[0][5]}, + {GORO_CHOP_R0 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroChop[0][6]}, + {GORO_CHOP_R0 + 2, GORO_CHOP_RATE, DoGoroMove, &s_GoroChop[0][6]}, }, { - {GORO_CHOP_R1 + 0, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[1][1]}, - {GORO_CHOP_R1 + 1, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[1][2]}, - {GORO_CHOP_R1 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[1][3]}, - {GORO_CHOP_R1 + 2, 0|SF_QUICK_CALL, &AF(InitGoroChop), &s_GoroChop[1][4]}, - {GORO_CHOP_R1 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[1][5]}, - {GORO_CHOP_R1 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroChop[1][6]}, - {GORO_CHOP_R1 + 2, GORO_CHOP_RATE, &AF(DoGoroMove), &s_GoroChop[1][6]}, + {GORO_CHOP_R1 + 0, GORO_CHOP_RATE, NullGoro, &s_GoroChop[1][1]}, + {GORO_CHOP_R1 + 1, GORO_CHOP_RATE, NullGoro, &s_GoroChop[1][2]}, + {GORO_CHOP_R1 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[1][3]}, + {GORO_CHOP_R1 + 2, 0|SF_QUICK_CALL, InitGoroChop, &s_GoroChop[1][4]}, + {GORO_CHOP_R1 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[1][5]}, + {GORO_CHOP_R1 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroChop[1][6]}, + {GORO_CHOP_R1 + 2, GORO_CHOP_RATE, DoGoroMove, &s_GoroChop[1][6]}, }, { - {GORO_CHOP_R2 + 0, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[2][1]}, - {GORO_CHOP_R2 + 1, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[2][2]}, - {GORO_CHOP_R2 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[2][3]}, - {GORO_CHOP_R2 + 2, 0|SF_QUICK_CALL, &AF(InitGoroChop), &s_GoroChop[2][4]}, - {GORO_CHOP_R2 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[2][5]}, - {GORO_CHOP_R2 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroChop[2][6]}, - {GORO_CHOP_R2 + 2, GORO_CHOP_RATE, &AF(DoGoroMove), &s_GoroChop[2][6]}, + {GORO_CHOP_R2 + 0, GORO_CHOP_RATE, NullGoro, &s_GoroChop[2][1]}, + {GORO_CHOP_R2 + 1, GORO_CHOP_RATE, NullGoro, &s_GoroChop[2][2]}, + {GORO_CHOP_R2 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[2][3]}, + {GORO_CHOP_R2 + 2, 0|SF_QUICK_CALL, InitGoroChop, &s_GoroChop[2][4]}, + {GORO_CHOP_R2 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[2][5]}, + {GORO_CHOP_R2 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroChop[2][6]}, + {GORO_CHOP_R2 + 2, GORO_CHOP_RATE, DoGoroMove, &s_GoroChop[2][6]}, }, { - {GORO_CHOP_R3 + 0, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[3][1]}, - {GORO_CHOP_R3 + 1, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[3][2]}, - {GORO_CHOP_R3 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[3][3]}, - {GORO_CHOP_R3 + 2, 0|SF_QUICK_CALL, &AF(InitGoroChop), &s_GoroChop[3][4]}, - {GORO_CHOP_R3 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[3][5]}, - {GORO_CHOP_R3 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroChop[3][6]}, - {GORO_CHOP_R3 + 2, GORO_CHOP_RATE, &AF(DoGoroMove), &s_GoroChop[3][6]}, + {GORO_CHOP_R3 + 0, GORO_CHOP_RATE, NullGoro, &s_GoroChop[3][1]}, + {GORO_CHOP_R3 + 1, GORO_CHOP_RATE, NullGoro, &s_GoroChop[3][2]}, + {GORO_CHOP_R3 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[3][3]}, + {GORO_CHOP_R3 + 2, 0|SF_QUICK_CALL, InitGoroChop, &s_GoroChop[3][4]}, + {GORO_CHOP_R3 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[3][5]}, + {GORO_CHOP_R3 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroChop[3][6]}, + {GORO_CHOP_R3 + 2, GORO_CHOP_RATE, DoGoroMove, &s_GoroChop[3][6]}, }, { - {GORO_CHOP_R4 + 0, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[4][1]}, - {GORO_CHOP_R4 + 1, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[4][2]}, - {GORO_CHOP_R4 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[4][3]}, - {GORO_CHOP_R4 + 2, 0|SF_QUICK_CALL, &AF(InitGoroChop), &s_GoroChop[4][4]}, - {GORO_CHOP_R4 + 2, GORO_CHOP_RATE, &AF(NullGoro), &s_GoroChop[4][5]}, - {GORO_CHOP_R4 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroChop[4][6]}, - {GORO_CHOP_R4 + 2, GORO_CHOP_RATE, &AF(DoGoroMove), &s_GoroChop[4][6]}, + {GORO_CHOP_R4 + 0, GORO_CHOP_RATE, NullGoro, &s_GoroChop[4][1]}, + {GORO_CHOP_R4 + 1, GORO_CHOP_RATE, NullGoro, &s_GoroChop[4][2]}, + {GORO_CHOP_R4 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[4][3]}, + {GORO_CHOP_R4 + 2, 0|SF_QUICK_CALL, InitGoroChop, &s_GoroChop[4][4]}, + {GORO_CHOP_R4 + 2, GORO_CHOP_RATE, NullGoro, &s_GoroChop[4][5]}, + {GORO_CHOP_R4 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroChop[4][6]}, + {GORO_CHOP_R4 + 2, GORO_CHOP_RATE, DoGoroMove, &s_GoroChop[4][6]}, } }; @@ -242,64 +246,64 @@ STATE* sg_GoroChop[] = STATE s_GoroSpell[5][10] = { { - {GORO_SPELL_R0 + 0, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[0][1]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[0][2]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[0][3]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[0][4]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[0][5]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[0][6]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[0][7]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[0][8]}, - {GORO_SPELL_R0 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroSpell[0][9]}, - {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, &AF(DoGoroMove), &s_GoroSpell[0][9]}, + {GORO_SPELL_R0 + 0, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[0][1]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[0][2]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[0][3]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[0][4]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[0][5]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[0][6]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[0][7]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[0][8]}, + {GORO_SPELL_R0 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroSpell[0][9]}, + {GORO_SPELL_R0 + 1, GORO_SPELL_RATE, DoGoroMove, &s_GoroSpell[0][9]}, }, { - {GORO_SPELL_R1 + 0, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[1][1]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[1][2]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[1][3]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[1][4]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[1][5]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[1][6]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[1][7]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[1][8]}, - {GORO_SPELL_R1 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroSpell[1][9]}, - {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, &AF(DoGoroMove), &s_GoroSpell[1][9]}, + {GORO_SPELL_R1 + 0, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[1][1]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[1][2]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[1][3]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[1][4]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[1][5]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[1][6]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[1][7]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[1][8]}, + {GORO_SPELL_R1 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroSpell[1][9]}, + {GORO_SPELL_R1 + 1, GORO_SPELL_RATE, DoGoroMove, &s_GoroSpell[1][9]}, }, { - {GORO_SPELL_R2 + 0, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[2][1]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[2][2]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[2][3]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[2][4]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[2][5]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[2][6]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[2][7]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[2][8]}, - {GORO_SPELL_R2 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroSpell[2][9]}, - {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, &AF(DoGoroMove), &s_GoroSpell[2][9]}, + {GORO_SPELL_R2 + 0, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[2][1]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[2][2]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[2][3]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[2][4]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[2][5]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[2][6]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[2][7]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[2][8]}, + {GORO_SPELL_R2 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroSpell[2][9]}, + {GORO_SPELL_R2 + 1, GORO_SPELL_RATE, DoGoroMove, &s_GoroSpell[2][9]}, }, { - {GORO_SPELL_R3 + 0, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[3][1]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[3][2]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[3][3]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[3][4]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[3][5]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[3][6]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[3][7]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[3][8]}, - {GORO_SPELL_R3 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroSpell[3][9]}, - {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, &AF(DoGoroMove), &s_GoroSpell[3][9]}, + {GORO_SPELL_R3 + 0, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[3][1]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[3][2]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[3][3]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[3][4]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[3][5]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[3][6]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[3][7]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[3][8]}, + {GORO_SPELL_R3 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroSpell[3][9]}, + {GORO_SPELL_R3 + 1, GORO_SPELL_RATE, DoGoroMove, &s_GoroSpell[3][9]}, }, { - {GORO_SPELL_R4 + 0, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[4][1]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[4][2]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[4][3]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[4][4]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[4][5]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, &AF(NullGoro), &s_GoroSpell[4][6]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, &AF(InitEnemyFireball), &s_GoroSpell[4][7]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_PAUSE, &AF(NullGoro), &s_GoroSpell[4][8]}, - {GORO_SPELL_R4 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_GoroSpell[4][9]}, - {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, &AF(DoGoroMove), &s_GoroSpell[4][9]}, + {GORO_SPELL_R4 + 0, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[4][1]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[4][2]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[4][3]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[4][4]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[4][5]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, NullGoro, &s_GoroSpell[4][6]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, InitEnemyFireball, &s_GoroSpell[4][7]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_PAUSE, NullGoro, &s_GoroSpell[4][8]}, + {GORO_SPELL_R4 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_GoroSpell[4][9]}, + {GORO_SPELL_R4 + 1, GORO_SPELL_RATE, DoGoroMove, &s_GoroSpell[4][9]}, } }; @@ -324,19 +328,19 @@ STATE* sg_GoroSpell[] = STATE s_GoroStand[5][1] = { { - {GORO_STAND_R0 + 0, GORO_STAND_RATE, &AF(DoGoroMove), &s_GoroStand[0][0]}, + {GORO_STAND_R0 + 0, GORO_STAND_RATE, DoGoroMove, &s_GoroStand[0][0]}, }, { - {GORO_STAND_R1 + 0, GORO_STAND_RATE, &AF(DoGoroMove), &s_GoroStand[1][0]}, + {GORO_STAND_R1 + 0, GORO_STAND_RATE, DoGoroMove, &s_GoroStand[1][0]}, }, { - {GORO_STAND_R2 + 0, GORO_STAND_RATE, &AF(DoGoroMove), &s_GoroStand[2][0]}, + {GORO_STAND_R2 + 0, GORO_STAND_RATE, DoGoroMove, &s_GoroStand[2][0]}, }, { - {GORO_STAND_R3 + 0, GORO_STAND_RATE, &AF(DoGoroMove), &s_GoroStand[3][0]}, + {GORO_STAND_R3 + 0, GORO_STAND_RATE, DoGoroMove, &s_GoroStand[3][0]}, }, { - {GORO_STAND_R4 + 0, GORO_STAND_RATE, &AF(DoGoroMove), &s_GoroStand[4][0]}, + {GORO_STAND_R4 + 0, GORO_STAND_RATE, DoGoroMove, &s_GoroStand[4][0]}, }, }; @@ -357,23 +361,24 @@ STATE* sg_GoroStand[] = ////////////////////// #define GORO_PAIN_RATE 12 +ANIMATOR DoGoroPain; STATE s_GoroPain[5][1] = { { - {GORO_PAIN_R0 + 0, GORO_PAIN_RATE, &AF(DoGoroPain), &s_GoroPain[0][0]}, + {GORO_PAIN_R0 + 0, GORO_PAIN_RATE, DoGoroPain, &s_GoroPain[0][0]}, }, { - {GORO_PAIN_R1 + 0, GORO_PAIN_RATE, &AF(DoGoroPain), &s_GoroPain[1][0]}, + {GORO_PAIN_R1 + 0, GORO_PAIN_RATE, DoGoroPain, &s_GoroPain[1][0]}, }, { - {GORO_PAIN_R2 + 0, GORO_PAIN_RATE, &AF(DoGoroPain), &s_GoroPain[2][0]}, + {GORO_PAIN_R2 + 0, GORO_PAIN_RATE, DoGoroPain, &s_GoroPain[2][0]}, }, { - {GORO_PAIN_R3 + 0, GORO_PAIN_RATE, &AF(DoGoroPain), &s_GoroPain[3][0]}, + {GORO_PAIN_R3 + 0, GORO_PAIN_RATE, DoGoroPain, &s_GoroPain[3][0]}, }, { - {GORO_PAIN_R4 + 0, GORO_PAIN_RATE, &AF(DoGoroPain), &s_GoroPain[4][0]}, + {GORO_PAIN_R4 + 0, GORO_PAIN_RATE, DoGoroPain, &s_GoroPain[4][0]}, }, }; @@ -397,22 +402,22 @@ STATE* sg_GoroPain[] = STATE s_GoroDie[] = { - {GORO_DIE + 0, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[1]}, - {GORO_DIE + 1, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[2]}, - {GORO_DIE + 2, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[3]}, - {GORO_DIE + 3, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[4]}, - {GORO_DIE + 4, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[5]}, - {GORO_DIE + 5, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[6]}, - {GORO_DIE + 6, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[7]}, - {GORO_DIE + 7, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[8]}, - {GORO_DIE + 8, GORO_DIE_RATE, &AF(NullGoro), &s_GoroDie[9]}, - {GORO_DEAD, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_GoroDie[10]}, - {GORO_DEAD, GORO_DIE_RATE, &AF(DoActorDebris), &s_GoroDie[10]}, + {GORO_DIE + 0, GORO_DIE_RATE, NullGoro, &s_GoroDie[1]}, + {GORO_DIE + 1, GORO_DIE_RATE, NullGoro, &s_GoroDie[2]}, + {GORO_DIE + 2, GORO_DIE_RATE, NullGoro, &s_GoroDie[3]}, + {GORO_DIE + 3, GORO_DIE_RATE, NullGoro, &s_GoroDie[4]}, + {GORO_DIE + 4, GORO_DIE_RATE, NullGoro, &s_GoroDie[5]}, + {GORO_DIE + 5, GORO_DIE_RATE, NullGoro, &s_GoroDie[6]}, + {GORO_DIE + 6, GORO_DIE_RATE, NullGoro, &s_GoroDie[7]}, + {GORO_DIE + 7, GORO_DIE_RATE, NullGoro, &s_GoroDie[8]}, + {GORO_DIE + 8, GORO_DIE_RATE, NullGoro, &s_GoroDie[9]}, + {GORO_DEAD, SF_QUICK_CALL, QueueFloorBlood, &s_GoroDie[10]}, + {GORO_DEAD, GORO_DIE_RATE, DoActorDebris, &s_GoroDie[10]}, }; STATE s_GoroDead[] = { - {GORO_DEAD, GORO_DIE_RATE, &AF(DoActorDebris), &s_GoroDead[0]}, + {GORO_DEAD, GORO_DIE_RATE, DoActorDebris, &s_GoroDead[0]}, }; STATE* sg_GoroDie[] = @@ -484,6 +489,8 @@ ACTOR_ACTION_SET GoroActionSet = int SetupGoro(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, GORO_RUN_R0,s_GoroRun[0]); @@ -491,10 +498,10 @@ int SetupGoro(DSWActor* actor) } ChangeState(actor, s_GoroRun[0]); - actor->user.__legacyState.Attrib = &GoroAttrib; + actor->user.Attrib = &GoroAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_GoroDie; - actor->user.__legacyState.Rot = sg_GoroRun; + actor->user.StateEnd = s_GoroDie; + actor->user.Rot = sg_GoroRun; EnemyDefaults(actor, &GoroActionSet, &GoroPersonality); @@ -504,14 +511,6 @@ int SetupGoro(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWGoro, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupGoro(self); - return 0; -} - - //--------------------------------------------------------------------------- // // @@ -558,7 +557,7 @@ int DoGoroMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); KeepActorOnFloor(actor); @@ -575,8 +574,23 @@ int DoGoroMove(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_goro_code[] = +{ + SAVE_CODE(NullGoro), + SAVE_CODE(DoGoroPain), + SAVE_CODE(DoGoroMove), +}; + static saveable_data saveable_goro_data[] = { + SAVE_DATA(GoroBattle), + SAVE_DATA(GoroOffense), + SAVE_DATA(GoroBroadcast), + SAVE_DATA(GoroSurprised), + SAVE_DATA(GoroEvasive), + SAVE_DATA(GoroLostTarget), + SAVE_DATA(GoroCloseRange), + SAVE_DATA(GoroPersonality), SAVE_DATA(GoroAttrib), @@ -602,7 +616,8 @@ static saveable_data saveable_goro_data[] = saveable_module saveable_goro = { // code - nullptr, 0, + saveable_goro_code, + SIZ(saveable_goro_code), // data saveable_goro_data, diff --git a/source/games/sw/src/hornet.cpp b/source/games/sw/src/hornet.cpp index 77b3125a440..deaeb31ac90 100644 --- a/source/games/sw/src/hornet.cpp +++ b/source/games/sw/src/hornet.cpp @@ -37,56 +37,61 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR DoHornetCircle, InitHornetCircle; + + DECISION HornetBattle[] = { - {50, &AF(InitHornetCircle ) }, - {798, &AF(InitActorMoveCloser) }, - {800, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorRunAway ) } + {50, InitHornetCircle }, + {798, InitActorMoveCloser }, + {800, InitActorAlertNoise }, + {1024, InitActorRunAway } }; DECISION HornetOffense[] = { - {1022, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorSetDecide) } + {1022, InitActorMoveCloser }, + {1024, InitActorAlertNoise } }; -DECISIONB HornetBroadcast[] = +DECISION HornetBroadcast[] = { - {3, attr_alert }, - {6, attr_ambient }, - {1024, 0 } + {3, InitActorAlertNoise }, + {6, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION HornetSurprised[] = { - {100, &AF(InitHornetCircle ) }, - {701, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorDecide ) } + {100, InitHornetCircle }, + {701, InitActorMoveCloser }, + {1024, InitActorDecide } }; DECISION HornetEvasive[] = { - {20, &AF(InitHornetCircle) }, + {20, InitHornetCircle }, {1024, nullptr }, }; DECISION HornetLostTarget[] = { - {900, &AF(InitActorFindPlayer) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION HornetCloseRange[] = { - {900, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorReposition) } + {900, InitActorMoveCloser }, + {1024, InitActorReposition } }; +ANIMATOR InitHornetSting; + DECISION HornetTouchTarget[] = { - {500, &AF(InitHornetCircle) }, - {1024, &AF(InitHornetSting ) } + {500, InitHornetCircle }, + {1024, InitHornetSting } }; PERSONALITY HornetPersonality = @@ -119,27 +124,29 @@ ATTRIBUTE HornetAttrib = #define HORNET_RUN_RATE 7 +ANIMATOR DoHornetMove,NullHornet,DoStayOnFloor, DoActorDebris, NullHornet, DoHornetBirth; + STATE s_HornetRun[5][2] = { { - {HORNET_RUN_R0 + 0, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[0][1]}, - {HORNET_RUN_R0 + 1, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[0][0]}, + {HORNET_RUN_R0 + 0, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[0][1]}, + {HORNET_RUN_R0 + 1, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[0][0]}, }, { - {HORNET_RUN_R1 + 0, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[1][1]}, - {HORNET_RUN_R1 + 1, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[1][0]}, + {HORNET_RUN_R1 + 0, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[1][1]}, + {HORNET_RUN_R1 + 1, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[1][0]}, }, { - {HORNET_RUN_R2 + 0, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[2][1]}, - {HORNET_RUN_R2 + 1, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[2][0]}, + {HORNET_RUN_R2 + 0, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[2][1]}, + {HORNET_RUN_R2 + 1, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[2][0]}, }, { - {HORNET_RUN_R3 + 0, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[3][1]}, - {HORNET_RUN_R3 + 1, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[3][0]}, + {HORNET_RUN_R3 + 0, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[3][1]}, + {HORNET_RUN_R3 + 1, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[3][0]}, }, { - {HORNET_RUN_R4 + 0, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[4][1]}, - {HORNET_RUN_R4 + 1, HORNET_RUN_RATE, &AF(DoHornetMove), &s_HornetRun[4][0]}, + {HORNET_RUN_R4 + 0, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[4][1]}, + {HORNET_RUN_R4 + 1, HORNET_RUN_RATE, DoHornetMove, &s_HornetRun[4][0]}, } }; @@ -163,24 +170,24 @@ STATE* sg_HornetRun[] = STATE s_HornetStand[5][2] = { { - {HORNET_RUN_R0 + 0, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[0][1]}, - {HORNET_RUN_R0 + 1, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[0][0]} + {HORNET_RUN_R0 + 0, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[0][1]}, + {HORNET_RUN_R0 + 1, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[0][0]} }, { - {HORNET_RUN_R1 + 0, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[1][1]}, - {HORNET_RUN_R1 + 1, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[1][0]} + {HORNET_RUN_R1 + 0, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[1][1]}, + {HORNET_RUN_R1 + 1, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[1][0]} }, { - {HORNET_RUN_R2 + 0, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[2][1]}, - {HORNET_RUN_R2 + 1, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[2][0]} + {HORNET_RUN_R2 + 0, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[2][1]}, + {HORNET_RUN_R2 + 1, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[2][0]} }, { - {HORNET_RUN_R3 + 0, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[3][1]}, - {HORNET_RUN_R3 + 1, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[3][0]} + {HORNET_RUN_R3 + 0, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[3][1]}, + {HORNET_RUN_R3 + 1, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[3][0]} }, { - {HORNET_RUN_R4 + 0, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[4][1]}, - {HORNET_RUN_R4 + 1, HORNET_STAND_RATE, &AF(DoHornetMove), &s_HornetStand[4][0]} + {HORNET_RUN_R4 + 0, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[4][1]}, + {HORNET_RUN_R4 + 1, HORNET_STAND_RATE, DoHornetMove, &s_HornetStand[4][0]} } }; @@ -200,9 +207,15 @@ STATE* sg_HornetStand[] = ////////////////////// #define HORNET_DIE_RATE 20 +ANIMATOR DoHornetDeath; STATE s_HornetDie[] = { - {HORNET_DIE + 0, HORNET_DIE_RATE, &AF(DoHornetDeath), &s_HornetDie[0]}, +#if 0 + {HORNET_DIE + 0, HORNET_DIE_RATE, NullHornet, &s_HornetDie[1]}, + {HORNET_DEAD, HORNET_DIE_RATE, DoActorDebris, &s_HornetDie[1]}, +#else + {HORNET_DIE + 0, HORNET_DIE_RATE, DoHornetDeath, &s_HornetDie[0]}, +#endif }; STATE* sg_HornetDie[] = @@ -212,7 +225,7 @@ STATE* sg_HornetDie[] = STATE s_HornetDead[] = { - {HORNET_DEAD, HORNET_DIE_RATE, &AF(DoActorDebris), &s_HornetDead[0]}, + {HORNET_DEAD, HORNET_DIE_RATE, DoActorDebris, &s_HornetDead[0]}, }; STATE* sg_HornetDead[] = @@ -282,6 +295,8 @@ int DoHornetMatchPlayerZ(DSWActor* actor); int SetupHornet(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,HORNET_RUN_R0,s_HornetRun[0]); @@ -289,10 +304,10 @@ int SetupHornet(DSWActor* actor) } ChangeState(actor, s_HornetRun[0]); - actor->user.__legacyState.Attrib = &HornetAttrib; + actor->user.Attrib = &HornetAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_HornetDie; - actor->user.__legacyState.Rot = sg_HornetRun; + actor->user.StateEnd = s_HornetDie; + actor->user.Rot = sg_HornetRun; EnemyDefaults(actor, &HornetActionSet, &HornetPersonality); @@ -313,13 +328,6 @@ int SetupHornet(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWHornet, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupHornet(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -420,9 +428,9 @@ int DoHornetMatchPlayerZ(DSWActor* actor) int InitHornetCircle(DSWActor* actor) { - actor->user.ActorActionFunc = AF(DoHornetCircle); + actor->user.ActorActionFunc = DoHornetCircle; - actor->setStateGroup(NAME_Run); + NewStateGroup(actor, actor->user.ActorActionSet->Run); // set it close DoActorSetSpeed(actor, FAST_SPEED); @@ -442,7 +450,7 @@ int InitHornetCircle(DSWActor* actor) actor->user.WaitTics = (RandomRange(3)+1) * 60; - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); return 0; } @@ -534,7 +542,7 @@ int DoHornetDeath(DSWActor* actor) { actor->user.Flags &= ~(SPR_FALLING|SPR_SLIDING); actor->spr.cstat &= ~(CSTAT_SPRITE_YFLIP); // If upside down, reset it - actor->setStateGroup(NAME_Dead); + NewStateGroup(actor, actor->user.ActorActionSet->Dead); DeleteNoSoundOwner(actor); return 0; } @@ -608,7 +616,7 @@ int DoHornetMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); DoHornetMatchPlayerZ(actor); @@ -626,8 +634,27 @@ int DoHornetMove(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_hornet_code[] = +{ + SAVE_CODE(NullHornet), + SAVE_CODE(DoHornetMatchPlayerZ), + SAVE_CODE(InitHornetCircle), + SAVE_CODE(DoHornetCircle), + SAVE_CODE(DoHornetDeath), + SAVE_CODE(DoCheckSwarm), + SAVE_CODE(DoHornetMove), +}; + static saveable_data saveable_hornet_data[] = { + SAVE_DATA(HornetBattle), + SAVE_DATA(HornetOffense), + SAVE_DATA(HornetBroadcast), + SAVE_DATA(HornetSurprised), + SAVE_DATA(HornetEvasive), + SAVE_DATA(HornetLostTarget), + SAVE_DATA(HornetCloseRange), + SAVE_DATA(HornetTouchTarget), SAVE_DATA(HornetPersonality), @@ -648,7 +675,8 @@ static saveable_data saveable_hornet_data[] = saveable_module saveable_hornet = { // code - nullptr, 0, + saveable_hornet_code, + SIZ(saveable_hornet_code), // data saveable_hornet_data, diff --git a/source/games/sw/src/jsector.cpp b/source/games/sw/src/jsector.cpp index 6fc27bdebd8..bc32f35b617 100644 --- a/source/games/sw/src/jsector.cpp +++ b/source/games/sw/src/jsector.cpp @@ -62,6 +62,8 @@ uint32_t oscilationclock; // Voxel stuff //bool bVoxelsOn = true; // Turn voxels on by default bool bSpinBobVoxels = false; // Do twizzly stuff to voxels, but +// not by default +bool bAutoSize = true; // Autosizing on/off //extern int chainnumpages; extern AMB_INFO ambarray[]; @@ -133,6 +135,8 @@ short CheckTileSound(short picnum) return sndnum; } +ANIMATOR GenerateDrips; + ///////////////////////////////////////////////////// // Initialize any of my special use sprites ///////////////////////////////////////////////////// @@ -178,10 +182,10 @@ void JS_SpriteSetup(void) { SpawnUser(itActor, 0, nullptr); - itActor->user.__legacyState.RotNum = 0; + itActor->user.RotNum = 0; itActor->user.WaitTics = itActor->spr.lotag * 120; - itActor->user.ActorActionFunc = AF(GenerateDrips); + itActor->user.ActorActionFunc = GenerateDrips; change_actor_stat(itActor, STAT_NO_STATE); itActor->spr.cstat |= CSTAT_SPRITE_INVISIBLE; @@ -605,6 +609,9 @@ void GameInterface::LeavePortal(DCoreActor* viewer, int type) void DoAutoSize(tspritetype* tspr) { + if (!bAutoSize) + return; + switch (tspr->picnum) { case ICON_STAR: // 1793 diff --git a/source/games/sw/src/jweapon.cpp b/source/games/sw/src/jweapon.cpp index 52a634a0be6..96762e0bb22 100644 --- a/source/games/sw/src/jweapon.cpp +++ b/source/games/sw/src/jweapon.cpp @@ -43,8 +43,11 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR DoSuicide; +ANIMATOR DoBloodSpray; void SpawnFlashBombOnActor(DSWActor* actor); +ANIMATOR DoPuff, BloodSprayFall; extern STATE s_Puff[]; extern STATE s_FireballFlames[]; extern STATE s_GoreFloorSplash[]; @@ -58,90 +61,92 @@ extern bool GlobalSkipZrange; STATE s_BloodSpray[] = { - {GOREDrip + 0, BLOODSPRAY_RATE, &AF(BloodSprayFall), &s_BloodSpray[1]}, - {GOREDrip + 1, BLOODSPRAY_RATE, &AF(BloodSprayFall), &s_BloodSpray[2]}, - {GOREDrip + 2, BLOODSPRAY_RATE, &AF(BloodSprayFall), &s_BloodSpray[3]}, - {GOREDrip + 3, BLOODSPRAY_RATE, &AF(BloodSprayFall), &s_BloodSpray[4]}, - {GOREDrip + 3, 100, &AF(DoSuicide), &s_BloodSpray[0]} + {GOREDrip + 0, BLOODSPRAY_RATE, BloodSprayFall, &s_BloodSpray[1]}, + {GOREDrip + 1, BLOODSPRAY_RATE, BloodSprayFall, &s_BloodSpray[2]}, + {GOREDrip + 2, BLOODSPRAY_RATE, BloodSprayFall, &s_BloodSpray[3]}, + {GOREDrip + 3, BLOODSPRAY_RATE, BloodSprayFall, &s_BloodSpray[4]}, + {GOREDrip + 3, 100, DoSuicide, &s_BloodSpray[0]} }; #define EXP_RATE 2 STATE s_PhosphorExp[] = { - {EXP + 0, EXP_RATE, nullptr, &s_PhosphorExp[1]}, - {EXP + 1, EXP_RATE, nullptr, &s_PhosphorExp[2]}, - {EXP + 2, EXP_RATE, nullptr, &s_PhosphorExp[3]}, - {EXP + 3, EXP_RATE, nullptr, &s_PhosphorExp[4]}, - {EXP + 4, EXP_RATE, nullptr, &s_PhosphorExp[5]}, - {EXP + 5, EXP_RATE, nullptr, &s_PhosphorExp[6]}, - {EXP + 6, EXP_RATE, nullptr, &s_PhosphorExp[7]}, - {EXP + 7, EXP_RATE, nullptr, &s_PhosphorExp[8]}, - {EXP + 8, EXP_RATE, nullptr, &s_PhosphorExp[9]}, - {EXP + 9, EXP_RATE, nullptr, &s_PhosphorExp[10]}, - {EXP + 10, EXP_RATE, nullptr, &s_PhosphorExp[11]}, - {EXP + 11, EXP_RATE, nullptr, &s_PhosphorExp[12]}, - {EXP + 12, EXP_RATE, nullptr, &s_PhosphorExp[13]}, - {EXP + 13, EXP_RATE, nullptr, &s_PhosphorExp[14]}, - {EXP + 14, EXP_RATE, nullptr, &s_PhosphorExp[15]}, - {EXP + 15, EXP_RATE, nullptr, &s_PhosphorExp[16]}, - {EXP + 16, EXP_RATE, nullptr, &s_PhosphorExp[17]}, - {EXP + 17, EXP_RATE, nullptr, &s_PhosphorExp[18]}, - {EXP + 18, EXP_RATE, nullptr, &s_PhosphorExp[19]}, - {EXP + 19, EXP_RATE, nullptr, &s_PhosphorExp[20]}, - {EXP + 20, 100, &AF(DoSuicide), &s_PhosphorExp[0]} + {EXP + 0, EXP_RATE, NullAnimator, &s_PhosphorExp[1]}, + {EXP + 1, EXP_RATE, NullAnimator, &s_PhosphorExp[2]}, + {EXP + 2, EXP_RATE, NullAnimator, &s_PhosphorExp[3]}, + {EXP + 3, EXP_RATE, NullAnimator, &s_PhosphorExp[4]}, + {EXP + 4, EXP_RATE, NullAnimator, &s_PhosphorExp[5]}, + {EXP + 5, EXP_RATE, NullAnimator, &s_PhosphorExp[6]}, + {EXP + 6, EXP_RATE, NullAnimator, &s_PhosphorExp[7]}, + {EXP + 7, EXP_RATE, NullAnimator, &s_PhosphorExp[8]}, + {EXP + 8, EXP_RATE, NullAnimator, &s_PhosphorExp[9]}, + {EXP + 9, EXP_RATE, NullAnimator, &s_PhosphorExp[10]}, + {EXP + 10, EXP_RATE, NullAnimator, &s_PhosphorExp[11]}, + {EXP + 11, EXP_RATE, NullAnimator, &s_PhosphorExp[12]}, + {EXP + 12, EXP_RATE, NullAnimator, &s_PhosphorExp[13]}, + {EXP + 13, EXP_RATE, NullAnimator, &s_PhosphorExp[14]}, + {EXP + 14, EXP_RATE, NullAnimator, &s_PhosphorExp[15]}, + {EXP + 15, EXP_RATE, NullAnimator, &s_PhosphorExp[16]}, + {EXP + 16, EXP_RATE, NullAnimator, &s_PhosphorExp[17]}, + {EXP + 17, EXP_RATE, NullAnimator, &s_PhosphorExp[18]}, + {EXP + 18, EXP_RATE, NullAnimator, &s_PhosphorExp[19]}, + {EXP + 19, EXP_RATE, NullAnimator, &s_PhosphorExp[20]}, + {EXP + 20, 100, DoSuicide, &s_PhosphorExp[0]} }; #define MUSHROOM_RATE 25 STATE s_NukeMushroom[] = { - {MUSHROOM_CLOUD + 0, MUSHROOM_RATE, nullptr, &s_NukeMushroom[1]}, - {MUSHROOM_CLOUD + 1, MUSHROOM_RATE, nullptr, &s_NukeMushroom[2]}, - {MUSHROOM_CLOUD + 2, MUSHROOM_RATE, nullptr, &s_NukeMushroom[3]}, - {MUSHROOM_CLOUD + 3, MUSHROOM_RATE, nullptr, &s_NukeMushroom[4]}, - {MUSHROOM_CLOUD + 4, MUSHROOM_RATE, nullptr, &s_NukeMushroom[5]}, - {MUSHROOM_CLOUD + 5, MUSHROOM_RATE, nullptr, &s_NukeMushroom[6]}, - {MUSHROOM_CLOUD + 6, MUSHROOM_RATE, nullptr, &s_NukeMushroom[7]}, - {MUSHROOM_CLOUD + 7, MUSHROOM_RATE, nullptr, &s_NukeMushroom[8]}, - {MUSHROOM_CLOUD + 8, MUSHROOM_RATE, nullptr, &s_NukeMushroom[9]}, - {MUSHROOM_CLOUD + 9, MUSHROOM_RATE, nullptr, &s_NukeMushroom[10]}, - {MUSHROOM_CLOUD + 10, MUSHROOM_RATE, nullptr, &s_NukeMushroom[11]}, - {MUSHROOM_CLOUD + 11, MUSHROOM_RATE, nullptr, &s_NukeMushroom[12]}, - {MUSHROOM_CLOUD + 12, MUSHROOM_RATE, nullptr, &s_NukeMushroom[13]}, - {MUSHROOM_CLOUD + 13, MUSHROOM_RATE, nullptr, &s_NukeMushroom[14]}, - {MUSHROOM_CLOUD + 14, MUSHROOM_RATE, nullptr, &s_NukeMushroom[15]}, - {MUSHROOM_CLOUD + 15, MUSHROOM_RATE, nullptr, &s_NukeMushroom[16]}, - {MUSHROOM_CLOUD + 16, MUSHROOM_RATE, nullptr, &s_NukeMushroom[17]}, - {MUSHROOM_CLOUD + 17, MUSHROOM_RATE, nullptr, &s_NukeMushroom[18]}, - {MUSHROOM_CLOUD + 18, MUSHROOM_RATE, nullptr, &s_NukeMushroom[19]}, - {MUSHROOM_CLOUD + 19, 100, &AF(DoSuicide), &s_NukeMushroom[0]}, + {MUSHROOM_CLOUD + 0, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[1]}, + {MUSHROOM_CLOUD + 1, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[2]}, + {MUSHROOM_CLOUD + 2, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[3]}, + {MUSHROOM_CLOUD + 3, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[4]}, + {MUSHROOM_CLOUD + 4, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[5]}, + {MUSHROOM_CLOUD + 5, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[6]}, + {MUSHROOM_CLOUD + 6, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[7]}, + {MUSHROOM_CLOUD + 7, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[8]}, + {MUSHROOM_CLOUD + 8, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[9]}, + {MUSHROOM_CLOUD + 9, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[10]}, + {MUSHROOM_CLOUD + 10, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[11]}, + {MUSHROOM_CLOUD + 11, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[12]}, + {MUSHROOM_CLOUD + 12, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[13]}, + {MUSHROOM_CLOUD + 13, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[14]}, + {MUSHROOM_CLOUD + 14, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[15]}, + {MUSHROOM_CLOUD + 15, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[16]}, + {MUSHROOM_CLOUD + 16, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[17]}, + {MUSHROOM_CLOUD + 17, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[18]}, + {MUSHROOM_CLOUD + 18, MUSHROOM_RATE, NullAnimator, &s_NukeMushroom[19]}, + {MUSHROOM_CLOUD + 19, 100, DoSuicide, &s_NukeMushroom[0]}, }; +ANIMATOR DoRadiationCloud; + #define RADIATION_RATE 16 STATE s_RadiationCloud[] = { - {RADIATION_CLOUD + 0, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[1]}, - {RADIATION_CLOUD + 1, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[2]}, - {RADIATION_CLOUD + 2, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[3]}, - {RADIATION_CLOUD + 3, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[4]}, - {RADIATION_CLOUD + 4, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[5]}, - {RADIATION_CLOUD + 5, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[6]}, - {RADIATION_CLOUD + 6, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[7]}, - {RADIATION_CLOUD + 7, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[8]}, - {RADIATION_CLOUD + 8, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[9]}, - {RADIATION_CLOUD + 9, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[10]}, - {RADIATION_CLOUD + 10, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[11]}, - {RADIATION_CLOUD + 11, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[12]}, - {RADIATION_CLOUD + 12, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[13]}, - {RADIATION_CLOUD + 13, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[14]}, - {RADIATION_CLOUD + 14, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[15]}, - {RADIATION_CLOUD + 15, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[16]}, - {RADIATION_CLOUD + 16, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[17]}, - {RADIATION_CLOUD + 17, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[18]}, - {RADIATION_CLOUD + 18, RADIATION_RATE, &AF(DoRadiationCloud), &s_RadiationCloud[19]}, - {RADIATION_CLOUD + 19, 100, &AF(DoSuicide), &s_RadiationCloud[0]}, + {RADIATION_CLOUD + 0, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[1]}, + {RADIATION_CLOUD + 1, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[2]}, + {RADIATION_CLOUD + 2, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[3]}, + {RADIATION_CLOUD + 3, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[4]}, + {RADIATION_CLOUD + 4, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[5]}, + {RADIATION_CLOUD + 5, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[6]}, + {RADIATION_CLOUD + 6, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[7]}, + {RADIATION_CLOUD + 7, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[8]}, + {RADIATION_CLOUD + 8, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[9]}, + {RADIATION_CLOUD + 9, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[10]}, + {RADIATION_CLOUD + 10, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[11]}, + {RADIATION_CLOUD + 11, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[12]}, + {RADIATION_CLOUD + 12, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[13]}, + {RADIATION_CLOUD + 13, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[14]}, + {RADIATION_CLOUD + 14, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[15]}, + {RADIATION_CLOUD + 15, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[16]}, + {RADIATION_CLOUD + 16, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[17]}, + {RADIATION_CLOUD + 17, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[18]}, + {RADIATION_CLOUD + 18, RADIATION_RATE, DoRadiationCloud, &s_RadiationCloud[19]}, + {RADIATION_CLOUD + 19, 100, DoSuicide, &s_RadiationCloud[0]}, }; #define CHEMBOMB_FRAMES 1 @@ -153,14 +158,15 @@ STATE s_RadiationCloud[] = #define CHEMBOMB CHEMBOMB_R0 #define CHEMBOMB_RATE 8 +ANIMATOR DoChemBomb; STATE s_ChemBomb[5] = { - {CHEMBOMB_R0 + 0, CHEMBOMB_RATE, &AF(DoChemBomb), &s_ChemBomb[1]}, - {CHEMBOMB_R1 + 0, CHEMBOMB_RATE, &AF(DoChemBomb), &s_ChemBomb[2]}, - {CHEMBOMB_R2 + 0, CHEMBOMB_RATE, &AF(DoChemBomb), &s_ChemBomb[3]}, - {CHEMBOMB_R3 + 0, CHEMBOMB_RATE, &AF(DoChemBomb), &s_ChemBomb[4]}, - {CHEMBOMB_R4 + 0, CHEMBOMB_RATE, &AF(DoChemBomb), &s_ChemBomb[0]}, + {CHEMBOMB_R0 + 0, CHEMBOMB_RATE, DoChemBomb, &s_ChemBomb[1]}, + {CHEMBOMB_R1 + 0, CHEMBOMB_RATE, DoChemBomb, &s_ChemBomb[2]}, + {CHEMBOMB_R2 + 0, CHEMBOMB_RATE, DoChemBomb, &s_ChemBomb[3]}, + {CHEMBOMB_R3 + 0, CHEMBOMB_RATE, DoChemBomb, &s_ChemBomb[4]}, + {CHEMBOMB_R4 + 0, CHEMBOMB_RATE, DoChemBomb, &s_ChemBomb[0]}, }; @@ -169,16 +175,18 @@ STATE s_ChemBomb[5] = #define CALTROPS_RATE 8 +ANIMATOR DoCaltrops, DoCaltropsStick; + STATE s_Caltrops[] = { - {CALTROPS_R0 + 0, CALTROPS_RATE, &AF(DoCaltrops), &s_Caltrops[1]}, - {CALTROPS_R0 + 1, CALTROPS_RATE, &AF(DoCaltrops), &s_Caltrops[2]}, - {CALTROPS_R0 + 2, CALTROPS_RATE, &AF(DoCaltrops), &s_Caltrops[0]}, + {CALTROPS_R0 + 0, CALTROPS_RATE, DoCaltrops, &s_Caltrops[1]}, + {CALTROPS_R0 + 1, CALTROPS_RATE, DoCaltrops, &s_Caltrops[2]}, + {CALTROPS_R0 + 2, CALTROPS_RATE, DoCaltrops, &s_Caltrops[0]}, }; STATE s_CaltropsStick[] = { - {CALTROPS_R0 + 2, CALTROPS_RATE, &AF(DoCaltropsStick), &s_CaltropsStick[0]}, + {CALTROPS_R0 + 2, CALTROPS_RATE, DoCaltropsStick, &s_CaltropsStick[0]}, }; ////////////////////// @@ -187,56 +195,63 @@ STATE s_CaltropsStick[] = // ////////////////////// +ANIMATOR DoFlag, DoCarryFlag, DoCarryFlagNoDet; + #undef FLAG #define FLAG 2520 #define FLAG_RATE 16 STATE s_CarryFlag[] = { - {FLAG + 0, FLAG_RATE, &AF(DoCarryFlag), &s_CarryFlag[1]}, - {FLAG + 1, FLAG_RATE, &AF(DoCarryFlag), &s_CarryFlag[2]}, - {FLAG + 2, FLAG_RATE, &AF(DoCarryFlag), &s_CarryFlag[0]} + {FLAG + 0, FLAG_RATE, DoCarryFlag, &s_CarryFlag[1]}, + {FLAG + 1, FLAG_RATE, DoCarryFlag, &s_CarryFlag[2]}, + {FLAG + 2, FLAG_RATE, DoCarryFlag, &s_CarryFlag[0]} }; STATE s_CarryFlagNoDet[] = { - {FLAG + 0, FLAG_RATE, &AF(DoCarryFlagNoDet), &s_CarryFlagNoDet[1]}, - {FLAG + 1, FLAG_RATE, &AF(DoCarryFlagNoDet), &s_CarryFlagNoDet[2]}, - {FLAG + 2, FLAG_RATE, &AF(DoCarryFlagNoDet), &s_CarryFlagNoDet[0]} + {FLAG + 0, FLAG_RATE, DoCarryFlagNoDet, &s_CarryFlagNoDet[1]}, + {FLAG + 1, FLAG_RATE, DoCarryFlagNoDet, &s_CarryFlagNoDet[2]}, + {FLAG + 2, FLAG_RATE, DoCarryFlagNoDet, &s_CarryFlagNoDet[0]} }; STATE s_Flag[] = { - {FLAG + 0, FLAG_RATE, &AF(DoFlag), &s_Flag[1]}, - {FLAG + 1, FLAG_RATE, &AF(DoFlag), &s_Flag[2]}, - {FLAG + 2, FLAG_RATE, &AF(DoFlag), &s_Flag[0]} + {FLAG + 0, FLAG_RATE, DoFlag, &s_Flag[1]}, + {FLAG + 1, FLAG_RATE, DoFlag, &s_Flag[2]}, + {FLAG + 2, FLAG_RATE, DoFlag, &s_Flag[0]} }; #define PHOSPHORUS_RATE 8 +ANIMATOR DoPhosphorus; STATE s_Phosphorus[] = { - {PHOSPHORUS + 0, PHOSPHORUS_RATE, &AF(DoPhosphorus), &s_Phosphorus[1]}, - {PHOSPHORUS + 1, PHOSPHORUS_RATE, &AF(DoPhosphorus), &s_Phosphorus[0]}, + {PHOSPHORUS + 0, PHOSPHORUS_RATE, DoPhosphorus, &s_Phosphorus[1]}, + {PHOSPHORUS + 1, PHOSPHORUS_RATE, DoPhosphorus, &s_Phosphorus[0]}, }; +ANIMATOR DoBloodSpray; + #define CHUNK1 1685 STATE s_BloodSprayChunk[] = { - {CHUNK1 + 0, 8, &AF(DoBloodSpray), &s_BloodSprayChunk[1]}, - {CHUNK1 + 1, 8, &AF(DoBloodSpray), &s_BloodSprayChunk[2]}, - {CHUNK1 + 2, 8, &AF(DoBloodSpray), &s_BloodSprayChunk[3]}, - {CHUNK1 + 3, 8, &AF(DoBloodSpray), &s_BloodSprayChunk[4]}, - {CHUNK1 + 4, 8, &AF(DoBloodSpray), &s_BloodSprayChunk[5]}, - {CHUNK1 + 5, 8, &AF(DoBloodSpray), &s_BloodSprayChunk[0]}, + {CHUNK1 + 0, 8, DoBloodSpray, &s_BloodSprayChunk[1]}, + {CHUNK1 + 1, 8, DoBloodSpray, &s_BloodSprayChunk[2]}, + {CHUNK1 + 2, 8, DoBloodSpray, &s_BloodSprayChunk[3]}, + {CHUNK1 + 3, 8, DoBloodSpray, &s_BloodSprayChunk[4]}, + {CHUNK1 + 4, 8, DoBloodSpray, &s_BloodSprayChunk[5]}, + {CHUNK1 + 5, 8, DoBloodSpray, &s_BloodSprayChunk[0]}, }; +ANIMATOR DoWallBloodDrip; + #define DRIP 1566 STATE s_BloodSprayDrip[] = { - {DRIP + 0, PHOSPHORUS_RATE, &AF(DoWallBloodDrip), &s_BloodSprayDrip[1]}, - {DRIP + 1, PHOSPHORUS_RATE, &AF(DoWallBloodDrip), &s_BloodSprayDrip[2]}, - {DRIP + 2, PHOSPHORUS_RATE, &AF(DoWallBloodDrip), &s_BloodSprayDrip[0]}, + {DRIP + 0, PHOSPHORUS_RATE, DoWallBloodDrip, &s_BloodSprayDrip[1]}, + {DRIP + 1, PHOSPHORUS_RATE, DoWallBloodDrip, &s_BloodSprayDrip[2]}, + {DRIP + 2, PHOSPHORUS_RATE, DoWallBloodDrip, &s_BloodSprayDrip[0]}, }; //--------------------------------------------------------------------------- @@ -1253,6 +1268,7 @@ int PlayerInitChemBomb(DSWPlayer* pp) actorNew->vel.X *= 0.75; } +// actorNew->user.RotNum = 5; actorNew->user.Flags |= (SPR_XFLIP_TOGGLE); SetOwner(pp->GetActor(), actorNew); @@ -1275,7 +1291,7 @@ int PlayerInitChemBomb(DSWPlayer* pp) plActor->clipdist = 0; actorNew->clipdist = 0; - MissileSetPos(actorNew, AF(DoChemBomb), 1000); + MissileSetPos(actorNew, DoChemBomb, 1000); plActor->clipdist = oclipdist; actorNew->clipdist = 5; @@ -1645,7 +1661,7 @@ int PlayerInitCaltrops(DSWPlayer* pp) plActor->clipdist = 0; actorNew->clipdist = 0; - MissileSetPos(actorNew, AF(DoCaltrops), 1000); + MissileSetPos(actorNew, DoCaltrops, 1000); plActor->clipdist = oclipdist; actorNew->clipdist = 5; diff --git a/source/games/sw/src/lava.cpp b/source/games/sw/src/lava.cpp index bb7c647d805..f0603e4bf9e 100644 --- a/source/games/sw/src/lava.cpp +++ b/source/games/sw/src/lava.cpp @@ -38,48 +38,48 @@ BEGIN_SW_NS DECISION LavaBattle[] = { - {600, &AF(InitActorMoveCloser) }, - {700, &AF(InitActorSetDecide) }, - {710, &AF(InitActorRunAway ) }, - {1024, &AF(InitActorAttack ) } + {600, InitActorMoveCloser }, + {700, InitActorAlertNoise }, + {710, InitActorRunAway }, + {1024, InitActorAttack } }; DECISION LavaOffense[] = { - {700, &AF(InitActorMoveCloser) }, - {800, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {700, InitActorMoveCloser }, + {800, InitActorAlertNoise }, + {1024, InitActorAttack } }; -DECISIONB LavaBroadcast[] = +DECISION LavaBroadcast[] = { - {21, attr_alert }, - {51, attr_ambient }, - {1024, 0 } + {21, InitActorAlertNoise }, + {51, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION LavaSurprised[] = { - {701, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorDecide ) } + {701, InitActorMoveCloser }, + {1024, InitActorDecide } }; DECISION LavaEvasive[] = { - {10, &AF(InitActorEvade) }, + {10, InitActorEvade }, {1024, nullptr } }; DECISION LavaLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION LavaCloseRange[] = { - {700, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {700, InitActorAttack }, + {1024, InitActorReposition } }; PERSONALITY LavaPersonality = @@ -127,22 +127,24 @@ ATTRIBUTE LavaPissedAttrib = ////////////////////// #define LAVA_STAND_RATE 12 +ANIMATOR DoLavaMove,NullLava,DoActorDebris,NullLava; + STATE s_LavaStand[5][1] = { { - {LAVA_RUN_R0 + 0, LAVA_STAND_RATE, &AF(DoLavaMove), &s_LavaStand[0][0]}, + {LAVA_RUN_R0 + 0, LAVA_STAND_RATE, DoLavaMove, &s_LavaStand[0][0]}, }, { - {LAVA_RUN_R1 + 0, LAVA_STAND_RATE, &AF(DoLavaMove), &s_LavaStand[1][0]}, + {LAVA_RUN_R1 + 0, LAVA_STAND_RATE, DoLavaMove, &s_LavaStand[1][0]}, }, { - {LAVA_RUN_R2 + 0, LAVA_STAND_RATE, &AF(DoLavaMove), &s_LavaStand[2][0]}, + {LAVA_RUN_R2 + 0, LAVA_STAND_RATE, DoLavaMove, &s_LavaStand[2][0]}, }, { - {LAVA_RUN_R3 + 0, LAVA_STAND_RATE, &AF(DoLavaMove), &s_LavaStand[3][0]}, + {LAVA_RUN_R3 + 0, LAVA_STAND_RATE, DoLavaMove, &s_LavaStand[3][0]}, }, { - {LAVA_RUN_R4 + 0, LAVA_STAND_RATE, &AF(DoLavaMove), &s_LavaStand[4][0]}, + {LAVA_RUN_R4 + 0, LAVA_STAND_RATE, DoLavaMove, &s_LavaStand[4][0]}, }, }; @@ -169,34 +171,34 @@ STATE* sg_LavaStand[] = STATE s_LavaRun[5][4] = { { - {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[0][1]}, - {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[0][2]}, - {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[0][3]}, - {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[0][0]}, + {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[0][1]}, + {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[0][2]}, + {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[0][3]}, + {LAVA_RUN_R0 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[0][0]}, }, { - {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[1][1]}, - {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[1][2]}, - {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[1][3]}, - {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[1][0]}, + {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[1][1]}, + {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[1][2]}, + {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[1][3]}, + {LAVA_RUN_R1 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[1][0]}, }, { - {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[2][1]}, - {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[2][2]}, - {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[2][3]}, - {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[2][0]}, + {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[2][1]}, + {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[2][2]}, + {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[2][3]}, + {LAVA_RUN_R2 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[2][0]}, }, { - {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[3][1]}, - {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[3][2]}, - {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[3][3]}, - {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[3][0]}, + {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[3][1]}, + {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[3][2]}, + {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[3][3]}, + {LAVA_RUN_R3 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[3][0]}, }, { - {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[4][1]}, - {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[4][2]}, - {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[4][3]}, - {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, &AF(DoLavaMove), &s_LavaRun[4][0]}, + {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[4][1]}, + {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[4][2]}, + {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[4][3]}, + {LAVA_RUN_R4 + 0, LAVA_RUN_RATE, DoLavaMove, &s_LavaRun[4][0]}, } }; @@ -217,68 +219,70 @@ STATE* sg_LavaRun[] = ////////////////////// #define LAVA_THROW_RATE 9 +ANIMATOR InitActorDecide; +ANIMATOR InitLavaThrow; STATE s_LavaThrow[5][10] = { { - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[0][1]}, - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[0][2]}, - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE*2, &AF(NullLava), &s_LavaThrow[0][3]}, - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[0][4]}, - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[0][5]}, - {LAVA_THROW_R0 + 0, SF_QUICK_CALL, &AF(InitLavaThrow), &s_LavaThrow[0][6]}, - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[0][7]}, - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[0][8]}, - {LAVA_THROW_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaThrow[0][9]}, - {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, &AF(DoLavaMove), &s_LavaThrow[0][9]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[0][1]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[0][2]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE*2, NullLava, &s_LavaThrow[0][3]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[0][4]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[0][5]}, + {LAVA_THROW_R0 + 0, SF_QUICK_CALL, InitLavaThrow, &s_LavaThrow[0][6]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[0][7]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[0][8]}, + {LAVA_THROW_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_LavaThrow[0][9]}, + {LAVA_THROW_R0 + 0, LAVA_THROW_RATE, DoLavaMove, &s_LavaThrow[0][9]}, }, { - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[1][1]}, - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[1][2]}, - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE*2, &AF(NullLava), &s_LavaThrow[1][3]}, - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[1][4]}, - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[1][5]}, - {LAVA_THROW_R1 + 0, SF_QUICK_CALL, &AF(InitLavaThrow), &s_LavaThrow[1][6]}, - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[1][7]}, - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[1][8]}, - {LAVA_THROW_R1 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaThrow[1][9]}, - {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, &AF(DoLavaMove), &s_LavaThrow[1][9]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[1][1]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[1][2]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE*2, NullLava, &s_LavaThrow[1][3]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[1][4]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[1][5]}, + {LAVA_THROW_R1 + 0, SF_QUICK_CALL, InitLavaThrow, &s_LavaThrow[1][6]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[1][7]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[1][8]}, + {LAVA_THROW_R1 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_LavaThrow[1][9]}, + {LAVA_THROW_R1 + 0, LAVA_THROW_RATE, DoLavaMove, &s_LavaThrow[1][9]}, }, { - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[2][1]}, - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[2][2]}, - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE*2, &AF(NullLava), &s_LavaThrow[2][3]}, - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[2][4]}, - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[2][5]}, - {LAVA_THROW_R2 + 0, SF_QUICK_CALL, &AF(InitLavaThrow), &s_LavaThrow[2][6]}, - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[2][7]}, - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[2][8]}, - {LAVA_THROW_R2 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaThrow[2][9]}, - {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, &AF(DoLavaMove), &s_LavaThrow[2][9]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[2][1]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[2][2]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE*2, NullLava, &s_LavaThrow[2][3]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[2][4]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[2][5]}, + {LAVA_THROW_R2 + 0, SF_QUICK_CALL, InitLavaThrow, &s_LavaThrow[2][6]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[2][7]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[2][8]}, + {LAVA_THROW_R2 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_LavaThrow[2][9]}, + {LAVA_THROW_R2 + 0, LAVA_THROW_RATE, DoLavaMove, &s_LavaThrow[2][9]}, }, { - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[3][1]}, - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[3][2]}, - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE*2, &AF(NullLava), &s_LavaThrow[3][3]}, - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[3][4]}, - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[3][5]}, - {LAVA_THROW_R3 + 0, SF_QUICK_CALL, &AF(InitLavaThrow), &s_LavaThrow[3][6]}, - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[3][7]}, - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[3][8]}, - {LAVA_THROW_R3 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaThrow[3][9]}, - {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, &AF(DoLavaMove), &s_LavaThrow[3][9]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[3][1]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[3][2]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE*2, NullLava, &s_LavaThrow[3][3]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[3][4]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[3][5]}, + {LAVA_THROW_R3 + 0, SF_QUICK_CALL, InitLavaThrow, &s_LavaThrow[3][6]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[3][7]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[3][8]}, + {LAVA_THROW_R3 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_LavaThrow[3][9]}, + {LAVA_THROW_R3 + 0, LAVA_THROW_RATE, DoLavaMove, &s_LavaThrow[3][9]}, }, { - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[4][1]}, - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[4][2]}, - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE*2, &AF(NullLava), &s_LavaThrow[4][3]}, - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[4][4]}, - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[4][5]}, - {LAVA_THROW_R4 + 0, SF_QUICK_CALL, &AF(InitLavaThrow), &s_LavaThrow[4][6]}, - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[4][7]}, - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, &AF(NullLava), &s_LavaThrow[4][8]}, - {LAVA_THROW_R4 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaThrow[4][9]}, - {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, &AF(DoLavaMove), &s_LavaThrow[4][9]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[4][1]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[4][2]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE*2, NullLava, &s_LavaThrow[4][3]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[4][4]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[4][5]}, + {LAVA_THROW_R4 + 0, SF_QUICK_CALL, InitLavaThrow, &s_LavaThrow[4][6]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[4][7]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, NullLava, &s_LavaThrow[4][8]}, + {LAVA_THROW_R4 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_LavaThrow[4][9]}, + {LAVA_THROW_R4 + 0, LAVA_THROW_RATE, DoLavaMove, &s_LavaThrow[4][9]}, } }; @@ -300,58 +304,59 @@ STATE* sg_LavaThrow[] = ////////////////////// #define LAVA_FLAME_RATE 18 +ANIMATOR InitLavaFlame; STATE s_LavaFlame[5][8] = { { - {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[0][1]}, - {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[0][2]}, - {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[0][3]}, - {LAVA_FLAME_R0 + 0, SF_QUICK_CALL, &AF(InitLavaFlame), &s_LavaFlame[0][4]}, - {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[0][5]}, - {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[0][6]}, - {LAVA_FLAME_R0 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaFlame[0][7]}, - {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, &AF(DoLavaMove), &s_LavaFlame[0][7]}, + {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[0][1]}, + {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[0][2]}, + {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[0][3]}, + {LAVA_FLAME_R0 + 0, SF_QUICK_CALL, InitLavaFlame, &s_LavaFlame[0][4]}, + {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[0][5]}, + {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[0][6]}, + {LAVA_FLAME_R0 + 0, SF_QUICK_CALL, InitActorDecide, &s_LavaFlame[0][7]}, + {LAVA_FLAME_R0 + 0, LAVA_FLAME_RATE, DoLavaMove, &s_LavaFlame[0][7]}, }, { - {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[1][1]}, - {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[1][2]}, - {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[1][3]}, - {LAVA_FLAME_R1 + 0, SF_QUICK_CALL, &AF(InitLavaFlame), &s_LavaFlame[1][4]}, - {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[1][5]}, - {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[1][6]}, - {LAVA_FLAME_R1 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaFlame[1][7]}, - {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, &AF(DoLavaMove), &s_LavaFlame[1][7]}, + {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[1][1]}, + {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[1][2]}, + {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[1][3]}, + {LAVA_FLAME_R1 + 0, SF_QUICK_CALL, InitLavaFlame, &s_LavaFlame[1][4]}, + {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[1][5]}, + {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[1][6]}, + {LAVA_FLAME_R1 + 0, SF_QUICK_CALL, InitActorDecide, &s_LavaFlame[1][7]}, + {LAVA_FLAME_R1 + 0, LAVA_FLAME_RATE, DoLavaMove, &s_LavaFlame[1][7]}, }, { - {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[2][1]}, - {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[2][2]}, - {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[2][3]}, - {LAVA_FLAME_R2 + 0, SF_QUICK_CALL, &AF(InitLavaFlame), &s_LavaFlame[2][4]}, - {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[2][5]}, - {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[2][6]}, - {LAVA_FLAME_R2 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaFlame[2][7]}, - {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, &AF(DoLavaMove), &s_LavaFlame[2][7]}, + {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[2][1]}, + {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[2][2]}, + {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[2][3]}, + {LAVA_FLAME_R2 + 0, SF_QUICK_CALL, InitLavaFlame, &s_LavaFlame[2][4]}, + {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[2][5]}, + {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[2][6]}, + {LAVA_FLAME_R2 + 0, SF_QUICK_CALL, InitActorDecide, &s_LavaFlame[2][7]}, + {LAVA_FLAME_R2 + 0, LAVA_FLAME_RATE, DoLavaMove, &s_LavaFlame[2][7]}, }, { - {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[3][1]}, - {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[3][2]}, - {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[3][3]}, - {LAVA_FLAME_R3 + 0, SF_QUICK_CALL, &AF(InitLavaFlame), &s_LavaFlame[3][4]}, - {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[3][5]}, - {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[3][6]}, - {LAVA_FLAME_R3 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaFlame[3][7]}, - {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, &AF(DoLavaMove), &s_LavaFlame[3][7]}, + {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[3][1]}, + {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[3][2]}, + {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[3][3]}, + {LAVA_FLAME_R3 + 0, SF_QUICK_CALL, InitLavaFlame, &s_LavaFlame[3][4]}, + {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[3][5]}, + {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[3][6]}, + {LAVA_FLAME_R3 + 0, SF_QUICK_CALL, InitActorDecide, &s_LavaFlame[3][7]}, + {LAVA_FLAME_R3 + 0, LAVA_FLAME_RATE, DoLavaMove, &s_LavaFlame[3][7]}, }, { - {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[4][1]}, - {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[4][2]}, - {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE*2, &AF(NullLava), &s_LavaFlame[4][3]}, - {LAVA_FLAME_R4 + 0, SF_QUICK_CALL, &AF(InitLavaFlame), &s_LavaFlame[4][4]}, - {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[4][5]}, - {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, &AF(NullLava), &s_LavaFlame[4][6]}, - {LAVA_FLAME_R4 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_LavaFlame[4][7]}, - {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, &AF(DoLavaMove), &s_LavaFlame[4][7]}, + {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[4][1]}, + {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[4][2]}, + {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE*2, NullLava, &s_LavaFlame[4][3]}, + {LAVA_FLAME_R4 + 0, SF_QUICK_CALL, InitLavaFlame, &s_LavaFlame[4][4]}, + {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[4][5]}, + {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, NullLava, &s_LavaFlame[4][6]}, + {LAVA_FLAME_R4 + 0, SF_QUICK_CALL, InitActorDecide, &s_LavaFlame[4][7]}, + {LAVA_FLAME_R4 + 0, LAVA_FLAME_RATE, DoLavaMove, &s_LavaFlame[4][7]}, } }; @@ -375,13 +380,13 @@ STATE* sg_LavaFlame[] = STATE s_LavaDie[] = { - {LAVA_DIE + 0, LAVA_DIE_RATE, &AF(NullLava), &s_LavaDie[1]}, - {LAVA_DEAD, LAVA_DIE_RATE, &AF(DoActorDebris), &s_LavaDie[1]} + {LAVA_DIE + 0, LAVA_DIE_RATE, NullLava, &s_LavaDie[1]}, + {LAVA_DEAD, LAVA_DIE_RATE, DoActorDebris, &s_LavaDie[1]} }; STATE s_LavaDead[] = { - {LAVA_DEAD, LAVA_DIE_RATE, &AF(DoActorDebris), &s_LavaDead[0]}, + {LAVA_DEAD, LAVA_DIE_RATE, DoActorDebris, &s_LavaDead[0]}, }; STATE* sg_LavaDie[] = @@ -454,6 +459,8 @@ ACTOR_ACTION_SET LavaActionSet = int SetupLava(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, LAVA_RUN_R0, s_LavaRun[0]); @@ -461,10 +468,10 @@ int SetupLava(DSWActor* actor) } ChangeState(actor, s_LavaRun[0]); - actor->user.__legacyState.Attrib = &LavaAttrib; + actor->user.Attrib = &LavaAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_LavaDie; - actor->user.__legacyState.Rot = sg_LavaRun; + actor->user.StateEnd = s_LavaDie; + actor->user.Rot = sg_LavaRun; EnemyDefaults(actor, &LavaActionSet, &LavaPersonality); actor->spr.scale = DVector2(1.71875, 1.71875); @@ -476,13 +483,6 @@ int SetupLava(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWLava, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupLava(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -514,7 +514,7 @@ int DoLavaMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); KeepActorOnFloor(actor); @@ -531,8 +531,22 @@ int DoLavaMove(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_lava_code[] = +{ + SAVE_CODE(NullLava), + SAVE_CODE(DoLavaMove), +}; + static saveable_data saveable_lava_data[] = { + SAVE_DATA(LavaBattle), + SAVE_DATA(LavaOffense), + SAVE_DATA(LavaBroadcast), + SAVE_DATA(LavaSurprised), + SAVE_DATA(LavaEvasive), + SAVE_DATA(LavaLostTarget), + SAVE_DATA(LavaCloseRange), + SAVE_DATA(LavaPersonality), SAVE_DATA(LavaAttrib), @@ -557,7 +571,8 @@ static saveable_data saveable_lava_data[] = saveable_module saveable_lava = { // code - nullptr, 0, + saveable_lava_code, + SIZ(saveable_lava_code), // data saveable_lava_data, diff --git a/source/games/sw/src/misc.h b/source/games/sw/src/misc.h index b1f442edce9..0805910fc5a 100644 --- a/source/games/sw/src/misc.h +++ b/source/games/sw/src/misc.h @@ -39,15 +39,11 @@ void PlaceSectorObjectsOnTracks(void); void PlaceActorsOnTracks(void); void SetupSectorObject(sectortype* sect, short tag); void PostSetupSectorObject(void); -void VehicleSetSmoke(SECTOR_OBJECT* sop, VMFunction* animator); +void VehicleSetSmoke(SECTOR_OBJECT* sop, ANIMATOR* animator); void CollapseSectorObject(SECTOR_OBJECT* sop, const DVector2& pos); void KillSectorObjectSprites(SECTOR_OBJECT* sop); void MoveSectorObjects(SECTOR_OBJECT* sop, short locktics); -int DoActorBeginJump(DSWActor* actor); -int DoActorBeginFall(DSWActor* actor); -int DoActorFall(DSWActor* actor); - #define TEXT_INFO_TIME (3) #define TEXT_INFO_Y (40) #define TEXT_INFO_YOFF (10) diff --git a/source/games/sw/src/miscactr.cpp b/source/games/sw/src/miscactr.cpp index 24eb5ef4305..406d8fb5cea 100644 --- a/source/games/sw/src/miscactr.cpp +++ b/source/games/sw/src/miscactr.cpp @@ -37,6 +37,8 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR NullToiletGirl; + ATTRIBUTE ToiletGirlAttrib = { {0, 0, 0, 0}, // Speeds @@ -54,11 +56,12 @@ ATTRIBUTE ToiletGirlAttrib = // ////////////////////// #define TOILETGIRL_RATE 60 +ANIMATOR NullToiletGirl,DoToiletGirl; STATE s_ToiletGirlStand[2] = { - {TOILETGIRL_R0 + 0, TOILETGIRL_RATE, &AF(DoToiletGirl), &s_ToiletGirlStand[1]}, - {TOILETGIRL_R0 + 1, TOILETGIRL_RATE, &AF(DoToiletGirl), &s_ToiletGirlStand[0]} + {TOILETGIRL_R0 + 0, TOILETGIRL_RATE, DoToiletGirl, &s_ToiletGirlStand[1]}, + {TOILETGIRL_R0 + 1, TOILETGIRL_RATE, DoToiletGirl, &s_ToiletGirlStand[0]} }; ////////////////////// @@ -69,11 +72,12 @@ STATE s_ToiletGirlStand[2] = #define TOILETGIRL_PAIN_RATE 32 #define TOILETGIRL_PAIN_R0 TOILETGIRL_R0 +ANIMATOR ToiletGirlPain; STATE s_ToiletGirlPain[2] = { - {TOILETGIRL_PAIN_R0 + 0, TOILETGIRL_PAIN_RATE, &AF(ToiletGirlPain), &s_ToiletGirlPain[1]}, - {TOILETGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_ToiletGirlPain[0]} + {TOILETGIRL_PAIN_R0 + 0, TOILETGIRL_PAIN_RATE, ToiletGirlPain, &s_ToiletGirlPain[1]}, + {TOILETGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_ToiletGirlPain[0]} }; ////////////////////// @@ -84,25 +88,26 @@ STATE s_ToiletGirlPain[2] = #define TOILETGIRL_UZI_RATE 8 #define TOILETGIRL_FIRE_R0 TOILETGIRL_R0 + 2 +ANIMATOR InitEnemyUzi,ToiletGirlUzi; STATE s_ToiletGirlUzi[16] = { - {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[1]}, - {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[2]}, - {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[3]}, - {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[4]}, - {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[5]}, - {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[6]}, - {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[7]}, - {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[8]}, - {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[9]}, - {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[10]}, - {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[11]}, - {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[12]}, - {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[13]}, - {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[14]}, - {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, &AF(ToiletGirlUzi), &s_ToiletGirlUzi[15]}, - {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ToiletGirlUzi[0]}, + {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[1]}, + {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[2]}, + {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[3]}, + {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[4]}, + {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[5]}, + {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[6]}, + {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[7]}, + {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[8]}, + {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[9]}, + {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[10]}, + {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[11]}, + {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[12]}, + {TOILETGIRL_FIRE_R0 + 0, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[13]}, + {TOILETGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[14]}, + {TOILETGIRL_FIRE_R0 + 1, TOILETGIRL_UZI_RATE, ToiletGirlUzi, &s_ToiletGirlUzi[15]}, + {TOILETGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ToiletGirlUzi[0]}, }; //--------------------------------------------------------------------------- @@ -113,6 +118,8 @@ STATE s_ToiletGirlUzi[16] = int SetupToiletGirl(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, TOILETGIRL_R0, s_ToiletGirlStand); @@ -123,10 +130,10 @@ int SetupToiletGirl(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_ToiletGirlStand); - actor->user.__legacyState.Attrib = &ToiletGirlAttrib; - actor->user.__legacyState.StateEnd = s_ToiletGirlStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &ToiletGirlAttrib; + actor->user.StateEnd = s_ToiletGirlStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->spr.scale = DVector2(0.5, 0.5); actor->vel.X = 0; @@ -140,13 +147,6 @@ int SetupToiletGirl(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWToiletGirl, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupToiletGirl(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -286,6 +286,8 @@ int ToiletGirlPain(DSWActor* actor) // //--------------------------------------------------------------------------- +ANIMATOR NullWashGirl; + ATTRIBUTE WashGirlAttrib = { {0, 0, 0, 0}, // Speeds @@ -303,18 +305,19 @@ ATTRIBUTE WashGirlAttrib = // ////////////////////// #define WASHGIRL_RATE 60 +ANIMATOR NullWashGirl,DoWashGirl; STATE s_WashGirlStand[2] = { - {WASHGIRL_R0 + 0, WASHGIRL_RATE, &AF(DoWashGirl), &s_WashGirlStand[1]}, - {WASHGIRL_R0 + 1, WASHGIRL_RATE, &AF(DoWashGirl), &s_WashGirlStand[0]} + {WASHGIRL_R0 + 0, WASHGIRL_RATE, DoWashGirl, &s_WashGirlStand[1]}, + {WASHGIRL_R0 + 1, WASHGIRL_RATE, DoWashGirl, &s_WashGirlStand[0]} }; #define WASHGIRL_RATE2 20 STATE s_WashGirlStandScrub[2] = { - {WASHGIRL_R0 + 0, WASHGIRL_RATE2, &AF(DoWashGirl), &s_WashGirlStandScrub[1]}, - {WASHGIRL_R0 + 1, WASHGIRL_RATE2, &AF(DoWashGirl), &s_WashGirlStandScrub[0]} + {WASHGIRL_R0 + 0, WASHGIRL_RATE2, DoWashGirl, &s_WashGirlStandScrub[1]}, + {WASHGIRL_R0 + 1, WASHGIRL_RATE2, DoWashGirl, &s_WashGirlStandScrub[0]} }; ////////////////////// @@ -325,14 +328,14 @@ STATE s_WashGirlStandScrub[2] = #define WASHGIRL_PAIN_RATE 30 #define WASHGIRL_PAIN_R0 WASHGIRL_R0 +ANIMATOR WashGirlPain; STATE s_WashGirlPain[2] = { - {WASHGIRL_PAIN_R0 + 0, WASHGIRL_PAIN_RATE, &AF(WashGirlPain), &s_WashGirlPain[1]}, - {WASHGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_WashGirlPain[0]} + {WASHGIRL_PAIN_R0 + 0, WASHGIRL_PAIN_RATE, WashGirlPain, &s_WashGirlPain[1]}, + {WASHGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_WashGirlPain[0]} }; - ////////////////////// // // WASHGIRL UZI @@ -341,25 +344,26 @@ STATE s_WashGirlPain[2] = #define WASHGIRL_UZI_RATE 8 #define WASHGIRL_FIRE_R0 WASHGIRL_R0 + 2 +ANIMATOR InitEnemyUzi,WashGirlUzi; STATE s_WashGirlUzi[16] = { - {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[1]}, - {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[2]}, - {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[3]}, - {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[4]}, - {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[5]}, - {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[6]}, - {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[7]}, - {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[8]}, - {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[9]}, - {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[10]}, - {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[11]}, - {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[12]}, - {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[13]}, - {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[14]}, - {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, &AF(WashGirlUzi), &s_WashGirlUzi[15]}, - {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_WashGirlUzi[0]}, + {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[1]}, + {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[2]}, + {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[3]}, + {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[4]}, + {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[5]}, + {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[6]}, + {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[7]}, + {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[8]}, + {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[9]}, + {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[10]}, + {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[11]}, + {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[12]}, + {WASHGIRL_FIRE_R0 + 0, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[13]}, + {WASHGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[14]}, + {WASHGIRL_FIRE_R0 + 1, WASHGIRL_UZI_RATE, WashGirlUzi, &s_WashGirlUzi[15]}, + {WASHGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_WashGirlUzi[0]}, }; //--------------------------------------------------------------------------- @@ -370,6 +374,8 @@ STATE s_WashGirlUzi[16] = int SetupWashGirl(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, WASHGIRL_R0,s_WashGirlStand); @@ -379,10 +385,10 @@ int SetupWashGirl(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_WashGirlStand); - actor->user.__legacyState.Attrib = &WashGirlAttrib; - actor->user.__legacyState.StateEnd = s_WashGirlStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &WashGirlAttrib; + actor->user.StateEnd = s_WashGirlStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->spr.scale = DVector2(0.4374, 0.375); actor->vel.X = 0; @@ -396,13 +402,6 @@ int SetupWashGirl(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWWashGirl, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupWashGirl(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -568,10 +567,11 @@ ATTRIBUTE TrashCanAttrib = ////////////////////// #define TRASHCAN_RATE 120 #define TRASHCAN_R0 TRASHCAN +ANIMATOR NullTrashCan,DoTrashCan; STATE s_TrashCanStand[1] = { - {TRASHCAN_R0 + 0, TRASHCAN_RATE, &AF(DoTrashCan), &s_TrashCanStand[0]} + {TRASHCAN_R0 + 0, TRASHCAN_RATE, DoTrashCan, &s_TrashCanStand[0]} }; ////////////////////// @@ -582,16 +582,17 @@ STATE s_TrashCanStand[1] = #define TRASHCAN_PAIN_RATE 8 #define TRASHCAN_PAIN_R0 TRASHCAN +ANIMATOR TrashCanPain, TrashCanStand; STATE s_TrashCanPain[7] = { - {TRASHCAN_PAIN_R0 + 0, TRASHCAN_PAIN_RATE, &AF(TrashCanPain), &s_TrashCanPain[1]}, - {TRASHCAN_PAIN_R0 + 1, TRASHCAN_PAIN_RATE, &AF(TrashCanPain), &s_TrashCanPain[2]}, - {TRASHCAN_PAIN_R0 + 2, TRASHCAN_PAIN_RATE, &AF(TrashCanPain), &s_TrashCanPain[3]}, - {TRASHCAN_PAIN_R0 + 3, TRASHCAN_PAIN_RATE, &AF(TrashCanPain), &s_TrashCanPain[4]}, - {TRASHCAN_PAIN_R0 + 4, TRASHCAN_PAIN_RATE, &AF(TrashCanPain), &s_TrashCanPain[5]}, - {TRASHCAN_PAIN_R0 + 5, TRASHCAN_PAIN_RATE, &AF(TrashCanPain), &s_TrashCanPain[6]}, - {TRASHCAN_PAIN_R0 + 6, TRASHCAN_PAIN_RATE, &AF(TrashCanPain), &s_TrashCanPain[0]} + {TRASHCAN_PAIN_R0 + 0, TRASHCAN_PAIN_RATE, TrashCanPain, &s_TrashCanPain[1]}, + {TRASHCAN_PAIN_R0 + 1, TRASHCAN_PAIN_RATE, TrashCanPain, &s_TrashCanPain[2]}, + {TRASHCAN_PAIN_R0 + 2, TRASHCAN_PAIN_RATE, TrashCanPain, &s_TrashCanPain[3]}, + {TRASHCAN_PAIN_R0 + 3, TRASHCAN_PAIN_RATE, TrashCanPain, &s_TrashCanPain[4]}, + {TRASHCAN_PAIN_R0 + 4, TRASHCAN_PAIN_RATE, TrashCanPain, &s_TrashCanPain[5]}, + {TRASHCAN_PAIN_R0 + 5, TRASHCAN_PAIN_RATE, TrashCanPain, &s_TrashCanPain[6]}, + {TRASHCAN_PAIN_R0 + 6, TRASHCAN_PAIN_RATE, TrashCanPain, &s_TrashCanPain[0]} }; //--------------------------------------------------------------------------- @@ -602,6 +603,8 @@ STATE s_TrashCanPain[7] = int SetupTrashCan(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, TRASHCAN,s_TrashCanStand); @@ -611,10 +614,10 @@ int SetupTrashCan(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_TrashCanStand); - actor->user.__legacyState.Attrib = &TrashCanAttrib; - actor->user.__legacyState.StateEnd = s_TrashCanStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &TrashCanAttrib; + actor->user.StateEnd = s_TrashCanStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->spr.scale = DVector2(0.71875, 0.65625); @@ -691,17 +694,18 @@ ATTRIBUTE PachinkoLightAttrib = STATE s_PachinkoLightStand[] = { - {PACHINKOLIGHT_R0 + 0, PACHINKOLIGHT_RATE, nullptr, &s_PachinkoLightStand[0]} + {PACHINKOLIGHT_R0 + 0, PACHINKOLIGHT_RATE, NullAnimator, &s_PachinkoLightStand[0]} }; +ANIMATOR PachinkoLightOperate; STATE s_PachinkoLightOperate[] = { - {PACHINKOLIGHT_R0 - 0, 12, &AF(PachinkoLightOperate), &s_PachinkoLightOperate[1]}, - {PACHINKOLIGHT_R0 - 1, 12, &AF(PachinkoLightOperate), &s_PachinkoLightOperate[2]}, - {PACHINKOLIGHT_R0 - 2, 12, &AF(PachinkoLightOperate), &s_PachinkoLightOperate[3]}, - {PACHINKOLIGHT_R0 - 3, 12, &AF(PachinkoLightOperate), &s_PachinkoLightOperate[4]}, - {PACHINKOLIGHT_R0 - 4, 12, &AF(PachinkoLightOperate), &s_PachinkoLightOperate[5]}, - {PACHINKOLIGHT_R0 - 5, 12, &AF(PachinkoLightOperate), &s_PachinkoLightOperate[0]}, + {PACHINKOLIGHT_R0 - 0, 12, PachinkoLightOperate, &s_PachinkoLightOperate[1]}, + {PACHINKOLIGHT_R0 - 1, 12, PachinkoLightOperate, &s_PachinkoLightOperate[2]}, + {PACHINKOLIGHT_R0 - 2, 12, PachinkoLightOperate, &s_PachinkoLightOperate[3]}, + {PACHINKOLIGHT_R0 - 3, 12, PachinkoLightOperate, &s_PachinkoLightOperate[4]}, + {PACHINKOLIGHT_R0 - 4, 12, PachinkoLightOperate, &s_PachinkoLightOperate[5]}, + {PACHINKOLIGHT_R0 - 5, 12, PachinkoLightOperate, &s_PachinkoLightOperate[0]}, }; //--------------------------------------------------------------------------- @@ -712,6 +716,8 @@ STATE s_PachinkoLightOperate[] = int SetupPachinkoLight(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, PACHINKOLIGHT_R0,s_PachinkoLightStand); @@ -721,10 +727,10 @@ int SetupPachinkoLight(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_PachinkoLightStand); - actor->user.__legacyState.Attrib = &PachinkoLightAttrib; - actor->user.__legacyState.StateEnd = s_PachinkoLightStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &PachinkoLightAttrib; + actor->user.StateEnd = s_PachinkoLightStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->user.ID = PACHINKOLIGHT_R0; actor->vel.X = 0; @@ -739,13 +745,6 @@ int SetupPachinkoLight(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWPachinkoWinLight, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupPachinkoLight(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -783,34 +782,35 @@ ATTRIBUTE Pachinko1Attrib = STATE s_Pachinko1Stand[] = { - {PACHINKO1_R0 + 0, PACHINKO1_RATE, nullptr, &s_Pachinko1Stand[0]} + {PACHINKO1_R0 + 0, PACHINKO1_RATE, NullAnimator, &s_Pachinko1Stand[0]} }; +ANIMATOR Pachinko1Operate,PachinkoCheckWin; STATE s_Pachinko1Operate[] = { - {PACHINKO1_R0 + 0, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[1]}, - {PACHINKO1_R0 + 1, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[2]}, - {PACHINKO1_R0 + 2, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[3]}, - {PACHINKO1_R0 + 3, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[4]}, - {PACHINKO1_R0 + 4, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[5]}, - {PACHINKO1_R0 + 5, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[6]}, - {PACHINKO1_R0 + 6, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[7]}, - {PACHINKO1_R0 + 7, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[8]}, - {PACHINKO1_R0 + 8, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[9]}, - {PACHINKO1_R0 + 9, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[10]}, - {PACHINKO1_R0 + 10, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[11]}, - {PACHINKO1_R0 + 11, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[12]}, - {PACHINKO1_R0 + 12, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[13]}, - {PACHINKO1_R0 + 13, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[14]}, - {PACHINKO1_R0 + 14, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[15]}, - {PACHINKO1_R0 + 15, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[16]}, - {PACHINKO1_R0 + 16, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[17]}, - {PACHINKO1_R0 + 17, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[18]}, - {PACHINKO1_R0 + 18, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[19]}, - {PACHINKO1_R0 + 19, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[20]}, - {PACHINKO1_R0 + 20, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[21]}, - {PACHINKO1_R0 + 21, 12, &AF(Pachinko1Operate), &s_Pachinko1Operate[22]}, - {PACHINKO1_R0 + 22, SF_QUICK_CALL, &AF(PachinkoCheckWin), &s_Pachinko1Stand[0]} + {PACHINKO1_R0 + 0, 12, Pachinko1Operate, &s_Pachinko1Operate[1]}, + {PACHINKO1_R0 + 1, 12, Pachinko1Operate, &s_Pachinko1Operate[2]}, + {PACHINKO1_R0 + 2, 12, Pachinko1Operate, &s_Pachinko1Operate[3]}, + {PACHINKO1_R0 + 3, 12, Pachinko1Operate, &s_Pachinko1Operate[4]}, + {PACHINKO1_R0 + 4, 12, Pachinko1Operate, &s_Pachinko1Operate[5]}, + {PACHINKO1_R0 + 5, 12, Pachinko1Operate, &s_Pachinko1Operate[6]}, + {PACHINKO1_R0 + 6, 12, Pachinko1Operate, &s_Pachinko1Operate[7]}, + {PACHINKO1_R0 + 7, 12, Pachinko1Operate, &s_Pachinko1Operate[8]}, + {PACHINKO1_R0 + 8, 12, Pachinko1Operate, &s_Pachinko1Operate[9]}, + {PACHINKO1_R0 + 9, 12, Pachinko1Operate, &s_Pachinko1Operate[10]}, + {PACHINKO1_R0 + 10, 12, Pachinko1Operate, &s_Pachinko1Operate[11]}, + {PACHINKO1_R0 + 11, 12, Pachinko1Operate, &s_Pachinko1Operate[12]}, + {PACHINKO1_R0 + 12, 12, Pachinko1Operate, &s_Pachinko1Operate[13]}, + {PACHINKO1_R0 + 13, 12, Pachinko1Operate, &s_Pachinko1Operate[14]}, + {PACHINKO1_R0 + 14, 12, Pachinko1Operate, &s_Pachinko1Operate[15]}, + {PACHINKO1_R0 + 15, 12, Pachinko1Operate, &s_Pachinko1Operate[16]}, + {PACHINKO1_R0 + 16, 12, Pachinko1Operate, &s_Pachinko1Operate[17]}, + {PACHINKO1_R0 + 17, 12, Pachinko1Operate, &s_Pachinko1Operate[18]}, + {PACHINKO1_R0 + 18, 12, Pachinko1Operate, &s_Pachinko1Operate[19]}, + {PACHINKO1_R0 + 19, 12, Pachinko1Operate, &s_Pachinko1Operate[20]}, + {PACHINKO1_R0 + 20, 12, Pachinko1Operate, &s_Pachinko1Operate[21]}, + {PACHINKO1_R0 + 21, 12, Pachinko1Operate, &s_Pachinko1Operate[22]}, + {PACHINKO1_R0 + 22, SF_QUICK_CALL, PachinkoCheckWin, &s_Pachinko1Stand[0]} }; //--------------------------------------------------------------------------- @@ -821,6 +821,8 @@ STATE s_Pachinko1Operate[] = int SetupPachinko1(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, PACHINKO1,s_Pachinko1Stand); @@ -830,10 +832,10 @@ int SetupPachinko1(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_Pachinko1Stand); - actor->user.__legacyState.Attrib = &Pachinko1Attrib; - actor->user.__legacyState.StateEnd = s_Pachinko1Stand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &Pachinko1Attrib; + actor->user.StateEnd = s_Pachinko1Stand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->user.ID = PACHINKO1; actor->vel.Z = 0; @@ -845,13 +847,6 @@ int SetupPachinko1(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWPachinko1, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupPachinko1(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -960,34 +955,35 @@ ATTRIBUTE Pachinko2Attrib = STATE s_Pachinko2Stand[] = { - {PACHINKO2_R0 + 0, PACHINKO2_RATE, nullptr, &s_Pachinko2Stand[0]} + {PACHINKO2_R0 + 0, PACHINKO2_RATE, NullAnimator, &s_Pachinko2Stand[0]} }; +ANIMATOR Pachinko2Operate; STATE s_Pachinko2Operate[] = { - {PACHINKO2_R0 + 0, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[1]}, - {PACHINKO2_R0 + 1, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[2]}, - {PACHINKO2_R0 + 2, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[3]}, - {PACHINKO2_R0 + 3, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[4]}, - {PACHINKO2_R0 + 4, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[5]}, - {PACHINKO2_R0 + 5, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[6]}, - {PACHINKO2_R0 + 6, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[7]}, - {PACHINKO2_R0 + 7, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[8]}, - {PACHINKO2_R0 + 8, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[9]}, - {PACHINKO2_R0 + 9, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[10]}, - {PACHINKO2_R0 + 10, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[11]}, - {PACHINKO2_R0 + 11, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[12]}, - {PACHINKO2_R0 + 12, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[13]}, - {PACHINKO2_R0 + 13, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[14]}, - {PACHINKO2_R0 + 14, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[15]}, - {PACHINKO2_R0 + 15, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[16]}, - {PACHINKO2_R0 + 16, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[17]}, - {PACHINKO2_R0 + 17, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[18]}, - {PACHINKO2_R0 + 18, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[19]}, - {PACHINKO2_R0 + 19, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[20]}, - {PACHINKO2_R0 + 20, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[21]}, - {PACHINKO2_R0 + 21, 12, &AF(Pachinko1Operate), &s_Pachinko2Operate[22]}, - {PACHINKO2_R0 + 22, SF_QUICK_CALL, &AF(PachinkoCheckWin), &s_Pachinko2Stand[0]} + {PACHINKO2_R0 + 0, 12, Pachinko1Operate, &s_Pachinko2Operate[1]}, + {PACHINKO2_R0 + 1, 12, Pachinko1Operate, &s_Pachinko2Operate[2]}, + {PACHINKO2_R0 + 2, 12, Pachinko1Operate, &s_Pachinko2Operate[3]}, + {PACHINKO2_R0 + 3, 12, Pachinko1Operate, &s_Pachinko2Operate[4]}, + {PACHINKO2_R0 + 4, 12, Pachinko1Operate, &s_Pachinko2Operate[5]}, + {PACHINKO2_R0 + 5, 12, Pachinko1Operate, &s_Pachinko2Operate[6]}, + {PACHINKO2_R0 + 6, 12, Pachinko1Operate, &s_Pachinko2Operate[7]}, + {PACHINKO2_R0 + 7, 12, Pachinko1Operate, &s_Pachinko2Operate[8]}, + {PACHINKO2_R0 + 8, 12, Pachinko1Operate, &s_Pachinko2Operate[9]}, + {PACHINKO2_R0 + 9, 12, Pachinko1Operate, &s_Pachinko2Operate[10]}, + {PACHINKO2_R0 + 10, 12, Pachinko1Operate, &s_Pachinko2Operate[11]}, + {PACHINKO2_R0 + 11, 12, Pachinko1Operate, &s_Pachinko2Operate[12]}, + {PACHINKO2_R0 + 12, 12, Pachinko1Operate, &s_Pachinko2Operate[13]}, + {PACHINKO2_R0 + 13, 12, Pachinko1Operate, &s_Pachinko2Operate[14]}, + {PACHINKO2_R0 + 14, 12, Pachinko1Operate, &s_Pachinko2Operate[15]}, + {PACHINKO2_R0 + 15, 12, Pachinko1Operate, &s_Pachinko2Operate[16]}, + {PACHINKO2_R0 + 16, 12, Pachinko1Operate, &s_Pachinko2Operate[17]}, + {PACHINKO2_R0 + 17, 12, Pachinko1Operate, &s_Pachinko2Operate[18]}, + {PACHINKO2_R0 + 18, 12, Pachinko1Operate, &s_Pachinko2Operate[19]}, + {PACHINKO2_R0 + 19, 12, Pachinko1Operate, &s_Pachinko2Operate[20]}, + {PACHINKO2_R0 + 20, 12, Pachinko1Operate, &s_Pachinko2Operate[21]}, + {PACHINKO2_R0 + 21, 12, Pachinko1Operate, &s_Pachinko2Operate[22]}, + {PACHINKO2_R0 + 22, SF_QUICK_CALL, PachinkoCheckWin, &s_Pachinko2Stand[0]} }; //--------------------------------------------------------------------------- @@ -998,6 +994,8 @@ STATE s_Pachinko2Operate[] = int SetupPachinko2(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, PACHINKO2,s_Pachinko2Stand); @@ -1007,10 +1005,10 @@ int SetupPachinko2(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_Pachinko2Stand); - actor->user.__legacyState.Attrib = &Pachinko2Attrib; - actor->user.__legacyState.StateEnd = s_Pachinko2Stand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &Pachinko2Attrib; + actor->user.StateEnd = s_Pachinko2Stand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->user.ID = PACHINKO2; actor->vel.Z = 0; @@ -1022,13 +1020,6 @@ int SetupPachinko2(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWPachinko2, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupPachinko2(self); - return 0; -} - //--------------------------------------------------------------------------- // // PACHINKO MACHINE #3 @@ -1049,34 +1040,35 @@ ATTRIBUTE Pachinko3Attrib = STATE s_Pachinko3Stand[] = { - {PACHINKO3_R0 + 0, PACHINKO3_RATE, nullptr, &s_Pachinko3Stand[0]} + {PACHINKO3_R0 + 0, PACHINKO3_RATE, NullAnimator, &s_Pachinko3Stand[0]} }; +ANIMATOR Pachinko3Operate; STATE s_Pachinko3Operate[] = { - {PACHINKO3_R0 + 0, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[1]}, - {PACHINKO3_R0 + 1, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[2]}, - {PACHINKO3_R0 + 2, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[3]}, - {PACHINKO3_R0 + 3, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[4]}, - {PACHINKO3_R0 + 4, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[5]}, - {PACHINKO3_R0 + 5, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[6]}, - {PACHINKO3_R0 + 6, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[7]}, - {PACHINKO3_R0 + 7, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[8]}, - {PACHINKO3_R0 + 8, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[9]}, - {PACHINKO3_R0 + 9, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[10]}, - {PACHINKO3_R0 + 10, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[11]}, - {PACHINKO3_R0 + 11, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[12]}, - {PACHINKO3_R0 + 12, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[13]}, - {PACHINKO3_R0 + 13, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[14]}, - {PACHINKO3_R0 + 14, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[15]}, - {PACHINKO3_R0 + 15, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[16]}, - {PACHINKO3_R0 + 16, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[17]}, - {PACHINKO3_R0 + 17, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[18]}, - {PACHINKO3_R0 + 18, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[19]}, - {PACHINKO3_R0 + 19, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[20]}, - {PACHINKO3_R0 + 20, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[21]}, - {PACHINKO3_R0 + 21, 12, &AF(Pachinko1Operate), &s_Pachinko3Operate[22]}, - {PACHINKO3_R0 + 22, SF_QUICK_CALL, &AF(PachinkoCheckWin), &s_Pachinko3Stand[0]} + {PACHINKO3_R0 + 0, 12, Pachinko1Operate, &s_Pachinko3Operate[1]}, + {PACHINKO3_R0 + 1, 12, Pachinko1Operate, &s_Pachinko3Operate[2]}, + {PACHINKO3_R0 + 2, 12, Pachinko1Operate, &s_Pachinko3Operate[3]}, + {PACHINKO3_R0 + 3, 12, Pachinko1Operate, &s_Pachinko3Operate[4]}, + {PACHINKO3_R0 + 4, 12, Pachinko1Operate, &s_Pachinko3Operate[5]}, + {PACHINKO3_R0 + 5, 12, Pachinko1Operate, &s_Pachinko3Operate[6]}, + {PACHINKO3_R0 + 6, 12, Pachinko1Operate, &s_Pachinko3Operate[7]}, + {PACHINKO3_R0 + 7, 12, Pachinko1Operate, &s_Pachinko3Operate[8]}, + {PACHINKO3_R0 + 8, 12, Pachinko1Operate, &s_Pachinko3Operate[9]}, + {PACHINKO3_R0 + 9, 12, Pachinko1Operate, &s_Pachinko3Operate[10]}, + {PACHINKO3_R0 + 10, 12, Pachinko1Operate, &s_Pachinko3Operate[11]}, + {PACHINKO3_R0 + 11, 12, Pachinko1Operate, &s_Pachinko3Operate[12]}, + {PACHINKO3_R0 + 12, 12, Pachinko1Operate, &s_Pachinko3Operate[13]}, + {PACHINKO3_R0 + 13, 12, Pachinko1Operate, &s_Pachinko3Operate[14]}, + {PACHINKO3_R0 + 14, 12, Pachinko1Operate, &s_Pachinko3Operate[15]}, + {PACHINKO3_R0 + 15, 12, Pachinko1Operate, &s_Pachinko3Operate[16]}, + {PACHINKO3_R0 + 16, 12, Pachinko1Operate, &s_Pachinko3Operate[17]}, + {PACHINKO3_R0 + 17, 12, Pachinko1Operate, &s_Pachinko3Operate[18]}, + {PACHINKO3_R0 + 18, 12, Pachinko1Operate, &s_Pachinko3Operate[19]}, + {PACHINKO3_R0 + 19, 12, Pachinko1Operate, &s_Pachinko3Operate[20]}, + {PACHINKO3_R0 + 20, 12, Pachinko1Operate, &s_Pachinko3Operate[21]}, + {PACHINKO3_R0 + 21, 12, Pachinko1Operate, &s_Pachinko3Operate[22]}, + {PACHINKO3_R0 + 22, SF_QUICK_CALL, PachinkoCheckWin, &s_Pachinko3Stand[0]} }; //--------------------------------------------------------------------------- @@ -1087,6 +1079,8 @@ STATE s_Pachinko3Operate[] = int SetupPachinko3(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, PACHINKO3,s_Pachinko3Stand); @@ -1096,10 +1090,10 @@ int SetupPachinko3(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_Pachinko3Stand); - actor->user.__legacyState.Attrib = &Pachinko3Attrib; - actor->user.__legacyState.StateEnd = s_Pachinko3Stand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &Pachinko3Attrib; + actor->user.StateEnd = s_Pachinko3Stand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->user.ID = PACHINKO3; actor->vel.Z = 0; @@ -1111,12 +1105,6 @@ int SetupPachinko3(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWPachinko3, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupPachinko3(self); - return 0; -} //--------------------------------------------------------------------------- // @@ -1138,34 +1126,35 @@ ATTRIBUTE Pachinko4Attrib = STATE s_Pachinko4Stand[] = { - {PACHINKO4_R0 + 0, PACHINKO4_RATE, nullptr, &s_Pachinko4Stand[0]} + {PACHINKO4_R0 + 0, PACHINKO4_RATE, NullAnimator, &s_Pachinko4Stand[0]} }; +ANIMATOR Pachinko4Operate; STATE s_Pachinko4Operate[] = { - {PACHINKO4_R0 + 0, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[1]}, - {PACHINKO4_R0 + 1, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[2]}, - {PACHINKO4_R0 + 2, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[3]}, - {PACHINKO4_R0 + 3, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[4]}, - {PACHINKO4_R0 + 4, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[5]}, - {PACHINKO4_R0 + 5, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[6]}, - {PACHINKO4_R0 + 6, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[7]}, - {PACHINKO4_R0 + 7, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[8]}, - {PACHINKO4_R0 + 8, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[9]}, - {PACHINKO4_R0 + 9, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[10]}, - {PACHINKO4_R0 + 10, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[11]}, - {PACHINKO4_R0 + 11, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[12]}, - {PACHINKO4_R0 + 12, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[13]}, - {PACHINKO4_R0 + 13, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[14]}, - {PACHINKO4_R0 + 14, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[15]}, - {PACHINKO4_R0 + 15, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[16]}, - {PACHINKO4_R0 + 16, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[17]}, - {PACHINKO4_R0 + 17, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[18]}, - {PACHINKO4_R0 + 18, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[19]}, - {PACHINKO4_R0 + 19, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[20]}, - {PACHINKO4_R0 + 20, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[21]}, - {PACHINKO4_R0 + 21, 12, &AF(Pachinko1Operate), &s_Pachinko4Operate[22]}, - {PACHINKO4_R0 + 22, SF_QUICK_CALL, &AF(PachinkoCheckWin), &s_Pachinko4Stand[0]} + {PACHINKO4_R0 + 0, 12, Pachinko1Operate, &s_Pachinko4Operate[1]}, + {PACHINKO4_R0 + 1, 12, Pachinko1Operate, &s_Pachinko4Operate[2]}, + {PACHINKO4_R0 + 2, 12, Pachinko1Operate, &s_Pachinko4Operate[3]}, + {PACHINKO4_R0 + 3, 12, Pachinko1Operate, &s_Pachinko4Operate[4]}, + {PACHINKO4_R0 + 4, 12, Pachinko1Operate, &s_Pachinko4Operate[5]}, + {PACHINKO4_R0 + 5, 12, Pachinko1Operate, &s_Pachinko4Operate[6]}, + {PACHINKO4_R0 + 6, 12, Pachinko1Operate, &s_Pachinko4Operate[7]}, + {PACHINKO4_R0 + 7, 12, Pachinko1Operate, &s_Pachinko4Operate[8]}, + {PACHINKO4_R0 + 8, 12, Pachinko1Operate, &s_Pachinko4Operate[9]}, + {PACHINKO4_R0 + 9, 12, Pachinko1Operate, &s_Pachinko4Operate[10]}, + {PACHINKO4_R0 + 10, 12, Pachinko1Operate, &s_Pachinko4Operate[11]}, + {PACHINKO4_R0 + 11, 12, Pachinko1Operate, &s_Pachinko4Operate[12]}, + {PACHINKO4_R0 + 12, 12, Pachinko1Operate, &s_Pachinko4Operate[13]}, + {PACHINKO4_R0 + 13, 12, Pachinko1Operate, &s_Pachinko4Operate[14]}, + {PACHINKO4_R0 + 14, 12, Pachinko1Operate, &s_Pachinko4Operate[15]}, + {PACHINKO4_R0 + 15, 12, Pachinko1Operate, &s_Pachinko4Operate[16]}, + {PACHINKO4_R0 + 16, 12, Pachinko1Operate, &s_Pachinko4Operate[17]}, + {PACHINKO4_R0 + 17, 12, Pachinko1Operate, &s_Pachinko4Operate[18]}, + {PACHINKO4_R0 + 18, 12, Pachinko1Operate, &s_Pachinko4Operate[19]}, + {PACHINKO4_R0 + 19, 12, Pachinko1Operate, &s_Pachinko4Operate[20]}, + {PACHINKO4_R0 + 20, 12, Pachinko1Operate, &s_Pachinko4Operate[21]}, + {PACHINKO4_R0 + 21, 12, Pachinko1Operate, &s_Pachinko4Operate[22]}, + {PACHINKO4_R0 + 22, SF_QUICK_CALL, PachinkoCheckWin, &s_Pachinko4Stand[0]} }; //--------------------------------------------------------------------------- @@ -1176,6 +1165,8 @@ STATE s_Pachinko4Operate[] = int SetupPachinko4(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, PACHINKO4,s_Pachinko4Stand); @@ -1185,10 +1176,10 @@ int SetupPachinko4(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_Pachinko4Stand); - actor->user.__legacyState.Attrib = &Pachinko4Attrib; - actor->user.__legacyState.StateEnd = s_Pachinko4Stand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &Pachinko4Attrib; + actor->user.StateEnd = s_Pachinko4Stand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->user.ID = PACHINKO4; actor->vel.Z = 0; @@ -1200,19 +1191,14 @@ int SetupPachinko4(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWPachinko4, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupPachinko4(self); - return 0; -} - //--------------------------------------------------------------------------- // // // //--------------------------------------------------------------------------- +ANIMATOR NullCarGirl; + ATTRIBUTE CarGirlAttrib = { {0, 0, 0, 0}, // Speeds @@ -1230,11 +1216,12 @@ ATTRIBUTE CarGirlAttrib = // ////////////////////// #define CARGIRL_RATE 60 +ANIMATOR NullCarGirl,DoCarGirl; STATE s_CarGirlStand[2] = { - {CARGIRL_R0 + 0, CARGIRL_RATE, &AF(DoCarGirl), &s_CarGirlStand[1]}, - {CARGIRL_R0 + 1, CARGIRL_RATE, &AF(DoCarGirl), &s_CarGirlStand[0]} + {CARGIRL_R0 + 0, CARGIRL_RATE, DoCarGirl, &s_CarGirlStand[1]}, + {CARGIRL_R0 + 1, CARGIRL_RATE, DoCarGirl, &s_CarGirlStand[0]} }; ////////////////////// @@ -1245,11 +1232,12 @@ STATE s_CarGirlStand[2] = #define CARGIRL_PAIN_RATE 32 #define CARGIRL_PAIN_R0 CARGIRL_R0 +ANIMATOR CarGirlPain; STATE s_CarGirlPain[2] = { - {CARGIRL_PAIN_R0 + 0, CARGIRL_PAIN_RATE, &AF(CarGirlPain), &s_CarGirlPain[1]}, - {CARGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_CarGirlPain[0]} + {CARGIRL_PAIN_R0 + 0, CARGIRL_PAIN_RATE, CarGirlPain, &s_CarGirlPain[1]}, + {CARGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_CarGirlPain[0]} }; ////////////////////// @@ -1260,25 +1248,26 @@ STATE s_CarGirlPain[2] = #define CARGIRL_UZI_RATE 8 #define CARGIRL_FIRE_R0 CARGIRL_R0 + 2 +ANIMATOR InitEnemyUzi,CarGirlUzi; STATE s_CarGirlUzi[16] = { - {CARGIRL_FIRE_R0 + 0, 240, &AF(CarGirlUzi), &s_CarGirlUzi[1]}, - {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[2]}, - {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, &AF(CarGirlUzi), &s_CarGirlUzi[3]}, - {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[4]}, - {CARGIRL_FIRE_R0 + 0, CARGIRL_UZI_RATE, &AF(CarGirlUzi), &s_CarGirlUzi[5]}, - {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[6]}, - {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, &AF(CarGirlUzi), &s_CarGirlUzi[7]}, - {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[8]}, - {CARGIRL_FIRE_R0 + 0, CARGIRL_UZI_RATE, &AF(CarGirlUzi), &s_CarGirlUzi[9]}, - {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[10]}, - {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, &AF(CarGirlUzi), &s_CarGirlUzi[11]}, - {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[12]}, - {CARGIRL_FIRE_R0 + 0, CARGIRL_UZI_RATE, &AF(CarGirlUzi), &s_CarGirlUzi[13]}, - {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[14]}, - {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, &AF(CarGirlUzi), &s_CarGirlUzi[15]}, - {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_CarGirlUzi[0]}, + {CARGIRL_FIRE_R0 + 0, 240, CarGirlUzi, &s_CarGirlUzi[1]}, + {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[2]}, + {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, CarGirlUzi, &s_CarGirlUzi[3]}, + {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[4]}, + {CARGIRL_FIRE_R0 + 0, CARGIRL_UZI_RATE, CarGirlUzi, &s_CarGirlUzi[5]}, + {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[6]}, + {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, CarGirlUzi, &s_CarGirlUzi[7]}, + {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[8]}, + {CARGIRL_FIRE_R0 + 0, CARGIRL_UZI_RATE, CarGirlUzi, &s_CarGirlUzi[9]}, + {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[10]}, + {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, CarGirlUzi, &s_CarGirlUzi[11]}, + {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[12]}, + {CARGIRL_FIRE_R0 + 0, CARGIRL_UZI_RATE, CarGirlUzi, &s_CarGirlUzi[13]}, + {CARGIRL_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[14]}, + {CARGIRL_FIRE_R0 + 1, CARGIRL_UZI_RATE, CarGirlUzi, &s_CarGirlUzi[15]}, + {CARGIRL_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_CarGirlUzi[0]}, }; //--------------------------------------------------------------------------- @@ -1289,6 +1278,8 @@ STATE s_CarGirlUzi[16] = int SetupCarGirl(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, CARGIRL_R0,s_CarGirlStand); @@ -1299,10 +1290,10 @@ int SetupCarGirl(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_CarGirlStand); - actor->user.__legacyState.Attrib = &CarGirlAttrib; - actor->user.__legacyState.StateEnd = s_CarGirlStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &CarGirlAttrib; + actor->user.StateEnd = s_CarGirlStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->spr.scale = DVector2(0.453125, 0.390625); actor->vel.X = 0; @@ -1317,13 +1308,6 @@ int SetupCarGirl(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWCarGirl, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupCarGirl(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -1461,6 +1445,8 @@ int CarGirlPain(DSWActor* actor) // //--------------------------------------------------------------------------- +ANIMATOR NullMechanicGirl; + ATTRIBUTE MechanicGirlAttrib = { {0, 0, 0, 0}, // Speeds @@ -1478,11 +1464,12 @@ ATTRIBUTE MechanicGirlAttrib = // ////////////////////// #define MECHANICGIRL_RATE 60 +ANIMATOR NullMechanicGirl,DoMechanicGirl; STATE s_MechanicGirlStand[2] = { - {MECHANICGIRL_R0 + 0, MECHANICGIRL_RATE, &AF(DoMechanicGirl), &s_MechanicGirlStand[1]}, - {MECHANICGIRL_R0 + 1, MECHANICGIRL_RATE, &AF(DoMechanicGirl), &s_MechanicGirlStand[0]} + {MECHANICGIRL_R0 + 0, MECHANICGIRL_RATE, DoMechanicGirl, &s_MechanicGirlStand[1]}, + {MECHANICGIRL_R0 + 1, MECHANICGIRL_RATE, DoMechanicGirl, &s_MechanicGirlStand[0]} }; ////////////////////// @@ -1493,11 +1480,12 @@ STATE s_MechanicGirlStand[2] = #define MECHANICGIRL_PAIN_RATE 32 #define MECHANICGIRL_PAIN_R0 MECHANICGIRL_R0 +ANIMATOR MechanicGirlPain; STATE s_MechanicGirlPain[2] = { - {MECHANICGIRL_PAIN_R0 + 0, MECHANICGIRL_PAIN_RATE, &AF(MechanicGirlPain), &s_MechanicGirlPain[1]}, - {MECHANICGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_MechanicGirlPain[0]} + {MECHANICGIRL_PAIN_R0 + 0, MECHANICGIRL_PAIN_RATE, MechanicGirlPain, &s_MechanicGirlPain[1]}, + {MECHANICGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_MechanicGirlPain[0]} }; ////////////////////// @@ -1508,11 +1496,12 @@ STATE s_MechanicGirlPain[2] = #define MECHANICGIRL_DRILL_RATE 32 #define MECHANICGIRL_DRILL_R0 MECHANICGIRL_R0 + 2 +ANIMATOR MechanicGirlDrill; STATE s_MechanicGirlDrill[2] = { - {MECHANICGIRL_DRILL_R0 + 0, MECHANICGIRL_DRILL_RATE, &AF(MechanicGirlDrill), &s_MechanicGirlDrill[1]}, - {MECHANICGIRL_DRILL_R0 + 1, MECHANICGIRL_DRILL_RATE, &AF(MechanicGirlDrill), &s_MechanicGirlDrill[0]}, + {MECHANICGIRL_DRILL_R0 + 0, MECHANICGIRL_DRILL_RATE, MechanicGirlDrill, &s_MechanicGirlDrill[1]}, + {MECHANICGIRL_DRILL_R0 + 1, MECHANICGIRL_DRILL_RATE, MechanicGirlDrill, &s_MechanicGirlDrill[0]}, }; @@ -1524,6 +1513,8 @@ STATE s_MechanicGirlDrill[2] = int SetupMechanicGirl(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, MECHANICGIRL_R0,s_MechanicGirlStand); @@ -1534,10 +1525,10 @@ int SetupMechanicGirl(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_MechanicGirlStand); - actor->user.__legacyState.Attrib = &MechanicGirlAttrib; - actor->user.__legacyState.StateEnd = s_MechanicGirlStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &MechanicGirlAttrib; + actor->user.StateEnd = s_MechanicGirlStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->spr.scale = DVector2(0.421875, 0.40625); actor->vel.X = 0; @@ -1551,13 +1542,6 @@ int SetupMechanicGirl(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWMechanicGirl, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupMechanicGirl(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -1695,6 +1679,8 @@ int MechanicGirlPain(DSWActor* actor) // //--------------------------------------------------------------------------- +ANIMATOR NullSailorGirl; + ATTRIBUTE SailorGirlAttrib = { {0, 0, 0, 0}, // Speeds @@ -1712,11 +1698,12 @@ ATTRIBUTE SailorGirlAttrib = // ////////////////////// #define SAILORGIRL_RATE 60 +ANIMATOR NullSailorGirl,DoSailorGirl; STATE s_SailorGirlStand[2] = { - {SAILORGIRL_R0 + 0, SAILORGIRL_RATE, &AF(DoSailorGirl), &s_SailorGirlStand[1]}, - {SAILORGIRL_R0 + 1, SAILORGIRL_RATE, &AF(DoSailorGirl), &s_SailorGirlStand[0]} + {SAILORGIRL_R0 + 0, SAILORGIRL_RATE, DoSailorGirl, &s_SailorGirlStand[1]}, + {SAILORGIRL_R0 + 1, SAILORGIRL_RATE, DoSailorGirl, &s_SailorGirlStand[0]} }; ////////////////////// @@ -1727,11 +1714,12 @@ STATE s_SailorGirlStand[2] = #define SAILORGIRL_PAIN_RATE 32 #define SAILORGIRL_PAIN_R0 SAILORGIRL_R0 +ANIMATOR SailorGirlPain; STATE s_SailorGirlPain[2] = { - {SAILORGIRL_PAIN_R0 + 0, SAILORGIRL_PAIN_RATE, &AF(SailorGirlPain), &s_SailorGirlPain[1]}, - {SAILORGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SailorGirlPain[0]} + {SAILORGIRL_PAIN_R0 + 0, SAILORGIRL_PAIN_RATE, SailorGirlPain, &s_SailorGirlPain[1]}, + {SAILORGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_SailorGirlPain[0]} }; ////////////////////// @@ -1742,10 +1730,11 @@ STATE s_SailorGirlPain[2] = #define SAILORGIRL_UZI_RATE 128 #define SAILORGIRL_FIRE_R0 SAILORGIRL_R0 + 2 +ANIMATOR InitEnemyUzi,SailorGirlThrow; STATE s_SailorGirlThrow[] = { - {SAILORGIRL_FIRE_R0 + 0, SAILORGIRL_UZI_RATE, &AF(SailorGirlThrow), &s_SailorGirlThrow[0]}, + {SAILORGIRL_FIRE_R0 + 0, SAILORGIRL_UZI_RATE, SailorGirlThrow, &s_SailorGirlThrow[0]}, }; short alreadythrew; @@ -1758,6 +1747,8 @@ short alreadythrew; int SetupSailorGirl(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, SAILORGIRL_R0,s_SailorGirlStand); @@ -1768,10 +1759,10 @@ int SetupSailorGirl(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_SailorGirlStand); - actor->user.__legacyState.Attrib = &SailorGirlAttrib; - actor->user.__legacyState.StateEnd = s_SailorGirlStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &SailorGirlAttrib; + actor->user.StateEnd = s_SailorGirlStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->spr.scale = DVector2(0.4375, 0.40625); actor->vel.X = 0; @@ -1786,13 +1777,6 @@ int SetupSailorGirl(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWSailorGirl, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupEel(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -1940,6 +1924,8 @@ int SailorGirlPain(DSWActor* actor) //--------------------------------------------------------------------------- +ANIMATOR NullPruneGirl; + ATTRIBUTE PruneGirlAttrib = { {450, 450, 450, 450}, // Speeds @@ -1958,11 +1944,12 @@ ATTRIBUTE PruneGirlAttrib = // ////////////////////// #define PRUNEGIRL_RATE 60 +ANIMATOR NullPruneGirl,DoPruneGirl; STATE s_PruneGirlStand[2] = { - {PRUNEGIRL_R0 + 0, PRUNEGIRL_RATE, &AF(DoPruneGirl), &s_PruneGirlStand[1]}, - {PRUNEGIRL_R0 + 1, PRUNEGIRL_RATE, &AF(DoPruneGirl), &s_PruneGirlStand[0]} + {PRUNEGIRL_R0 + 0, PRUNEGIRL_RATE, DoPruneGirl, &s_PruneGirlStand[1]}, + {PRUNEGIRL_R0 + 1, PRUNEGIRL_RATE, DoPruneGirl, &s_PruneGirlStand[0]} }; ////////////////////// @@ -1973,11 +1960,12 @@ STATE s_PruneGirlStand[2] = #define PRUNEGIRL_PAIN_RATE 32 #define PRUNEGIRL_PAIN_R0 PRUNEGIRL_R0 +ANIMATOR PruneGirlPain; STATE s_PruneGirlPain[2] = { - {PRUNEGIRL_PAIN_R0 + 0, PRUNEGIRL_PAIN_RATE, &AF(PruneGirlPain), &s_PruneGirlPain[1]}, - {PRUNEGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_PruneGirlPain[0]} + {PRUNEGIRL_PAIN_R0 + 0, PRUNEGIRL_PAIN_RATE, PruneGirlPain, &s_PruneGirlPain[1]}, + {PRUNEGIRL_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_PruneGirlPain[0]} }; //--------------------------------------------------------------------------- @@ -1988,6 +1976,8 @@ STATE s_PruneGirlPain[2] = int SetupPruneGirl(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, PRUNEGIRL_R0,s_PruneGirlStand); @@ -1998,10 +1988,10 @@ int SetupPruneGirl(DSWActor* actor) EnemyDefaults(actor, nullptr, nullptr); ChangeState(actor,s_PruneGirlStand); - actor->user.__legacyState.Attrib = &PruneGirlAttrib; - actor->user.__legacyState.StateEnd = s_PruneGirlStand; - actor->user.__legacyState.Rot = 0; - actor->user.__legacyState.RotNum = 0; + actor->user.Attrib = &PruneGirlAttrib; + actor->user.StateEnd = s_PruneGirlStand; + actor->user.Rot = 0; + actor->user.RotNum = 0; actor->spr.scale = DVector2(0.515625, 0.4375); actor->vel.X = 0; @@ -2015,13 +2005,6 @@ int SetupPruneGirl(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWPruneGirl, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupPruneGirl(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -2177,6 +2160,47 @@ int PruneGirlPain(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_miscactr_code[] = +{ + SAVE_CODE(DoToiletGirl), + SAVE_CODE(NullToiletGirl), + SAVE_CODE(ToiletGirlUzi), + SAVE_CODE(ToiletGirlPain), + + SAVE_CODE(DoWashGirl), + SAVE_CODE(NullWashGirl), + SAVE_CODE(WashGirlUzi), + SAVE_CODE(WashGirlPain), + + SAVE_CODE(DoTrashCan), + SAVE_CODE(TrashCanPain), + + SAVE_CODE(PachinkoLightOperate), + + SAVE_CODE(PachinkoCheckWin), + SAVE_CODE(Pachinko1Operate), + + SAVE_CODE(DoCarGirl), + SAVE_CODE(NullCarGirl), + SAVE_CODE(CarGirlUzi), + SAVE_CODE(CarGirlPain), + + SAVE_CODE(DoMechanicGirl), + SAVE_CODE(NullMechanicGirl), + SAVE_CODE(MechanicGirlDrill), + SAVE_CODE(MechanicGirlPain), + + SAVE_CODE(DoSailorGirl), + SAVE_CODE(NullSailorGirl), + SAVE_CODE(SailorGirlThrow), + SAVE_CODE(SailorGirlPain), + + SAVE_CODE(DoPruneGirl), + SAVE_CODE(NullPruneGirl), + SAVE_CODE(PruneGirlUzi), + SAVE_CODE(PruneGirlPain), +}; + static saveable_data saveable_miscactr_data[] = { SAVE_DATA(ToiletGirlAttrib), @@ -2227,7 +2251,8 @@ static saveable_data saveable_miscactr_data[] = saveable_module saveable_miscactr = { // code - nullptr, 0, + saveable_miscactr_code, + SIZ(saveable_miscactr_code), // data saveable_miscactr_data, diff --git a/source/games/sw/src/morph.cpp b/source/games/sw/src/morph.cpp index b25ad2a0fb0..b059779c7aa 100644 --- a/source/games/sw/src/morph.cpp +++ b/source/games/sw/src/morph.cpp @@ -37,6 +37,8 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +void ScaleSectorObject(SECTOR_OBJECT*); + //--------------------------------------------------------------------------- // // @@ -55,7 +57,7 @@ short DoSectorObjectSetScale(short match) if (sop->match_event == match) { sop->flags |= (SOBJ_DYNAMIC); - sop->PreMoveScale = true; + sop->PreMoveAnimator = ScaleSectorObject; switch (sop->scale_active_type) { @@ -533,4 +535,23 @@ void SpikeFloor(SECTOR_OBJECT* sop) // //--------------------------------------------------------------------------- +#include "saveable.h" + +static saveable_code saveable_morph_code[] = +{ + SAVE_CODE(ScaleSectorObject), + SAVE_CODE(MorphTornado), + SAVE_CODE(MorphFloor), + SAVE_CODE(SpikeFloor), +}; + +saveable_module saveable_morph = +{ + // code + saveable_morph_code, + SIZ(saveable_morph_code), + + // data + nullptr,0 +}; END_SW_NS diff --git a/source/games/sw/src/namelist.h b/source/games/sw/src/namelist.h index fb36fccd22b..fc75912a0f3 100644 --- a/source/games/sw/src/namelist.h +++ b/source/games/sw/src/namelist.h @@ -767,6 +767,10 @@ x(BREAK_LIGHT, 443) x(BREAK_MUSHROOM, 666) x(STAR1, 2049) x(CRACK, 80) +x(MPLOCK1, 1846) +x(MPLOCK2, 1850) +x(MPLOCK3, 1852) +x(MPLOCK4, 2470) x(BLADE4, 5011) x(FFIRE1, 3143) x(FFIRE2, 3157) diff --git a/source/games/sw/src/ninja.cpp b/source/games/sw/src/ninja.cpp index 2826fd7b8ff..3bc4405d99a 100644 --- a/source/games/sw/src/ninja.cpp +++ b/source/games/sw/src/ninja.cpp @@ -56,44 +56,50 @@ BEGIN_SW_NS DECISION NinjaBattle[] = { - {499, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorAttack)} + {499, InitActorMoveCloser}, + //{509, InitActorAmbientNoise}, + //{710, InitActorRunAway}, + {1024, InitActorAttack} }; DECISION NinjaOffense[] = { - {499, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorAttack)} + {499, InitActorMoveCloser}, + //{509, InitActorAmbientNoise}, + {1024, InitActorAttack} }; -DECISIONB NinjaBroadcast[] = +DECISION NinjaBroadcast[] = { - {6, attr_ambient}, - {1024, 0} + //{1, InitActorAlertNoise}, + {6, InitActorAmbientNoise}, + {1024, InitActorDecide} }; DECISION NinjaSurprised[] = { - {701, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorDecide)} + {701, InitActorMoveCloser}, + {1024, InitActorDecide} }; DECISION NinjaEvasive[] = { - {400, &AF(InitActorDuck)}, // 100 + {400, InitActorDuck}, // 100 +// {300, InitActorEvade}, +// {800, InitActorRunAway}, {1024, nullptr} }; DECISION NinjaLostTarget[] = { - {900, &AF(InitActorFindPlayer)}, - {1024, &AF(InitActorWanderAround)} + {900, InitActorFindPlayer}, + {1024, InitActorWanderAround} }; DECISION NinjaCloseRange[] = { - {700, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {700, InitActorAttack }, + {1024, InitActorReposition } }; /* @@ -117,28 +123,22 @@ PERSONALITY NinjaPersonality = // Sniper Ninjas DECISION NinjaSniperRoam[] = { - {1023, &AF(InitActorDuck)}, - {1024, &AF(InitActorSetDecide)}, -}; - -DECISIONB NinjaSniperBroadcast2[] = -{ - {1023, 0}, - {1024, attr_ambient}, + {1023, InitActorDuck}, + {1024, InitActorAmbientNoise}, }; DECISION NinjaSniperBattle[] = { - {499, &AF(InitActorDuck)}, - {500, &AF(InitActorSetDecide)}, - {1024, &AF(InitActorAttack)} + {499, InitActorDuck}, + {500, InitActorAmbientNoise}, + {1024, InitActorAttack} }; PERSONALITY NinjaSniperPersonality = { NinjaSniperBattle, NinjaSniperBattle, - NinjaSniperBroadcast2, + NinjaSniperRoam, NinjaSniperRoam, NinjaSniperRoam, NinjaSniperRoam, @@ -183,44 +183,94 @@ ATTRIBUTE InvisibleNinjaAttrib = // ////////////////////// +ANIMATOR DoNinjaMove, DoNinjaCrawl, DoStayOnFloor, NullNinja, DoActorJump, DoActorFall, DoActorDebris, DoNinjaHariKari, DoActorSlide; +ANIMATOR InitActorDecide; + #define NINJA_RATE 18 STATE s_NinjaRun[5][4] = { { - {NINJA_RUN_R0 + 0, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[0][1]}, - {NINJA_RUN_R0 + 1, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[0][2]}, - {NINJA_RUN_R0 + 2, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[0][3]}, - {NINJA_RUN_R0 + 3, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[0][0]}, + {NINJA_RUN_R0 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][1]}, + {NINJA_RUN_R0 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][2]}, + {NINJA_RUN_R0 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][3]}, + {NINJA_RUN_R0 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][0]}, }, { - {NINJA_RUN_R1 + 0, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[1][1]}, - {NINJA_RUN_R1 + 1, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[1][2]}, - {NINJA_RUN_R1 + 2, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[1][3]}, - {NINJA_RUN_R1 + 3, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[1][0]}, + {NINJA_RUN_R1 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][1]}, + {NINJA_RUN_R1 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][2]}, + {NINJA_RUN_R1 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][3]}, + {NINJA_RUN_R1 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][0]}, }, { - {NINJA_RUN_R2 + 0, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[2][1]}, - {NINJA_RUN_R2 + 1, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[2][2]}, - {NINJA_RUN_R2 + 2, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[2][3]}, - {NINJA_RUN_R2 + 3, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[2][0]}, + {NINJA_RUN_R2 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][1]}, + {NINJA_RUN_R2 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][2]}, + {NINJA_RUN_R2 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][3]}, + {NINJA_RUN_R2 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][0]}, }, { - {NINJA_RUN_R3 + 0, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[3][1]}, - {NINJA_RUN_R3 + 1, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[3][2]}, - {NINJA_RUN_R3 + 2, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[3][3]}, - {NINJA_RUN_R3 + 3, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[3][0]}, + {NINJA_RUN_R3 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][1]}, + {NINJA_RUN_R3 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][2]}, + {NINJA_RUN_R3 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][3]}, + {NINJA_RUN_R3 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][0]}, }, { - {NINJA_RUN_R4 + 0, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[4][1]}, - {NINJA_RUN_R4 + 1, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[4][2]}, - {NINJA_RUN_R4 + 2, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[4][3]}, - {NINJA_RUN_R4 + 3, NINJA_RATE | SF_TIC_ADJUST, &AF(DoNinjaMove), &s_NinjaRun[4][0]}, + {NINJA_RUN_R4 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][1]}, + {NINJA_RUN_R4 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][2]}, + {NINJA_RUN_R4 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][3]}, + {NINJA_RUN_R4 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][0]}, }, }; +#if 0 +STATE s_NinjaRun[5][6] = +{ + + { + {NINJA_RUN_R0 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][1]}, + {NINJA_RUN_R0 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][2]}, + {NINJA_RUN_R0 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][3]}, + {NINJA_RUN_R0 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][4]}, + {NINJA_RUN_R0 + 4, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][5]}, + {NINJA_RUN_R0 + 5, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[0][0]}, + }, + { + {NINJA_RUN_R1 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][1]}, + {NINJA_RUN_R1 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][2]}, + {NINJA_RUN_R1 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][3]}, + {NINJA_RUN_R1 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][4]}, + {NINJA_RUN_R1 + 4, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][5]}, + {NINJA_RUN_R1 + 5, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[1][0]}, + }, + { + {NINJA_RUN_R2 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][1]}, + {NINJA_RUN_R2 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][2]}, + {NINJA_RUN_R2 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][3]}, + {NINJA_RUN_R2 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][4]}, + {NINJA_RUN_R2 + 4, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][5]}, + {NINJA_RUN_R2 + 5, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[2][0]}, + }, + { + {NINJA_RUN_R3 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][1]}, + {NINJA_RUN_R3 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][2]}, + {NINJA_RUN_R3 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][3]}, + {NINJA_RUN_R3 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][4]}, + {NINJA_RUN_R3 + 4, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][5]}, + {NINJA_RUN_R3 + 5, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[3][0]}, + }, + { + {NINJA_RUN_R4 + 0, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][1]}, + {NINJA_RUN_R4 + 1, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][2]}, + {NINJA_RUN_R4 + 2, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][3]}, + {NINJA_RUN_R4 + 3, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][4]}, + {NINJA_RUN_R4 + 4, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][5]}, + {NINJA_RUN_R4 + 5, NINJA_RATE | SF_TIC_ADJUST, DoNinjaMove, &s_NinjaRun[4][0]}, + }, + +}; +#endif STATE* sg_NinjaRun[] = { @@ -242,19 +292,19 @@ STATE* sg_NinjaRun[] = STATE s_NinjaStand[5][1] = { { - {NINJA_STAND_R0 + 0, NINJA_STAND_RATE, &AF(DoNinjaMove), &s_NinjaStand[0][0]}, + {NINJA_STAND_R0 + 0, NINJA_STAND_RATE, DoNinjaMove, &s_NinjaStand[0][0]}, }, { - {NINJA_STAND_R1 + 0, NINJA_STAND_RATE, &AF(DoNinjaMove), &s_NinjaStand[1][0]}, + {NINJA_STAND_R1 + 0, NINJA_STAND_RATE, DoNinjaMove, &s_NinjaStand[1][0]}, }, { - {NINJA_STAND_R2 + 0, NINJA_STAND_RATE, &AF(DoNinjaMove), &s_NinjaStand[2][0]}, + {NINJA_STAND_R2 + 0, NINJA_STAND_RATE, DoNinjaMove, &s_NinjaStand[2][0]}, }, { - {NINJA_STAND_R3 + 0, NINJA_STAND_RATE, &AF(DoNinjaMove), &s_NinjaStand[3][0]}, + {NINJA_STAND_R3 + 0, NINJA_STAND_RATE, DoNinjaMove, &s_NinjaStand[3][0]}, }, { - {NINJA_STAND_R4 + 0, NINJA_STAND_RATE, &AF(DoNinjaMove), &s_NinjaStand[4][0]}, + {NINJA_STAND_R4 + 0, NINJA_STAND_RATE, DoNinjaMove, &s_NinjaStand[4][0]}, }, }; @@ -279,28 +329,28 @@ STATE* sg_NinjaStand[] = STATE s_NinjaRise[5][3] = { { - {NINJA_KNEEL_R0 + 0, NINJA_RISE_RATE, &AF(NullNinja), &s_NinjaRise[0][1]}, - {NINJA_STAND_R0 + 0, NINJA_STAND_RATE, &AF(NullNinja), &s_NinjaRise[0][2]}, + {NINJA_KNEEL_R0 + 0, NINJA_RISE_RATE, NullNinja, &s_NinjaRise[0][1]}, + {NINJA_STAND_R0 + 0, NINJA_STAND_RATE, NullNinja, &s_NinjaRise[0][2]}, {0, 0, nullptr, (STATE*)sg_NinjaRun}, }, { - {NINJA_KNEEL_R1 + 0, NINJA_RISE_RATE, &AF(NullNinja), &s_NinjaRise[1][1]}, - {NINJA_STAND_R1 + 0, NINJA_STAND_RATE, &AF(NullNinja), &s_NinjaRise[1][2]}, + {NINJA_KNEEL_R1 + 0, NINJA_RISE_RATE, NullNinja, &s_NinjaRise[1][1]}, + {NINJA_STAND_R1 + 0, NINJA_STAND_RATE, NullNinja, &s_NinjaRise[1][2]}, {0, 0, nullptr, (STATE*)sg_NinjaRun}, }, { - {NINJA_KNEEL_R2 + 0, NINJA_RISE_RATE, &AF(NullNinja), &s_NinjaRise[2][1]}, - {NINJA_STAND_R2 + 0, NINJA_STAND_RATE, &AF(NullNinja), &s_NinjaRise[2][2]}, + {NINJA_KNEEL_R2 + 0, NINJA_RISE_RATE, NullNinja, &s_NinjaRise[2][1]}, + {NINJA_STAND_R2 + 0, NINJA_STAND_RATE, NullNinja, &s_NinjaRise[2][2]}, {0, 0, nullptr, (STATE*)sg_NinjaRun}, }, { - {NINJA_KNEEL_R3 + 0, NINJA_RISE_RATE, &AF(NullNinja), &s_NinjaRise[3][1]}, - {NINJA_STAND_R3 + 0, NINJA_STAND_RATE, &AF(NullNinja), &s_NinjaRise[3][2]}, + {NINJA_KNEEL_R3 + 0, NINJA_RISE_RATE, NullNinja, &s_NinjaRise[3][1]}, + {NINJA_STAND_R3 + 0, NINJA_STAND_RATE, NullNinja, &s_NinjaRise[3][2]}, {0, 0, nullptr, (STATE*)sg_NinjaRun}, }, { - {NINJA_KNEEL_R4 + 0, NINJA_RISE_RATE, &AF(NullNinja), &s_NinjaRise[4][1]}, - {NINJA_STAND_R4 + 0, NINJA_STAND_RATE, &AF(NullNinja), &s_NinjaRise[4][2]}, + {NINJA_KNEEL_R4 + 0, NINJA_RISE_RATE, NullNinja, &s_NinjaRise[4][1]}, + {NINJA_STAND_R4 + 0, NINJA_STAND_RATE, NullNinja, &s_NinjaRise[4][2]}, {0, 0, nullptr, (STATE*)sg_NinjaRun}, }, }; @@ -327,34 +377,34 @@ STATE* sg_NinjaRise[] = STATE s_NinjaCrawl[5][4] = { { - {NINJA_CRAWL_R0 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[0][1]}, - {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[0][2]}, - {NINJA_CRAWL_R0 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[0][3]}, - {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[0][0]}, + {NINJA_CRAWL_R0 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[0][1]}, + {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[0][2]}, + {NINJA_CRAWL_R0 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[0][3]}, + {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[0][0]}, }, { - {NINJA_CRAWL_R1 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[1][1]}, - {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[1][2]}, - {NINJA_CRAWL_R1 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[1][3]}, - {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[1][0]}, + {NINJA_CRAWL_R1 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[1][1]}, + {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[1][2]}, + {NINJA_CRAWL_R1 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[1][3]}, + {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[1][0]}, }, { - {NINJA_CRAWL_R2 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[2][1]}, - {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[2][2]}, - {NINJA_CRAWL_R2 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[2][3]}, - {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[2][0]}, + {NINJA_CRAWL_R2 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[2][1]}, + {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[2][2]}, + {NINJA_CRAWL_R2 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[2][3]}, + {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[2][0]}, }, { - {NINJA_CRAWL_R3 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[3][1]}, - {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[3][2]}, - {NINJA_CRAWL_R3 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[3][3]}, - {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[3][0]}, + {NINJA_CRAWL_R3 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[3][1]}, + {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[3][2]}, + {NINJA_CRAWL_R3 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[3][3]}, + {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[3][0]}, }, { - {NINJA_CRAWL_R4 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[4][1]}, - {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[4][2]}, - {NINJA_CRAWL_R4 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[4][3]}, - {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaCrawl[4][0]}, + {NINJA_CRAWL_R4 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[4][1]}, + {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[4][2]}, + {NINJA_CRAWL_R4 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[4][3]}, + {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaCrawl[4][0]}, }, }; @@ -379,39 +429,39 @@ STATE* sg_NinjaCrawl[] = STATE s_NinjaKneelCrawl[5][5] = { { - {NINJA_KNEEL_R0 + 0, NINJA_KNEEL_CRAWL_RATE, &AF(NullNinja), &s_NinjaKneelCrawl[0][1]}, - {NINJA_CRAWL_R0 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[0][2]}, - {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[0][3]}, - {NINJA_CRAWL_R0 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[0][4]}, - {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[0][1]}, + {NINJA_KNEEL_R0 + 0, NINJA_KNEEL_CRAWL_RATE, NullNinja, &s_NinjaKneelCrawl[0][1]}, + {NINJA_CRAWL_R0 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[0][2]}, + {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[0][3]}, + {NINJA_CRAWL_R0 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[0][4]}, + {NINJA_CRAWL_R0 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[0][1]}, }, { - {NINJA_KNEEL_R1 + 0, NINJA_KNEEL_CRAWL_RATE, &AF(NullNinja), &s_NinjaKneelCrawl[1][1]}, - {NINJA_CRAWL_R1 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[1][2]}, - {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[1][3]}, - {NINJA_CRAWL_R1 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[1][4]}, - {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[1][1]}, + {NINJA_KNEEL_R1 + 0, NINJA_KNEEL_CRAWL_RATE, NullNinja, &s_NinjaKneelCrawl[1][1]}, + {NINJA_CRAWL_R1 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[1][2]}, + {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[1][3]}, + {NINJA_CRAWL_R1 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[1][4]}, + {NINJA_CRAWL_R1 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[1][1]}, }, { - {NINJA_KNEEL_R2 + 0, NINJA_KNEEL_CRAWL_RATE, &AF(NullNinja), &s_NinjaKneelCrawl[2][1]}, - {NINJA_CRAWL_R2 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[2][2]}, - {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[2][3]}, - {NINJA_CRAWL_R2 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[2][4]}, - {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[2][1]}, + {NINJA_KNEEL_R2 + 0, NINJA_KNEEL_CRAWL_RATE, NullNinja, &s_NinjaKneelCrawl[2][1]}, + {NINJA_CRAWL_R2 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[2][2]}, + {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[2][3]}, + {NINJA_CRAWL_R2 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[2][4]}, + {NINJA_CRAWL_R2 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[2][1]}, }, { - {NINJA_KNEEL_R3 + 0, NINJA_KNEEL_CRAWL_RATE, &AF(NullNinja), &s_NinjaKneelCrawl[3][1]}, - {NINJA_CRAWL_R3 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[3][2]}, - {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[3][3]}, - {NINJA_CRAWL_R3 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[3][4]}, - {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[3][1]}, + {NINJA_KNEEL_R3 + 0, NINJA_KNEEL_CRAWL_RATE, NullNinja, &s_NinjaKneelCrawl[3][1]}, + {NINJA_CRAWL_R3 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[3][2]}, + {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[3][3]}, + {NINJA_CRAWL_R3 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[3][4]}, + {NINJA_CRAWL_R3 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[3][1]}, }, { - {NINJA_KNEEL_R4 + 0, NINJA_KNEEL_CRAWL_RATE, &AF(NullNinja), &s_NinjaKneelCrawl[4][1]}, - {NINJA_CRAWL_R4 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[4][2]}, - {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[4][3]}, - {NINJA_CRAWL_R4 + 2, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[4][4]}, - {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaKneelCrawl[4][1]}, + {NINJA_KNEEL_R4 + 0, NINJA_KNEEL_CRAWL_RATE, NullNinja, &s_NinjaKneelCrawl[4][1]}, + {NINJA_CRAWL_R4 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[4][2]}, + {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[4][3]}, + {NINJA_CRAWL_R4 + 2, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[4][4]}, + {NINJA_CRAWL_R4 + 1, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaKneelCrawl[4][1]}, }, }; @@ -437,24 +487,24 @@ STATE* sg_NinjaKneelCrawl[] = STATE s_NinjaDuck[5][2] = { { - {NINJA_KNEEL_R0 + 0, NINJA_DUCK_RATE, &AF(NullNinja), &s_NinjaDuck[0][1]}, - {NINJA_CRAWL_R0 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaDuck[0][1]}, + {NINJA_KNEEL_R0 + 0, NINJA_DUCK_RATE, NullNinja, &s_NinjaDuck[0][1]}, + {NINJA_CRAWL_R0 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaDuck[0][1]}, }, { - {NINJA_KNEEL_R1 + 0, NINJA_DUCK_RATE, &AF(NullNinja), &s_NinjaDuck[1][1]}, - {NINJA_CRAWL_R1 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaDuck[1][1]}, + {NINJA_KNEEL_R1 + 0, NINJA_DUCK_RATE, NullNinja, &s_NinjaDuck[1][1]}, + {NINJA_CRAWL_R1 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaDuck[1][1]}, }, { - {NINJA_KNEEL_R2 + 0, NINJA_DUCK_RATE, &AF(NullNinja), &s_NinjaDuck[2][1]}, - {NINJA_CRAWL_R2 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaDuck[2][1]}, + {NINJA_KNEEL_R2 + 0, NINJA_DUCK_RATE, NullNinja, &s_NinjaDuck[2][1]}, + {NINJA_CRAWL_R2 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaDuck[2][1]}, }, { - {NINJA_KNEEL_R3 + 0, NINJA_DUCK_RATE, &AF(NullNinja), &s_NinjaDuck[3][1]}, - {NINJA_CRAWL_R3 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaDuck[3][1]}, + {NINJA_KNEEL_R3 + 0, NINJA_DUCK_RATE, NullNinja, &s_NinjaDuck[3][1]}, + {NINJA_CRAWL_R3 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaDuck[3][1]}, }, { - {NINJA_KNEEL_R4 + 0, NINJA_DUCK_RATE, &AF(NullNinja), &s_NinjaDuck[4][1]}, - {NINJA_CRAWL_R4 + 0, NINJA_CRAWL_RATE, &AF(DoNinjaMove), &s_NinjaDuck[4][1]}, + {NINJA_KNEEL_R4 + 0, NINJA_DUCK_RATE, NullNinja, &s_NinjaDuck[4][1]}, + {NINJA_CRAWL_R4 + 0, NINJA_CRAWL_RATE, DoNinjaMove, &s_NinjaDuck[4][1]}, }, }; @@ -478,19 +528,19 @@ STATE* sg_NinjaDuck[] = STATE s_NinjaSit[5][1] = { { - {NINJA_KNEEL_R0 + 0, NINJA_RISE_RATE, &AF(DoNinjaMove), &s_NinjaSit[0][0]}, + {NINJA_KNEEL_R0 + 0, NINJA_RISE_RATE, DoNinjaMove, &s_NinjaSit[0][0]}, }, { - {NINJA_KNEEL_R1 + 0, NINJA_RISE_RATE, &AF(DoNinjaMove), &s_NinjaSit[1][0]}, + {NINJA_KNEEL_R1 + 0, NINJA_RISE_RATE, DoNinjaMove, &s_NinjaSit[1][0]}, }, { - {NINJA_KNEEL_R2 + 0, NINJA_RISE_RATE, &AF(DoNinjaMove), &s_NinjaSit[2][0]}, + {NINJA_KNEEL_R2 + 0, NINJA_RISE_RATE, DoNinjaMove, &s_NinjaSit[2][0]}, }, { - {NINJA_KNEEL_R3 + 0, NINJA_RISE_RATE, &AF(DoNinjaMove), &s_NinjaSit[3][0]}, + {NINJA_KNEEL_R3 + 0, NINJA_RISE_RATE, DoNinjaMove, &s_NinjaSit[3][0]}, }, { - {NINJA_KNEEL_R4 + 0, NINJA_RISE_RATE, &AF(DoNinjaMove), &s_NinjaSit[4][0]}, + {NINJA_KNEEL_R4 + 0, NINJA_RISE_RATE, DoNinjaMove, &s_NinjaSit[4][0]}, }, }; @@ -510,22 +560,23 @@ STATE* sg_NinjaSit[] = // ////////////////////// +ANIMATOR DoNinjaCeiling; STATE s_NinjaCeiling[5][1] = { { - {NINJA_KNEEL_R0 + 0, NINJA_RISE_RATE, &AF(DoNinjaCeiling), &s_NinjaCeiling[0][0]}, + {NINJA_KNEEL_R0 + 0, NINJA_RISE_RATE, DoNinjaCeiling, &s_NinjaCeiling[0][0]}, }, { - {NINJA_KNEEL_R1 + 0, NINJA_RISE_RATE, &AF(DoNinjaCeiling), &s_NinjaCeiling[1][0]}, + {NINJA_KNEEL_R1 + 0, NINJA_RISE_RATE, DoNinjaCeiling, &s_NinjaCeiling[1][0]}, }, { - {NINJA_KNEEL_R2 + 0, NINJA_RISE_RATE, &AF(DoNinjaCeiling), &s_NinjaCeiling[2][0]}, + {NINJA_KNEEL_R2 + 0, NINJA_RISE_RATE, DoNinjaCeiling, &s_NinjaCeiling[2][0]}, }, { - {NINJA_KNEEL_R3 + 0, NINJA_RISE_RATE, &AF(DoNinjaCeiling), &s_NinjaCeiling[3][0]}, + {NINJA_KNEEL_R3 + 0, NINJA_RISE_RATE, DoNinjaCeiling, &s_NinjaCeiling[3][0]}, }, { - {NINJA_KNEEL_R4 + 0, NINJA_RISE_RATE, &AF(DoNinjaCeiling), &s_NinjaCeiling[4][0]}, + {NINJA_KNEEL_R4 + 0, NINJA_RISE_RATE, DoNinjaCeiling, &s_NinjaCeiling[4][0]}, }, }; @@ -551,24 +602,24 @@ STATE* sg_NinjaCeiling[] = STATE s_NinjaJump[5][2] = { { - {NINJA_JUMP_R0 + 0, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[0][1]}, - {NINJA_JUMP_R0 + 1, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[0][1]}, + {NINJA_JUMP_R0 + 0, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[0][1]}, + {NINJA_JUMP_R0 + 1, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[0][1]}, }, { - {NINJA_JUMP_R1 + 0, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[1][1]}, - {NINJA_JUMP_R1 + 1, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[1][1]}, + {NINJA_JUMP_R1 + 0, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[1][1]}, + {NINJA_JUMP_R1 + 1, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[1][1]}, }, { - {NINJA_JUMP_R2 + 0, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[2][1]}, - {NINJA_JUMP_R2 + 1, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[2][1]}, + {NINJA_JUMP_R2 + 0, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[2][1]}, + {NINJA_JUMP_R2 + 1, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[2][1]}, }, { - {NINJA_JUMP_R3 + 0, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[3][1]}, - {NINJA_JUMP_R3 + 1, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[3][1]}, + {NINJA_JUMP_R3 + 0, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[3][1]}, + {NINJA_JUMP_R3 + 1, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[3][1]}, }, { - {NINJA_JUMP_R4 + 0, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[4][1]}, - {NINJA_JUMP_R4 + 1, NINJA_JUMP_RATE, &AF(DoNinjaMove), &s_NinjaJump[4][1]}, + {NINJA_JUMP_R4 + 0, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[4][1]}, + {NINJA_JUMP_R4 + 1, NINJA_JUMP_RATE, DoNinjaMove, &s_NinjaJump[4][1]}, }, }; @@ -594,24 +645,24 @@ STATE* sg_NinjaJump[] = STATE s_NinjaFall[5][2] = { { - {NINJA_JUMP_R0 + 1, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[0][1]}, - {NINJA_JUMP_R0 + 2, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[0][1]}, + {NINJA_JUMP_R0 + 1, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[0][1]}, + {NINJA_JUMP_R0 + 2, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[0][1]}, }, { - {NINJA_JUMP_R1 + 1, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[1][1]}, - {NINJA_JUMP_R1 + 2, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[1][1]}, + {NINJA_JUMP_R1 + 1, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[1][1]}, + {NINJA_JUMP_R1 + 2, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[1][1]}, }, { - {NINJA_JUMP_R2 + 1, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[2][1]}, - {NINJA_JUMP_R2 + 2, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[2][1]}, + {NINJA_JUMP_R2 + 1, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[2][1]}, + {NINJA_JUMP_R2 + 2, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[2][1]}, }, { - {NINJA_JUMP_R3 + 1, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[3][1]}, - {NINJA_JUMP_R3 + 2, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[3][1]}, + {NINJA_JUMP_R3 + 1, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[3][1]}, + {NINJA_JUMP_R3 + 2, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[3][1]}, }, { - {NINJA_JUMP_R4 + 1, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[4][1]}, - {NINJA_JUMP_R4 + 2, NINJA_FALL_RATE, &AF(DoNinjaMove), &s_NinjaFall[4][1]}, + {NINJA_JUMP_R4 + 1, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[4][1]}, + {NINJA_JUMP_R4 + 2, NINJA_FALL_RATE, DoNinjaMove, &s_NinjaFall[4][1]}, }, }; @@ -636,29 +687,29 @@ STATE* sg_NinjaFall[] = STATE s_NinjaSwim[5][3] = { { - {NINJA_SWIM_R0 + 1, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[0][1]}, - {NINJA_SWIM_R0 + 2, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[0][2]}, - {NINJA_SWIM_R0 + 3, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[0][0]}, + {NINJA_SWIM_R0 + 1, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[0][1]}, + {NINJA_SWIM_R0 + 2, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[0][2]}, + {NINJA_SWIM_R0 + 3, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[0][0]}, }, { - {NINJA_SWIM_R1 + 1, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[1][1]}, - {NINJA_SWIM_R1 + 2, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[1][2]}, - {NINJA_SWIM_R1 + 3, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[1][0]}, + {NINJA_SWIM_R1 + 1, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[1][1]}, + {NINJA_SWIM_R1 + 2, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[1][2]}, + {NINJA_SWIM_R1 + 3, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[1][0]}, }, { - {NINJA_SWIM_R2 + 1, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[2][1]}, - {NINJA_SWIM_R2 + 2, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[2][2]}, - {NINJA_SWIM_R2 + 3, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[2][0]}, + {NINJA_SWIM_R2 + 1, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[2][1]}, + {NINJA_SWIM_R2 + 2, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[2][2]}, + {NINJA_SWIM_R2 + 3, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[2][0]}, }, { - {NINJA_SWIM_R3 + 1, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[3][1]}, - {NINJA_SWIM_R3 + 2, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[3][2]}, - {NINJA_SWIM_R3 + 3, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[3][0]}, + {NINJA_SWIM_R3 + 1, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[3][1]}, + {NINJA_SWIM_R3 + 2, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[3][2]}, + {NINJA_SWIM_R3 + 3, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[3][0]}, }, { - {NINJA_SWIM_R4 + 1, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[4][1]}, - {NINJA_SWIM_R4 + 2, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[4][2]}, - {NINJA_SWIM_R4 + 3, NINJA_SWIM_RATE, &AF(DoNinjaMove), &s_NinjaSwim[4][0]}, + {NINJA_SWIM_R4 + 1, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[4][1]}, + {NINJA_SWIM_R4 + 2, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[4][2]}, + {NINJA_SWIM_R4 + 3, NINJA_SWIM_RATE, DoNinjaMove, &s_NinjaSwim[4][0]}, }, }; @@ -684,34 +735,34 @@ STATE* sg_NinjaSwim[] = STATE s_NinjaDive[5][4] = { { - {NINJA_SWIM_R0 + 0, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[0][1]}, - {NINJA_SWIM_R0 + 1, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[0][2]}, - {NINJA_SWIM_R0 + 2, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[0][3]}, - {NINJA_SWIM_R0 + 3, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[0][0]}, + {NINJA_SWIM_R0 + 0, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[0][1]}, + {NINJA_SWIM_R0 + 1, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[0][2]}, + {NINJA_SWIM_R0 + 2, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[0][3]}, + {NINJA_SWIM_R0 + 3, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[0][0]}, }, { - {NINJA_SWIM_R1 + 0, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[1][1]}, - {NINJA_SWIM_R1 + 1, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[1][2]}, - {NINJA_SWIM_R1 + 2, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[1][3]}, - {NINJA_SWIM_R1 + 3, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[1][0]}, + {NINJA_SWIM_R1 + 0, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[1][1]}, + {NINJA_SWIM_R1 + 1, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[1][2]}, + {NINJA_SWIM_R1 + 2, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[1][3]}, + {NINJA_SWIM_R1 + 3, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[1][0]}, }, { - {NINJA_SWIM_R2 + 0, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[2][1]}, - {NINJA_SWIM_R2 + 1, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[2][2]}, - {NINJA_SWIM_R2 + 2, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[2][3]}, - {NINJA_SWIM_R2 + 3, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[2][0]}, + {NINJA_SWIM_R2 + 0, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[2][1]}, + {NINJA_SWIM_R2 + 1, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[2][2]}, + {NINJA_SWIM_R2 + 2, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[2][3]}, + {NINJA_SWIM_R2 + 3, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[2][0]}, }, { - {NINJA_SWIM_R3 + 0, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[3][1]}, - {NINJA_SWIM_R3 + 1, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[3][2]}, - {NINJA_SWIM_R3 + 2, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[3][3]}, - {NINJA_SWIM_R3 + 3, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[3][0]}, + {NINJA_SWIM_R3 + 0, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[3][1]}, + {NINJA_SWIM_R3 + 1, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[3][2]}, + {NINJA_SWIM_R3 + 2, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[3][3]}, + {NINJA_SWIM_R3 + 3, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[3][0]}, }, { - {NINJA_SWIM_R4 + 0, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[4][1]}, - {NINJA_SWIM_R4 + 1, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[4][2]}, - {NINJA_SWIM_R4 + 2, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[4][3]}, - {NINJA_SWIM_R4 + 3, NINJA_DIVE_RATE, &AF(DoNinjaMove), &s_NinjaDive[4][0]}, + {NINJA_SWIM_R4 + 0, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[4][1]}, + {NINJA_SWIM_R4 + 1, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[4][2]}, + {NINJA_SWIM_R4 + 2, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[4][3]}, + {NINJA_SWIM_R4 + 3, NINJA_DIVE_RATE, DoNinjaMove, &s_NinjaDive[4][0]}, }, }; @@ -735,34 +786,34 @@ STATE* sg_NinjaDive[] = STATE s_NinjaClimb[5][4] = { { - {NINJA_CLIMB_R0 + 0, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[0][1]}, - {NINJA_CLIMB_R0 + 1, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[0][2]}, - {NINJA_CLIMB_R0 + 2, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[0][3]}, - {NINJA_CLIMB_R0 + 3, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[0][0]}, + {NINJA_CLIMB_R0 + 0, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[0][1]}, + {NINJA_CLIMB_R0 + 1, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[0][2]}, + {NINJA_CLIMB_R0 + 2, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[0][3]}, + {NINJA_CLIMB_R0 + 3, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[0][0]}, }, { - {NINJA_CLIMB_R1 + 0, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[1][1]}, - {NINJA_CLIMB_R1 + 1, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[1][2]}, - {NINJA_CLIMB_R1 + 2, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[1][3]}, - {NINJA_CLIMB_R1 + 3, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[1][0]}, + {NINJA_CLIMB_R1 + 0, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[1][1]}, + {NINJA_CLIMB_R1 + 1, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[1][2]}, + {NINJA_CLIMB_R1 + 2, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[1][3]}, + {NINJA_CLIMB_R1 + 3, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[1][0]}, }, { - {NINJA_CLIMB_R4 + 0, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[2][1]}, - {NINJA_CLIMB_R4 + 1, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[2][2]}, - {NINJA_CLIMB_R4 + 2, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[2][3]}, - {NINJA_CLIMB_R4 + 3, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[2][0]}, + {NINJA_CLIMB_R4 + 0, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[2][1]}, + {NINJA_CLIMB_R4 + 1, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[2][2]}, + {NINJA_CLIMB_R4 + 2, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[2][3]}, + {NINJA_CLIMB_R4 + 3, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[2][0]}, }, { - {NINJA_CLIMB_R3 + 0, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[3][1]}, - {NINJA_CLIMB_R3 + 1, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[3][2]}, - {NINJA_CLIMB_R3 + 2, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[3][3]}, - {NINJA_CLIMB_R3 + 3, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[3][0]}, + {NINJA_CLIMB_R3 + 0, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[3][1]}, + {NINJA_CLIMB_R3 + 1, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[3][2]}, + {NINJA_CLIMB_R3 + 2, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[3][3]}, + {NINJA_CLIMB_R3 + 3, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[3][0]}, }, { - {NINJA_CLIMB_R2 + 0, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[4][1]}, - {NINJA_CLIMB_R2 + 1, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[4][2]}, - {NINJA_CLIMB_R2 + 2, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[4][3]}, - {NINJA_CLIMB_R2 + 3, NINJA_CLIMB_RATE, &AF(DoNinjaMove), &s_NinjaClimb[4][0]}, + {NINJA_CLIMB_R2 + 0, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[4][1]}, + {NINJA_CLIMB_R2 + 1, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[4][2]}, + {NINJA_CLIMB_R2 + 2, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[4][3]}, + {NINJA_CLIMB_R2 + 3, NINJA_CLIMB_RATE, DoNinjaMove, &s_NinjaClimb[4][0]}, }, }; @@ -787,19 +838,19 @@ STATE* sg_NinjaClimb[] = STATE s_NinjaFly[5][1] = { { - {NINJA_FLY_R0 + 0, NINJA_FLY_RATE, &AF(DoNinjaMove), &s_NinjaFly[0][0]}, + {NINJA_FLY_R0 + 0, NINJA_FLY_RATE, DoNinjaMove, &s_NinjaFly[0][0]}, }, { - {NINJA_FLY_R1 + 0, NINJA_FLY_RATE, &AF(DoNinjaMove), &s_NinjaFly[1][0]}, + {NINJA_FLY_R1 + 0, NINJA_FLY_RATE, DoNinjaMove, &s_NinjaFly[1][0]}, }, { - {NINJA_FLY_R2 + 0, NINJA_FLY_RATE, &AF(DoNinjaMove), &s_NinjaFly[2][0]}, + {NINJA_FLY_R2 + 0, NINJA_FLY_RATE, DoNinjaMove, &s_NinjaFly[2][0]}, }, { - {NINJA_FLY_R3 + 0, NINJA_FLY_RATE, &AF(DoNinjaMove), &s_NinjaFly[3][0]}, + {NINJA_FLY_R3 + 0, NINJA_FLY_RATE, DoNinjaMove, &s_NinjaFly[3][0]}, }, { - {NINJA_FLY_R4 + 0, NINJA_FLY_RATE, &AF(DoNinjaMove), &s_NinjaFly[4][0]}, + {NINJA_FLY_R4 + 0, NINJA_FLY_RATE, DoNinjaMove, &s_NinjaFly[4][0]}, }, }; @@ -819,28 +870,29 @@ STATE* sg_NinjaFly[] = ////////////////////// #define NINJA_PAIN_RATE 15 +ANIMATOR DoNinjaPain; STATE s_NinjaPain[5][2] = { { - {NINJA_PAIN_R0 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[0][1]}, - {NINJA_PAIN_R0 + 1, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[0][1]}, + {NINJA_PAIN_R0 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[0][1]}, + {NINJA_PAIN_R0 + 1, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[0][1]}, }, { - {NINJA_STAND_R1 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[1][1]}, - {NINJA_STAND_R1 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[1][1]}, + {NINJA_STAND_R1 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[1][1]}, + {NINJA_STAND_R1 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[1][1]}, }, { - {NINJA_STAND_R2 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[2][1]}, - {NINJA_STAND_R2 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[2][1]}, + {NINJA_STAND_R2 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[2][1]}, + {NINJA_STAND_R2 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[2][1]}, }, { - {NINJA_STAND_R3 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[3][1]}, - {NINJA_STAND_R3 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[3][1]}, + {NINJA_STAND_R3 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[3][1]}, + {NINJA_STAND_R3 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[3][1]}, }, { - {NINJA_STAND_R4 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[4][1]}, - {NINJA_STAND_R4 + 0, NINJA_PAIN_RATE, &AF(DoNinjaPain), &s_NinjaPain[4][1]}, + {NINJA_STAND_R4 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[4][1]}, + {NINJA_STAND_R4 + 0, NINJA_PAIN_RATE, DoNinjaPain, &s_NinjaPain[4][1]}, }, }; @@ -860,48 +912,49 @@ STATE* sg_NinjaPain[] = ////////////////////// #define NINJA_STAR_RATE 18 +ANIMATOR InitEnemyStar; STATE s_NinjaStar[5][6] = { { - {NINJA_THROW_R0 + 0, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[0][1]}, - {NINJA_THROW_R0 + 0, NINJA_STAR_RATE, &AF(NullNinja), &s_NinjaStar[0][2]}, - {NINJA_THROW_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyStar), &s_NinjaStar[0][3]}, - {NINJA_THROW_R0 + 1, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[0][4]}, - {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaStar[0][5]}, - {NINJA_THROW_R0 + 2, NINJA_STAR_RATE, &AF(DoNinjaMove), &s_NinjaStar[0][5]}, + {NINJA_THROW_R0 + 0, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[0][1]}, + {NINJA_THROW_R0 + 0, NINJA_STAR_RATE, NullNinja, &s_NinjaStar[0][2]}, + {NINJA_THROW_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyStar, &s_NinjaStar[0][3]}, + {NINJA_THROW_R0 + 1, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[0][4]}, + {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaStar[0][5]}, + {NINJA_THROW_R0 + 2, NINJA_STAR_RATE, DoNinjaMove, &s_NinjaStar[0][5]}, }, { - {NINJA_THROW_R1 + 0, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[1][1]}, - {NINJA_THROW_R1 + 0, NINJA_STAR_RATE, &AF(NullNinja), &s_NinjaStar[1][2]}, - {NINJA_THROW_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyStar), &s_NinjaStar[1][3]}, - {NINJA_THROW_R1 + 1, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[1][4]}, - {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaStar[1][5]}, - {NINJA_THROW_R1 + 2, NINJA_STAR_RATE, &AF(DoNinjaMove), &s_NinjaStar[1][5]}, + {NINJA_THROW_R1 + 0, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[1][1]}, + {NINJA_THROW_R1 + 0, NINJA_STAR_RATE, NullNinja, &s_NinjaStar[1][2]}, + {NINJA_THROW_R1 + 1, 0 | SF_QUICK_CALL, InitEnemyStar, &s_NinjaStar[1][3]}, + {NINJA_THROW_R1 + 1, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[1][4]}, + {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaStar[1][5]}, + {NINJA_THROW_R1 + 2, NINJA_STAR_RATE, DoNinjaMove, &s_NinjaStar[1][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[2][1]}, - {NINJA_THROW_R2 + 0, NINJA_STAR_RATE, &AF(NullNinja), &s_NinjaStar[2][2]}, - {NINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyStar), &s_NinjaStar[2][3]}, - {NINJA_THROW_R2 + 1, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[2][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaStar[2][5]}, - {NINJA_THROW_R2 + 2, NINJA_STAR_RATE, &AF(DoNinjaMove), &s_NinjaStar[2][5]}, + {NINJA_THROW_R2 + 0, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[2][1]}, + {NINJA_THROW_R2 + 0, NINJA_STAR_RATE, NullNinja, &s_NinjaStar[2][2]}, + {NINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyStar, &s_NinjaStar[2][3]}, + {NINJA_THROW_R2 + 1, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[2][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaStar[2][5]}, + {NINJA_THROW_R2 + 2, NINJA_STAR_RATE, DoNinjaMove, &s_NinjaStar[2][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[3][1]}, - {NINJA_THROW_R2 + 0, NINJA_STAR_RATE, &AF(NullNinja), &s_NinjaStar[3][2]}, - {NINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyStar), &s_NinjaStar[3][3]}, - {NINJA_THROW_R2 + 1, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[3][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaStar[3][5]}, - {NINJA_THROW_R2 + 2, NINJA_STAR_RATE, &AF(DoNinjaMove), &s_NinjaStar[3][5]}, + {NINJA_THROW_R2 + 0, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[3][1]}, + {NINJA_THROW_R2 + 0, NINJA_STAR_RATE, NullNinja, &s_NinjaStar[3][2]}, + {NINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyStar, &s_NinjaStar[3][3]}, + {NINJA_THROW_R2 + 1, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[3][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaStar[3][5]}, + {NINJA_THROW_R2 + 2, NINJA_STAR_RATE, DoNinjaMove, &s_NinjaStar[3][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[4][1]}, - {NINJA_THROW_R2 + 0, NINJA_STAR_RATE, &AF(NullNinja), &s_NinjaStar[4][2]}, - {NINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyStar), &s_NinjaStar[4][3]}, - {NINJA_THROW_R2 + 1, NINJA_STAR_RATE * 2, &AF(NullNinja), &s_NinjaStar[4][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaStar[4][5]}, - {NINJA_THROW_R2 + 2, NINJA_STAR_RATE, &AF(DoNinjaMove), &s_NinjaStar[4][5]}, + {NINJA_THROW_R2 + 0, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[4][1]}, + {NINJA_THROW_R2 + 0, NINJA_STAR_RATE, NullNinja, &s_NinjaStar[4][2]}, + {NINJA_THROW_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyStar, &s_NinjaStar[4][3]}, + {NINJA_THROW_R2 + 1, NINJA_STAR_RATE * 2, NullNinja, &s_NinjaStar[4][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaStar[4][5]}, + {NINJA_THROW_R2 + 2, NINJA_STAR_RATE, DoNinjaMove, &s_NinjaStar[4][5]}, }, }; @@ -921,48 +974,49 @@ STATE* sg_NinjaStar[] = ////////////////////// #define NINJA_MIRV_RATE 18 +ANIMATOR InitEnemyMirv; STATE s_NinjaMirv[5][6] = { { - {NINJA_THROW_R0 + 0, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[0][1]}, - {NINJA_THROW_R0 + 1, NINJA_MIRV_RATE, &AF(NullNinja), &s_NinjaMirv[0][2]}, - {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyMirv), &s_NinjaMirv[0][3]}, - {NINJA_THROW_R0 + 2, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[0][4]}, - {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaMirv[0][5]}, - {NINJA_THROW_R0 + 2, NINJA_MIRV_RATE, &AF(DoNinjaMove), &s_NinjaMirv[0][5]}, + {NINJA_THROW_R0 + 0, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[0][1]}, + {NINJA_THROW_R0 + 1, NINJA_MIRV_RATE, NullNinja, &s_NinjaMirv[0][2]}, + {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, InitEnemyMirv, &s_NinjaMirv[0][3]}, + {NINJA_THROW_R0 + 2, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[0][4]}, + {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaMirv[0][5]}, + {NINJA_THROW_R0 + 2, NINJA_MIRV_RATE, DoNinjaMove, &s_NinjaMirv[0][5]}, }, { - {NINJA_THROW_R1 + 0, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[1][1]}, - {NINJA_THROW_R1 + 1, NINJA_MIRV_RATE, &AF(NullNinja), &s_NinjaMirv[1][2]}, - {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyMirv), &s_NinjaMirv[1][3]}, - {NINJA_THROW_R1 + 2, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[1][4]}, - {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaMirv[1][5]}, - {NINJA_THROW_R1 + 2, NINJA_MIRV_RATE, &AF(DoNinjaMove), &s_NinjaMirv[1][5]}, + {NINJA_THROW_R1 + 0, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[1][1]}, + {NINJA_THROW_R1 + 1, NINJA_MIRV_RATE, NullNinja, &s_NinjaMirv[1][2]}, + {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, InitEnemyMirv, &s_NinjaMirv[1][3]}, + {NINJA_THROW_R1 + 2, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[1][4]}, + {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaMirv[1][5]}, + {NINJA_THROW_R1 + 2, NINJA_MIRV_RATE, DoNinjaMove, &s_NinjaMirv[1][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[2][1]}, - {NINJA_THROW_R2 + 1, NINJA_MIRV_RATE, &AF(NullNinja), &s_NinjaMirv[2][2]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyMirv), &s_NinjaMirv[2][3]}, - {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[2][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaMirv[2][5]}, - {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE, &AF(DoNinjaMove), &s_NinjaMirv[2][5]}, + {NINJA_THROW_R2 + 0, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[2][1]}, + {NINJA_THROW_R2 + 1, NINJA_MIRV_RATE, NullNinja, &s_NinjaMirv[2][2]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitEnemyMirv, &s_NinjaMirv[2][3]}, + {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[2][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaMirv[2][5]}, + {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE, DoNinjaMove, &s_NinjaMirv[2][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[3][1]}, - {NINJA_THROW_R2 + 1, NINJA_MIRV_RATE, &AF(NullNinja), &s_NinjaMirv[3][2]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyMirv), &s_NinjaMirv[3][3]}, - {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[3][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaMirv[3][5]}, - {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE, &AF(DoNinjaMove), &s_NinjaMirv[3][5]}, + {NINJA_THROW_R2 + 0, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[3][1]}, + {NINJA_THROW_R2 + 1, NINJA_MIRV_RATE, NullNinja, &s_NinjaMirv[3][2]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitEnemyMirv, &s_NinjaMirv[3][3]}, + {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[3][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaMirv[3][5]}, + {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE, DoNinjaMove, &s_NinjaMirv[3][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[4][1]}, - {NINJA_THROW_R2 + 1, NINJA_MIRV_RATE, &AF(NullNinja), &s_NinjaMirv[4][2]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyMirv), &s_NinjaMirv[4][3]}, - {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE * 2, &AF(NullNinja), &s_NinjaMirv[4][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaMirv[4][5]}, - {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE, &AF(DoNinjaMove), &s_NinjaStar[4][5]}, + {NINJA_THROW_R2 + 0, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[4][1]}, + {NINJA_THROW_R2 + 1, NINJA_MIRV_RATE, NullNinja, &s_NinjaMirv[4][2]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitEnemyMirv, &s_NinjaMirv[4][3]}, + {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE * 2, NullNinja, &s_NinjaMirv[4][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaMirv[4][5]}, + {NINJA_THROW_R2 + 2, NINJA_MIRV_RATE, DoNinjaMove, &s_NinjaStar[4][5]}, }, }; @@ -983,48 +1037,49 @@ STATE* sg_NinjaMirv[] = ////////////////////// #define NINJA_NAPALM_RATE 18 +ANIMATOR InitEnemyNapalm; STATE s_NinjaNapalm[5][6] = { { - {NINJA_THROW_R0 + 0, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[0][1]}, - {NINJA_THROW_R0 + 1, NINJA_NAPALM_RATE, &AF(NullNinja), &s_NinjaNapalm[0][2]}, - {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyNapalm), &s_NinjaNapalm[0][3]}, - {NINJA_THROW_R0 + 2, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[0][4]}, - {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaNapalm[0][5]}, - {NINJA_THROW_R0 + 2, NINJA_NAPALM_RATE, &AF(DoNinjaMove), &s_NinjaNapalm[0][5]}, + {NINJA_THROW_R0 + 0, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[0][1]}, + {NINJA_THROW_R0 + 1, NINJA_NAPALM_RATE, NullNinja, &s_NinjaNapalm[0][2]}, + {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, InitEnemyNapalm, &s_NinjaNapalm[0][3]}, + {NINJA_THROW_R0 + 2, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[0][4]}, + {NINJA_THROW_R0 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaNapalm[0][5]}, + {NINJA_THROW_R0 + 2, NINJA_NAPALM_RATE, DoNinjaMove, &s_NinjaNapalm[0][5]}, }, { - {NINJA_THROW_R1 + 0, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[1][1]}, - {NINJA_THROW_R1 + 1, NINJA_NAPALM_RATE, &AF(NullNinja), &s_NinjaNapalm[1][2]}, - {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyNapalm), &s_NinjaNapalm[1][3]}, - {NINJA_THROW_R1 + 2, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[1][4]}, - {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaNapalm[1][5]}, - {NINJA_THROW_R1 + 2, NINJA_NAPALM_RATE, &AF(DoNinjaMove), &s_NinjaNapalm[1][5]}, + {NINJA_THROW_R1 + 0, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[1][1]}, + {NINJA_THROW_R1 + 1, NINJA_NAPALM_RATE, NullNinja, &s_NinjaNapalm[1][2]}, + {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, InitEnemyNapalm, &s_NinjaNapalm[1][3]}, + {NINJA_THROW_R1 + 2, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[1][4]}, + {NINJA_THROW_R1 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaNapalm[1][5]}, + {NINJA_THROW_R1 + 2, NINJA_NAPALM_RATE, DoNinjaMove, &s_NinjaNapalm[1][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[2][1]}, - {NINJA_THROW_R2 + 1, NINJA_NAPALM_RATE, &AF(NullNinja), &s_NinjaNapalm[2][2]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyNapalm), &s_NinjaNapalm[2][3]}, - {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[2][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaNapalm[2][5]}, - {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE, &AF(DoNinjaMove), &s_NinjaNapalm[2][5]}, + {NINJA_THROW_R2 + 0, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[2][1]}, + {NINJA_THROW_R2 + 1, NINJA_NAPALM_RATE, NullNinja, &s_NinjaNapalm[2][2]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitEnemyNapalm, &s_NinjaNapalm[2][3]}, + {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[2][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaNapalm[2][5]}, + {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE, DoNinjaMove, &s_NinjaNapalm[2][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[3][1]}, - {NINJA_THROW_R2 + 1, NINJA_NAPALM_RATE, &AF(NullNinja), &s_NinjaNapalm[3][2]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyNapalm), &s_NinjaNapalm[3][3]}, - {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[3][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaNapalm[3][5]}, - {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE, &AF(DoNinjaMove), &s_NinjaNapalm[3][5]}, + {NINJA_THROW_R2 + 0, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[3][1]}, + {NINJA_THROW_R2 + 1, NINJA_NAPALM_RATE, NullNinja, &s_NinjaNapalm[3][2]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitEnemyNapalm, &s_NinjaNapalm[3][3]}, + {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[3][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaNapalm[3][5]}, + {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE, DoNinjaMove, &s_NinjaNapalm[3][5]}, }, { - {NINJA_THROW_R2 + 0, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[4][1]}, - {NINJA_THROW_R2 + 1, NINJA_NAPALM_RATE, &AF(NullNinja), &s_NinjaNapalm[4][2]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitEnemyNapalm), &s_NinjaNapalm[4][3]}, - {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE * 2, &AF(NullNinja), &s_NinjaNapalm[4][4]}, - {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaNapalm[4][5]}, - {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE, &AF(DoNinjaMove), &s_NinjaNapalm[4][5]}, + {NINJA_THROW_R2 + 0, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[4][1]}, + {NINJA_THROW_R2 + 1, NINJA_NAPALM_RATE, NullNinja, &s_NinjaNapalm[4][2]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitEnemyNapalm, &s_NinjaNapalm[4][3]}, + {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE * 2, NullNinja, &s_NinjaNapalm[4][4]}, + {NINJA_THROW_R2 + 2, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaNapalm[4][5]}, + {NINJA_THROW_R2 + 2, NINJA_NAPALM_RATE, DoNinjaMove, &s_NinjaNapalm[4][5]}, }, }; @@ -1046,43 +1101,44 @@ STATE* sg_NinjaNapalm[] = ////////////////////// #define NINJA_ROCKET_RATE 14 +ANIMATOR InitEnemyRocket; STATE s_NinjaRocket[5][5] = { { - {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaRocket[0][1]}, - {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_NinjaRocket[0][2]}, - {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaRocket[0][3]}, - {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaRocket[0][4]}, - {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaRocket[0][4]}, + {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaRocket[0][1]}, + {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_NinjaRocket[0][2]}, + {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaRocket[0][3]}, + {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaRocket[0][4]}, + {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaRocket[0][4]}, }, { - {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaRocket[1][1]}, - {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_NinjaRocket[1][2]}, - {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaRocket[1][3]}, - {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaRocket[1][4]}, - {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaRocket[1][4]}, + {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaRocket[1][1]}, + {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_NinjaRocket[1][2]}, + {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaRocket[1][3]}, + {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaRocket[1][4]}, + {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaRocket[1][4]}, }, { - {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaRocket[2][1]}, - {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_NinjaRocket[2][2]}, - {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaRocket[2][3]}, - {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaRocket[2][4]}, - {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaRocket[2][4]}, + {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaRocket[2][1]}, + {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_NinjaRocket[2][2]}, + {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaRocket[2][3]}, + {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaRocket[2][4]}, + {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaRocket[2][4]}, }, { - {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaRocket[3][1]}, - {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_NinjaRocket[3][2]}, - {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaRocket[3][3]}, - {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaRocket[3][4]}, - {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaRocket[3][4]}, + {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaRocket[3][1]}, + {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_NinjaRocket[3][2]}, + {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaRocket[3][3]}, + {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaRocket[3][4]}, + {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaRocket[3][4]}, }, { - {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaRocket[4][1]}, - {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_NinjaRocket[4][2]}, - {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaRocket[4][3]}, - {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaRocket[4][4]}, - {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaRocket[4][4]}, + {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaRocket[4][1]}, + {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_NinjaRocket[4][2]}, + {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaRocket[4][3]}, + {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaRocket[4][4]}, + {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaRocket[4][4]}, }, }; @@ -1103,43 +1159,44 @@ STATE* sg_NinjaRocket[] = ////////////////////// #define NINJA_ROCKET_RATE 14 +ANIMATOR InitSpriteGrenade; STATE s_NinjaGrenade[5][5] = { { - {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaGrenade[0][1]}, - {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_NinjaGrenade[0][2]}, - {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaGrenade[0][3]}, - {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaGrenade[0][4]}, - {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaGrenade[0][4]}, + {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaGrenade[0][1]}, + {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_NinjaGrenade[0][2]}, + {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaGrenade[0][3]}, + {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaGrenade[0][4]}, + {NINJA_STAND_R0 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaGrenade[0][4]}, }, { - {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaGrenade[1][1]}, - {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_NinjaGrenade[1][2]}, - {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaGrenade[1][3]}, - {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaGrenade[1][4]}, - {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaGrenade[1][4]}, + {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaGrenade[1][1]}, + {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_NinjaGrenade[1][2]}, + {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaGrenade[1][3]}, + {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaGrenade[1][4]}, + {NINJA_STAND_R1 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaGrenade[1][4]}, }, { - {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaGrenade[2][1]}, - {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_NinjaGrenade[2][2]}, - {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaGrenade[2][3]}, - {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaGrenade[2][4]}, - {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaGrenade[2][4]}, + {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaGrenade[2][1]}, + {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_NinjaGrenade[2][2]}, + {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaGrenade[2][3]}, + {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaGrenade[2][4]}, + {NINJA_STAND_R2 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaGrenade[2][4]}, }, { - {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaGrenade[3][1]}, - {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_NinjaGrenade[3][2]}, - {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaGrenade[3][3]}, - {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaGrenade[3][4]}, - {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaGrenade[3][4]}, + {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaGrenade[3][1]}, + {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_NinjaGrenade[3][2]}, + {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaGrenade[3][3]}, + {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaGrenade[3][4]}, + {NINJA_STAND_R3 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaGrenade[3][4]}, }, { - {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE * 2, &AF(NullNinja), &s_NinjaGrenade[4][1]}, - {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_NinjaGrenade[4][2]}, - {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, &AF(NullNinja), &s_NinjaGrenade[4][3]}, - {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaGrenade[4][4]}, - {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, &AF(DoNinjaMove), &s_NinjaGrenade[4][4]}, + {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE * 2, NullNinja, &s_NinjaGrenade[4][1]}, + {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_NinjaGrenade[4][2]}, + {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, NullNinja, &s_NinjaGrenade[4][3]}, + {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaGrenade[4][4]}, + {NINJA_STAND_R4 + 0, NINJA_ROCKET_RATE, DoNinjaMove, &s_NinjaGrenade[4][4]}, }, }; @@ -1161,43 +1218,44 @@ STATE* sg_NinjaGrenade[] = ////////////////////// #define NINJA_FLASHBOMB_RATE 14 +ANIMATOR InitFlashBomb; STATE s_NinjaFlashBomb[5][5] = { { - {NINJA_STAND_R0 + 0, NINJA_FLASHBOMB_RATE * 2, &AF(NullNinja), &s_NinjaFlashBomb[0][1]}, - {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_NinjaFlashBomb[0][2]}, - {NINJA_STAND_R0 + 0, NINJA_FLASHBOMB_RATE, &AF(NullNinja), &s_NinjaFlashBomb[0][3]}, - {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaFlashBomb[0][4]}, - {NINJA_STAND_R0 + 0, NINJA_FLASHBOMB_RATE, &AF(DoNinjaMove), &s_NinjaFlashBomb[0][4]}, + {NINJA_STAND_R0 + 0, NINJA_FLASHBOMB_RATE * 2, NullNinja, &s_NinjaFlashBomb[0][1]}, + {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_NinjaFlashBomb[0][2]}, + {NINJA_STAND_R0 + 0, NINJA_FLASHBOMB_RATE, NullNinja, &s_NinjaFlashBomb[0][3]}, + {NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaFlashBomb[0][4]}, + {NINJA_STAND_R0 + 0, NINJA_FLASHBOMB_RATE, DoNinjaMove, &s_NinjaFlashBomb[0][4]}, }, { - {NINJA_STAND_R1 + 0, NINJA_FLASHBOMB_RATE * 2, &AF(NullNinja), &s_NinjaFlashBomb[1][1]}, - {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_NinjaFlashBomb[1][2]}, - {NINJA_STAND_R1 + 0, NINJA_FLASHBOMB_RATE, &AF(NullNinja), &s_NinjaFlashBomb[1][3]}, - {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaFlashBomb[1][4]}, - {NINJA_STAND_R1 + 0, NINJA_FLASHBOMB_RATE, &AF(DoNinjaMove), &s_NinjaFlashBomb[1][4]}, + {NINJA_STAND_R1 + 0, NINJA_FLASHBOMB_RATE * 2, NullNinja, &s_NinjaFlashBomb[1][1]}, + {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_NinjaFlashBomb[1][2]}, + {NINJA_STAND_R1 + 0, NINJA_FLASHBOMB_RATE, NullNinja, &s_NinjaFlashBomb[1][3]}, + {NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaFlashBomb[1][4]}, + {NINJA_STAND_R1 + 0, NINJA_FLASHBOMB_RATE, DoNinjaMove, &s_NinjaFlashBomb[1][4]}, }, { - {NINJA_STAND_R2 + 0, NINJA_FLASHBOMB_RATE * 2, &AF(NullNinja), &s_NinjaFlashBomb[2][1]}, - {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_NinjaFlashBomb[2][2]}, - {NINJA_STAND_R2 + 0, NINJA_FLASHBOMB_RATE, &AF(NullNinja), &s_NinjaFlashBomb[2][3]}, - {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaFlashBomb[2][4]}, - {NINJA_STAND_R2 + 0, NINJA_FLASHBOMB_RATE, &AF(DoNinjaMove), &s_NinjaFlashBomb[2][4]}, + {NINJA_STAND_R2 + 0, NINJA_FLASHBOMB_RATE * 2, NullNinja, &s_NinjaFlashBomb[2][1]}, + {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_NinjaFlashBomb[2][2]}, + {NINJA_STAND_R2 + 0, NINJA_FLASHBOMB_RATE, NullNinja, &s_NinjaFlashBomb[2][3]}, + {NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaFlashBomb[2][4]}, + {NINJA_STAND_R2 + 0, NINJA_FLASHBOMB_RATE, DoNinjaMove, &s_NinjaFlashBomb[2][4]}, }, { - {NINJA_STAND_R3 + 0, NINJA_FLASHBOMB_RATE * 2, &AF(NullNinja), &s_NinjaFlashBomb[3][1]}, - {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_NinjaFlashBomb[3][2]}, - {NINJA_STAND_R3 + 0, NINJA_FLASHBOMB_RATE, &AF(NullNinja), &s_NinjaFlashBomb[3][3]}, - {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaFlashBomb[3][4]}, - {NINJA_STAND_R3 + 0, NINJA_FLASHBOMB_RATE, &AF(DoNinjaMove), &s_NinjaFlashBomb[3][4]}, + {NINJA_STAND_R3 + 0, NINJA_FLASHBOMB_RATE * 2, NullNinja, &s_NinjaFlashBomb[3][1]}, + {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_NinjaFlashBomb[3][2]}, + {NINJA_STAND_R3 + 0, NINJA_FLASHBOMB_RATE, NullNinja, &s_NinjaFlashBomb[3][3]}, + {NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaFlashBomb[3][4]}, + {NINJA_STAND_R3 + 0, NINJA_FLASHBOMB_RATE, DoNinjaMove, &s_NinjaFlashBomb[3][4]}, }, { - {NINJA_STAND_R4 + 0, NINJA_FLASHBOMB_RATE * 2, &AF(NullNinja), &s_NinjaFlashBomb[4][1]}, - {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_NinjaFlashBomb[4][2]}, - {NINJA_STAND_R4 + 0, NINJA_FLASHBOMB_RATE, &AF(NullNinja), &s_NinjaFlashBomb[4][3]}, - {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaFlashBomb[4][4]}, - {NINJA_STAND_R4 + 0, NINJA_FLASHBOMB_RATE, &AF(DoNinjaMove), &s_NinjaFlashBomb[4][4]}, + {NINJA_STAND_R4 + 0, NINJA_FLASHBOMB_RATE * 2, NullNinja, &s_NinjaFlashBomb[4][1]}, + {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_NinjaFlashBomb[4][2]}, + {NINJA_STAND_R4 + 0, NINJA_FLASHBOMB_RATE, NullNinja, &s_NinjaFlashBomb[4][3]}, + {NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaFlashBomb[4][4]}, + {NINJA_STAND_R4 + 0, NINJA_FLASHBOMB_RATE, DoNinjaMove, &s_NinjaFlashBomb[4][4]}, }, }; @@ -1218,103 +1276,104 @@ STATE* sg_NinjaFlashBomb[] = ////////////////////// #define NINJA_UZI_RATE 8 +ANIMATOR InitEnemyUzi,CheckFire; STATE s_NinjaUzi[5][17] = { { - {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][1]}, - {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_NinjaUzi[0][2]}, - {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][3]}, - {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[0][4]}, - {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][5]}, - {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[0][6]}, - {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][7]}, - {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[0][8]}, - {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][9]}, - {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[0][10]}, - {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][11]}, - {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[0][12]}, - {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][13]}, - {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[0][14]}, - {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[0][15]}, - {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[0][16]}, - {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaUzi[0][16]}, - }, - { - {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][1]}, - {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_NinjaUzi[1][2]}, - {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][3]}, - {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[1][4]}, - {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][5]}, - {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[1][6]}, - {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][7]}, - {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[1][8]}, - {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][9]}, - {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[1][10]}, - {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][11]}, - {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[1][12]}, - {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][13]}, - {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[1][14]}, - {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[1][15]}, - {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[1][16]}, - {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaUzi[1][16]}, - }, - { - {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][1]}, - {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_NinjaUzi[2][2]}, - {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][3]}, - {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[2][4]}, - {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][5]}, - {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[2][6]}, - {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][7]}, - {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[2][8]}, - {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][9]}, - {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[2][10]}, - {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][11]}, - {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[2][12]}, - {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][13]}, - {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[2][14]}, - {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[2][15]}, - {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[2][16]}, - {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaUzi[2][16]}, - }, - { - {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][1]}, - {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_NinjaUzi[3][2]}, - {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][3]}, - {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[3][4]}, - {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][5]}, - {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[3][6]}, - {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][7]}, - {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[3][8]}, - {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][9]}, - {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[3][10]}, - {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][11]}, - {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[3][12]}, - {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][13]}, - {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[3][14]}, - {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[3][15]}, - {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[3][16]}, - {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaUzi[3][16]}, - }, - { - {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][1]}, - {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_NinjaUzi[4][2]}, - {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][3]}, - {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[4][4]}, - {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][5]}, - {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[4][6]}, - {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][7]}, - {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[4][8]}, - {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][9]}, - {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[4][10]}, - {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][11]}, - {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[4][12]}, - {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][13]}, - {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[4][14]}, - {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, &AF(NullNinja), &s_NinjaUzi[4][15]}, - {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_NinjaUzi[4][16]}, - {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_NinjaUzi[4][16]}, + {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][1]}, + {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_NinjaUzi[0][2]}, + {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][3]}, + {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[0][4]}, + {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][5]}, + {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[0][6]}, + {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][7]}, + {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[0][8]}, + {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][9]}, + {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[0][10]}, + {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][11]}, + {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[0][12]}, + {NINJA_FIRE_R0 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][13]}, + {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[0][14]}, + {NINJA_FIRE_R0 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[0][15]}, + {NINJA_FIRE_R0 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[0][16]}, + {NINJA_FIRE_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaUzi[0][16]}, + }, + { + {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][1]}, + {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_NinjaUzi[1][2]}, + {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][3]}, + {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[1][4]}, + {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][5]}, + {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[1][6]}, + {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][7]}, + {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[1][8]}, + {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][9]}, + {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[1][10]}, + {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][11]}, + {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[1][12]}, + {NINJA_FIRE_R1 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][13]}, + {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[1][14]}, + {NINJA_FIRE_R1 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[1][15]}, + {NINJA_FIRE_R1 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[1][16]}, + {NINJA_FIRE_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaUzi[1][16]}, + }, + { + {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][1]}, + {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_NinjaUzi[2][2]}, + {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][3]}, + {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[2][4]}, + {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][5]}, + {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[2][6]}, + {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][7]}, + {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[2][8]}, + {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][9]}, + {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[2][10]}, + {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][11]}, + {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[2][12]}, + {NINJA_FIRE_R2 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][13]}, + {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[2][14]}, + {NINJA_FIRE_R2 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[2][15]}, + {NINJA_FIRE_R2 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[2][16]}, + {NINJA_FIRE_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaUzi[2][16]}, + }, + { + {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][1]}, + {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_NinjaUzi[3][2]}, + {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][3]}, + {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[3][4]}, + {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][5]}, + {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[3][6]}, + {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][7]}, + {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[3][8]}, + {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][9]}, + {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[3][10]}, + {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][11]}, + {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[3][12]}, + {NINJA_FIRE_R3 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][13]}, + {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[3][14]}, + {NINJA_FIRE_R3 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[3][15]}, + {NINJA_FIRE_R3 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[3][16]}, + {NINJA_FIRE_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaUzi[3][16]}, + }, + { + {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][1]}, + {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_NinjaUzi[4][2]}, + {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][3]}, + {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[4][4]}, + {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][5]}, + {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[4][6]}, + {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][7]}, + {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[4][8]}, + {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][9]}, + {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[4][10]}, + {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][11]}, + {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[4][12]}, + {NINJA_FIRE_R4 + 0, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][13]}, + {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[4][14]}, + {NINJA_FIRE_R4 + 1, NINJA_UZI_RATE, NullNinja, &s_NinjaUzi[4][15]}, + {NINJA_FIRE_R4 + 1, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_NinjaUzi[4][16]}, + {NINJA_FIRE_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_NinjaUzi[4][16]}, }, }; @@ -1337,20 +1396,21 @@ STATE* sg_NinjaUzi[] = #define NINJA_HARI_KARI_WAIT_RATE 200 #define NINJA_HARI_KARI_FALL_RATE 16 +ANIMATOR DoNinjaSpecial; STATE s_NinjaHariKari[] = { - {NINJA_HARI_KARI_R0 + 0, NINJA_HARI_KARI_FALL_RATE, &AF(NullNinja), &s_NinjaHariKari[1]}, - {NINJA_HARI_KARI_R0 + 0, SF_QUICK_CALL, &AF(DoNinjaSpecial), &s_NinjaHariKari[2]}, - {NINJA_HARI_KARI_R0 + 1, NINJA_HARI_KARI_WAIT_RATE, &AF(NullNinja), &s_NinjaHariKari[3]}, - {NINJA_HARI_KARI_R0 + 2, SF_QUICK_CALL, &AF(DoNinjaHariKari), &s_NinjaHariKari[4]}, - {NINJA_HARI_KARI_R0 + 2, NINJA_HARI_KARI_FALL_RATE, nullptr, &s_NinjaHariKari[5]}, - {NINJA_HARI_KARI_R0 + 3, NINJA_HARI_KARI_FALL_RATE, nullptr, &s_NinjaHariKari[6]}, - {NINJA_HARI_KARI_R0 + 4, NINJA_HARI_KARI_FALL_RATE, nullptr, &s_NinjaHariKari[7]}, - {NINJA_HARI_KARI_R0 + 5, NINJA_HARI_KARI_FALL_RATE, nullptr, &s_NinjaHariKari[8]}, - {NINJA_HARI_KARI_R0 + 6, NINJA_HARI_KARI_FALL_RATE, nullptr, &s_NinjaHariKari[9]}, - {NINJA_HARI_KARI_R0 + 7, NINJA_HARI_KARI_FALL_RATE, nullptr, &s_NinjaHariKari[10]}, - {NINJA_HARI_KARI_R0 + 7, NINJA_HARI_KARI_FALL_RATE, nullptr, &s_NinjaHariKari[10]}, + {NINJA_HARI_KARI_R0 + 0, NINJA_HARI_KARI_FALL_RATE, NullNinja, &s_NinjaHariKari[1]}, + {NINJA_HARI_KARI_R0 + 0, SF_QUICK_CALL, DoNinjaSpecial, &s_NinjaHariKari[2]}, + {NINJA_HARI_KARI_R0 + 1, NINJA_HARI_KARI_WAIT_RATE, NullNinja, &s_NinjaHariKari[3]}, + {NINJA_HARI_KARI_R0 + 2, SF_QUICK_CALL, DoNinjaHariKari, &s_NinjaHariKari[4]}, + {NINJA_HARI_KARI_R0 + 2, NINJA_HARI_KARI_FALL_RATE, NullAnimator, &s_NinjaHariKari[5]}, + {NINJA_HARI_KARI_R0 + 3, NINJA_HARI_KARI_FALL_RATE, NullAnimator, &s_NinjaHariKari[6]}, + {NINJA_HARI_KARI_R0 + 4, NINJA_HARI_KARI_FALL_RATE, NullAnimator, &s_NinjaHariKari[7]}, + {NINJA_HARI_KARI_R0 + 5, NINJA_HARI_KARI_FALL_RATE, NullAnimator, &s_NinjaHariKari[8]}, + {NINJA_HARI_KARI_R0 + 6, NINJA_HARI_KARI_FALL_RATE, NullAnimator, &s_NinjaHariKari[9]}, + {NINJA_HARI_KARI_R0 + 7, NINJA_HARI_KARI_FALL_RATE, NullAnimator, &s_NinjaHariKari[10]}, + {NINJA_HARI_KARI_R0 + 7, NINJA_HARI_KARI_FALL_RATE, NullAnimator, &s_NinjaHariKari[10]}, }; STATE* sg_NinjaHariKari[] = @@ -1371,15 +1431,16 @@ STATE* sg_NinjaHariKari[] = #define NINJA_GRAB_THROAT_RATE 32 #define NINJA_GRAB_THROAT_R0 4237 +ANIMATOR DoNinjaGrabThroat; STATE s_NinjaGrabThroat[] = { - {NINJA_GRAB_THROAT_R0 + 0, NINJA_GRAB_THROAT_RATE, &AF(NullNinja), &s_NinjaGrabThroat[1]}, - {NINJA_GRAB_THROAT_R0 + 0, SF_QUICK_CALL, &AF(DoNinjaSpecial), &s_NinjaGrabThroat[2]}, - {NINJA_GRAB_THROAT_R0 + 1, NINJA_GRAB_THROAT_RATE, &AF(NullNinja), &s_NinjaGrabThroat[3]}, - {NINJA_GRAB_THROAT_R0 + 2, SF_QUICK_CALL, &AF(DoNinjaGrabThroat), &s_NinjaGrabThroat[4]}, - {NINJA_GRAB_THROAT_R0 + 2, NINJA_GRAB_THROAT_RATE, &AF(NullNinja), &s_NinjaGrabThroat[5]}, - {NINJA_GRAB_THROAT_R0 + 1, NINJA_GRAB_THROAT_RATE, &AF(NullNinja), &s_NinjaGrabThroat[0]}, + {NINJA_GRAB_THROAT_R0 + 0, NINJA_GRAB_THROAT_RATE, NullNinja, &s_NinjaGrabThroat[1]}, + {NINJA_GRAB_THROAT_R0 + 0, SF_QUICK_CALL, DoNinjaSpecial, &s_NinjaGrabThroat[2]}, + {NINJA_GRAB_THROAT_R0 + 1, NINJA_GRAB_THROAT_RATE, NullNinja, &s_NinjaGrabThroat[3]}, + {NINJA_GRAB_THROAT_R0 + 2, SF_QUICK_CALL, DoNinjaGrabThroat, &s_NinjaGrabThroat[4]}, + {NINJA_GRAB_THROAT_R0 + 2, NINJA_GRAB_THROAT_RATE, NullNinja, &s_NinjaGrabThroat[5]}, + {NINJA_GRAB_THROAT_R0 + 1, NINJA_GRAB_THROAT_RATE, NullNinja, &s_NinjaGrabThroat[0]}, }; STATE* sg_NinjaGrabThroat[] = @@ -1402,75 +1463,76 @@ STATE* sg_NinjaGrabThroat[] = STATE s_NinjaDie[] = { - {NINJA_DIE + 0, NINJA_DIE_RATE, &AF(NullNinja), &s_NinjaDie[1]}, - {NINJA_DIE + 1, NINJA_DIE_RATE, &AF(NullNinja), &s_NinjaDie[2]}, - {NINJA_DIE + 2, NINJA_DIE_RATE, &AF(NullNinja), &s_NinjaDie[3]}, - {NINJA_DIE + 3, NINJA_DIE_RATE, &AF(NullNinja), &s_NinjaDie[4]}, - {NINJA_DIE + 4, NINJA_DIE_RATE, &AF(NullNinja), &s_NinjaDie[5]}, - {NINJA_DIE + 5, NINJA_DIE_RATE-4, &AF(NullNinja), &s_NinjaDie[6]}, - {NINJA_DIE + 6, NINJA_DIE_RATE-6, &AF(NullNinja), &s_NinjaDie[7]}, - {NINJA_DIE + 6, SF_QUICK_CALL, &AF(DoNinjaSpecial), &s_NinjaDie[8]}, - {NINJA_DIE + 6, NINJA_DIE_RATE-10, &AF(NullNinja), &s_NinjaDie[9]}, - {NINJA_DIE + 7, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_NinjaDie[10]}, - {NINJA_DIE + 7, NINJA_DIE_RATE-12, &AF(DoActorDebris), &s_NinjaDie[10]}, + {NINJA_DIE + 0, NINJA_DIE_RATE, NullNinja, &s_NinjaDie[1]}, + {NINJA_DIE + 1, NINJA_DIE_RATE, NullNinja, &s_NinjaDie[2]}, + {NINJA_DIE + 2, NINJA_DIE_RATE, NullNinja, &s_NinjaDie[3]}, + {NINJA_DIE + 3, NINJA_DIE_RATE, NullNinja, &s_NinjaDie[4]}, + {NINJA_DIE + 4, NINJA_DIE_RATE, NullNinja, &s_NinjaDie[5]}, + {NINJA_DIE + 5, NINJA_DIE_RATE-4, NullNinja, &s_NinjaDie[6]}, + {NINJA_DIE + 6, NINJA_DIE_RATE-6, NullNinja, &s_NinjaDie[7]}, + {NINJA_DIE + 6, SF_QUICK_CALL, DoNinjaSpecial, &s_NinjaDie[8]}, + {NINJA_DIE + 6, NINJA_DIE_RATE-10, NullNinja, &s_NinjaDie[9]}, + {NINJA_DIE + 7, SF_QUICK_CALL, QueueFloorBlood, &s_NinjaDie[10]}, + {NINJA_DIE + 7, NINJA_DIE_RATE-12, DoActorDebris, &s_NinjaDie[10]}, }; #define NINJA_DIESLICED_RATE 20 +ANIMATOR DoCutInHalf; STATE s_NinjaDieSliced[] = { - {NINJA_SLICED + 0, NINJA_DIESLICED_RATE*6, &AF(NullNinja), &s_NinjaDieSliced[1]}, - {NINJA_SLICED + 1, NINJA_DIESLICED_RATE, &AF(NullNinja), &s_NinjaDieSliced[2]}, - {NINJA_SLICED + 2, NINJA_DIESLICED_RATE, &AF(NullNinja), &s_NinjaDieSliced[3]}, - {NINJA_SLICED + 3, NINJA_DIESLICED_RATE, &AF(NullNinja), &s_NinjaDieSliced[4]}, - {NINJA_SLICED + 4, NINJA_DIESLICED_RATE-1, &AF(NullNinja), &s_NinjaDieSliced[5]}, - {NINJA_SLICED + 5, NINJA_DIESLICED_RATE-2, &AF(NullNinja), &s_NinjaDieSliced[6]}, - {NINJA_SLICED + 6, NINJA_DIESLICED_RATE-3, &AF(NullNinja), &s_NinjaDieSliced[7]}, - {NINJA_SLICED + 7, NINJA_DIESLICED_RATE-4, &AF(NullNinja), &s_NinjaDieSliced[8]}, - {NINJA_SLICED + 7, SF_QUICK_CALL, &AF(DoNinjaSpecial), &s_NinjaDieSliced[9]}, - {NINJA_SLICED + 8, NINJA_DIESLICED_RATE-5, &AF(NullNinja), &s_NinjaDieSliced[10]}, - {NINJA_SLICED + 9, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_NinjaDieSliced[11]}, - {NINJA_SLICED + 9, NINJA_DIESLICED_RATE, &AF(DoActorDebris), &s_NinjaDieSliced[11]}, + {NINJA_SLICED + 0, NINJA_DIESLICED_RATE*6, NullNinja, &s_NinjaDieSliced[1]}, + {NINJA_SLICED + 1, NINJA_DIESLICED_RATE, NullNinja, &s_NinjaDieSliced[2]}, + {NINJA_SLICED + 2, NINJA_DIESLICED_RATE, NullNinja, &s_NinjaDieSliced[3]}, + {NINJA_SLICED + 3, NINJA_DIESLICED_RATE, NullNinja, &s_NinjaDieSliced[4]}, + {NINJA_SLICED + 4, NINJA_DIESLICED_RATE-1, NullNinja, &s_NinjaDieSliced[5]}, + {NINJA_SLICED + 5, NINJA_DIESLICED_RATE-2, NullNinja, &s_NinjaDieSliced[6]}, + {NINJA_SLICED + 6, NINJA_DIESLICED_RATE-3, NullNinja, &s_NinjaDieSliced[7]}, + {NINJA_SLICED + 7, NINJA_DIESLICED_RATE-4, NullNinja, &s_NinjaDieSliced[8]}, + {NINJA_SLICED + 7, SF_QUICK_CALL, DoNinjaSpecial, &s_NinjaDieSliced[9]}, + {NINJA_SLICED + 8, NINJA_DIESLICED_RATE-5, NullNinja, &s_NinjaDieSliced[10]}, + {NINJA_SLICED + 9, SF_QUICK_CALL, QueueFloorBlood, &s_NinjaDieSliced[11]}, + {NINJA_SLICED + 9, NINJA_DIESLICED_RATE, DoActorDebris, &s_NinjaDieSliced[11]}, }; STATE s_NinjaDieSlicedHack[] = { - {NINJA_SLICED_HACK + 0, NINJA_DIESLICED_RATE*6, &AF(NullNinja), &s_NinjaDieSlicedHack[1]}, - {NINJA_SLICED_HACK + 1, NINJA_DIESLICED_RATE, &AF(NullNinja), &s_NinjaDieSlicedHack[2]}, - {NINJA_SLICED_HACK + 2, NINJA_DIESLICED_RATE, &AF(NullNinja), &s_NinjaDieSlicedHack[3]}, - {NINJA_SLICED_HACK + 3, NINJA_DIESLICED_RATE, &AF(NullNinja), &s_NinjaDieSlicedHack[4]}, - {NINJA_SLICED_HACK + 4, NINJA_DIESLICED_RATE-1, &AF(NullNinja), &s_NinjaDieSlicedHack[5]}, - {NINJA_SLICED_HACK + 4, NINJA_DIESLICED_RATE-2, &AF(NullNinja), &s_NinjaDieSlicedHack[6]}, - {NINJA_SLICED_HACK + 5, NINJA_DIESLICED_RATE-3, &AF(NullNinja), &s_NinjaDieSlicedHack[7]}, - {NINJA_SLICED_HACK + 5, NINJA_DIESLICED_RATE-4, &AF(NullNinja), &s_NinjaDieSlicedHack[8]}, - {NINJA_SLICED_HACK + 6, SF_QUICK_CALL , &AF(DoNinjaSpecial), &s_NinjaDieSlicedHack[9]}, - {NINJA_SLICED_HACK + 6, NINJA_DIESLICED_RATE-5, &AF(NullNinja), &s_NinjaDieSlicedHack[10]}, - {NINJA_SLICED_HACK + 7, SF_QUICK_CALL , &AF(QueueFloorBlood), &s_NinjaDieSlicedHack[11]}, - {NINJA_SLICED_HACK + 7, NINJA_DIESLICED_RATE-6, &AF(DoActorDebris), &s_NinjaDieSlicedHack[11]}, + {NINJA_SLICED_HACK + 0, NINJA_DIESLICED_RATE*6, NullNinja, &s_NinjaDieSlicedHack[1]}, + {NINJA_SLICED_HACK + 1, NINJA_DIESLICED_RATE, NullNinja, &s_NinjaDieSlicedHack[2]}, + {NINJA_SLICED_HACK + 2, NINJA_DIESLICED_RATE, NullNinja, &s_NinjaDieSlicedHack[3]}, + {NINJA_SLICED_HACK + 3, NINJA_DIESLICED_RATE, NullNinja, &s_NinjaDieSlicedHack[4]}, + {NINJA_SLICED_HACK + 4, NINJA_DIESLICED_RATE-1, NullNinja, &s_NinjaDieSlicedHack[5]}, + {NINJA_SLICED_HACK + 4, NINJA_DIESLICED_RATE-2, NullNinja, &s_NinjaDieSlicedHack[6]}, + {NINJA_SLICED_HACK + 5, NINJA_DIESLICED_RATE-3, NullNinja, &s_NinjaDieSlicedHack[7]}, + {NINJA_SLICED_HACK + 5, NINJA_DIESLICED_RATE-4, NullNinja, &s_NinjaDieSlicedHack[8]}, + {NINJA_SLICED_HACK + 6, SF_QUICK_CALL , DoNinjaSpecial, &s_NinjaDieSlicedHack[9]}, + {NINJA_SLICED_HACK + 6, NINJA_DIESLICED_RATE-5, NullNinja, &s_NinjaDieSlicedHack[10]}, + {NINJA_SLICED_HACK + 7, SF_QUICK_CALL , QueueFloorBlood, &s_NinjaDieSlicedHack[11]}, + {NINJA_SLICED_HACK + 7, NINJA_DIESLICED_RATE-6, DoActorDebris, &s_NinjaDieSlicedHack[11]}, }; STATE s_NinjaDead[] = { - {NINJA_DIE + 5, NINJA_DIE_RATE, &AF(DoActorDebris), &s_NinjaDead[1]}, - {NINJA_DIE + 6, SF_QUICK_CALL, &AF(DoNinjaSpecial), &s_NinjaDead[2]}, - {NINJA_DIE + 6, NINJA_DIE_RATE, &AF(DoActorDebris), &s_NinjaDead[3]}, - {NINJA_DIE + 7, SF_QUICK_CALL, &AF(QueueFloorBlood),&s_NinjaDead[4]}, - {NINJA_DIE + 7, NINJA_DIE_RATE, &AF(DoActorDebris), &s_NinjaDead[4]}, + {NINJA_DIE + 5, NINJA_DIE_RATE, DoActorDebris, &s_NinjaDead[1]}, + {NINJA_DIE + 6, SF_QUICK_CALL, DoNinjaSpecial, &s_NinjaDead[2]}, + {NINJA_DIE + 6, NINJA_DIE_RATE, DoActorDebris, &s_NinjaDead[3]}, + {NINJA_DIE + 7, SF_QUICK_CALL, QueueFloorBlood,&s_NinjaDead[4]}, + {NINJA_DIE + 7, NINJA_DIE_RATE, DoActorDebris, &s_NinjaDead[4]}, }; STATE s_NinjaDeathJump[] = { - {NINJA_DIE + 0, NINJA_DIE_RATE, &AF(DoActorDeathMove), &s_NinjaDeathJump[1]}, - {NINJA_DIE + 1, NINJA_DIE_RATE, &AF(DoActorDeathMove), &s_NinjaDeathJump[2]}, - {NINJA_DIE + 2, NINJA_DIE_RATE, &AF(DoActorDeathMove), &s_NinjaDeathJump[2]}, + {NINJA_DIE + 0, NINJA_DIE_RATE, DoActorDeathMove, &s_NinjaDeathJump[1]}, + {NINJA_DIE + 1, NINJA_DIE_RATE, DoActorDeathMove, &s_NinjaDeathJump[2]}, + {NINJA_DIE + 2, NINJA_DIE_RATE, DoActorDeathMove, &s_NinjaDeathJump[2]}, }; STATE s_NinjaDeathFall[] = { - {NINJA_DIE + 3, NINJA_DIE_RATE, &AF(DoActorDeathMove), &s_NinjaDeathFall[1]}, - {NINJA_DIE + 4, NINJA_DIE_RATE, &AF(DoActorDeathMove), &s_NinjaDeathFall[1]}, + {NINJA_DIE + 3, NINJA_DIE_RATE, DoActorDeathMove, &s_NinjaDeathFall[1]}, + {NINJA_DIE + 4, NINJA_DIE_RATE, DoActorDeathMove, &s_NinjaDeathFall[1]}, }; /* @@ -1753,6 +1815,7 @@ ACTOR_ACTION_SET PlayerNinjaActionSet = int SetupNinja(DSWActor* actor) { + ANIMATOR DoActorDecide; short pic = actor->spr.picnum; // Fake some skill settings in case the lower skills are empty. @@ -1765,13 +1828,13 @@ int SetupNinja(DSWActor* actor) actor->user.Health = HEALTH_NINJA; } - actor->user.__legacyState.StateEnd = s_NinjaDie; - actor->user.__legacyState.Rot = sg_NinjaRun; + actor->user.StateEnd = s_NinjaDie; + actor->user.Rot = sg_NinjaRun; actor->spr.scale = DVector2(0.71875, 0.71875); if (actor->spr.pal == PALETTE_PLAYER5) { - actor->user.__legacyState.Attrib = &InvisibleNinjaAttrib; + actor->user.Attrib = &InvisibleNinjaAttrib; EnemyDefaults(actor, &NinjaGreenActionSet, &NinjaPersonality); if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) actor->user.Health = RedNinjaHealth; @@ -1783,15 +1846,15 @@ int SetupNinja(DSWActor* actor) { if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) { - actor->user.__legacyState.Attrib = &NinjaAttrib; - actor->user.__legacyState.ActorActionSet = &NinjaActionSet; + actor->user.Attrib = &NinjaAttrib; + actor->user.ActorActionSet = &NinjaActionSet; actor->user.Personality = &NinjaPersonality; ChangeState(actor, s_NinjaCeiling[0]); } else { - actor->user.__legacyState.Attrib = &NinjaAttrib; - actor->user.__legacyState.ActorActionSet = &NinjaSniperActionSet; + actor->user.Attrib = &NinjaAttrib; + actor->user.ActorActionSet = &NinjaSniperActionSet; actor->user.Personality = &NinjaSniperPersonality; ChangeState(actor, s_NinjaDuck[0]); } @@ -1799,7 +1862,7 @@ int SetupNinja(DSWActor* actor) } else if (actor->spr.pal == PALETTE_PLAYER3) { - actor->user.__legacyState.Attrib = &NinjaAttrib; + actor->user.Attrib = &NinjaAttrib; EnemyDefaults(actor, &NinjaRedActionSet, &NinjaPersonality); if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) actor->user.Health = RedNinjaHealth; @@ -1808,15 +1871,15 @@ int SetupNinja(DSWActor* actor) { if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) { - actor->user.__legacyState.Attrib = &NinjaAttrib; - actor->user.__legacyState.ActorActionSet = &NinjaActionSet; + actor->user.Attrib = &NinjaAttrib; + actor->user.ActorActionSet = &NinjaActionSet; actor->user.Personality = &NinjaPersonality; ChangeState(actor, s_NinjaCeiling[0]); } else { - actor->user.__legacyState.Attrib = &NinjaAttrib; - actor->user.__legacyState.ActorActionSet = &NinjaSniperActionSet; + actor->user.Attrib = &NinjaAttrib; + actor->user.ActorActionSet = &NinjaSniperActionSet; actor->user.Personality = &NinjaSniperPersonality; ChangeState(actor, s_NinjaDuck[0]); } @@ -1824,31 +1887,31 @@ int SetupNinja(DSWActor* actor) } else if (actor->spr.pal == PAL_XLAT_LT_TAN) { - actor->user.__legacyState.Attrib = &NinjaAttrib; + actor->user.Attrib = &NinjaAttrib; EnemyDefaults(actor, &NinjaSeekerActionSet, &NinjaPersonality); if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) actor->user.Health = RedNinjaHealth; actor->spr.pal = actor->user.spal = PAL_XLAT_LT_TAN; - actor->user.__legacyState.Attrib = &NinjaAttrib; + actor->user.Attrib = &NinjaAttrib; } else if (actor->spr.pal == PAL_XLAT_LT_GREY) { - actor->user.__legacyState.Attrib = &NinjaAttrib; + actor->user.Attrib = &NinjaAttrib; EnemyDefaults(actor, &NinjaGrenadeActionSet, &NinjaPersonality); if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) actor->user.Health = RedNinjaHealth; actor->spr.pal = actor->user.spal = PAL_XLAT_LT_GREY; - actor->user.__legacyState.Attrib = &NinjaAttrib; + actor->user.Attrib = &NinjaAttrib; } else { - actor->user.__legacyState.Attrib = &NinjaAttrib; + actor->user.Attrib = &NinjaAttrib; actor->spr.pal = actor->user.spal = PALETTE_PLAYER0; EnemyDefaults(actor, &NinjaActionSet, &NinjaPersonality); if (pic == NINJA_CRAWL_R0) { - actor->user.__legacyState.Attrib = &NinjaAttrib; - actor->user.__legacyState.ActorActionSet = &NinjaSniperActionSet; + actor->user.Attrib = &NinjaAttrib; + actor->user.ActorActionSet = &NinjaSniperActionSet; actor->user.Personality = &NinjaSniperPersonality; ChangeState(actor, s_NinjaDuck[0]); } @@ -1863,14 +1926,6 @@ int SetupNinja(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWNinja, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupNinja(self); - return 0; -} - - //--------------------------------------------------------------------------- // // @@ -1885,8 +1940,8 @@ int DoNinjaHariKari(DSWActor* actor) actor->user.Flags |= (SPR_DEAD); actor->user.Flags &= ~(SPR_FALLING | SPR_JUMPING); actor->user.floor_dist = (40); - actor->user.__legacyState.RotNum = 0; - actor->clearActionFunc(); + actor->user.RotNum = 0; + actor->user.ActorActionFunc = nullptr; actor->spr.extra |= (SPRX_BREAKABLE); actor->spr.cstat |= (CSTAT_SPRITE_BREAKABLE); @@ -1920,14 +1975,14 @@ int DoNinjaGrabThroat(DSWActor* actor) actor->user.Flags |= (SPR_DEAD); actor->user.Flags &= ~(SPR_FALLING | SPR_JUMPING); actor->user.floor_dist = (40); - actor->user.__legacyState.RotNum = 0; - actor->clearActionFunc(); + actor->user.RotNum = 0; + actor->user.ActorActionFunc = nullptr; actor->spr.extra |= (SPRX_BREAKABLE); actor->spr.cstat |= (CSTAT_SPRITE_BREAKABLE); - actor->ChangeStateEnd(); + ChangeState(actor, actor->user.StateEnd); actor->vel.X = 0; PlaySound(DIGI_NINJASCREAM, actor, v3df_follow); } @@ -1976,7 +2031,7 @@ int DoNinjaMove(DSWActor* actor) ActorFollowTrack(actor, ACTORMOVETICS); else { - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); } // stay on floor unless doing certain things @@ -2349,10 +2404,10 @@ void InitPlayerSprite(DSWPlayer* pp, const DVector3& spawnpos, const DAngle star // Grouping items that need to be reset after a LoadLevel ChangeState(actor, s_NinjaRun[0]); - actor->user.__legacyState.Rot = sg_NinjaRun; - actor->user.__legacyState.ActorActionSet = &PlayerNinjaActionSet; + actor->user.Rot = sg_NinjaRun; + actor->user.ActorActionSet = &PlayerNinjaActionSet; - actor->user.__legacyState.RotNum = 5; + actor->user.RotNum = 5; actor->user.Radius = 400; actor->user.PlayerP = pp; @@ -2360,7 +2415,7 @@ void InitPlayerSprite(DSWPlayer* pp, const DVector3& spawnpos, const DAngle star actor->user.Flags |= (SPR_XFLIP_TOGGLE); - actor->spr.picnum = actor->user.__legacyState.State->Pic; + actor->spr.picnum = actor->user.State->Pic; actor->spr.shade = -60; // was 15 actor->clipdist = 16; @@ -2368,7 +2423,7 @@ void InitPlayerSprite(DSWPlayer* pp, const DVector3& spawnpos, const DAngle star actor->spr.pal = PALETTE_PLAYER0 + pp->pnum; actor->user.spal = actor->spr.pal; - pp->GetActor()->setStateGroup(NAME_Run); + NewStateGroup(pp->GetActor(), actor->user.ActorActionSet->Run); pp->PlayerUnderActor = nullptr; @@ -2418,16 +2473,16 @@ void SpawnPlayerUnderSprite(DSWPlayer* pp) actor->spr.cstat |= (CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); actor->spr.extra |= (SPRX_PLAYER_OR_ENEMY); - actor->user.__legacyState.Rot = sg_NinjaRun; - actor->user.__legacyState.RotNum = plActor->user.__legacyState.RotNum; - NewStateGroup(pp->PlayerUnderActor, plActor->user.__legacyState.Rot); + actor->user.Rot = sg_NinjaRun; + actor->user.RotNum = plActor->user.RotNum; + NewStateGroup(pp->PlayerUnderActor, plActor->user.Rot); actor->user.Radius = plActor->user.Radius; actor->user.PlayerP = pp; actor->user.Health = pp->MaxHealth; actor->user.Flags |= (SPR_XFLIP_TOGGLE); - actor->user.__legacyState.ActorActionSet = plActor->user.__legacyState.ActorActionSet; + actor->user.ActorActionSet = plActor->user.ActorActionSet; actor->spr.picnum = plActor->spr.picnum; actor->copy_clipdist(plActor); @@ -2443,8 +2498,31 @@ void SpawnPlayerUnderSprite(DSWPlayer* pp) #include "saveable.h" +static saveable_code saveable_ninja_code[] = +{ + SAVE_CODE(DoNinjaHariKari), + SAVE_CODE(DoNinjaGrabThroat), + SAVE_CODE(DoNinjaMove), + SAVE_CODE(NinjaJumpActionFunc), + SAVE_CODE(NullNinja), + SAVE_CODE(DoNinjaPain), + SAVE_CODE(DoNinjaSpecial), + SAVE_CODE(CheckFire), + SAVE_CODE(DoNinjaCeiling) +}; + static saveable_data saveable_ninja_data[] = { + SAVE_DATA(NinjaBattle), + SAVE_DATA(NinjaOffense), + SAVE_DATA(NinjaBroadcast), + SAVE_DATA(NinjaSurprised), + SAVE_DATA(NinjaEvasive), + SAVE_DATA(NinjaLostTarget), + SAVE_DATA(NinjaCloseRange), + SAVE_DATA(NinjaSniperRoam), + SAVE_DATA(NinjaSniperBattle), + SAVE_DATA(NinjaPersonality), SAVE_DATA(NinjaSniperPersonality), @@ -2524,7 +2602,8 @@ static saveable_data saveable_ninja_data[] = saveable_module saveable_ninja = { // code - nullptr, 0, + saveable_ninja_code, + SIZ(saveable_ninja_code), // data saveable_ninja_data, diff --git a/source/games/sw/src/panel.cpp b/source/games/sw/src/panel.cpp index 4dad295f87e..0f79247e942 100644 --- a/source/games/sw/src/panel.cpp +++ b/source/games/sw/src/panel.cpp @@ -95,6 +95,8 @@ pANIMATOR pNullAnimator; int InitStar(DSWPlayer*); int ChangeWeapon(DSWPlayer*); +ANIMATOR InitFire; + int NullAnimator(DSWActor*) { return 0; diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index a415e8773f3..73226ebc446 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -209,53 +209,120 @@ void DSWPlayer::OnDestroy() #if 1 #define PLAYER_NINJA_RATE 14 +int DoFootPrints(DSWActor* actor); STATE s_PlayerNinjaRun[5][6] = { { - {PLAYER_NINJA_RUN_R0 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[0][1]}, - {PLAYER_NINJA_RUN_R0 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[0][2]}, - {PLAYER_NINJA_RUN_R0 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[0][3]}, - {PLAYER_NINJA_RUN_R0 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[0][4]}, - {PLAYER_NINJA_RUN_R0 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[0][5]}, - {PLAYER_NINJA_RUN_R0 + 3, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[0][0]}, + {PLAYER_NINJA_RUN_R0 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][1]}, + {PLAYER_NINJA_RUN_R0 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][2]}, + {PLAYER_NINJA_RUN_R0 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[0][3]}, + {PLAYER_NINJA_RUN_R0 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][4]}, + {PLAYER_NINJA_RUN_R0 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][5]}, + {PLAYER_NINJA_RUN_R0 + 3, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[0][0]}, }, { - {PLAYER_NINJA_RUN_R1 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[1][1]}, - {PLAYER_NINJA_RUN_R1 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[1][2]}, - {PLAYER_NINJA_RUN_R1 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[1][3]}, - {PLAYER_NINJA_RUN_R1 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[1][4]}, - {PLAYER_NINJA_RUN_R1 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[1][5]}, - {PLAYER_NINJA_RUN_R1 + 3, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[1][0]}, + {PLAYER_NINJA_RUN_R1 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][1]}, + {PLAYER_NINJA_RUN_R1 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][2]}, + {PLAYER_NINJA_RUN_R1 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[1][3]}, + {PLAYER_NINJA_RUN_R1 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][4]}, + {PLAYER_NINJA_RUN_R1 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][5]}, + {PLAYER_NINJA_RUN_R1 + 3, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[1][0]}, }, { - {PLAYER_NINJA_RUN_R2 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[2][1]}, - {PLAYER_NINJA_RUN_R2 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[2][2]}, - {PLAYER_NINJA_RUN_R2 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[2][3]}, - {PLAYER_NINJA_RUN_R2 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[2][4]}, - {PLAYER_NINJA_RUN_R2 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[2][5]}, - {PLAYER_NINJA_RUN_R2 + 3, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[2][0]}, + {PLAYER_NINJA_RUN_R2 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][1]}, + {PLAYER_NINJA_RUN_R2 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][2]}, + {PLAYER_NINJA_RUN_R2 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[2][3]}, + {PLAYER_NINJA_RUN_R2 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][4]}, + {PLAYER_NINJA_RUN_R2 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][5]}, + {PLAYER_NINJA_RUN_R2 + 3, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[2][0]}, }, { - {PLAYER_NINJA_RUN_R3 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[3][1]}, - {PLAYER_NINJA_RUN_R3 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[3][2]}, - {PLAYER_NINJA_RUN_R3 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[3][3]}, - {PLAYER_NINJA_RUN_R3 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[3][4]}, - {PLAYER_NINJA_RUN_R3 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[3][5]}, - {PLAYER_NINJA_RUN_R3 + 3, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[3][0]}, + {PLAYER_NINJA_RUN_R3 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][1]}, + {PLAYER_NINJA_RUN_R3 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][2]}, + {PLAYER_NINJA_RUN_R3 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[3][3]}, + {PLAYER_NINJA_RUN_R3 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][4]}, + {PLAYER_NINJA_RUN_R3 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][5]}, + {PLAYER_NINJA_RUN_R3 + 3, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[3][0]}, }, { - {PLAYER_NINJA_RUN_R4 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[4][1]}, - {PLAYER_NINJA_RUN_R4 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[4][2]}, - {PLAYER_NINJA_RUN_R4 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[4][3]}, - {PLAYER_NINJA_RUN_R4 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[4][4]}, - {PLAYER_NINJA_RUN_R4 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, nullptr, &s_PlayerNinjaRun[4][5]}, - {PLAYER_NINJA_RUN_R4 + 3, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaRun[4][0]}, + {PLAYER_NINJA_RUN_R4 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][1]}, + {PLAYER_NINJA_RUN_R4 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][2]}, + {PLAYER_NINJA_RUN_R4 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[4][3]}, + {PLAYER_NINJA_RUN_R4 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][4]}, + {PLAYER_NINJA_RUN_R4 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][5]}, + {PLAYER_NINJA_RUN_R4 + 3, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[4][0]}, }, }; +STATE* sg_PlayerNinjaRun[] = +{ + s_PlayerNinjaRun[0], + s_PlayerNinjaRun[1], + s_PlayerNinjaRun[2], + s_PlayerNinjaRun[3], + s_PlayerNinjaRun[4] +}; +#else +#define PLAYER_NINJA_RATE 10 + +STATE s_PlayerNinjaRun[5][8] = +{ + + { + {PLAYER_NINJA_RUN_R0 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][1]}, + {PLAYER_NINJA_RUN_R0 + 0, PLAYER_NINJA_RATE | SF_PLAYER_FUNC,DoFootPrints, &s_PlayerNinjaRun[0][2]}, + {PLAYER_NINJA_RUN_R0 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][3]}, + {PLAYER_NINJA_RUN_R0 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][4]}, + {PLAYER_NINJA_RUN_R0 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][5]}, + {PLAYER_NINJA_RUN_R0 + 4, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][6]}, + {PLAYER_NINJA_RUN_R0 + 5, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[0][7]}, + {PLAYER_NINJA_RUN_R0 + 5, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[0][0]}, + }, + { + {PLAYER_NINJA_RUN_R1 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][1]}, + {PLAYER_NINJA_RUN_R1 + 0, PLAYER_NINJA_RATE | SF_PLAYER_FUNC,DoFootPrints, &s_PlayerNinjaRun[1][2]}, + {PLAYER_NINJA_RUN_R1 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][3]}, + {PLAYER_NINJA_RUN_R1 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][4]}, + {PLAYER_NINJA_RUN_R1 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][5]}, + {PLAYER_NINJA_RUN_R1 + 4, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][6]}, + {PLAYER_NINJA_RUN_R1 + 5, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[1][7]}, + {PLAYER_NINJA_RUN_R1 + 5, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[1][0]}, + }, + { + {PLAYER_NINJA_RUN_R2 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][1]}, + {PLAYER_NINJA_RUN_R2 + 0, PLAYER_NINJA_RATE | SF_PLAYER_FUNC,DoFootPrints, &s_PlayerNinjaRun[2][2]}, + {PLAYER_NINJA_RUN_R2 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][3]}, + {PLAYER_NINJA_RUN_R2 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][4]}, + {PLAYER_NINJA_RUN_R2 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][5]}, + {PLAYER_NINJA_RUN_R2 + 4, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][6]}, + {PLAYER_NINJA_RUN_R2 + 5, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[2][7]}, + {PLAYER_NINJA_RUN_R2 + 5, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[2][0]}, + }, + { + {PLAYER_NINJA_RUN_R3 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][1]}, + {PLAYER_NINJA_RUN_R3 + 0, PLAYER_NINJA_RATE | SF_PLAYER_FUNC,DoFootPrints, &s_PlayerNinjaRun[3][2]}, + {PLAYER_NINJA_RUN_R3 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][3]}, + {PLAYER_NINJA_RUN_R3 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][4]}, + {PLAYER_NINJA_RUN_R3 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][5]}, + {PLAYER_NINJA_RUN_R3 + 4, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][6]}, + {PLAYER_NINJA_RUN_R3 + 5, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[3][7]}, + {PLAYER_NINJA_RUN_R3 + 5, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[3][0]}, + }, + { + {PLAYER_NINJA_RUN_R4 + 0, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][1]}, + {PLAYER_NINJA_RUN_R4 + 0, PLAYER_NINJA_RATE | SF_PLAYER_FUNC,DoFootPrints, &s_PlayerNinjaRun[4][2]}, + {PLAYER_NINJA_RUN_R4 + 1, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][3]}, + {PLAYER_NINJA_RUN_R4 + 2, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][4]}, + {PLAYER_NINJA_RUN_R4 + 3, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][5]}, + {PLAYER_NINJA_RUN_R4 + 4, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][6]}, + {PLAYER_NINJA_RUN_R4 + 5, PLAYER_NINJA_RATE | SF_TIC_ADJUST, NullAnimator, &s_PlayerNinjaRun[4][7]}, + {PLAYER_NINJA_RUN_R4 + 5, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaRun[4][0]}, + } +}; + STATE* sg_PlayerNinjaRun[] = { s_PlayerNinjaRun[0], @@ -277,19 +344,19 @@ STATE* sg_PlayerNinjaRun[] = STATE s_PlayerNinjaStand[5][1] = { { - {PLAYER_NINJA_STAND_R0 + 0, PLAYER_NINJA_STAND_RATE, nullptr, &s_PlayerNinjaStand[0][0]}, + {PLAYER_NINJA_STAND_R0 + 0, PLAYER_NINJA_STAND_RATE, NullAnimator, &s_PlayerNinjaStand[0][0]}, }, { - {PLAYER_NINJA_STAND_R1 + 0, PLAYER_NINJA_STAND_RATE, nullptr, &s_PlayerNinjaStand[1][0]}, + {PLAYER_NINJA_STAND_R1 + 0, PLAYER_NINJA_STAND_RATE, NullAnimator, &s_PlayerNinjaStand[1][0]}, }, { - {PLAYER_NINJA_STAND_R2 + 0, PLAYER_NINJA_STAND_RATE, nullptr, &s_PlayerNinjaStand[2][0]}, + {PLAYER_NINJA_STAND_R2 + 0, PLAYER_NINJA_STAND_RATE, NullAnimator, &s_PlayerNinjaStand[2][0]}, }, { - {PLAYER_NINJA_STAND_R3 + 0, PLAYER_NINJA_STAND_RATE, nullptr, &s_PlayerNinjaStand[3][0]}, + {PLAYER_NINJA_STAND_R3 + 0, PLAYER_NINJA_STAND_RATE, NullAnimator, &s_PlayerNinjaStand[3][0]}, }, { - {PLAYER_NINJA_STAND_R4 + 0, PLAYER_NINJA_STAND_RATE, nullptr, &s_PlayerNinjaStand[4][0]}, + {PLAYER_NINJA_STAND_R4 + 0, PLAYER_NINJA_STAND_RATE, NullAnimator, &s_PlayerNinjaStand[4][0]}, }, }; STATE* sg_PlayerNinjaStand[] = @@ -307,39 +374,74 @@ STATE* sg_PlayerNinjaStand[] = extern STATE* sg_NinjaRun[]; int DoPlayerSpriteReset(DSWActor* actor); +#if 0 +STATE s_PlayerNinjaThrow[5][4] = +{ + { + {PLAYER_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[0][1]}, + {PLAYER_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[0][2]}, + {PLAYER_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[0][3]}, + {PLAYER_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, + }, + { + {PLAYER_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[1][1]}, + {PLAYER_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[1][2]}, + {PLAYER_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[1][3]}, + {PLAYER_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, + }, + { + {PLAYER_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[2][1]}, + {PLAYER_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[2][2]}, + {PLAYER_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[2][3]}, + {PLAYER_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, + }, + { + {PLAYER_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[3][1]}, + {PLAYER_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[3][2]}, + {PLAYER_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[3][3]}, + {PLAYER_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, + }, + { + {PLAYER_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[4][1]}, + {PLAYER_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[4][2]}, + {PLAYER_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[4][3]}, + {PLAYER_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, + }, +}; +#endif #if 1 STATE s_PlayerNinjaThrow[5][4] = { { - {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[0][1]}, - {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[0][2]}, - {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[0][3]}, - {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaThrow[0][3]}, + {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[0][1]}, + {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[0][2]}, + {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[0][3]}, + {PLAYER_NINJA_SHOOT_R0 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, }, { - {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[1][1]}, - {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[1][2]}, - {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[1][3]}, - {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaThrow[0][3]}, + {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[1][1]}, + {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[1][2]}, + {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[1][3]}, + {PLAYER_NINJA_SHOOT_R1 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, }, { - {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[2][1]}, - {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[2][2]}, - {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[2][3]}, - {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaThrow[0][3]}, + {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[2][1]}, + {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[2][2]}, + {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[2][3]}, + {PLAYER_NINJA_SHOOT_R2 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, }, { - {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[3][1]}, - {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[3][2]}, - {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[3][3]}, - {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaThrow[0][3]}, + {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[3][1]}, + {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[3][2]}, + {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[3][3]}, + {PLAYER_NINJA_SHOOT_R3 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, }, { - {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[4][1]}, - {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[4][2]}, - {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, nullptr, &s_PlayerNinjaThrow[4][3]}, - {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaThrow[0][3]}, + {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[4][1]}, + {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[4][2]}, + {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE, NullAnimator, &s_PlayerNinjaThrow[4][3]}, + {PLAYER_NINJA_SHOOT_R4 + 0, PLAYER_NINJA_STAR_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaThrow[0][3]}, }, }; #endif @@ -364,34 +466,34 @@ STATE* sg_PlayerNinjaThrow[] = STATE s_PlayerNinjaJump[5][4] = { { - {PLAYER_NINJA_JUMP_R0 + 0, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[0][1]}, - {PLAYER_NINJA_JUMP_R0 + 1, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[0][2]}, - {PLAYER_NINJA_JUMP_R0 + 2, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[0][3]}, - {PLAYER_NINJA_JUMP_R0 + 3, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[0][3]}, + {PLAYER_NINJA_JUMP_R0 + 0, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[0][1]}, + {PLAYER_NINJA_JUMP_R0 + 1, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[0][2]}, + {PLAYER_NINJA_JUMP_R0 + 2, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[0][3]}, + {PLAYER_NINJA_JUMP_R0 + 3, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[0][3]}, }, { - {PLAYER_NINJA_JUMP_R1 + 0, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[1][1]}, - {PLAYER_NINJA_JUMP_R1 + 1, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[1][2]}, - {PLAYER_NINJA_JUMP_R1 + 2, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[1][3]}, - {PLAYER_NINJA_JUMP_R1 + 3, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[1][3]}, + {PLAYER_NINJA_JUMP_R1 + 0, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[1][1]}, + {PLAYER_NINJA_JUMP_R1 + 1, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[1][2]}, + {PLAYER_NINJA_JUMP_R1 + 2, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[1][3]}, + {PLAYER_NINJA_JUMP_R1 + 3, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[1][3]}, }, { - {PLAYER_NINJA_JUMP_R2 + 0, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[2][1]}, - {PLAYER_NINJA_JUMP_R2 + 1, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[2][2]}, - {PLAYER_NINJA_JUMP_R2 + 2, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[2][3]}, - {PLAYER_NINJA_JUMP_R2 + 3, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[2][3]}, + {PLAYER_NINJA_JUMP_R2 + 0, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[2][1]}, + {PLAYER_NINJA_JUMP_R2 + 1, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[2][2]}, + {PLAYER_NINJA_JUMP_R2 + 2, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[2][3]}, + {PLAYER_NINJA_JUMP_R2 + 3, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[2][3]}, }, { - {PLAYER_NINJA_JUMP_R3 + 0, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[3][1]}, - {PLAYER_NINJA_JUMP_R3 + 1, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[3][2]}, - {PLAYER_NINJA_JUMP_R3 + 2, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[3][3]}, - {PLAYER_NINJA_JUMP_R3 + 3, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[3][3]}, + {PLAYER_NINJA_JUMP_R3 + 0, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[3][1]}, + {PLAYER_NINJA_JUMP_R3 + 1, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[3][2]}, + {PLAYER_NINJA_JUMP_R3 + 2, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[3][3]}, + {PLAYER_NINJA_JUMP_R3 + 3, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[3][3]}, }, { - {PLAYER_NINJA_JUMP_R4 + 0, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[4][1]}, - {PLAYER_NINJA_JUMP_R4 + 1, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[4][2]}, - {PLAYER_NINJA_JUMP_R4 + 2, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[4][3]}, - {PLAYER_NINJA_JUMP_R4 + 3, PLAYER_NINJA_JUMP_RATE, nullptr, &s_PlayerNinjaJump[4][3]}, + {PLAYER_NINJA_JUMP_R4 + 0, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[4][1]}, + {PLAYER_NINJA_JUMP_R4 + 1, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[4][2]}, + {PLAYER_NINJA_JUMP_R4 + 2, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[4][3]}, + {PLAYER_NINJA_JUMP_R4 + 3, PLAYER_NINJA_JUMP_RATE, NullAnimator, &s_PlayerNinjaJump[4][3]}, }, }; @@ -417,24 +519,24 @@ STATE* sg_PlayerNinjaJump[] = STATE s_PlayerNinjaFall[5][2] = { { - {PLAYER_NINJA_JUMP_R0 + 1, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[0][1]}, - {PLAYER_NINJA_JUMP_R0 + 2, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[0][1]}, + {PLAYER_NINJA_JUMP_R0 + 1, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[0][1]}, + {PLAYER_NINJA_JUMP_R0 + 2, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[0][1]}, }, { - {PLAYER_NINJA_JUMP_R1 + 1, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[1][1]}, - {PLAYER_NINJA_JUMP_R1 + 2, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[1][1]}, + {PLAYER_NINJA_JUMP_R1 + 1, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[1][1]}, + {PLAYER_NINJA_JUMP_R1 + 2, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[1][1]}, }, { - {PLAYER_NINJA_JUMP_R2 + 1, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[2][1]}, - {PLAYER_NINJA_JUMP_R2 + 2, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[2][1]}, + {PLAYER_NINJA_JUMP_R2 + 1, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[2][1]}, + {PLAYER_NINJA_JUMP_R2 + 2, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[2][1]}, }, { - {PLAYER_NINJA_JUMP_R3 + 1, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[3][1]}, - {PLAYER_NINJA_JUMP_R3 + 2, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[3][1]}, + {PLAYER_NINJA_JUMP_R3 + 1, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[3][1]}, + {PLAYER_NINJA_JUMP_R3 + 2, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[3][1]}, }, { - {PLAYER_NINJA_JUMP_R4 + 1, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[4][1]}, - {PLAYER_NINJA_JUMP_R4 + 2, PLAYER_NINJA_FALL_RATE, nullptr, &s_PlayerNinjaFall[4][1]}, + {PLAYER_NINJA_JUMP_R4 + 1, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[4][1]}, + {PLAYER_NINJA_JUMP_R4 + 2, PLAYER_NINJA_FALL_RATE, NullAnimator, &s_PlayerNinjaFall[4][1]}, }, }; @@ -459,34 +561,34 @@ STATE* sg_PlayerNinjaFall[] = STATE s_PlayerNinjaClimb[5][4] = { { - {PLAYER_NINJA_CLIMB_R0 + 0, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[0][1]}, - {PLAYER_NINJA_CLIMB_R0 + 1, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[0][2]}, - {PLAYER_NINJA_CLIMB_R0 + 2, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[0][3]}, - {PLAYER_NINJA_CLIMB_R0 + 3, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[0][0]}, + {PLAYER_NINJA_CLIMB_R0 + 0, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[0][1]}, + {PLAYER_NINJA_CLIMB_R0 + 1, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[0][2]}, + {PLAYER_NINJA_CLIMB_R0 + 2, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[0][3]}, + {PLAYER_NINJA_CLIMB_R0 + 3, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[0][0]}, }, { - {PLAYER_NINJA_CLIMB_R1 + 0, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[1][1]}, - {PLAYER_NINJA_CLIMB_R1 + 1, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[1][2]}, - {PLAYER_NINJA_CLIMB_R1 + 2, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[1][3]}, - {PLAYER_NINJA_CLIMB_R1 + 3, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[1][0]}, + {PLAYER_NINJA_CLIMB_R1 + 0, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[1][1]}, + {PLAYER_NINJA_CLIMB_R1 + 1, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[1][2]}, + {PLAYER_NINJA_CLIMB_R1 + 2, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[1][3]}, + {PLAYER_NINJA_CLIMB_R1 + 3, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[1][0]}, }, { - {PLAYER_NINJA_CLIMB_R2 + 0, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[2][1]}, - {PLAYER_NINJA_CLIMB_R2 + 1, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[2][2]}, - {PLAYER_NINJA_CLIMB_R2 + 2, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[2][3]}, - {PLAYER_NINJA_CLIMB_R2 + 3, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[2][0]}, + {PLAYER_NINJA_CLIMB_R2 + 0, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[2][1]}, + {PLAYER_NINJA_CLIMB_R2 + 1, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[2][2]}, + {PLAYER_NINJA_CLIMB_R2 + 2, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[2][3]}, + {PLAYER_NINJA_CLIMB_R2 + 3, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[2][0]}, }, { - {PLAYER_NINJA_CLIMB_R3 + 0, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[3][1]}, - {PLAYER_NINJA_CLIMB_R3 + 1, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[3][2]}, - {PLAYER_NINJA_CLIMB_R3 + 2, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[3][3]}, - {PLAYER_NINJA_CLIMB_R3 + 3, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[3][0]}, + {PLAYER_NINJA_CLIMB_R3 + 0, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[3][1]}, + {PLAYER_NINJA_CLIMB_R3 + 1, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[3][2]}, + {PLAYER_NINJA_CLIMB_R3 + 2, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[3][3]}, + {PLAYER_NINJA_CLIMB_R3 + 3, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[3][0]}, }, { - {PLAYER_NINJA_CLIMB_R4 + 0, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[4][1]}, - {PLAYER_NINJA_CLIMB_R4 + 1, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[4][2]}, - {PLAYER_NINJA_CLIMB_R4 + 2, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[4][3]}, - {PLAYER_NINJA_CLIMB_R4 + 3, PLAYER_NINJA_CLIMB_RATE, nullptr, &s_PlayerNinjaClimb[4][0]}, + {PLAYER_NINJA_CLIMB_R4 + 0, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[4][1]}, + {PLAYER_NINJA_CLIMB_R4 + 1, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[4][2]}, + {PLAYER_NINJA_CLIMB_R4 + 2, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[4][3]}, + {PLAYER_NINJA_CLIMB_R4 + 3, PLAYER_NINJA_CLIMB_RATE, NullAnimator, &s_PlayerNinjaClimb[4][0]}, }, }; @@ -510,44 +612,44 @@ STATE* sg_PlayerNinjaClimb[] = STATE s_PlayerNinjaCrawl[5][6] = { { - {PLAYER_NINJA_CRAWL_R0 + 0, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[0][1]}, - {PLAYER_NINJA_CRAWL_R0 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[0][2]}, - {PLAYER_NINJA_CRAWL_R0 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[0][3]}, - {PLAYER_NINJA_CRAWL_R0 + 2, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[0][4]}, - {PLAYER_NINJA_CRAWL_R0 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[0][5]}, - {PLAYER_NINJA_CRAWL_R0 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[0][0]}, + {PLAYER_NINJA_CRAWL_R0 + 0, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[0][1]}, + {PLAYER_NINJA_CRAWL_R0 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[0][2]}, + {PLAYER_NINJA_CRAWL_R0 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[0][3]}, + {PLAYER_NINJA_CRAWL_R0 + 2, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[0][4]}, + {PLAYER_NINJA_CRAWL_R0 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[0][5]}, + {PLAYER_NINJA_CRAWL_R0 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[0][0]}, }, { - {PLAYER_NINJA_CRAWL_R1 + 0, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[1][1]}, - {PLAYER_NINJA_CRAWL_R1 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[1][2]}, - {PLAYER_NINJA_CRAWL_R1 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[1][3]}, - {PLAYER_NINJA_CRAWL_R1 + 2, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[1][4]}, - {PLAYER_NINJA_CRAWL_R1 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[1][5]}, - {PLAYER_NINJA_CRAWL_R1 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[1][0]}, + {PLAYER_NINJA_CRAWL_R1 + 0, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[1][1]}, + {PLAYER_NINJA_CRAWL_R1 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[1][2]}, + {PLAYER_NINJA_CRAWL_R1 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[1][3]}, + {PLAYER_NINJA_CRAWL_R1 + 2, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[1][4]}, + {PLAYER_NINJA_CRAWL_R1 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[1][5]}, + {PLAYER_NINJA_CRAWL_R1 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[1][0]}, }, { - {PLAYER_NINJA_CRAWL_R2 + 0, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[2][1]}, - {PLAYER_NINJA_CRAWL_R2 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[2][2]}, - {PLAYER_NINJA_CRAWL_R2 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[2][3]}, - {PLAYER_NINJA_CRAWL_R2 + 2, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[2][4]}, - {PLAYER_NINJA_CRAWL_R2 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[2][5]}, - {PLAYER_NINJA_CRAWL_R2 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[2][0]}, + {PLAYER_NINJA_CRAWL_R2 + 0, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[2][1]}, + {PLAYER_NINJA_CRAWL_R2 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[2][2]}, + {PLAYER_NINJA_CRAWL_R2 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[2][3]}, + {PLAYER_NINJA_CRAWL_R2 + 2, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[2][4]}, + {PLAYER_NINJA_CRAWL_R2 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[2][5]}, + {PLAYER_NINJA_CRAWL_R2 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[2][0]}, }, { - {PLAYER_NINJA_CRAWL_R3 + 0, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[3][1]}, - {PLAYER_NINJA_CRAWL_R3 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[3][2]}, - {PLAYER_NINJA_CRAWL_R3 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[3][3]}, - {PLAYER_NINJA_CRAWL_R3 + 2, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[3][4]}, - {PLAYER_NINJA_CRAWL_R3 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[3][5]}, - {PLAYER_NINJA_CRAWL_R3 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[3][0]}, + {PLAYER_NINJA_CRAWL_R3 + 0, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[3][1]}, + {PLAYER_NINJA_CRAWL_R3 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[3][2]}, + {PLAYER_NINJA_CRAWL_R3 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[3][3]}, + {PLAYER_NINJA_CRAWL_R3 + 2, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[3][4]}, + {PLAYER_NINJA_CRAWL_R3 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[3][5]}, + {PLAYER_NINJA_CRAWL_R3 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[3][0]}, }, { - {PLAYER_NINJA_CRAWL_R4 + 0, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[4][1]}, - {PLAYER_NINJA_CRAWL_R4 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[4][2]}, - {PLAYER_NINJA_CRAWL_R4 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[4][3]}, - {PLAYER_NINJA_CRAWL_R4 + 2, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[4][4]}, - {PLAYER_NINJA_CRAWL_R4 + 1, PLAYER_NINJA_CRAWL_RATE, nullptr, &s_PlayerNinjaCrawl[4][5]}, - {PLAYER_NINJA_CRAWL_R4 + 1, 0 | SF_QUICK_CALL, &AF(DoFootPrints), &s_PlayerNinjaCrawl[4][0]}, + {PLAYER_NINJA_CRAWL_R4 + 0, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[4][1]}, + {PLAYER_NINJA_CRAWL_R4 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[4][2]}, + {PLAYER_NINJA_CRAWL_R4 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[4][3]}, + {PLAYER_NINJA_CRAWL_R4 + 2, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[4][4]}, + {PLAYER_NINJA_CRAWL_R4 + 1, PLAYER_NINJA_CRAWL_RATE, NullAnimator, &s_PlayerNinjaCrawl[4][5]}, + {PLAYER_NINJA_CRAWL_R4 + 1, 0 | SF_QUICK_CALL, DoFootPrints, &s_PlayerNinjaCrawl[4][0]}, }, }; @@ -572,34 +674,34 @@ STATE* sg_PlayerNinjaCrawl[] = STATE s_PlayerNinjaSwim[5][4] = { { - {PLAYER_NINJA_SWIM_R0 + 0, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[0][1]}, - {PLAYER_NINJA_SWIM_R0 + 1, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[0][2]}, - {PLAYER_NINJA_SWIM_R0 + 2, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[0][3]}, - {PLAYER_NINJA_SWIM_R0 + 3, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[0][0]}, + {PLAYER_NINJA_SWIM_R0 + 0, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[0][1]}, + {PLAYER_NINJA_SWIM_R0 + 1, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[0][2]}, + {PLAYER_NINJA_SWIM_R0 + 2, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[0][3]}, + {PLAYER_NINJA_SWIM_R0 + 3, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[0][0]}, }, { - {PLAYER_NINJA_SWIM_R1 + 0, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[1][1]}, - {PLAYER_NINJA_SWIM_R1 + 1, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[1][2]}, - {PLAYER_NINJA_SWIM_R1 + 2, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[1][3]}, - {PLAYER_NINJA_SWIM_R1 + 3, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[1][0]}, + {PLAYER_NINJA_SWIM_R1 + 0, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[1][1]}, + {PLAYER_NINJA_SWIM_R1 + 1, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[1][2]}, + {PLAYER_NINJA_SWIM_R1 + 2, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[1][3]}, + {PLAYER_NINJA_SWIM_R1 + 3, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[1][0]}, }, { - {PLAYER_NINJA_SWIM_R2 + 0, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[2][1]}, - {PLAYER_NINJA_SWIM_R2 + 1, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[2][2]}, - {PLAYER_NINJA_SWIM_R2 + 2, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[2][3]}, - {PLAYER_NINJA_SWIM_R2 + 3, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[2][0]}, + {PLAYER_NINJA_SWIM_R2 + 0, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[2][1]}, + {PLAYER_NINJA_SWIM_R2 + 1, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[2][2]}, + {PLAYER_NINJA_SWIM_R2 + 2, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[2][3]}, + {PLAYER_NINJA_SWIM_R2 + 3, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[2][0]}, }, { - {PLAYER_NINJA_SWIM_R3 + 0, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[3][1]}, - {PLAYER_NINJA_SWIM_R3 + 1, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[3][2]}, - {PLAYER_NINJA_SWIM_R3 + 2, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[3][3]}, - {PLAYER_NINJA_SWIM_R3 + 3, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[3][0]}, + {PLAYER_NINJA_SWIM_R3 + 0, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[3][1]}, + {PLAYER_NINJA_SWIM_R3 + 1, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[3][2]}, + {PLAYER_NINJA_SWIM_R3 + 2, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[3][3]}, + {PLAYER_NINJA_SWIM_R3 + 3, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[3][0]}, }, { - {PLAYER_NINJA_SWIM_R4 + 0, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[4][1]}, - {PLAYER_NINJA_SWIM_R4 + 1, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[4][2]}, - {PLAYER_NINJA_SWIM_R4 + 2, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[4][3]}, - {PLAYER_NINJA_SWIM_R4 + 3, PLAYER_NINJA_SWIM_RATE, nullptr, &s_PlayerNinjaSwim[4][0]}, + {PLAYER_NINJA_SWIM_R4 + 0, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[4][1]}, + {PLAYER_NINJA_SWIM_R4 + 1, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[4][2]}, + {PLAYER_NINJA_SWIM_R4 + 2, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[4][3]}, + {PLAYER_NINJA_SWIM_R4 + 3, PLAYER_NINJA_SWIM_RATE, NullAnimator, &s_PlayerNinjaSwim[4][0]}, }, }; @@ -622,54 +724,54 @@ STATE* sg_PlayerNinjaSwim[] = STATE s_PlayerHeadFly[5][8] = { { - {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][1]}, - {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][2]}, - {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][3]}, - {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][4]}, - {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][5]}, - {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][6]}, - {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][7]}, - {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[0][0]} + {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][1]}, + {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][2]}, + {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][3]}, + {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][4]}, + {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][5]}, + {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][6]}, + {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][7]}, + {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[0][0]} }, { - {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][1]}, - {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][2]}, - {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][3]}, - {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][4]}, - {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][5]}, - {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][6]}, - {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][7]}, - {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[1][0]} + {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][1]}, + {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][2]}, + {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][3]}, + {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][4]}, + {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][5]}, + {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][6]}, + {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][7]}, + {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[1][0]} }, { - {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][1]}, - {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][2]}, - {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][3]}, - {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][4]}, - {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][5]}, - {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][6]}, - {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][7]}, - {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[2][0]} + {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][1]}, + {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][2]}, + {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][3]}, + {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][4]}, + {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][5]}, + {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][6]}, + {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][7]}, + {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[2][0]} }, { - {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][1]}, - {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][2]}, - {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][3]}, - {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][4]}, - {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][5]}, - {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][6]}, - {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][7]}, - {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[3][0]} + {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][1]}, + {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][2]}, + {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][3]}, + {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][4]}, + {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][5]}, + {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][6]}, + {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][7]}, + {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[3][0]} }, { - {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][1]}, - {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][2]}, - {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][3]}, - {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][4]}, - {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][5]}, - {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][6]}, - {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][7]}, - {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, nullptr, &s_PlayerHeadFly[4][0]} + {NINJA_HeadFly + 0, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][1]}, + {NINJA_HeadFly + 1, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][2]}, + {NINJA_HeadFly + 2, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][3]}, + {NINJA_HeadFly + 3, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][4]}, + {NINJA_HeadFly + 4, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][5]}, + {NINJA_HeadFly + 5, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][6]}, + {NINJA_HeadFly + 6, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][7]}, + {NINJA_HeadFly + 7, NINJA_HeadFly_RATE, NullAnimator, &s_PlayerHeadFly[4][0]} }, }; @@ -692,19 +794,19 @@ STATE* sg_PlayerHeadFly[] = STATE s_PlayerHead[5][1] = { { - {NINJA_Head_R0 + 0, NINJA_Head_RATE, nullptr, &s_PlayerHead[0][0]}, + {NINJA_Head_R0 + 0, NINJA_Head_RATE, NullAnimator, &s_PlayerHead[0][0]}, }, { - {NINJA_Head_R1 + 0, NINJA_Head_RATE, nullptr, &s_PlayerHead[1][0]}, + {NINJA_Head_R1 + 0, NINJA_Head_RATE, NullAnimator, &s_PlayerHead[1][0]}, }, { - {NINJA_Head_R2 + 0, NINJA_Head_RATE, nullptr, &s_PlayerHead[2][0]}, + {NINJA_Head_R2 + 0, NINJA_Head_RATE, NullAnimator, &s_PlayerHead[2][0]}, }, { - {NINJA_Head_R3 + 0, NINJA_Head_RATE, nullptr, &s_PlayerHead[3][0]}, + {NINJA_Head_R3 + 0, NINJA_Head_RATE, NullAnimator, &s_PlayerHead[3][0]}, }, { - {NINJA_Head_R4 + 0, NINJA_Head_RATE, nullptr, &s_PlayerHead[4][0]}, + {NINJA_Head_R4 + 0, NINJA_Head_RATE, NullAnimator, &s_PlayerHead[4][0]}, }, }; @@ -727,19 +829,19 @@ STATE* sg_PlayerHead[] = STATE s_PlayerHeadHurl[5][1] = { { - {NINJA_HeadHurl_R0 + 0, NINJA_HeadHurl_RATE, nullptr, &s_PlayerHeadHurl[0][0]}, + {NINJA_HeadHurl_R0 + 0, NINJA_HeadHurl_RATE, NullAnimator, &s_PlayerHeadHurl[0][0]}, }, { - {NINJA_HeadHurl_R1 + 0, NINJA_HeadHurl_RATE, nullptr, &s_PlayerHeadHurl[1][0]}, + {NINJA_HeadHurl_R1 + 0, NINJA_HeadHurl_RATE, NullAnimator, &s_PlayerHeadHurl[1][0]}, }, { - {NINJA_HeadHurl_R2 + 0, NINJA_HeadHurl_RATE, nullptr, &s_PlayerHeadHurl[2][0]}, + {NINJA_HeadHurl_R2 + 0, NINJA_HeadHurl_RATE, NullAnimator, &s_PlayerHeadHurl[2][0]}, }, { - {NINJA_HeadHurl_R3 + 0, NINJA_HeadHurl_RATE, nullptr, &s_PlayerHeadHurl[3][0]}, + {NINJA_HeadHurl_R3 + 0, NINJA_HeadHurl_RATE, NullAnimator, &s_PlayerHeadHurl[3][0]}, }, { - {NINJA_HeadHurl_R4 + 0, NINJA_HeadHurl_RATE, nullptr, &s_PlayerHeadHurl[4][0]}, + {NINJA_HeadHurl_R4 + 0, NINJA_HeadHurl_RATE, NullAnimator, &s_PlayerHeadHurl[4][0]}, }, }; @@ -757,64 +859,64 @@ STATE* sg_PlayerHeadHurl[] = STATE s_PlayerDeath[5][10] = { { - {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][1]}, - {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][2]}, - {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][3]}, - {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][4]}, - {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][5]}, - {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][6]}, - {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][7]}, - {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][8]}, - {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, &AF(QueueFloorBlood), &s_PlayerDeath[0][9]}, - {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[0][9]}, + {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][1]}, + {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][2]}, + {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][3]}, + {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][4]}, + {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][5]}, + {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][6]}, + {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][7]}, + {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][8]}, + {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, QueueFloorBlood, &s_PlayerDeath[0][9]}, + {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[0][9]}, }, { - {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][1]}, - {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][2]}, - {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][3]}, - {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][4]}, - {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][5]}, - {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][6]}, - {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][7]}, - {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][8]}, - {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, &AF(QueueFloorBlood), &s_PlayerDeath[1][9]}, - {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[1][9]}, + {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][1]}, + {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][2]}, + {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][3]}, + {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][4]}, + {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][5]}, + {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][6]}, + {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][7]}, + {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][8]}, + {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, QueueFloorBlood, &s_PlayerDeath[1][9]}, + {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[1][9]}, }, { - {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][1]}, - {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][2]}, - {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][3]}, - {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][4]}, - {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][5]}, - {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][6]}, - {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][7]}, - {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][8]}, - {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, &AF(QueueFloorBlood), &s_PlayerDeath[2][9]}, - {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[2][9]}, + {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][1]}, + {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][2]}, + {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][3]}, + {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][4]}, + {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][5]}, + {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][6]}, + {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][7]}, + {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][8]}, + {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, QueueFloorBlood, &s_PlayerDeath[2][9]}, + {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[2][9]}, }, { - {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][1]}, - {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][2]}, - {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][3]}, - {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][4]}, - {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][5]}, - {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][6]}, - {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][7]}, - {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][8]}, - {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, &AF(QueueFloorBlood), &s_PlayerDeath[3][9]}, - {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[3][9]}, + {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][1]}, + {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][2]}, + {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][3]}, + {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][4]}, + {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][5]}, + {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][6]}, + {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][7]}, + {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][8]}, + {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, QueueFloorBlood, &s_PlayerDeath[3][9]}, + {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[3][9]}, }, { - {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][1]}, - {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][2]}, - {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][3]}, - {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][4]}, - {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][5]}, - {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][6]}, - {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][7]}, - {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][8]}, - {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, &AF(QueueFloorBlood), &s_PlayerDeath[4][9]}, - {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, nullptr, &s_PlayerDeath[4][9]}, + {PLAYER_NINJA_DIE + 0, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][1]}, + {PLAYER_NINJA_DIE + 1, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][2]}, + {PLAYER_NINJA_DIE + 2, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][3]}, + {PLAYER_NINJA_DIE + 3, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][4]}, + {PLAYER_NINJA_DIE + 4, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][5]}, + {PLAYER_NINJA_DIE + 5, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][6]}, + {PLAYER_NINJA_DIE + 6, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][7]}, + {PLAYER_NINJA_DIE + 7, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][8]}, + {PLAYER_NINJA_DIE + 8, 0 | SF_QUICK_CALL, QueueFloorBlood, &s_PlayerDeath[4][9]}, + {PLAYER_NINJA_DIE + 8, PLAYER_NINJA_DIE_RATE, NullAnimator, &s_PlayerDeath[4][9]}, }, }; @@ -838,34 +940,34 @@ STATE* sg_PlayerDeath[] = STATE s_PlayerNinjaSword[5][4] = { { - {PLAYER_NINJA_SWORD_R0 + 0, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[0][1]}, - {PLAYER_NINJA_SWORD_R0 + 1, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[0][2]}, - {PLAYER_NINJA_SWORD_R0 + 2, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[0][3]}, - {PLAYER_NINJA_SWORD_R0 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaSword[0][0]}, + {PLAYER_NINJA_SWORD_R0 + 0, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[0][1]}, + {PLAYER_NINJA_SWORD_R0 + 1, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[0][2]}, + {PLAYER_NINJA_SWORD_R0 + 2, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[0][3]}, + {PLAYER_NINJA_SWORD_R0 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaSword[0][0]}, }, { - {PLAYER_NINJA_SWORD_R1 + 0, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[1][1]}, - {PLAYER_NINJA_SWORD_R1 + 1, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[1][2]}, - {PLAYER_NINJA_SWORD_R1 + 2, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[1][3]}, - {PLAYER_NINJA_SWORD_R1 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaSword[1][0]}, + {PLAYER_NINJA_SWORD_R1 + 0, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[1][1]}, + {PLAYER_NINJA_SWORD_R1 + 1, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[1][2]}, + {PLAYER_NINJA_SWORD_R1 + 2, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[1][3]}, + {PLAYER_NINJA_SWORD_R1 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaSword[1][0]}, }, { - {PLAYER_NINJA_SWORD_R2 + 0, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[2][1]}, - {PLAYER_NINJA_SWORD_R2 + 1, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[2][2]}, - {PLAYER_NINJA_SWORD_R2 + 2, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[2][3]}, - {PLAYER_NINJA_SWORD_R2 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaSword[2][0]}, + {PLAYER_NINJA_SWORD_R2 + 0, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[2][1]}, + {PLAYER_NINJA_SWORD_R2 + 1, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[2][2]}, + {PLAYER_NINJA_SWORD_R2 + 2, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[2][3]}, + {PLAYER_NINJA_SWORD_R2 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaSword[2][0]}, }, { - {PLAYER_NINJA_SWORD_R3 + 0, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[3][1]}, - {PLAYER_NINJA_SWORD_R3 + 1, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[3][2]}, - {PLAYER_NINJA_SWORD_R3 + 2, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[3][3]}, - {PLAYER_NINJA_SWORD_R3 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaSword[3][0]}, + {PLAYER_NINJA_SWORD_R3 + 0, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[3][1]}, + {PLAYER_NINJA_SWORD_R3 + 1, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[3][2]}, + {PLAYER_NINJA_SWORD_R3 + 2, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[3][3]}, + {PLAYER_NINJA_SWORD_R3 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaSword[3][0]}, }, { - {PLAYER_NINJA_SWORD_R4 + 0, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[4][1]}, - {PLAYER_NINJA_SWORD_R4 + 1, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[4][2]}, - {PLAYER_NINJA_SWORD_R4 + 2, PLAYER_NINJA_SWORD_RATE, nullptr, &s_PlayerNinjaSword[4][3]}, - {PLAYER_NINJA_SWORD_R4 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaSword[4][0]}, + {PLAYER_NINJA_SWORD_R4 + 0, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[4][1]}, + {PLAYER_NINJA_SWORD_R4 + 1, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[4][2]}, + {PLAYER_NINJA_SWORD_R4 + 2, PLAYER_NINJA_SWORD_RATE, NullAnimator, &s_PlayerNinjaSword[4][3]}, + {PLAYER_NINJA_SWORD_R4 + 2, PLAYER_NINJA_SWORD_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaSword[4][0]}, }, }; @@ -890,29 +992,29 @@ STATE* sg_PlayerNinjaSword[] = STATE s_PlayerNinjaPunch[5][4] = { { - {PLAYER_NINJA_PUNCH_R0 + 0, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[0][1]}, - {PLAYER_NINJA_PUNCH_R0 + 1, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[0][2]}, - {PLAYER_NINJA_PUNCH_R0 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaPunch[0][2]}, + {PLAYER_NINJA_PUNCH_R0 + 0, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[0][1]}, + {PLAYER_NINJA_PUNCH_R0 + 1, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[0][2]}, + {PLAYER_NINJA_PUNCH_R0 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaPunch[0][2]}, }, { - {PLAYER_NINJA_PUNCH_R1 + 0, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[1][1]}, - {PLAYER_NINJA_PUNCH_R1 + 1, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[1][2]}, - {PLAYER_NINJA_PUNCH_R1 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaPunch[1][2]}, + {PLAYER_NINJA_PUNCH_R1 + 0, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[1][1]}, + {PLAYER_NINJA_PUNCH_R1 + 1, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[1][2]}, + {PLAYER_NINJA_PUNCH_R1 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaPunch[1][2]}, }, { - {PLAYER_NINJA_PUNCH_R2 + 0, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[2][1]}, - {PLAYER_NINJA_PUNCH_R2 + 1, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[2][2]}, - {PLAYER_NINJA_PUNCH_R2 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaPunch[2][2]}, + {PLAYER_NINJA_PUNCH_R2 + 0, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[2][1]}, + {PLAYER_NINJA_PUNCH_R2 + 1, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[2][2]}, + {PLAYER_NINJA_PUNCH_R2 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaPunch[2][2]}, }, { - {PLAYER_NINJA_PUNCH_R3 + 0, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[3][1]}, - {PLAYER_NINJA_PUNCH_R3 + 1, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[3][2]}, - {PLAYER_NINJA_PUNCH_R3 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaPunch[3][2]}, + {PLAYER_NINJA_PUNCH_R3 + 0, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[3][1]}, + {PLAYER_NINJA_PUNCH_R3 + 1, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[3][2]}, + {PLAYER_NINJA_PUNCH_R3 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaPunch[3][2]}, }, { - {PLAYER_NINJA_PUNCH_R4 + 0, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[4][1]}, - {PLAYER_NINJA_PUNCH_R4 + 1, PLAYER_NINJA_PUNCH_RATE, nullptr, &s_PlayerNinjaPunch[4][2]}, - {PLAYER_NINJA_PUNCH_R4 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, &AF(DoPlayerSpriteReset), &s_PlayerNinjaPunch[4][2]}, + {PLAYER_NINJA_PUNCH_R4 + 0, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[4][1]}, + {PLAYER_NINJA_PUNCH_R4 + 1, PLAYER_NINJA_PUNCH_RATE, NullAnimator, &s_PlayerNinjaPunch[4][2]}, + {PLAYER_NINJA_PUNCH_R4 + 1, PLAYER_NINJA_PUNCH_RATE | SF_PLAYER_FUNC, DoPlayerSpriteReset, &s_PlayerNinjaPunch[4][2]}, }, }; @@ -943,19 +1045,19 @@ STATE* sg_PlayerNinjaPunch[] = STATE s_PlayerNinjaFly[5][4] = { { - {PLAYER_NINJA_FLY_R0 + 0, PLAYER_NINJA_FLY_RATE, nullptr, &s_PlayerNinjaFly[0][0]}, + {PLAYER_NINJA_FLY_R0 + 0, PLAYER_NINJA_FLY_RATE, NullAnimator, &s_PlayerNinjaFly[0][0]}, }, { - {PLAYER_NINJA_FLY_R1 + 0, PLAYER_NINJA_FLY_RATE, nullptr, &s_PlayerNinjaFly[1][0]}, + {PLAYER_NINJA_FLY_R1 + 0, PLAYER_NINJA_FLY_RATE, NullAnimator, &s_PlayerNinjaFly[1][0]}, }, { - {PLAYER_NINJA_FLY_R2 + 0, PLAYER_NINJA_FLY_RATE, nullptr, &s_PlayerNinjaFly[2][0]}, + {PLAYER_NINJA_FLY_R2 + 0, PLAYER_NINJA_FLY_RATE, NullAnimator, &s_PlayerNinjaFly[2][0]}, }, { - {PLAYER_NINJA_FLY_R3 + 0, PLAYER_NINJA_FLY_RATE, nullptr, &s_PlayerNinjaFly[3][0]}, + {PLAYER_NINJA_FLY_R3 + 0, PLAYER_NINJA_FLY_RATE, NullAnimator, &s_PlayerNinjaFly[3][0]}, }, { - {PLAYER_NINJA_FLY_R4 + 0, PLAYER_NINJA_FLY_RATE, nullptr, &s_PlayerNinjaFly[4][0]}, + {PLAYER_NINJA_FLY_R4 + 0, PLAYER_NINJA_FLY_RATE, NullAnimator, &s_PlayerNinjaFly[4][0]}, }, }; @@ -979,10 +1081,12 @@ void DoPlayerSpriteThrow(DSWPlayer* pp) { if (!(pp->Flags & (PF_DIVING|PF_FLYING|PF_CRAWLING))) { - if (pp->CurWpn == pp->Wpn[WPN_SWORD] && pp->GetActor()->user.__legacyState.Rot != sg_PlayerNinjaSword) + if (pp->CurWpn == pp->Wpn[WPN_SWORD] && pp->GetActor()->user.Rot != sg_PlayerNinjaSword) NewStateGroup(pp->GetActor(), sg_PlayerNinjaSword); else NewStateGroup(pp->GetActor(), sg_PlayerNinjaPunch); + //else + // NewStateGroup(pp->GetActor(), sg_PlayerNinjaThrow); } } @@ -1003,13 +1107,13 @@ int DoPlayerSpriteReset(DSWActor* actor) // need to figure out what frames to put sprite into if (pp->DoPlayerAction == DoPlayerCrawl) - pp->GetActor()->setStateGroup(NAME_Crawl); + NewStateGroup(pp->GetActor(), actor->user.ActorActionSet->Crawl); else { if (pp->Flags & (PF_PLAYER_MOVED)) - pp->GetActor()->setStateGroup(NAME_Run); + NewStateGroup(pp->GetActor(), actor->user.ActorActionSet->Run); else - pp->GetActor()->setStateGroup(NAME_Stand); + NewStateGroup(pp->GetActor(), actor->user.ActorActionSet->Stand); } return 0; @@ -1340,7 +1444,7 @@ void DoPlayerWarpTeleporter(DSWPlayer* pp) DoPlayerBeginRun(pp); pp->DoPlayerAction = DoPlayerTeleportPause; - ppActor->setStateGroup(NAME_Stand); + NewStateGroup(ppActor, ppActor->user.ActorActionSet->Stand); UpdatePlayerSprite(pp); DoSpawnTeleporterEffect(ppActor); @@ -1630,9 +1734,9 @@ void UpdatePlayerUnderSprite(DSWPlayer* pp) // add diff to ceiling act_under->spr.pos.Z = act_under->sector()->ceilingz + zdiff; - act_under->user.__legacyState.State = act_over->user.__legacyState.State; - act_under->user.__legacyState.Rot = act_over->user.__legacyState.Rot; - act_under->user.__legacyState.StateStart = act_over->user.__legacyState.StateStart; + act_under->user.State = act_over->user.State; + act_under->user.Rot = act_over->user.Rot; + act_under->user.StateStart = act_over->user.StateStart; act_under->spr.setspritetexture(act_over->spr.spritetexture()); } @@ -2646,7 +2750,7 @@ void DoPlayerBeginJump(DSWPlayer* pp) ///DamageData[plActor->user.WeaponNum].Init(pp); - plActor->setStateGroup(NAME_Jump); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Jump); } //--------------------------------------------------------------------------- @@ -2673,7 +2777,7 @@ void DoPlayerBeginForceJump(DSWPlayer* pp) ///DamageData[plActor->user.WeaponNum].Init(pp); - plActor->setStateGroup(NAME_Jump); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Jump); } //--------------------------------------------------------------------------- @@ -2847,8 +2951,8 @@ void DoPlayerBeginFall(DSWPlayer* pp) // Only change to falling frame if you were in the jump frame // Otherwise an animation may be messed up such as Running Jump Kick - if (plActor->user.__legacyState.Rot == plActor->user.__legacyState.ActorActionSet->Jump) - plActor->setStateGroup(NAME_Fall); + if (plActor->user.Rot == plActor->user.ActorActionSet->Jump) + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Fall); } //--------------------------------------------------------------------------- @@ -3315,7 +3419,7 @@ void DoPlayerBeginCrawl(DSWPlayer* pp) //pp->posz = pp->loz - PLAYER_CRAWL_HEIGHT; - plActor->setStateGroup(NAME_Crawl); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Crawl); } //--------------------------------------------------------------------------- @@ -3396,7 +3500,7 @@ void DoPlayerCrawl(DSWPlayer* pp) if (!(pp->Flags & PF_PLAYER_MOVED)) { - plActor->setStateGroup(NAME_Crawl); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Crawl); } // If the floor is far below you, fall hard instead of adjusting height @@ -4128,7 +4232,7 @@ void DoPlayerBeginDive(DSWPlayer* pp) DoPlayerMove(pp); // needs to be called to reset the pp->loz/hiz variable ///DamageData[plActor->user.WeaponNum].Init(pp); - plActor->setStateGroup(NAME_Dive); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Dive); DoPlayerDive(pp); } @@ -4181,7 +4285,7 @@ void DoPlayerBeginDiveNoWarp(DSWPlayer* pp) pp->DiveDamageTics = 0; DoPlayerMove(pp); // needs to be called to reset the pp->loz/hiz variable ///DamageData[plActor->user.WeaponNum].Init(pp); - plActor->setStateGroup(NAME_Dive); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Dive); DoPlayerDive(pp); } @@ -4618,9 +4722,9 @@ void DoPlayerBeginWade(DSWPlayer* pp) if (pp->jump_speed > 0 && pp->jump_speed < 1300) pp->jump_speed = 0; - ASSERT(plActor->user.__legacyState.ActorActionSet->Run); + ASSERT(plActor->user.ActorActionSet->Run); - plActor->setStateGroup(NAME_Run); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Run); } @@ -4713,13 +4817,13 @@ void DoPlayerWade(DSWPlayer* pp) if (pp->Flags & (PF_PLAYER_MOVED)) { - if (!plActor->checkStateGroup(NAME_Run)) - plActor->setStateGroup(NAME_Run); + if (plActor->user.Rot != plActor->user.ActorActionSet->Run) + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Run); } else { - if (!plActor->checkStateGroup(NAME_Stand)) - plActor->setStateGroup(NAME_Stand); + if (plActor->user.Rot != plActor->user.ActorActionSet->Stand) + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Stand); } // If the floor is far below you, fall hard instead of adjusting height @@ -4789,9 +4893,9 @@ void DoPlayerBeginOperateVehicle(DSWPlayer* pp) ///DamageData[plActor->user.WeaponNum].Init(pp); - ASSERT(plActor->user.__legacyState.ActorActionSet->Stand); + ASSERT(plActor->user.ActorActionSet->Stand); - plActor->setStateGroup(NAME_Stand); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Stand); } //--------------------------------------------------------------------------- @@ -4814,9 +4918,9 @@ void DoPlayerBeginOperateTurret(DSWPlayer* pp) ///DamageData[plActor->user.WeaponNum].Init(pp); - ASSERT(plActor->user.__legacyState.ActorActionSet->Stand); + ASSERT(plActor->user.ActorActionSet->Stand); - plActor->setStateGroup(NAME_Stand); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Stand); } //--------------------------------------------------------------------------- @@ -5581,7 +5685,7 @@ void DoPlayerBeginDie(DSWPlayer* pp) pp->sop = nullptr; pp->Flags &= ~(PF_TWO_UZI); - plActor->setStateGroup(NAME_Run); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Run); pWeaponForceRest(pp); switch (pp->DeathType) @@ -5803,8 +5907,9 @@ void DoPlayerDeathCheckKeys(DSWPlayer* pp) InitBloodSpray(plActor,true,-1); } - plActor->setStateGroup(NAME_Stand); - plActor->spr.picnum = plActor->user.__legacyState.State->Pic; + NewStateGroup(plActor, plActor->user.ActorActionSet->Stand); + plActor->spr.picnum = plActor->user.State->Pic; + plActor->spr.picnum = plActor->user.State->Pic; plActor->spr.cstat &= ~(CSTAT_SPRITE_YCENTER); //DoSpawnTeleporterEffect(plActor); @@ -6242,12 +6347,12 @@ void DoPlayerBeginRun(DSWPlayer* pp) ///DamageData[plActor->user.WeaponNum].Init(pp); - ASSERT(plActor->user.__legacyState.ActorActionSet->Run); + ASSERT(plActor->user.ActorActionSet->Run); if (pp->Flags & (PF_PLAYER_MOVED)) - plActor->setStateGroup(NAME_Run); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Run); else - plActor->setStateGroup(NAME_Stand); + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Stand); } //--------------------------------------------------------------------------- @@ -6354,17 +6459,17 @@ void DoPlayerRun(DSWPlayer* pp) // Move about DoPlayerMove(pp); - if (plActor->user.__legacyState.Rot != sg_PlayerNinjaSword && plActor->user.__legacyState.Rot != sg_PlayerNinjaPunch) + if (plActor->user.Rot != sg_PlayerNinjaSword && plActor->user.Rot != sg_PlayerNinjaPunch) { if (pp->Flags & (PF_PLAYER_MOVED)) { - if (!plActor->checkStateGroup(NAME_Run)) - plActor->setStateGroup(NAME_Run); + if (plActor->user.Rot != plActor->user.ActorActionSet->Run) + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Run); } else { - if (!plActor->checkStateGroup(NAME_Stand)) - plActor->setStateGroup(NAME_Stand); + if (plActor->user.Rot != plActor->user.ActorActionSet->Stand) + NewStateGroup(pp->GetActor(), plActor->user.ActorActionSet->Stand); } } @@ -6402,43 +6507,44 @@ void PlayerStateControl(DSWActor* actor) actor->user.Tics += synctics; // Skip states if too much time has passed - while (actor->user.Tics >= (actor->user.__legacyState.State->Tics & SF_TICS_MASK)) + while (actor->user.Tics >= (actor->user.State->Tics & SF_TICS_MASK)) { // Set Tics - actor->user.Tics -= (actor->user.__legacyState.State->Tics & SF_TICS_MASK); + actor->user.Tics -= (actor->user.State->Tics & SF_TICS_MASK); // Transition to the next state - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + actor->user.State = actor->user.State->NextState; // !JIM! Added this so I can do quick calls in player states! // Need this in order for floor blood and footprints to not get called more than once. - while ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) + while ((actor->user.State->Tics & SF_QUICK_CALL)) { // Call it once and go to the next state - actor->callStateAction(); + (*actor->user.State->Animator)(actor); // if still on the same QUICK_CALL should you // go to the next state. - if ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + if ((actor->user.State->Tics & SF_QUICK_CALL)) + actor->user.State = actor->user.State->NextState; } - if (!actor->user.__legacyState.State->Pic) + if (!actor->user.State->Pic) { - NewStateGroup(actor, (STATE* *) actor->user.__legacyState.State->NextState); + NewStateGroup(actor, (STATE* *) actor->user.State->NextState); } } // Set the correct pic - if (actor->user.__legacyState.RotNum > 1) - actor->spr.picnum = actor->user.__legacyState.Rot[0]->Pic; + if (actor->user.RotNum > 1) + actor->spr.picnum = actor->user.Rot[0]->Pic; else - actor->spr.picnum = actor->user.__legacyState.State->Pic; + actor->spr.picnum = actor->user.State->Pic; // Call the correct animator - if ((actor->user.__legacyState.State->Tics & SF_PLAYER_FUNC)) - actor->callStateAction(); + if ((actor->user.State->Tics & SF_PLAYER_FUNC)) + if (actor->user.State->Animator) + (*actor->user.State->Animator)(actor); return; } @@ -7120,19 +7226,37 @@ void CheckFootPrints(DSWPlayer* pp) static saveable_code saveable_player_code[] = { + SAVE_CODE(DoPlayerSlide), SAVE_CODE(DoPlayerWade), + SAVE_CODE(DoPlayerBeginWade), + SAVE_CODE(DoPlayerBeginCrawl), SAVE_CODE(DoPlayerCrawl), SAVE_CODE(DoPlayerRun), SAVE_CODE(DoPlayerBeginRun), SAVE_CODE(DoPlayerFall), + SAVE_CODE(DoPlayerBeginFall), SAVE_CODE(DoPlayerJump), + SAVE_CODE(DoPlayerBeginJump), SAVE_CODE(DoPlayerForceJump), + SAVE_CODE(DoPlayerBeginFly), SAVE_CODE(DoPlayerFly), + SAVE_CODE(DoPlayerBeginClimb), SAVE_CODE(DoPlayerClimb), + SAVE_CODE(DoPlayerBeginDie), + SAVE_CODE(DoPlayerBeginOperateVehicle), + SAVE_CODE(DoPlayerBeginOperate), SAVE_CODE(DoPlayerOperateVehicle), SAVE_CODE(DoPlayerOperateTurret), + SAVE_CODE(DoPlayerBeginDive), SAVE_CODE(DoPlayerDive), SAVE_CODE(DoPlayerTeleportPause), + SAVE_CODE(DoPlayerTestCrawl), + SAVE_CODE(DoPlayerDeathFlip), + SAVE_CODE(DoPlayerDeathCrumble), + SAVE_CODE(DoPlayerDeathExplode), + SAVE_CODE(DoPlayerDeathFall), + SAVE_CODE(DoPlayerBeginDiveNoWarp), + SAVE_CODE(DoPlayerCurrent), }; static saveable_data saveable_player_data[] = diff --git a/source/games/sw/src/ripper.cpp b/source/games/sw/src/ripper.cpp index 591fa14eb59..de8c7651d1e 100644 --- a/source/games/sw/src/ripper.cpp +++ b/source/games/sw/src/ripper.cpp @@ -38,51 +38,57 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR InitRipperHang; +ANIMATOR DoRipperMoveJump; +ANIMATOR DoRipperHangJF; +ANIMATOR DoRipperQuickJump; + DECISION RipperBattle[] = { - {748, &AF(InitActorMoveCloser)}, - {750, &AF(InitActorSetDecide)}, - {755, &AF(InitActorSetDecide)}, - {1024, &AF(InitActorAttack)} + {748, InitActorMoveCloser}, + {750, InitActorAlertNoise}, +// {900, InitRipperHang}, + {755, InitActorAttackNoise}, + {1024, InitActorAttack} }; DECISION RipperOffense[] = { - {700, &AF(InitActorMoveCloser)}, - {710, &AF(InitActorSetDecide)}, - {1024, &AF(InitActorAttack)} + {700, InitActorMoveCloser}, + {710, InitActorAlertNoise}, + {1024, InitActorAttack} }; -DECISIONB RipperBroadcast[] = +DECISION RipperBroadcast[] = { - {3, attr_alert}, - {6, attr_ambient}, - {1024, 0} + {3, InitActorAlertNoise}, + {6, InitActorAmbientNoise}, + {1024, InitActorDecide} }; DECISION RipperSurprised[] = { - {30, &AF(InitRipperHang)}, - {701, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorDecide)} + {30, InitRipperHang}, + {701, InitActorMoveCloser}, + {1024, InitActorDecide} }; DECISION RipperEvasive[] = { - {6, &AF(InitRipperHang)}, + {6, InitRipperHang}, {1024, nullptr} }; DECISION RipperLostTarget[] = { - {980, &AF(InitActorFindPlayer)}, - {1024, &AF(InitActorWanderAround)} + {980, InitActorFindPlayer}, + {1024, InitActorWanderAround} }; DECISION RipperCloseRange[] = { - {900, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {900, InitActorAttack }, + {1024, InitActorReposition } }; PERSONALITY RipperPersonality = @@ -117,37 +123,39 @@ ATTRIBUTE RipperAttrib = #define RIPPER_RUN_RATE 16 +ANIMATOR DoRipperMove, NullRipper, DoActorDebris; + STATE s_RipperRun[5][4] = { { - {RIPPER_RUN_R0 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[0][1]}, - {RIPPER_RUN_R0 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[0][2]}, - {RIPPER_RUN_R0 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[0][3]}, - {RIPPER_RUN_R0 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[0][0]}, + {RIPPER_RUN_R0 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[0][1]}, + {RIPPER_RUN_R0 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[0][2]}, + {RIPPER_RUN_R0 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[0][3]}, + {RIPPER_RUN_R0 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[0][0]}, }, { - {RIPPER_RUN_R1 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[1][1]}, - {RIPPER_RUN_R1 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[1][2]}, - {RIPPER_RUN_R1 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[1][3]}, - {RIPPER_RUN_R1 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[1][0]}, + {RIPPER_RUN_R1 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[1][1]}, + {RIPPER_RUN_R1 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[1][2]}, + {RIPPER_RUN_R1 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[1][3]}, + {RIPPER_RUN_R1 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[1][0]}, }, { - {RIPPER_RUN_R2 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[2][1]}, - {RIPPER_RUN_R2 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[2][2]}, - {RIPPER_RUN_R2 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[2][3]}, - {RIPPER_RUN_R2 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[2][0]}, + {RIPPER_RUN_R2 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[2][1]}, + {RIPPER_RUN_R2 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[2][2]}, + {RIPPER_RUN_R2 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[2][3]}, + {RIPPER_RUN_R2 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[2][0]}, }, { - {RIPPER_RUN_R3 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[3][1]}, - {RIPPER_RUN_R3 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[3][2]}, - {RIPPER_RUN_R3 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[3][3]}, - {RIPPER_RUN_R3 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[3][0]}, + {RIPPER_RUN_R3 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[3][1]}, + {RIPPER_RUN_R3 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[3][2]}, + {RIPPER_RUN_R3 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[3][3]}, + {RIPPER_RUN_R3 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[3][0]}, }, { - {RIPPER_RUN_R4 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[4][1]}, - {RIPPER_RUN_R4 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[4][2]}, - {RIPPER_RUN_R4 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[4][3]}, - {RIPPER_RUN_R4 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipperMove), &s_RipperRun[4][0]}, + {RIPPER_RUN_R4 + 0, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[4][1]}, + {RIPPER_RUN_R4 + 1, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[4][2]}, + {RIPPER_RUN_R4 + 2, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[4][3]}, + {RIPPER_RUN_R4 + 3, RIPPER_RUN_RATE | SF_TIC_ADJUST, DoRipperMove, &s_RipperRun[4][0]}, } }; @@ -172,19 +180,19 @@ STATE* sg_RipperRun[] = STATE s_RipperStand[5][1] = { { - {RIPPER_STAND_R0 + 0, RIPPER_STAND_RATE, &AF(DoRipperMove), &s_RipperStand[0][0]}, + {RIPPER_STAND_R0 + 0, RIPPER_STAND_RATE, DoRipperMove, &s_RipperStand[0][0]}, }, { - {RIPPER_STAND_R1 + 0, RIPPER_STAND_RATE, &AF(DoRipperMove), &s_RipperStand[1][0]}, + {RIPPER_STAND_R1 + 0, RIPPER_STAND_RATE, DoRipperMove, &s_RipperStand[1][0]}, }, { - {RIPPER_STAND_R2 + 0, RIPPER_STAND_RATE, &AF(DoRipperMove), &s_RipperStand[2][0]}, + {RIPPER_STAND_R2 + 0, RIPPER_STAND_RATE, DoRipperMove, &s_RipperStand[2][0]}, }, { - {RIPPER_STAND_R3 + 0, RIPPER_STAND_RATE, &AF(DoRipperMove), &s_RipperStand[3][0]}, + {RIPPER_STAND_R3 + 0, RIPPER_STAND_RATE, DoRipperMove, &s_RipperStand[3][0]}, }, { - {RIPPER_STAND_R4 + 0, RIPPER_STAND_RATE, &AF(DoRipperMove), &s_RipperStand[4][0]}, + {RIPPER_STAND_R4 + 0, RIPPER_STAND_RATE, DoRipperMove, &s_RipperStand[4][0]}, }, }; @@ -205,58 +213,60 @@ STATE* sg_RipperStand[] = ////////////////////// #define RIPPER_SWIPE_RATE 8 +ANIMATOR InitActorDecide; +ANIMATOR InitRipperSlash; STATE s_RipperSwipe[5][8] = { { - {RIPPER_SWIPE_R0 + 0, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[0][1]}, - {RIPPER_SWIPE_R0 + 1, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[0][2]}, - {RIPPER_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[0][3]}, - {RIPPER_SWIPE_R0 + 2, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[0][4]}, - {RIPPER_SWIPE_R0 + 3, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[0][5]}, - {RIPPER_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[0][6]}, - {RIPPER_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSwipe[0][7]}, - {RIPPER_SWIPE_R0 + 3, RIPPER_SWIPE_RATE, &AF(DoRipperMove), &s_RipperSwipe[0][7]}, + {RIPPER_SWIPE_R0 + 0, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[0][1]}, + {RIPPER_SWIPE_R0 + 1, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[0][2]}, + {RIPPER_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[0][3]}, + {RIPPER_SWIPE_R0 + 2, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[0][4]}, + {RIPPER_SWIPE_R0 + 3, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[0][5]}, + {RIPPER_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[0][6]}, + {RIPPER_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSwipe[0][7]}, + {RIPPER_SWIPE_R0 + 3, RIPPER_SWIPE_RATE, DoRipperMove, &s_RipperSwipe[0][7]}, }, { - {RIPPER_SWIPE_R1 + 0, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[1][1]}, - {RIPPER_SWIPE_R1 + 1, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[1][2]}, - {RIPPER_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[1][3]}, - {RIPPER_SWIPE_R1 + 2, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[1][4]}, - {RIPPER_SWIPE_R1 + 3, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[1][5]}, - {RIPPER_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[1][6]}, - {RIPPER_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSwipe[1][7]}, - {RIPPER_SWIPE_R1 + 3, RIPPER_SWIPE_RATE, &AF(DoRipperMove), &s_RipperSwipe[1][7]}, + {RIPPER_SWIPE_R1 + 0, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[1][1]}, + {RIPPER_SWIPE_R1 + 1, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[1][2]}, + {RIPPER_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[1][3]}, + {RIPPER_SWIPE_R1 + 2, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[1][4]}, + {RIPPER_SWIPE_R1 + 3, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[1][5]}, + {RIPPER_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[1][6]}, + {RIPPER_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSwipe[1][7]}, + {RIPPER_SWIPE_R1 + 3, RIPPER_SWIPE_RATE, DoRipperMove, &s_RipperSwipe[1][7]}, }, { - {RIPPER_SWIPE_R2 + 0, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[2][1]}, - {RIPPER_SWIPE_R2 + 1, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[2][2]}, - {RIPPER_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[2][3]}, - {RIPPER_SWIPE_R2 + 2, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[2][4]}, - {RIPPER_SWIPE_R2 + 3, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[2][5]}, - {RIPPER_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[2][6]}, - {RIPPER_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSwipe[2][7]}, - {RIPPER_SWIPE_R2 + 3, RIPPER_SWIPE_RATE, &AF(DoRipperMove), &s_RipperSwipe[2][7]}, + {RIPPER_SWIPE_R2 + 0, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[2][1]}, + {RIPPER_SWIPE_R2 + 1, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[2][2]}, + {RIPPER_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[2][3]}, + {RIPPER_SWIPE_R2 + 2, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[2][4]}, + {RIPPER_SWIPE_R2 + 3, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[2][5]}, + {RIPPER_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[2][6]}, + {RIPPER_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSwipe[2][7]}, + {RIPPER_SWIPE_R2 + 3, RIPPER_SWIPE_RATE, DoRipperMove, &s_RipperSwipe[2][7]}, }, { - {RIPPER_SWIPE_R3 + 0, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[3][1]}, - {RIPPER_SWIPE_R3 + 1, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[3][2]}, - {RIPPER_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[3][3]}, - {RIPPER_SWIPE_R3 + 2, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[3][4]}, - {RIPPER_SWIPE_R3 + 3, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[3][5]}, - {RIPPER_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[3][6]}, - {RIPPER_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSwipe[3][7]}, - {RIPPER_SWIPE_R3 + 3, RIPPER_SWIPE_RATE, &AF(DoRipperMove), &s_RipperSwipe[3][7]}, + {RIPPER_SWIPE_R3 + 0, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[3][1]}, + {RIPPER_SWIPE_R3 + 1, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[3][2]}, + {RIPPER_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[3][3]}, + {RIPPER_SWIPE_R3 + 2, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[3][4]}, + {RIPPER_SWIPE_R3 + 3, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[3][5]}, + {RIPPER_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[3][6]}, + {RIPPER_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSwipe[3][7]}, + {RIPPER_SWIPE_R3 + 3, RIPPER_SWIPE_RATE, DoRipperMove, &s_RipperSwipe[3][7]}, }, { - {RIPPER_SWIPE_R4 + 0, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[4][1]}, - {RIPPER_SWIPE_R4 + 1, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[4][2]}, - {RIPPER_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[4][3]}, - {RIPPER_SWIPE_R4 + 2, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[4][4]}, - {RIPPER_SWIPE_R4 + 3, RIPPER_SWIPE_RATE, &AF(NullRipper), &s_RipperSwipe[4][5]}, - {RIPPER_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_RipperSwipe[4][6]}, - {RIPPER_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSwipe[4][7]}, - {RIPPER_SWIPE_R4 + 3, RIPPER_SWIPE_RATE, &AF(DoRipperMove), &s_RipperSwipe[4][7]}, + {RIPPER_SWIPE_R4 + 0, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[4][1]}, + {RIPPER_SWIPE_R4 + 1, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[4][2]}, + {RIPPER_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[4][3]}, + {RIPPER_SWIPE_R4 + 2, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[4][4]}, + {RIPPER_SWIPE_R4 + 3, RIPPER_SWIPE_RATE, NullRipper, &s_RipperSwipe[4][5]}, + {RIPPER_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_RipperSwipe[4][6]}, + {RIPPER_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSwipe[4][7]}, + {RIPPER_SWIPE_R4 + 3, RIPPER_SWIPE_RATE, DoRipperMove, &s_RipperSwipe[4][7]}, } }; @@ -278,53 +288,55 @@ STATE* sg_RipperSwipe[] = ////////////////////// #define RIPPER_SPEW_RATE 8 +ANIMATOR InitActorDecide; +ANIMATOR InitCoolgFire; STATE s_RipperSpew[5][7] = { { - {RIPPER_SWIPE_R0 + 0, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[0][1]}, - {RIPPER_SWIPE_R0 + 1, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[0][2]}, - {RIPPER_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitCoolgFire), &s_RipperSpew[0][3]}, - {RIPPER_SWIPE_R0 + 2, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[0][4]}, - {RIPPER_SWIPE_R0 + 3, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[0][5]}, - {RIPPER_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSpew[0][6]}, - {RIPPER_SWIPE_R0 + 3, RIPPER_SPEW_RATE, &AF(DoRipperMove), &s_RipperSpew[0][6]}, + {RIPPER_SWIPE_R0 + 0, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[0][1]}, + {RIPPER_SWIPE_R0 + 1, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[0][2]}, + {RIPPER_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, InitCoolgFire, &s_RipperSpew[0][3]}, + {RIPPER_SWIPE_R0 + 2, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[0][4]}, + {RIPPER_SWIPE_R0 + 3, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[0][5]}, + {RIPPER_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSpew[0][6]}, + {RIPPER_SWIPE_R0 + 3, RIPPER_SPEW_RATE, DoRipperMove, &s_RipperSpew[0][6]}, }, { - {RIPPER_SWIPE_R1 + 0, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[1][1]}, - {RIPPER_SWIPE_R1 + 1, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[1][2]}, - {RIPPER_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitCoolgFire), &s_RipperSpew[1][3]}, - {RIPPER_SWIPE_R1 + 2, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[1][4]}, - {RIPPER_SWIPE_R1 + 3, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[1][5]}, - {RIPPER_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSpew[1][6]}, - {RIPPER_SWIPE_R1 + 3, RIPPER_SPEW_RATE, &AF(DoRipperMove), &s_RipperSpew[1][6]}, + {RIPPER_SWIPE_R1 + 0, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[1][1]}, + {RIPPER_SWIPE_R1 + 1, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[1][2]}, + {RIPPER_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, InitCoolgFire, &s_RipperSpew[1][3]}, + {RIPPER_SWIPE_R1 + 2, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[1][4]}, + {RIPPER_SWIPE_R1 + 3, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[1][5]}, + {RIPPER_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSpew[1][6]}, + {RIPPER_SWIPE_R1 + 3, RIPPER_SPEW_RATE, DoRipperMove, &s_RipperSpew[1][6]}, }, { - {RIPPER_SWIPE_R2 + 0, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[2][1]}, - {RIPPER_SWIPE_R2 + 1, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[2][2]}, - {RIPPER_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitCoolgFire), &s_RipperSpew[2][3]}, - {RIPPER_SWIPE_R2 + 2, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[2][4]}, - {RIPPER_SWIPE_R2 + 3, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[2][5]}, - {RIPPER_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSpew[2][6]}, - {RIPPER_SWIPE_R2 + 3, RIPPER_SPEW_RATE, &AF(DoRipperMove), &s_RipperSpew[2][6]}, + {RIPPER_SWIPE_R2 + 0, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[2][1]}, + {RIPPER_SWIPE_R2 + 1, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[2][2]}, + {RIPPER_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, InitCoolgFire, &s_RipperSpew[2][3]}, + {RIPPER_SWIPE_R2 + 2, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[2][4]}, + {RIPPER_SWIPE_R2 + 3, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[2][5]}, + {RIPPER_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSpew[2][6]}, + {RIPPER_SWIPE_R2 + 3, RIPPER_SPEW_RATE, DoRipperMove, &s_RipperSpew[2][6]}, }, { - {RIPPER_SWIPE_R3 + 0, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[3][1]}, - {RIPPER_SWIPE_R3 + 1, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[3][2]}, - {RIPPER_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitCoolgFire), &s_RipperSpew[3][3]}, - {RIPPER_SWIPE_R3 + 2, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[3][4]}, - {RIPPER_SWIPE_R3 + 3, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[3][5]}, - {RIPPER_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSpew[3][6]}, - {RIPPER_SWIPE_R3 + 3, RIPPER_SPEW_RATE, &AF(DoRipperMove), &s_RipperSpew[3][6]}, + {RIPPER_SWIPE_R3 + 0, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[3][1]}, + {RIPPER_SWIPE_R3 + 1, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[3][2]}, + {RIPPER_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, InitCoolgFire, &s_RipperSpew[3][3]}, + {RIPPER_SWIPE_R3 + 2, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[3][4]}, + {RIPPER_SWIPE_R3 + 3, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[3][5]}, + {RIPPER_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSpew[3][6]}, + {RIPPER_SWIPE_R3 + 3, RIPPER_SPEW_RATE, DoRipperMove, &s_RipperSpew[3][6]}, }, { - {RIPPER_SWIPE_R4 + 0, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[4][1]}, - {RIPPER_SWIPE_R4 + 1, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[4][2]}, - {RIPPER_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitCoolgFire), &s_RipperSpew[4][3]}, - {RIPPER_SWIPE_R4 + 2, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[4][4]}, - {RIPPER_SWIPE_R4 + 3, RIPPER_SPEW_RATE, &AF(NullRipper), &s_RipperSpew[4][5]}, - {RIPPER_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_RipperSpew[4][6]}, - {RIPPER_SWIPE_R4 + 3, RIPPER_SPEW_RATE, &AF(DoRipperMove), &s_RipperSpew[4][6]}, + {RIPPER_SWIPE_R4 + 0, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[4][1]}, + {RIPPER_SWIPE_R4 + 1, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[4][2]}, + {RIPPER_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, InitCoolgFire, &s_RipperSpew[4][3]}, + {RIPPER_SWIPE_R4 + 2, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[4][4]}, + {RIPPER_SWIPE_R4 + 3, RIPPER_SPEW_RATE, NullRipper, &s_RipperSpew[4][5]}, + {RIPPER_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_RipperSpew[4][6]}, + {RIPPER_SWIPE_R4 + 3, RIPPER_SPEW_RATE, DoRipperMove, &s_RipperSpew[4][6]}, } }; @@ -346,23 +358,24 @@ STATE* sg_RipperSpew[] = ////////////////////// #define RIPPER_HEART_RATE 14 +ANIMATOR DoRipperStandHeart; STATE s_RipperHeart[5][4] = { { - {RIPPER_HEART_R0 + 0, RIPPER_HEART_RATE, &AF(DoRipperStandHeart), &s_RipperHeart[0][0]}, + {RIPPER_HEART_R0 + 0, RIPPER_HEART_RATE, DoRipperStandHeart, &s_RipperHeart[0][0]}, }, { - {RIPPER_HEART_R1 + 0, RIPPER_HEART_RATE, &AF(DoRipperStandHeart), &s_RipperHeart[1][0]}, + {RIPPER_HEART_R1 + 0, RIPPER_HEART_RATE, DoRipperStandHeart, &s_RipperHeart[1][0]}, }, { - {RIPPER_HEART_R2 + 0, RIPPER_HEART_RATE, &AF(DoRipperStandHeart), &s_RipperHeart[2][0]}, + {RIPPER_HEART_R2 + 0, RIPPER_HEART_RATE, DoRipperStandHeart, &s_RipperHeart[2][0]}, }, { - {RIPPER_HEART_R3 + 0, RIPPER_HEART_RATE, &AF(DoRipperStandHeart), &s_RipperHeart[3][0]}, + {RIPPER_HEART_R3 + 0, RIPPER_HEART_RATE, DoRipperStandHeart, &s_RipperHeart[3][0]}, }, { - {RIPPER_HEART_R4 + 0, RIPPER_HEART_RATE, &AF(DoRipperStandHeart), &s_RipperHeart[4][0]}, + {RIPPER_HEART_R4 + 0, RIPPER_HEART_RATE, DoRipperStandHeart, &s_RipperHeart[4][0]}, } }; @@ -382,23 +395,24 @@ STATE* sg_RipperHeart[] = ////////////////////// #define RIPPER_HANG_RATE 14 +ANIMATOR DoRipperHang; STATE s_RipperHang[5][4] = { { - {RIPPER_HANG_R0 + 0, RIPPER_HANG_RATE, &AF(DoRipperHang), &s_RipperHang[0][0]}, + {RIPPER_HANG_R0 + 0, RIPPER_HANG_RATE, DoRipperHang, &s_RipperHang[0][0]}, }, { - {RIPPER_HANG_R1 + 0, RIPPER_HANG_RATE, &AF(DoRipperHang), &s_RipperHang[1][0]}, + {RIPPER_HANG_R1 + 0, RIPPER_HANG_RATE, DoRipperHang, &s_RipperHang[1][0]}, }, { - {RIPPER_HANG_R2 + 0, RIPPER_HANG_RATE, &AF(DoRipperHang), &s_RipperHang[2][0]}, + {RIPPER_HANG_R2 + 0, RIPPER_HANG_RATE, DoRipperHang, &s_RipperHang[2][0]}, }, { - {RIPPER_HANG_R3 + 0, RIPPER_HANG_RATE, &AF(DoRipperHang), &s_RipperHang[3][0]}, + {RIPPER_HANG_R3 + 0, RIPPER_HANG_RATE, DoRipperHang, &s_RipperHang[3][0]}, }, { - {RIPPER_HANG_R4 + 0, RIPPER_HANG_RATE, &AF(DoRipperHang), &s_RipperHang[4][0]}, + {RIPPER_HANG_R4 + 0, RIPPER_HANG_RATE, DoRipperHang, &s_RipperHang[4][0]}, } }; @@ -420,23 +434,24 @@ STATE* sg_RipperHang[] = ////////////////////// #define RIPPER_PAIN_RATE 38 +ANIMATOR DoRipperPain; STATE s_RipperPain[5][1] = { { - {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, &AF(DoRipperPain), &s_RipperPain[0][0]}, + {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, DoRipperPain, &s_RipperPain[0][0]}, }, { - {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, &AF(DoRipperPain), &s_RipperPain[1][0]}, + {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, DoRipperPain, &s_RipperPain[1][0]}, }, { - {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, &AF(DoRipperPain), &s_RipperPain[2][0]}, + {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, DoRipperPain, &s_RipperPain[2][0]}, }, { - {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, &AF(DoRipperPain), &s_RipperPain[3][0]}, + {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, DoRipperPain, &s_RipperPain[3][0]}, }, { - {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, &AF(DoRipperPain), &s_RipperPain[4][0]}, + {RIPPER_JUMP_R0 + 0, RIPPER_PAIN_RATE, DoRipperPain, &s_RipperPain[4][0]}, } }; @@ -460,24 +475,24 @@ STATE* sg_RipperPain[] = STATE s_RipperJump[5][6] = { { - {RIPPER_JUMP_R0 + 0, RIPPER_JUMP_RATE, &AF(NullRipper), &s_RipperJump[0][1]}, - {RIPPER_JUMP_R0 + 1, RIPPER_JUMP_RATE, &AF(DoRipperMoveJump), &s_RipperJump[0][1]}, + {RIPPER_JUMP_R0 + 0, RIPPER_JUMP_RATE, NullRipper, &s_RipperJump[0][1]}, + {RIPPER_JUMP_R0 + 1, RIPPER_JUMP_RATE, DoRipperMoveJump, &s_RipperJump[0][1]}, }, { - {RIPPER_JUMP_R1 + 0, RIPPER_JUMP_RATE, &AF(NullRipper), &s_RipperJump[1][1]}, - {RIPPER_JUMP_R1 + 1, RIPPER_JUMP_RATE, &AF(DoRipperMoveJump), &s_RipperJump[1][1]}, + {RIPPER_JUMP_R1 + 0, RIPPER_JUMP_RATE, NullRipper, &s_RipperJump[1][1]}, + {RIPPER_JUMP_R1 + 1, RIPPER_JUMP_RATE, DoRipperMoveJump, &s_RipperJump[1][1]}, }, { - {RIPPER_JUMP_R2 + 0, RIPPER_JUMP_RATE, &AF(NullRipper), &s_RipperJump[2][1]}, - {RIPPER_JUMP_R2 + 1, RIPPER_JUMP_RATE, &AF(DoRipperMoveJump), &s_RipperJump[2][1]}, + {RIPPER_JUMP_R2 + 0, RIPPER_JUMP_RATE, NullRipper, &s_RipperJump[2][1]}, + {RIPPER_JUMP_R2 + 1, RIPPER_JUMP_RATE, DoRipperMoveJump, &s_RipperJump[2][1]}, }, { - {RIPPER_JUMP_R3 + 0, RIPPER_JUMP_RATE, &AF(NullRipper), &s_RipperJump[3][1]}, - {RIPPER_JUMP_R3 + 1, RIPPER_JUMP_RATE, &AF(DoRipperMoveJump), &s_RipperJump[3][1]}, + {RIPPER_JUMP_R3 + 0, RIPPER_JUMP_RATE, NullRipper, &s_RipperJump[3][1]}, + {RIPPER_JUMP_R3 + 1, RIPPER_JUMP_RATE, DoRipperMoveJump, &s_RipperJump[3][1]}, }, { - {RIPPER_JUMP_R4 + 0, RIPPER_JUMP_RATE, &AF(NullRipper), &s_RipperJump[4][1]}, - {RIPPER_JUMP_R4 + 1, RIPPER_JUMP_RATE, &AF(DoRipperMoveJump), &s_RipperJump[4][1]}, + {RIPPER_JUMP_R4 + 0, RIPPER_JUMP_RATE, NullRipper, &s_RipperJump[4][1]}, + {RIPPER_JUMP_R4 + 1, RIPPER_JUMP_RATE, DoRipperMoveJump, &s_RipperJump[4][1]}, } }; @@ -503,19 +518,19 @@ STATE* sg_RipperJump[] = STATE s_RipperFall[5][6] = { { - {RIPPER_FALL_R0 + 0, RIPPER_FALL_RATE, &AF(DoRipperMoveJump), &s_RipperFall[0][0]}, + {RIPPER_FALL_R0 + 0, RIPPER_FALL_RATE, DoRipperMoveJump, &s_RipperFall[0][0]}, }, { - {RIPPER_FALL_R1 + 0, RIPPER_FALL_RATE, &AF(DoRipperMoveJump), &s_RipperFall[1][0]}, + {RIPPER_FALL_R1 + 0, RIPPER_FALL_RATE, DoRipperMoveJump, &s_RipperFall[1][0]}, }, { - {RIPPER_FALL_R2 + 0, RIPPER_FALL_RATE, &AF(DoRipperMoveJump), &s_RipperFall[2][0]}, + {RIPPER_FALL_R2 + 0, RIPPER_FALL_RATE, DoRipperMoveJump, &s_RipperFall[2][0]}, }, { - {RIPPER_FALL_R3 + 0, RIPPER_FALL_RATE, &AF(DoRipperMoveJump), &s_RipperFall[3][0]}, + {RIPPER_FALL_R3 + 0, RIPPER_FALL_RATE, DoRipperMoveJump, &s_RipperFall[3][0]}, }, { - {RIPPER_FALL_R4 + 0, RIPPER_FALL_RATE, &AF(DoRipperMoveJump), &s_RipperFall[4][0]}, + {RIPPER_FALL_R4 + 0, RIPPER_FALL_RATE, DoRipperMoveJump, &s_RipperFall[4][0]}, } }; @@ -542,29 +557,29 @@ int DoRipperBeginJumpAttack(DSWActor* actor); STATE s_RipperJumpAttack[5][6] = { { - {RIPPER_JUMP_R0 + 0, RIPPER_JUMP_ATTACK_RATE, &AF(NullRipper), &s_RipperJumpAttack[0][1]}, - {RIPPER_JUMP_R0 + 0, 0 | SF_QUICK_CALL, &AF(DoRipperBeginJumpAttack), &s_RipperJumpAttack[0][2]}, - {RIPPER_JUMP_R0 + 1, RIPPER_JUMP_ATTACK_RATE, &AF(DoRipperMoveJump), &s_RipperJumpAttack[0][2]}, + {RIPPER_JUMP_R0 + 0, RIPPER_JUMP_ATTACK_RATE, NullRipper, &s_RipperJumpAttack[0][1]}, + {RIPPER_JUMP_R0 + 0, 0 | SF_QUICK_CALL, DoRipperBeginJumpAttack, &s_RipperJumpAttack[0][2]}, + {RIPPER_JUMP_R0 + 1, RIPPER_JUMP_ATTACK_RATE, DoRipperMoveJump, &s_RipperJumpAttack[0][2]}, }, { - {RIPPER_JUMP_R1 + 0, RIPPER_JUMP_ATTACK_RATE, &AF(NullRipper), &s_RipperJumpAttack[1][1]}, - {RIPPER_JUMP_R1 + 0, 0 | SF_QUICK_CALL, &AF(DoRipperBeginJumpAttack), &s_RipperJumpAttack[1][2]}, - {RIPPER_JUMP_R1 + 1, RIPPER_JUMP_ATTACK_RATE, &AF(DoRipperMoveJump), &s_RipperJumpAttack[1][2]}, + {RIPPER_JUMP_R1 + 0, RIPPER_JUMP_ATTACK_RATE, NullRipper, &s_RipperJumpAttack[1][1]}, + {RIPPER_JUMP_R1 + 0, 0 | SF_QUICK_CALL, DoRipperBeginJumpAttack, &s_RipperJumpAttack[1][2]}, + {RIPPER_JUMP_R1 + 1, RIPPER_JUMP_ATTACK_RATE, DoRipperMoveJump, &s_RipperJumpAttack[1][2]}, }, { - {RIPPER_JUMP_R2 + 0, RIPPER_JUMP_ATTACK_RATE, &AF(NullRipper), &s_RipperJumpAttack[2][1]}, - {RIPPER_JUMP_R2 + 0, 0 | SF_QUICK_CALL, &AF(DoRipperBeginJumpAttack), &s_RipperJumpAttack[2][2]}, - {RIPPER_JUMP_R2 + 1, RIPPER_JUMP_ATTACK_RATE, &AF(DoRipperMoveJump), &s_RipperJumpAttack[2][2]}, + {RIPPER_JUMP_R2 + 0, RIPPER_JUMP_ATTACK_RATE, NullRipper, &s_RipperJumpAttack[2][1]}, + {RIPPER_JUMP_R2 + 0, 0 | SF_QUICK_CALL, DoRipperBeginJumpAttack, &s_RipperJumpAttack[2][2]}, + {RIPPER_JUMP_R2 + 1, RIPPER_JUMP_ATTACK_RATE, DoRipperMoveJump, &s_RipperJumpAttack[2][2]}, }, { - {RIPPER_JUMP_R3 + 0, RIPPER_JUMP_ATTACK_RATE, &AF(NullRipper), &s_RipperJumpAttack[3][1]}, - {RIPPER_JUMP_R3 + 0, 0 | SF_QUICK_CALL, &AF(DoRipperBeginJumpAttack), &s_RipperJumpAttack[3][2]}, - {RIPPER_JUMP_R3 + 1, RIPPER_JUMP_ATTACK_RATE, &AF(DoRipperMoveJump), &s_RipperJumpAttack[3][2]}, + {RIPPER_JUMP_R3 + 0, RIPPER_JUMP_ATTACK_RATE, NullRipper, &s_RipperJumpAttack[3][1]}, + {RIPPER_JUMP_R3 + 0, 0 | SF_QUICK_CALL, DoRipperBeginJumpAttack, &s_RipperJumpAttack[3][2]}, + {RIPPER_JUMP_R3 + 1, RIPPER_JUMP_ATTACK_RATE, DoRipperMoveJump, &s_RipperJumpAttack[3][2]}, }, { - {RIPPER_JUMP_R4 + 0, RIPPER_JUMP_ATTACK_RATE, &AF(NullRipper), &s_RipperJumpAttack[4][1]}, - {RIPPER_JUMP_R4 + 0, 0 | SF_QUICK_CALL, &AF(DoRipperBeginJumpAttack), &s_RipperJumpAttack[4][2]}, - {RIPPER_JUMP_R4 + 1, RIPPER_JUMP_ATTACK_RATE, &AF(DoRipperMoveJump), &s_RipperJumpAttack[4][2]}, + {RIPPER_JUMP_R4 + 0, RIPPER_JUMP_ATTACK_RATE, NullRipper, &s_RipperJumpAttack[4][1]}, + {RIPPER_JUMP_R4 + 0, 0 | SF_QUICK_CALL, DoRipperBeginJumpAttack, &s_RipperJumpAttack[4][2]}, + {RIPPER_JUMP_R4 + 1, RIPPER_JUMP_ATTACK_RATE, DoRipperMoveJump, &s_RipperJumpAttack[4][2]}, } }; @@ -590,24 +605,24 @@ STATE* sg_RipperJumpAttack[] = STATE s_RipperHangJump[5][6] = { { - {RIPPER_JUMP_R0 + 0, RIPPER_HANG_JUMP_RATE, &AF(NullRipper), &s_RipperHangJump[0][1]}, - {RIPPER_JUMP_R0 + 1, RIPPER_HANG_JUMP_RATE, &AF(DoRipperHangJF), &s_RipperHangJump[0][1]}, + {RIPPER_JUMP_R0 + 0, RIPPER_HANG_JUMP_RATE, NullRipper, &s_RipperHangJump[0][1]}, + {RIPPER_JUMP_R0 + 1, RIPPER_HANG_JUMP_RATE, DoRipperHangJF, &s_RipperHangJump[0][1]}, }, { - {RIPPER_JUMP_R1 + 0, RIPPER_HANG_JUMP_RATE, &AF(NullRipper), &s_RipperHangJump[1][1]}, - {RIPPER_JUMP_R1 + 1, RIPPER_HANG_JUMP_RATE, &AF(DoRipperHangJF), &s_RipperHangJump[1][1]}, + {RIPPER_JUMP_R1 + 0, RIPPER_HANG_JUMP_RATE, NullRipper, &s_RipperHangJump[1][1]}, + {RIPPER_JUMP_R1 + 1, RIPPER_HANG_JUMP_RATE, DoRipperHangJF, &s_RipperHangJump[1][1]}, }, { - {RIPPER_JUMP_R2 + 0, RIPPER_HANG_JUMP_RATE, &AF(NullRipper), &s_RipperHangJump[2][1]}, - {RIPPER_JUMP_R2 + 1, RIPPER_HANG_JUMP_RATE, &AF(DoRipperHangJF), &s_RipperHangJump[2][1]}, + {RIPPER_JUMP_R2 + 0, RIPPER_HANG_JUMP_RATE, NullRipper, &s_RipperHangJump[2][1]}, + {RIPPER_JUMP_R2 + 1, RIPPER_HANG_JUMP_RATE, DoRipperHangJF, &s_RipperHangJump[2][1]}, }, { - {RIPPER_JUMP_R3 + 0, RIPPER_HANG_JUMP_RATE, &AF(NullRipper), &s_RipperHangJump[3][1]}, - {RIPPER_JUMP_R3 + 1, RIPPER_HANG_JUMP_RATE, &AF(DoRipperHangJF), &s_RipperHangJump[3][1]}, + {RIPPER_JUMP_R3 + 0, RIPPER_HANG_JUMP_RATE, NullRipper, &s_RipperHangJump[3][1]}, + {RIPPER_JUMP_R3 + 1, RIPPER_HANG_JUMP_RATE, DoRipperHangJF, &s_RipperHangJump[3][1]}, }, { - {RIPPER_JUMP_R4 + 0, RIPPER_HANG_JUMP_RATE, &AF(NullRipper), &s_RipperHangJump[4][1]}, - {RIPPER_JUMP_R4 + 1, RIPPER_HANG_JUMP_RATE, &AF(DoRipperHangJF), &s_RipperHangJump[4][1]}, + {RIPPER_JUMP_R4 + 0, RIPPER_HANG_JUMP_RATE, NullRipper, &s_RipperHangJump[4][1]}, + {RIPPER_JUMP_R4 + 1, RIPPER_HANG_JUMP_RATE, DoRipperHangJF, &s_RipperHangJump[4][1]}, } }; @@ -632,19 +647,19 @@ STATE* sg_RipperHangJump[] = STATE s_RipperHangFall[5][6] = { { - {RIPPER_FALL_R0 + 0, RIPPER_FALL_RATE, &AF(DoRipperHangJF), &s_RipperHangFall[0][0]}, + {RIPPER_FALL_R0 + 0, RIPPER_FALL_RATE, DoRipperHangJF, &s_RipperHangFall[0][0]}, }, { - {RIPPER_FALL_R1 + 0, RIPPER_FALL_RATE, &AF(DoRipperHangJF), &s_RipperHangFall[1][0]}, + {RIPPER_FALL_R1 + 0, RIPPER_FALL_RATE, DoRipperHangJF, &s_RipperHangFall[1][0]}, }, { - {RIPPER_FALL_R2 + 0, RIPPER_FALL_RATE, &AF(DoRipperHangJF), &s_RipperHangFall[2][0]}, + {RIPPER_FALL_R2 + 0, RIPPER_FALL_RATE, DoRipperHangJF, &s_RipperHangFall[2][0]}, }, { - {RIPPER_FALL_R3 + 0, RIPPER_FALL_RATE, &AF(DoRipperHangJF), &s_RipperHangFall[3][0]}, + {RIPPER_FALL_R3 + 0, RIPPER_FALL_RATE, DoRipperHangJF, &s_RipperHangFall[3][0]}, }, { - {RIPPER_FALL_R4 + 0, RIPPER_FALL_RATE, &AF(DoRipperHangJF), &s_RipperHangFall[4][0]}, + {RIPPER_FALL_R4 + 0, RIPPER_FALL_RATE, DoRipperHangJF, &s_RipperHangFall[4][0]}, } }; @@ -670,21 +685,21 @@ STATE* sg_RipperHangFall[] = STATE s_RipperDie[] = { - {RIPPER_DIE + 0, RIPPER_DIE_RATE, &AF(NullRipper), &s_RipperDie[1]}, - {RIPPER_DIE + 1, RIPPER_DIE_RATE, &AF(NullRipper), &s_RipperDie[2]}, - {RIPPER_DIE + 2, RIPPER_DIE_RATE, &AF(NullRipper), &s_RipperDie[3]}, - {RIPPER_DIE + 3, RIPPER_DIE_RATE, &AF(NullRipper), &s_RipperDie[4]}, - {RIPPER_DEAD, RIPPER_DIE_RATE, &AF(DoActorDebris), &s_RipperDie[4]}, + {RIPPER_DIE + 0, RIPPER_DIE_RATE, NullRipper, &s_RipperDie[1]}, + {RIPPER_DIE + 1, RIPPER_DIE_RATE, NullRipper, &s_RipperDie[2]}, + {RIPPER_DIE + 2, RIPPER_DIE_RATE, NullRipper, &s_RipperDie[3]}, + {RIPPER_DIE + 3, RIPPER_DIE_RATE, NullRipper, &s_RipperDie[4]}, + {RIPPER_DEAD, RIPPER_DIE_RATE, DoActorDebris, &s_RipperDie[4]}, }; #define RIPPER_DEAD_RATE 8 STATE s_RipperDead[] = { - {RIPPER_DIE + 2, RIPPER_DEAD_RATE, nullptr, &s_RipperDead[1]}, - {RIPPER_DIE + 3, RIPPER_DEAD_RATE, nullptr, &s_RipperDead[2]}, - {RIPPER_DEAD, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_RipperDead[3]}, - {RIPPER_DEAD, RIPPER_DEAD_RATE, &AF(DoActorDebris), &s_RipperDead[3]}, + {RIPPER_DIE + 2, RIPPER_DEAD_RATE, NullAnimator, &s_RipperDead[1]}, + {RIPPER_DIE + 3, RIPPER_DEAD_RATE, NullAnimator, &s_RipperDead[2]}, + {RIPPER_DEAD, SF_QUICK_CALL, QueueFloorBlood, &s_RipperDead[3]}, + {RIPPER_DEAD, RIPPER_DEAD_RATE, DoActorDebris, &s_RipperDead[3]}, }; STATE* sg_RipperDie[] = @@ -699,12 +714,12 @@ STATE* sg_RipperDead[] = STATE s_RipperDeathJump[] = { - {RIPPER_DIE + 0, RIPPER_DIE_RATE, &AF(DoActorDeathMove), &s_RipperDeathJump[0]} + {RIPPER_DIE + 0, RIPPER_DIE_RATE, DoActorDeathMove, &s_RipperDeathJump[0]} }; STATE s_RipperDeathFall[] = { - {RIPPER_DIE + 1, RIPPER_DIE_RATE, &AF(DoActorDeathMove), &s_RipperDeathFall[0]} + {RIPPER_DIE + 1, RIPPER_DIE_RATE, DoActorDeathMove, &s_RipperDeathFall[0]} }; @@ -807,6 +822,8 @@ ACTOR_ACTION_SET RipperBrownActionSet = int SetupRipper(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, RIPPER_RUN_R0, s_RipperRun[0]); @@ -814,10 +831,10 @@ int SetupRipper(DSWActor* actor) } ChangeState(actor, s_RipperRun[0]); - actor->user.__legacyState.Attrib = &RipperAttrib; + actor->user.Attrib = &RipperAttrib; DoActorSetSpeed(actor, FAST_SPEED); - actor->user.__legacyState.StateEnd = s_RipperDie; - actor->user.__legacyState.Rot = sg_RipperRun; + actor->user.StateEnd = s_RipperDie; + actor->user.Rot = sg_RipperRun; actor->spr.scale = DVector2(1, 1); if (actor->spr.pal == PALETTE_BROWN_RIPPER) @@ -840,13 +857,6 @@ int SetupRipper(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWRipper, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupRipper(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -961,7 +971,7 @@ int InitRipperHang(DSWActor* actor) } NewStateGroup(actor, sg_RipperHangJump); - actor->user.__legacyState.StateFallOverride = sg_RipperHangFall; + actor->user.StateFallOverride = sg_RipperHangFall; DoActorSetSpeed(actor, FAST_SPEED); PickJumpMaxSpeed(actor, -800); @@ -990,7 +1000,7 @@ int DoRipperHang(DSWActor* actor) NewStateGroup(actor, sg_RipperJumpAttack); // move to the 2nd frame - past the pause frame - actor->user.Tics += actor->user.__legacyState.State->Tics; + actor->user.Tics += actor->user.State->Tics; return 0; } @@ -1007,7 +1017,7 @@ int DoRipperMoveHang(DSWActor* actor) { if (actor->user.coll.type == kHitWall) { - actor->setStateGroup(NAME_Special); + NewStateGroup(actor, actor->user.ActorActionSet->Special[1]); actor->user.WaitTics = 2 + ((RANDOM_P2(4 << 8) >> 8) * 120); // hang flush with the wall @@ -1026,7 +1036,6 @@ int DoRipperMoveHang(DSWActor* actor) // // //--------------------------------------------------------------------------- -int DoRipperQuickJump(DSWActor* actor); int DoRipperHangJF(DSWActor* actor) { @@ -1093,7 +1102,6 @@ int DoRipperBeginJumpAttack(DSWActor* actor) // // //--------------------------------------------------------------------------- -int DoRipperQuickJump(DSWActor* actor); int DoRipperMoveJump(DSWActor* actor) { @@ -1233,8 +1241,8 @@ void RipperHatch(DSWActor* actor) // make immediately active actorNew->user.Flags |= (SPR_ACTIVE); - actorNew->setStateGroup(NAME_Jump); - actorNew->user.ActorActionFunc = AF(DoActorMoveJump); + NewStateGroup(actorNew, actorNew->user.ActorActionSet->Jump); + actorNew->user.ActorActionFunc = DoActorMoveJump; DoActorSetSpeed(actorNew, FAST_SPEED); PickJumpMaxSpeed(actorNew, -600); @@ -1286,7 +1294,7 @@ int DoRipperMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); DoActorSectorDamage(actor); return 0; @@ -1300,8 +1308,35 @@ int DoRipperMove(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_ripper_code[] = +{ + + SAVE_CODE(InitRipperHang), + SAVE_CODE(DoRipperHang), + SAVE_CODE(DoRipperMoveHang), + SAVE_CODE(DoRipperHangJF), + + SAVE_CODE(DoRipperBeginJumpAttack), + SAVE_CODE(DoRipperMoveJump), + + SAVE_CODE(DoRipperQuickJump), + SAVE_CODE(NullRipper), + SAVE_CODE(DoRipperPain), + SAVE_CODE(DoRipperRipHeart), + SAVE_CODE(DoRipperStandHeart), + SAVE_CODE(DoRipperMove), +}; + static saveable_data saveable_ripper_data[] = { + SAVE_DATA(RipperBattle), + SAVE_DATA(RipperOffense), + SAVE_DATA(RipperBroadcast), + SAVE_DATA(RipperSurprised), + SAVE_DATA(RipperEvasive), + SAVE_DATA(RipperLostTarget), + SAVE_DATA(RipperCloseRange), + SAVE_DATA(RipperPersonality), SAVE_DATA(RipperAttrib), @@ -1346,7 +1381,8 @@ static saveable_data saveable_ripper_data[] = saveable_module saveable_ripper = { // code - nullptr, 0, + saveable_ripper_code, + SIZ(saveable_ripper_code), // data saveable_ripper_data, diff --git a/source/games/sw/src/ripper2.cpp b/source/games/sw/src/ripper2.cpp index 20f361b761d..4ddc36dffea 100644 --- a/source/games/sw/src/ripper2.cpp +++ b/source/games/sw/src/ripper2.cpp @@ -37,50 +37,56 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR InitRipper2Hang; +ANIMATOR DoRipper2MoveJump; +ANIMATOR DoRipper2HangJF; +ANIMATOR DoRipper2QuickJump; +ANIMATOR InitRipper2Charge; + DECISION Ripper2Battle[] = { - {879, &AF(InitRipper2Charge)}, - {883, &AF(InitActorSetDecide)}, - {900, &AF(InitRipper2Hang)}, - {1024, &AF(InitActorAttack)} + {879, InitRipper2Charge}, + {883, InitActorAttackNoise}, + {900, InitRipper2Hang}, + {1024, InitActorAttack} }; DECISION Ripper2Offense[] = { - {789, &AF(InitActorMoveCloser)}, - {790, &AF(InitActorSetDecide)}, - {800, &AF(InitRipper2Hang)}, - {1024, &AF(InitActorAttack)} + {789, InitActorMoveCloser}, + {790, InitActorAttackNoise}, + {800, InitRipper2Hang}, + {1024, InitActorAttack} }; -DECISIONB Ripper2Broadcast[] = +DECISION Ripper2Broadcast[] = { - {3, attr_ambient}, - {1024, 0} + {3, InitActorAmbientNoise}, + {1024, InitActorDecide} }; DECISION Ripper2Surprised[] = { - {40, &AF(InitRipper2Hang)}, - {701, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorDecide)} + {40, InitRipper2Hang}, + {701, InitActorMoveCloser}, + {1024, InitActorDecide} }; DECISION Ripper2Evasive[] = { - {10, &AF(InitActorMoveCloser)}, - {1024, &AF(InitRipper2Charge)} + {10, InitActorMoveCloser}, + {1024, InitRipper2Charge} }; DECISION Ripper2LostTarget[] = { - {900, &AF(InitActorFindPlayer)}, - {1024, &AF(InitActorWanderAround)} + {900, InitActorFindPlayer}, + {1024, InitActorWanderAround} }; DECISION Ripper2CloseRange[] = { - {1024, &AF(InitActorAttack) } + {1024, InitActorAttack } }; PERSONALITY Ripper2Personality = @@ -115,37 +121,39 @@ ATTRIBUTE Ripper2Attrib = #define RIPPER2_RUN_RATE 16 +ANIMATOR DoRipper2Move, NullRipper2, DoActorDebris; + STATE s_Ripper2Run[5][4] = { { - {RIPPER2_RUN_R0 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[0][1]}, - {RIPPER2_RUN_R0 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[0][2]}, - {RIPPER2_RUN_R0 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[0][3]}, - {RIPPER2_RUN_R0 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[0][0]}, + {RIPPER2_RUN_R0 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[0][1]}, + {RIPPER2_RUN_R0 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[0][2]}, + {RIPPER2_RUN_R0 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[0][3]}, + {RIPPER2_RUN_R0 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[0][0]}, }, { - {RIPPER2_RUN_R1 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[1][1]}, - {RIPPER2_RUN_R1 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[1][2]}, - {RIPPER2_RUN_R1 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[1][3]}, - {RIPPER2_RUN_R1 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[1][0]}, + {RIPPER2_RUN_R1 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[1][1]}, + {RIPPER2_RUN_R1 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[1][2]}, + {RIPPER2_RUN_R1 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[1][3]}, + {RIPPER2_RUN_R1 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[1][0]}, }, { - {RIPPER2_RUN_R2 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[2][1]}, - {RIPPER2_RUN_R2 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[2][2]}, - {RIPPER2_RUN_R2 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[2][3]}, - {RIPPER2_RUN_R2 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[2][0]}, + {RIPPER2_RUN_R2 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[2][1]}, + {RIPPER2_RUN_R2 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[2][2]}, + {RIPPER2_RUN_R2 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[2][3]}, + {RIPPER2_RUN_R2 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[2][0]}, }, { - {RIPPER2_RUN_R3 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[3][1]}, - {RIPPER2_RUN_R3 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[3][2]}, - {RIPPER2_RUN_R3 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[3][3]}, - {RIPPER2_RUN_R3 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[3][0]}, + {RIPPER2_RUN_R3 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[3][1]}, + {RIPPER2_RUN_R3 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[3][2]}, + {RIPPER2_RUN_R3 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[3][3]}, + {RIPPER2_RUN_R3 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[3][0]}, }, { - {RIPPER2_RUN_R4 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[4][1]}, - {RIPPER2_RUN_R4 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[4][2]}, - {RIPPER2_RUN_R4 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[4][3]}, - {RIPPER2_RUN_R4 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2Run[4][0]}, + {RIPPER2_RUN_R4 + 0, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[4][1]}, + {RIPPER2_RUN_R4 + 1, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[4][2]}, + {RIPPER2_RUN_R4 + 2, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[4][3]}, + {RIPPER2_RUN_R4 + 3, RIPPER2_RUN_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2Run[4][0]}, } }; @@ -167,37 +175,39 @@ STATE* sg_Ripper2Run[] = #define RIPPER2_RUNFAST_RATE 14 +ANIMATOR NullRipper2, DoActorDebris; + STATE s_Ripper2RunFast[5][4] = { { - {RIPPER2_RUNFAST_R0 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[0][1]}, - {RIPPER2_RUNFAST_R0 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[0][2]}, - {RIPPER2_RUNFAST_R0 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[0][3]}, - {RIPPER2_RUNFAST_R0 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[0][0]}, + {RIPPER2_RUNFAST_R0 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[0][1]}, + {RIPPER2_RUNFAST_R0 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[0][2]}, + {RIPPER2_RUNFAST_R0 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[0][3]}, + {RIPPER2_RUNFAST_R0 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[0][0]}, }, { - {RIPPER2_RUNFAST_R1 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[1][1]}, - {RIPPER2_RUNFAST_R1 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[1][2]}, - {RIPPER2_RUNFAST_R1 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[1][3]}, - {RIPPER2_RUNFAST_R1 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[1][0]}, + {RIPPER2_RUNFAST_R1 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[1][1]}, + {RIPPER2_RUNFAST_R1 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[1][2]}, + {RIPPER2_RUNFAST_R1 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[1][3]}, + {RIPPER2_RUNFAST_R1 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[1][0]}, }, { - {RIPPER2_RUNFAST_R2 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[2][1]}, - {RIPPER2_RUNFAST_R2 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[2][2]}, - {RIPPER2_RUNFAST_R2 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[2][3]}, - {RIPPER2_RUNFAST_R2 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[2][0]}, + {RIPPER2_RUNFAST_R2 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[2][1]}, + {RIPPER2_RUNFAST_R2 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[2][2]}, + {RIPPER2_RUNFAST_R2 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[2][3]}, + {RIPPER2_RUNFAST_R2 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[2][0]}, }, { - {RIPPER2_RUNFAST_R3 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[3][1]}, - {RIPPER2_RUNFAST_R3 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[3][2]}, - {RIPPER2_RUNFAST_R3 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[3][3]}, - {RIPPER2_RUNFAST_R3 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[3][0]}, + {RIPPER2_RUNFAST_R3 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[3][1]}, + {RIPPER2_RUNFAST_R3 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[3][2]}, + {RIPPER2_RUNFAST_R3 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[3][3]}, + {RIPPER2_RUNFAST_R3 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[3][0]}, }, { - {RIPPER2_RUNFAST_R4 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[4][1]}, - {RIPPER2_RUNFAST_R4 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[4][2]}, - {RIPPER2_RUNFAST_R4 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[4][3]}, - {RIPPER2_RUNFAST_R4 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, &AF(DoRipper2Move), &s_Ripper2RunFast[4][0]}, + {RIPPER2_RUNFAST_R4 + 0, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[4][1]}, + {RIPPER2_RUNFAST_R4 + 1, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[4][2]}, + {RIPPER2_RUNFAST_R4 + 2, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[4][3]}, + {RIPPER2_RUNFAST_R4 + 3, RIPPER2_RUNFAST_RATE | SF_TIC_ADJUST, DoRipper2Move, &s_Ripper2RunFast[4][0]}, } }; @@ -222,19 +232,19 @@ STATE* sg_Ripper2RunFast[] = STATE s_Ripper2Stand[5][1] = { { - {RIPPER2_STAND_R0 + 0, RIPPER2_STAND_RATE, &AF(DoRipper2Move), &s_Ripper2Stand[0][0]}, + {RIPPER2_STAND_R0 + 0, RIPPER2_STAND_RATE, DoRipper2Move, &s_Ripper2Stand[0][0]}, }, { - {RIPPER2_STAND_R1 + 0, RIPPER2_STAND_RATE, &AF(DoRipper2Move), &s_Ripper2Stand[1][0]}, + {RIPPER2_STAND_R1 + 0, RIPPER2_STAND_RATE, DoRipper2Move, &s_Ripper2Stand[1][0]}, }, { - {RIPPER2_STAND_R2 + 0, RIPPER2_STAND_RATE, &AF(DoRipper2Move), &s_Ripper2Stand[2][0]}, + {RIPPER2_STAND_R2 + 0, RIPPER2_STAND_RATE, DoRipper2Move, &s_Ripper2Stand[2][0]}, }, { - {RIPPER2_STAND_R3 + 0, RIPPER2_STAND_RATE, &AF(DoRipper2Move), &s_Ripper2Stand[3][0]}, + {RIPPER2_STAND_R3 + 0, RIPPER2_STAND_RATE, DoRipper2Move, &s_Ripper2Stand[3][0]}, }, { - {RIPPER2_STAND_R4 + 0, RIPPER2_STAND_RATE, &AF(DoRipper2Move), &s_Ripper2Stand[4][0]}, + {RIPPER2_STAND_R4 + 0, RIPPER2_STAND_RATE, DoRipper2Move, &s_Ripper2Stand[4][0]}, }, }; @@ -254,58 +264,60 @@ STATE* sg_Ripper2Stand[] = ////////////////////// #define RIPPER2_SWIPE_RATE 14 +ANIMATOR InitActorDecide; +ANIMATOR InitRipperSlash; STATE s_Ripper2Swipe[5][8] = { { - {RIPPER2_SWIPE_R0 + 0, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[0][1]}, - {RIPPER2_SWIPE_R0 + 1, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[0][2]}, - {RIPPER2_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[0][3]}, - {RIPPER2_SWIPE_R0 + 2, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[0][4]}, - {RIPPER2_SWIPE_R0 + 3, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[0][5]}, - {RIPPER2_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[0][6]}, - {RIPPER2_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Swipe[0][7]}, - {RIPPER2_SWIPE_R0 + 3, RIPPER2_SWIPE_RATE, &AF(DoRipper2Move), &s_Ripper2Swipe[0][7]}, + {RIPPER2_SWIPE_R0 + 0, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[0][1]}, + {RIPPER2_SWIPE_R0 + 1, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[0][2]}, + {RIPPER2_SWIPE_R0 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[0][3]}, + {RIPPER2_SWIPE_R0 + 2, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[0][4]}, + {RIPPER2_SWIPE_R0 + 3, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[0][5]}, + {RIPPER2_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[0][6]}, + {RIPPER2_SWIPE_R0 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Swipe[0][7]}, + {RIPPER2_SWIPE_R0 + 3, RIPPER2_SWIPE_RATE, DoRipper2Move, &s_Ripper2Swipe[0][7]}, }, { - {RIPPER2_SWIPE_R1 + 0, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[1][1]}, - {RIPPER2_SWIPE_R1 + 1, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[1][2]}, - {RIPPER2_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[1][3]}, - {RIPPER2_SWIPE_R1 + 2, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[1][4]}, - {RIPPER2_SWIPE_R1 + 3, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[1][5]}, - {RIPPER2_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[1][6]}, - {RIPPER2_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Swipe[1][7]}, - {RIPPER2_SWIPE_R1 + 3, RIPPER2_SWIPE_RATE, &AF(DoRipper2Move), &s_Ripper2Swipe[1][7]}, + {RIPPER2_SWIPE_R1 + 0, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[1][1]}, + {RIPPER2_SWIPE_R1 + 1, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[1][2]}, + {RIPPER2_SWIPE_R1 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[1][3]}, + {RIPPER2_SWIPE_R1 + 2, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[1][4]}, + {RIPPER2_SWIPE_R1 + 3, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[1][5]}, + {RIPPER2_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[1][6]}, + {RIPPER2_SWIPE_R1 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Swipe[1][7]}, + {RIPPER2_SWIPE_R1 + 3, RIPPER2_SWIPE_RATE, DoRipper2Move, &s_Ripper2Swipe[1][7]}, }, { - {RIPPER2_SWIPE_R2 + 0, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[2][1]}, - {RIPPER2_SWIPE_R2 + 1, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[2][2]}, - {RIPPER2_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[2][3]}, - {RIPPER2_SWIPE_R2 + 2, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[2][4]}, - {RIPPER2_SWIPE_R2 + 3, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[2][5]}, - {RIPPER2_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[2][6]}, - {RIPPER2_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Swipe[2][7]}, - {RIPPER2_SWIPE_R2 + 3, RIPPER2_SWIPE_RATE, &AF(DoRipper2Move), &s_Ripper2Swipe[2][7]}, + {RIPPER2_SWIPE_R2 + 0, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[2][1]}, + {RIPPER2_SWIPE_R2 + 1, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[2][2]}, + {RIPPER2_SWIPE_R2 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[2][3]}, + {RIPPER2_SWIPE_R2 + 2, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[2][4]}, + {RIPPER2_SWIPE_R2 + 3, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[2][5]}, + {RIPPER2_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[2][6]}, + {RIPPER2_SWIPE_R2 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Swipe[2][7]}, + {RIPPER2_SWIPE_R2 + 3, RIPPER2_SWIPE_RATE, DoRipper2Move, &s_Ripper2Swipe[2][7]}, }, { - {RIPPER2_SWIPE_R3 + 0, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[3][1]}, - {RIPPER2_SWIPE_R3 + 1, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[3][2]}, - {RIPPER2_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[3][3]}, - {RIPPER2_SWIPE_R3 + 2, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[3][4]}, - {RIPPER2_SWIPE_R3 + 3, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[3][5]}, - {RIPPER2_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[3][6]}, - {RIPPER2_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Swipe[3][7]}, - {RIPPER2_SWIPE_R3 + 3, RIPPER2_SWIPE_RATE, &AF(DoRipper2Move), &s_Ripper2Swipe[3][7]}, + {RIPPER2_SWIPE_R3 + 0, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[3][1]}, + {RIPPER2_SWIPE_R3 + 1, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[3][2]}, + {RIPPER2_SWIPE_R3 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[3][3]}, + {RIPPER2_SWIPE_R3 + 2, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[3][4]}, + {RIPPER2_SWIPE_R3 + 3, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[3][5]}, + {RIPPER2_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[3][6]}, + {RIPPER2_SWIPE_R3 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Swipe[3][7]}, + {RIPPER2_SWIPE_R3 + 3, RIPPER2_SWIPE_RATE, DoRipper2Move, &s_Ripper2Swipe[3][7]}, }, { - {RIPPER2_SWIPE_R4 + 0, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[4][1]}, - {RIPPER2_SWIPE_R4 + 1, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[4][2]}, - {RIPPER2_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[4][3]}, - {RIPPER2_SWIPE_R4 + 2, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[4][4]}, - {RIPPER2_SWIPE_R4 + 3, RIPPER2_SWIPE_RATE, &AF(NullRipper2), &s_Ripper2Swipe[4][5]}, - {RIPPER2_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitRipperSlash), &s_Ripper2Swipe[4][6]}, - {RIPPER2_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Swipe[4][7]}, - {RIPPER2_SWIPE_R4 + 3, RIPPER2_SWIPE_RATE, &AF(DoRipper2Move), &s_Ripper2Swipe[4][7]}, + {RIPPER2_SWIPE_R4 + 0, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[4][1]}, + {RIPPER2_SWIPE_R4 + 1, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[4][2]}, + {RIPPER2_SWIPE_R4 + 1, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[4][3]}, + {RIPPER2_SWIPE_R4 + 2, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[4][4]}, + {RIPPER2_SWIPE_R4 + 3, RIPPER2_SWIPE_RATE, NullRipper2, &s_Ripper2Swipe[4][5]}, + {RIPPER2_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, InitRipperSlash, &s_Ripper2Swipe[4][6]}, + {RIPPER2_SWIPE_R4 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Swipe[4][7]}, + {RIPPER2_SWIPE_R4 + 3, RIPPER2_SWIPE_RATE, DoRipper2Move, &s_Ripper2Swipe[4][7]}, } }; @@ -326,53 +338,54 @@ STATE* sg_Ripper2Swipe[] = ////////////////////// #define RIPPER2_MEKONG_RATE 18 +ANIMATOR InitActorDecide, ChestRipper2; STATE s_Ripper2Kong[5][7] = { { - {RIPPER2_MEKONG_R0 + 0, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[0][1]}, - {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, &AF(ChestRipper2), &s_Ripper2Kong[0][2]}, - {RIPPER2_MEKONG_R0 + 1, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[0][3]}, - {RIPPER2_MEKONG_R0 + 2, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[0][4]}, - {RIPPER2_MEKONG_R0 + 3, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[0][5]}, - {RIPPER2_MEKONG_R0 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Kong[0][6]}, - {RIPPER2_MEKONG_R0 + 0, RIPPER2_MEKONG_RATE, &AF(DoRipper2Move), &s_Ripper2Kong[0][6]}, + {RIPPER2_MEKONG_R0 + 0, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[0][1]}, + {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, ChestRipper2, &s_Ripper2Kong[0][2]}, + {RIPPER2_MEKONG_R0 + 1, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[0][3]}, + {RIPPER2_MEKONG_R0 + 2, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[0][4]}, + {RIPPER2_MEKONG_R0 + 3, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[0][5]}, + {RIPPER2_MEKONG_R0 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Kong[0][6]}, + {RIPPER2_MEKONG_R0 + 0, RIPPER2_MEKONG_RATE, DoRipper2Move, &s_Ripper2Kong[0][6]}, }, { - {RIPPER2_MEKONG_R1 + 0, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[1][1]}, - {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, &AF(ChestRipper2), &s_Ripper2Kong[1][2]}, - {RIPPER2_MEKONG_R1 + 1, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[1][3]}, - {RIPPER2_MEKONG_R1 + 2, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[1][4]}, - {RIPPER2_MEKONG_R1 + 3, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[1][5]}, - {RIPPER2_MEKONG_R1 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Kong[1][6]}, - {RIPPER2_MEKONG_R1 + 0, RIPPER2_MEKONG_RATE, &AF(DoRipper2Move), &s_Ripper2Kong[1][6]}, + {RIPPER2_MEKONG_R1 + 0, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[1][1]}, + {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, ChestRipper2, &s_Ripper2Kong[1][2]}, + {RIPPER2_MEKONG_R1 + 1, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[1][3]}, + {RIPPER2_MEKONG_R1 + 2, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[1][4]}, + {RIPPER2_MEKONG_R1 + 3, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[1][5]}, + {RIPPER2_MEKONG_R1 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Kong[1][6]}, + {RIPPER2_MEKONG_R1 + 0, RIPPER2_MEKONG_RATE, DoRipper2Move, &s_Ripper2Kong[1][6]}, }, { - {RIPPER2_MEKONG_R2 + 0, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[2][1]}, - {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, &AF(ChestRipper2), &s_Ripper2Kong[2][2]}, - {RIPPER2_MEKONG_R2 + 1, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[2][3]}, - {RIPPER2_MEKONG_R2 + 2, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[2][4]}, - {RIPPER2_MEKONG_R2 + 3, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[2][5]}, - {RIPPER2_MEKONG_R2 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Kong[2][6]}, - {RIPPER2_MEKONG_R2 + 0, RIPPER2_MEKONG_RATE, &AF(DoRipper2Move), &s_Ripper2Kong[2][6]}, + {RIPPER2_MEKONG_R2 + 0, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[2][1]}, + {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, ChestRipper2, &s_Ripper2Kong[2][2]}, + {RIPPER2_MEKONG_R2 + 1, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[2][3]}, + {RIPPER2_MEKONG_R2 + 2, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[2][4]}, + {RIPPER2_MEKONG_R2 + 3, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[2][5]}, + {RIPPER2_MEKONG_R2 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Kong[2][6]}, + {RIPPER2_MEKONG_R2 + 0, RIPPER2_MEKONG_RATE, DoRipper2Move, &s_Ripper2Kong[2][6]}, }, { - {RIPPER2_MEKONG_R3 + 0, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[3][1]}, - {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, &AF(ChestRipper2), &s_Ripper2Kong[3][2]}, - {RIPPER2_MEKONG_R3 + 1, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[3][3]}, - {RIPPER2_MEKONG_R3 + 2, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[3][4]}, - {RIPPER2_MEKONG_R3 + 3, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[3][5]}, - {RIPPER2_MEKONG_R3 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Kong[3][6]}, - {RIPPER2_MEKONG_R3 + 0, RIPPER2_MEKONG_RATE, &AF(DoRipper2Move), &s_Ripper2Kong[3][6]}, + {RIPPER2_MEKONG_R3 + 0, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[3][1]}, + {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, ChestRipper2, &s_Ripper2Kong[3][2]}, + {RIPPER2_MEKONG_R3 + 1, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[3][3]}, + {RIPPER2_MEKONG_R3 + 2, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[3][4]}, + {RIPPER2_MEKONG_R3 + 3, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[3][5]}, + {RIPPER2_MEKONG_R3 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Kong[3][6]}, + {RIPPER2_MEKONG_R3 + 0, RIPPER2_MEKONG_RATE, DoRipper2Move, &s_Ripper2Kong[3][6]}, }, { - {RIPPER2_MEKONG_R4 + 0, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[4][1]}, - {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, &AF(ChestRipper2), &s_Ripper2Kong[4][2]}, - {RIPPER2_MEKONG_R4 + 1, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[4][3]}, - {RIPPER2_MEKONG_R4 + 2, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[4][4]}, - {RIPPER2_MEKONG_R4 + 3, RIPPER2_MEKONG_RATE, &AF(NullRipper2), &s_Ripper2Kong[4][5]}, - {RIPPER2_MEKONG_R4 + 3, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_Ripper2Kong[4][6]}, - {RIPPER2_MEKONG_R4 + 0, RIPPER2_MEKONG_RATE, &AF(DoRipper2Move), &s_Ripper2Kong[4][6]}, + {RIPPER2_MEKONG_R4 + 0, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[4][1]}, + {RIPPER2_MEKONG_R0 + 0, SF_QUICK_CALL, ChestRipper2, &s_Ripper2Kong[4][2]}, + {RIPPER2_MEKONG_R4 + 1, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[4][3]}, + {RIPPER2_MEKONG_R4 + 2, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[4][4]}, + {RIPPER2_MEKONG_R4 + 3, RIPPER2_MEKONG_RATE, NullRipper2, &s_Ripper2Kong[4][5]}, + {RIPPER2_MEKONG_R4 + 3, 0 | SF_QUICK_CALL, InitActorDecide, &s_Ripper2Kong[4][6]}, + {RIPPER2_MEKONG_R4 + 0, RIPPER2_MEKONG_RATE, DoRipper2Move, &s_Ripper2Kong[4][6]}, } }; @@ -394,28 +407,29 @@ STATE* sg_Ripper2Kong[] = ////////////////////// #define RIPPER2_HEART_RATE 20 +ANIMATOR DoRipper2StandHeart; STATE s_Ripper2Heart[5][4] = { { - {RIPPER2_HEART_R0 + 0, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[0][1]}, - {RIPPER2_HEART_R0 + 1, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[0][0]}, + {RIPPER2_HEART_R0 + 0, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[0][1]}, + {RIPPER2_HEART_R0 + 1, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[0][0]}, }, { - {RIPPER2_HEART_R1 + 0, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[1][1]}, - {RIPPER2_HEART_R1 + 1, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[1][0]}, + {RIPPER2_HEART_R1 + 0, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[1][1]}, + {RIPPER2_HEART_R1 + 1, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[1][0]}, }, { - {RIPPER2_HEART_R2 + 0, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[2][1]}, - {RIPPER2_HEART_R2 + 1, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[2][0]}, + {RIPPER2_HEART_R2 + 0, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[2][1]}, + {RIPPER2_HEART_R2 + 1, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[2][0]}, }, { - {RIPPER2_HEART_R3 + 0, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[3][1]}, - {RIPPER2_HEART_R3 + 1, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[3][0]}, + {RIPPER2_HEART_R3 + 0, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[3][1]}, + {RIPPER2_HEART_R3 + 1, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[3][0]}, }, { - {RIPPER2_HEART_R4 + 0, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[4][1]}, - {RIPPER2_HEART_R4 + 1, RIPPER2_HEART_RATE, &AF(DoRipper2StandHeart), &s_Ripper2Heart[4][0]}, + {RIPPER2_HEART_R4 + 0, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[4][1]}, + {RIPPER2_HEART_R4 + 1, RIPPER2_HEART_RATE, DoRipper2StandHeart, &s_Ripper2Heart[4][0]}, } }; @@ -436,23 +450,24 @@ STATE* sg_Ripper2Heart[] = ////////////////////// #define RIPPER2_HANG_RATE 14 +ANIMATOR DoRipper2Hang; STATE s_Ripper2Hang[5][4] = { { - {RIPPER2_HANG_R0, RIPPER2_HANG_RATE, &AF(DoRipper2Hang), &s_Ripper2Hang[0][0]}, + {RIPPER2_HANG_R0, RIPPER2_HANG_RATE, DoRipper2Hang, &s_Ripper2Hang[0][0]}, }, { - {RIPPER2_HANG_R1, RIPPER2_HANG_RATE, &AF(DoRipper2Hang), &s_Ripper2Hang[1][0]}, + {RIPPER2_HANG_R1, RIPPER2_HANG_RATE, DoRipper2Hang, &s_Ripper2Hang[1][0]}, }, { - {RIPPER2_HANG_R2, RIPPER2_HANG_RATE, &AF(DoRipper2Hang), &s_Ripper2Hang[2][0]}, + {RIPPER2_HANG_R2, RIPPER2_HANG_RATE, DoRipper2Hang, &s_Ripper2Hang[2][0]}, }, { - {RIPPER2_HANG_R3, RIPPER2_HANG_RATE, &AF(DoRipper2Hang), &s_Ripper2Hang[3][0]}, + {RIPPER2_HANG_R3, RIPPER2_HANG_RATE, DoRipper2Hang, &s_Ripper2Hang[3][0]}, }, { - {RIPPER2_HANG_R4, RIPPER2_HANG_RATE, &AF(DoRipper2Hang), &s_Ripper2Hang[4][0]}, + {RIPPER2_HANG_R4, RIPPER2_HANG_RATE, DoRipper2Hang, &s_Ripper2Hang[4][0]}, } }; @@ -474,23 +489,24 @@ STATE* sg_Ripper2Hang[] = ////////////////////// #define RIPPER2_PAIN_RATE 38 +ANIMATOR DoRipper2Pain; STATE s_Ripper2Pain[5][1] = { { - {4414 + 0, RIPPER2_PAIN_RATE, &AF(DoRipper2Pain), &s_Ripper2Pain[0][0]}, + {4414 + 0, RIPPER2_PAIN_RATE, DoRipper2Pain, &s_Ripper2Pain[0][0]}, }, { - {4414 + 0, RIPPER2_PAIN_RATE, &AF(DoRipper2Pain), &s_Ripper2Pain[1][0]}, + {4414 + 0, RIPPER2_PAIN_RATE, DoRipper2Pain, &s_Ripper2Pain[1][0]}, }, { - {4414 + 0, RIPPER2_PAIN_RATE, &AF(DoRipper2Pain), &s_Ripper2Pain[2][0]}, + {4414 + 0, RIPPER2_PAIN_RATE, DoRipper2Pain, &s_Ripper2Pain[2][0]}, }, { - {4414 + 0, RIPPER2_PAIN_RATE, &AF(DoRipper2Pain), &s_Ripper2Pain[3][0]}, + {4414 + 0, RIPPER2_PAIN_RATE, DoRipper2Pain, &s_Ripper2Pain[3][0]}, }, { - {4414 + 0, RIPPER2_PAIN_RATE, &AF(DoRipper2Pain), &s_Ripper2Pain[4][0]}, + {4414 + 0, RIPPER2_PAIN_RATE, DoRipper2Pain, &s_Ripper2Pain[4][0]}, } }; @@ -514,24 +530,24 @@ STATE* sg_Ripper2Pain[] = STATE s_Ripper2Jump[5][6] = { { - {RIPPER2_JUMP_R0 + 0, RIPPER2_JUMP_RATE, &AF(NullRipper2), &s_Ripper2Jump[0][1]}, - {RIPPER2_JUMP_R0 + 1, RIPPER2_JUMP_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Jump[0][1]}, + {RIPPER2_JUMP_R0 + 0, RIPPER2_JUMP_RATE, NullRipper2, &s_Ripper2Jump[0][1]}, + {RIPPER2_JUMP_R0 + 1, RIPPER2_JUMP_RATE, DoRipper2MoveJump, &s_Ripper2Jump[0][1]}, }, { - {RIPPER2_JUMP_R1 + 0, RIPPER2_JUMP_RATE, &AF(NullRipper2), &s_Ripper2Jump[1][1]}, - {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Jump[1][1]}, + {RIPPER2_JUMP_R1 + 0, RIPPER2_JUMP_RATE, NullRipper2, &s_Ripper2Jump[1][1]}, + {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_RATE, DoRipper2MoveJump, &s_Ripper2Jump[1][1]}, }, { - {RIPPER2_JUMP_R2 + 0, RIPPER2_JUMP_RATE, &AF(NullRipper2), &s_Ripper2Jump[2][1]}, - {RIPPER2_JUMP_R2 + 1, RIPPER2_JUMP_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Jump[2][1]}, + {RIPPER2_JUMP_R2 + 0, RIPPER2_JUMP_RATE, NullRipper2, &s_Ripper2Jump[2][1]}, + {RIPPER2_JUMP_R2 + 1, RIPPER2_JUMP_RATE, DoRipper2MoveJump, &s_Ripper2Jump[2][1]}, }, { - {RIPPER2_JUMP_R3 + 0, RIPPER2_JUMP_RATE, &AF(NullRipper2), &s_Ripper2Jump[3][1]}, - {RIPPER2_JUMP_R3 + 1, RIPPER2_JUMP_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Jump[3][1]}, + {RIPPER2_JUMP_R3 + 0, RIPPER2_JUMP_RATE, NullRipper2, &s_Ripper2Jump[3][1]}, + {RIPPER2_JUMP_R3 + 1, RIPPER2_JUMP_RATE, DoRipper2MoveJump, &s_Ripper2Jump[3][1]}, }, { - {RIPPER2_JUMP_R4 + 0, RIPPER2_JUMP_RATE, &AF(NullRipper2), &s_Ripper2Jump[4][1]}, - {RIPPER2_JUMP_R4 + 1, RIPPER2_JUMP_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Jump[4][1]}, + {RIPPER2_JUMP_R4 + 0, RIPPER2_JUMP_RATE, NullRipper2, &s_Ripper2Jump[4][1]}, + {RIPPER2_JUMP_R4 + 1, RIPPER2_JUMP_RATE, DoRipper2MoveJump, &s_Ripper2Jump[4][1]}, } }; @@ -557,19 +573,19 @@ STATE* sg_Ripper2Jump[] = STATE s_Ripper2Fall[5][6] = { { - {RIPPER2_FALL_R0 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Fall[0][0]}, + {RIPPER2_FALL_R0 + 0, RIPPER2_FALL_RATE, DoRipper2MoveJump, &s_Ripper2Fall[0][0]}, }, { - {RIPPER2_FALL_R1 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Fall[1][0]}, + {RIPPER2_FALL_R1 + 0, RIPPER2_FALL_RATE, DoRipper2MoveJump, &s_Ripper2Fall[1][0]}, }, { - {RIPPER2_FALL_R2 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Fall[2][0]}, + {RIPPER2_FALL_R2 + 0, RIPPER2_FALL_RATE, DoRipper2MoveJump, &s_Ripper2Fall[2][0]}, }, { - {RIPPER2_FALL_R3 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Fall[3][0]}, + {RIPPER2_FALL_R3 + 0, RIPPER2_FALL_RATE, DoRipper2MoveJump, &s_Ripper2Fall[3][0]}, }, { - {RIPPER2_FALL_R4 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2MoveJump), &s_Ripper2Fall[4][0]}, + {RIPPER2_FALL_R4 + 0, RIPPER2_FALL_RATE, DoRipper2MoveJump, &s_Ripper2Fall[4][0]}, } }; @@ -596,34 +612,34 @@ int DoRipper2BeginJumpAttack(DSWActor* actor); STATE s_Ripper2JumpAttack[5][6] = { { - {RIPPER2_JUMP_R0 + 0, RIPPER2_JUMP_ATTACK_RATE, &AF(NullRipper2), &s_Ripper2JumpAttack[0][1]}, - {RIPPER2_JUMP_R0 + 0, 0 | SF_QUICK_CALL, &AF(DoRipper2BeginJumpAttack), &s_Ripper2JumpAttack[0][2]}, - {RIPPER2_JUMP_R0 + 2, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[0][3]}, - {RIPPER2_JUMP_R0 + 1, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[0][3]}, + {RIPPER2_JUMP_R0 + 0, RIPPER2_JUMP_ATTACK_RATE, NullRipper2, &s_Ripper2JumpAttack[0][1]}, + {RIPPER2_JUMP_R0 + 0, 0 | SF_QUICK_CALL, DoRipper2BeginJumpAttack, &s_Ripper2JumpAttack[0][2]}, + {RIPPER2_JUMP_R0 + 2, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[0][3]}, + {RIPPER2_JUMP_R0 + 1, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[0][3]}, }, { - {RIPPER2_JUMP_R1 + 0, RIPPER2_JUMP_ATTACK_RATE, &AF(NullRipper2), &s_Ripper2JumpAttack[1][1]}, - {RIPPER2_JUMP_R1 + 0, 0 | SF_QUICK_CALL, &AF(DoRipper2BeginJumpAttack), &s_Ripper2JumpAttack[1][2]}, - {RIPPER2_JUMP_R1 + 2, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[1][3]}, - {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[1][3]}, + {RIPPER2_JUMP_R1 + 0, RIPPER2_JUMP_ATTACK_RATE, NullRipper2, &s_Ripper2JumpAttack[1][1]}, + {RIPPER2_JUMP_R1 + 0, 0 | SF_QUICK_CALL, DoRipper2BeginJumpAttack, &s_Ripper2JumpAttack[1][2]}, + {RIPPER2_JUMP_R1 + 2, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[1][3]}, + {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[1][3]}, }, { - {RIPPER2_JUMP_R2 + 0, RIPPER2_JUMP_ATTACK_RATE, &AF(NullRipper2), &s_Ripper2JumpAttack[2][1]}, - {RIPPER2_JUMP_R2 + 0, 0 | SF_QUICK_CALL, &AF(DoRipper2BeginJumpAttack), &s_Ripper2JumpAttack[2][2]}, - {RIPPER2_JUMP_R2 + 2, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[2][3]}, - {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[2][3]}, + {RIPPER2_JUMP_R2 + 0, RIPPER2_JUMP_ATTACK_RATE, NullRipper2, &s_Ripper2JumpAttack[2][1]}, + {RIPPER2_JUMP_R2 + 0, 0 | SF_QUICK_CALL, DoRipper2BeginJumpAttack, &s_Ripper2JumpAttack[2][2]}, + {RIPPER2_JUMP_R2 + 2, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[2][3]}, + {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[2][3]}, }, { - {RIPPER2_JUMP_R3 + 0, RIPPER2_JUMP_ATTACK_RATE, &AF(NullRipper2), &s_Ripper2JumpAttack[3][1]}, - {RIPPER2_JUMP_R3 + 0, 0 | SF_QUICK_CALL, &AF(DoRipper2BeginJumpAttack), &s_Ripper2JumpAttack[3][2]}, - {RIPPER2_JUMP_R3 + 2, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[3][3]}, - {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[3][3]}, + {RIPPER2_JUMP_R3 + 0, RIPPER2_JUMP_ATTACK_RATE, NullRipper2, &s_Ripper2JumpAttack[3][1]}, + {RIPPER2_JUMP_R3 + 0, 0 | SF_QUICK_CALL, DoRipper2BeginJumpAttack, &s_Ripper2JumpAttack[3][2]}, + {RIPPER2_JUMP_R3 + 2, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[3][3]}, + {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[3][3]}, }, { - {RIPPER2_JUMP_R4 + 0, RIPPER2_JUMP_ATTACK_RATE, &AF(NullRipper2), &s_Ripper2JumpAttack[4][1]}, - {RIPPER2_JUMP_R4 + 0, 0 | SF_QUICK_CALL, &AF(DoRipper2BeginJumpAttack), &s_Ripper2JumpAttack[4][2]}, - {RIPPER2_JUMP_R4 + 2, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[4][3]}, - {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, &AF(DoRipper2MoveJump), &s_Ripper2JumpAttack[4][3]}, + {RIPPER2_JUMP_R4 + 0, RIPPER2_JUMP_ATTACK_RATE, NullRipper2, &s_Ripper2JumpAttack[4][1]}, + {RIPPER2_JUMP_R4 + 0, 0 | SF_QUICK_CALL, DoRipper2BeginJumpAttack, &s_Ripper2JumpAttack[4][2]}, + {RIPPER2_JUMP_R4 + 2, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[4][3]}, + {RIPPER2_JUMP_R1 + 1, RIPPER2_JUMP_ATTACK_RATE, DoRipper2MoveJump, &s_Ripper2JumpAttack[4][3]}, } }; @@ -649,24 +665,24 @@ STATE* sg_Ripper2JumpAttack[] = STATE s_Ripper2HangJump[5][6] = { { - {RIPPER2_JUMP_R0 + 0, RIPPER2_HANG_JUMP_RATE, &AF(NullRipper2), &s_Ripper2HangJump[0][1]}, - {RIPPER2_JUMP_R0 + 1, RIPPER2_HANG_JUMP_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangJump[0][1]}, + {RIPPER2_JUMP_R0 + 0, RIPPER2_HANG_JUMP_RATE, NullRipper2, &s_Ripper2HangJump[0][1]}, + {RIPPER2_JUMP_R0 + 1, RIPPER2_HANG_JUMP_RATE, DoRipper2HangJF, &s_Ripper2HangJump[0][1]}, }, { - {RIPPER2_JUMP_R1 + 0, RIPPER2_HANG_JUMP_RATE, &AF(NullRipper2), &s_Ripper2HangJump[1][1]}, - {RIPPER2_JUMP_R1 + 1, RIPPER2_HANG_JUMP_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangJump[1][1]}, + {RIPPER2_JUMP_R1 + 0, RIPPER2_HANG_JUMP_RATE, NullRipper2, &s_Ripper2HangJump[1][1]}, + {RIPPER2_JUMP_R1 + 1, RIPPER2_HANG_JUMP_RATE, DoRipper2HangJF, &s_Ripper2HangJump[1][1]}, }, { - {RIPPER2_JUMP_R2 + 0, RIPPER2_HANG_JUMP_RATE, &AF(NullRipper2), &s_Ripper2HangJump[2][1]}, - {RIPPER2_JUMP_R2 + 1, RIPPER2_HANG_JUMP_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangJump[2][1]}, + {RIPPER2_JUMP_R2 + 0, RIPPER2_HANG_JUMP_RATE, NullRipper2, &s_Ripper2HangJump[2][1]}, + {RIPPER2_JUMP_R2 + 1, RIPPER2_HANG_JUMP_RATE, DoRipper2HangJF, &s_Ripper2HangJump[2][1]}, }, { - {RIPPER2_JUMP_R3 + 0, RIPPER2_HANG_JUMP_RATE, &AF(NullRipper2), &s_Ripper2HangJump[3][1]}, - {RIPPER2_JUMP_R3 + 1, RIPPER2_HANG_JUMP_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangJump[3][1]}, + {RIPPER2_JUMP_R3 + 0, RIPPER2_HANG_JUMP_RATE, NullRipper2, &s_Ripper2HangJump[3][1]}, + {RIPPER2_JUMP_R3 + 1, RIPPER2_HANG_JUMP_RATE, DoRipper2HangJF, &s_Ripper2HangJump[3][1]}, }, { - {RIPPER2_JUMP_R4 + 0, RIPPER2_HANG_JUMP_RATE, &AF(NullRipper2), &s_Ripper2HangJump[4][1]}, - {RIPPER2_JUMP_R4 + 1, RIPPER2_HANG_JUMP_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangJump[4][1]}, + {RIPPER2_JUMP_R4 + 0, RIPPER2_HANG_JUMP_RATE, NullRipper2, &s_Ripper2HangJump[4][1]}, + {RIPPER2_JUMP_R4 + 1, RIPPER2_HANG_JUMP_RATE, DoRipper2HangJF, &s_Ripper2HangJump[4][1]}, } }; @@ -691,19 +707,19 @@ STATE* sg_Ripper2HangJump[] = STATE s_Ripper2HangFall[5][6] = { { - {RIPPER2_FALL_R0 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangFall[0][0]}, + {RIPPER2_FALL_R0 + 0, RIPPER2_FALL_RATE, DoRipper2HangJF, &s_Ripper2HangFall[0][0]}, }, { - {RIPPER2_FALL_R1 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangFall[1][0]}, + {RIPPER2_FALL_R1 + 0, RIPPER2_FALL_RATE, DoRipper2HangJF, &s_Ripper2HangFall[1][0]}, }, { - {RIPPER2_FALL_R2 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangFall[2][0]}, + {RIPPER2_FALL_R2 + 0, RIPPER2_FALL_RATE, DoRipper2HangJF, &s_Ripper2HangFall[2][0]}, }, { - {RIPPER2_FALL_R3 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangFall[3][0]}, + {RIPPER2_FALL_R3 + 0, RIPPER2_FALL_RATE, DoRipper2HangJF, &s_Ripper2HangFall[3][0]}, }, { - {RIPPER2_FALL_R4 + 0, RIPPER2_FALL_RATE, &AF(DoRipper2HangJF), &s_Ripper2HangFall[4][0]}, + {RIPPER2_FALL_R4 + 0, RIPPER2_FALL_RATE, DoRipper2HangJF, &s_Ripper2HangFall[4][0]}, } }; @@ -729,29 +745,29 @@ STATE* sg_Ripper2HangFall[] = STATE s_Ripper2Die[] = { - {RIPPER2_DIE + 0, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Die[1]}, - {RIPPER2_DIE + 1, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Die[2]}, - {RIPPER2_DIE + 2, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Die[3]}, - {RIPPER2_DIE + 3, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Die[4]}, - {RIPPER2_DIE + 4, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Die[5]}, - {RIPPER2_DIE + 5, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Die[6]}, - {RIPPER2_DIE + 6, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Die[7]}, - {RIPPER2_DEAD, RIPPER2_DIE_RATE, &AF(DoActorDebris), &s_Ripper2Die[7]}, + {RIPPER2_DIE + 0, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Die[1]}, + {RIPPER2_DIE + 1, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Die[2]}, + {RIPPER2_DIE + 2, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Die[3]}, + {RIPPER2_DIE + 3, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Die[4]}, + {RIPPER2_DIE + 4, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Die[5]}, + {RIPPER2_DIE + 5, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Die[6]}, + {RIPPER2_DIE + 6, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Die[7]}, + {RIPPER2_DEAD, RIPPER2_DIE_RATE, DoActorDebris, &s_Ripper2Die[7]}, }; #define RIPPER2_DEAD_RATE 8 STATE s_Ripper2Dead[] = { - {RIPPER2_DIE + 0, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Dead[1]}, - {RIPPER2_DIE + 1, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Dead[2]}, - {RIPPER2_DIE + 2, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Dead[3]}, - {RIPPER2_DIE + 3, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Dead[4]}, - {RIPPER2_DIE + 4, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Dead[5]}, - {RIPPER2_DIE + 5, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Dead[6]}, - {RIPPER2_DIE + 6, RIPPER2_DIE_RATE, &AF(NullRipper2), &s_Ripper2Dead[7]}, - {RIPPER2_DEAD, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_Ripper2Dead[8]}, - {RIPPER2_DEAD, RIPPER2_DEAD_RATE, &AF(DoActorDebris), &s_Ripper2Dead[8]}, + {RIPPER2_DIE + 0, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Dead[1]}, + {RIPPER2_DIE + 1, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Dead[2]}, + {RIPPER2_DIE + 2, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Dead[3]}, + {RIPPER2_DIE + 3, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Dead[4]}, + {RIPPER2_DIE + 4, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Dead[5]}, + {RIPPER2_DIE + 5, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Dead[6]}, + {RIPPER2_DIE + 6, RIPPER2_DIE_RATE, NullRipper2, &s_Ripper2Dead[7]}, + {RIPPER2_DEAD, SF_QUICK_CALL, QueueFloorBlood, &s_Ripper2Dead[8]}, + {RIPPER2_DEAD, RIPPER2_DEAD_RATE, DoActorDebris, &s_Ripper2Dead[8]}, }; STATE* sg_Ripper2Die[] = @@ -766,12 +782,12 @@ STATE* sg_Ripper2Dead[] = STATE s_Ripper2DeathJump[] = { - {RIPPER2_DIE + 0, RIPPER2_DIE_RATE, &AF(DoActorDeathMove), &s_Ripper2DeathJump[0]} + {RIPPER2_DIE + 0, RIPPER2_DIE_RATE, DoActorDeathMove, &s_Ripper2DeathJump[0]} }; STATE s_Ripper2DeathFall[] = { - {RIPPER2_DIE + 1, RIPPER2_DIE_RATE, &AF(DoActorDeathMove), &s_Ripper2DeathFall[0]} + {RIPPER2_DIE + 1, RIPPER2_DIE_RATE, DoActorDeathMove, &s_Ripper2DeathFall[0]} }; @@ -874,6 +890,8 @@ ACTOR_ACTION_SET Ripper2BrownActionSet = int SetupRipper2(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, RIPPER2_RUN_R0, s_Ripper2Run[0]); @@ -881,10 +899,10 @@ int SetupRipper2(DSWActor* actor) } ChangeState(actor, s_Ripper2Run[0]); - actor->user.__legacyState.Attrib = &Ripper2Attrib; + actor->user.Attrib = &Ripper2Attrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_Ripper2Die; - actor->user.__legacyState.Rot = sg_Ripper2Run; + actor->user.StateEnd = s_Ripper2Die; + actor->user.Rot = sg_Ripper2Run; actor->clipdist = 32; // This actor is bigger, needs bigger box. actor->spr.scale = DVector2(0.859375, 0.859375); @@ -909,13 +927,6 @@ int SetupRipper2(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWRipper2, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupRipper2(self); - return 0; -} - //--------------------------------------------------------------------------- // // HANGING - Jumping/Falling/Stationary @@ -957,7 +968,7 @@ int InitRipper2Hang(DSWActor* actor) } NewStateGroup(actor, sg_Ripper2HangJump); - actor->user.__legacyState.StateFallOverride = sg_Ripper2HangFall; + actor->user.StateFallOverride = sg_Ripper2HangFall; DoActorSetSpeed(actor, FAST_SPEED); PickJumpMaxSpeed(actor, -(RandomRange(400)+100)); @@ -986,7 +997,7 @@ int DoRipper2Hang(DSWActor* actor) NewStateGroup(actor, sg_Ripper2JumpAttack); // move to the 2nd frame - past the pause frame - actor->user.Tics += actor->user.__legacyState.State->Tics; + actor->user.Tics += actor->user.State->Tics; return 0; } @@ -1011,7 +1022,7 @@ int DoRipper2MoveHang(DSWActor* actor) if (abs(actor->spr.pos.Z - actor->user.targetActor->spr.pos.Z) > 250) return 0; - actor->setStateGroup(NAME_Special); + NewStateGroup(actor, actor->user.ActorActionSet->Special[1]); if (RANDOM_P2(1024<<8)>>8 > 500) actor->user.WaitTics = ((RANDOM_P2(2 << 8) >> 8) * 120); else @@ -1032,7 +1043,6 @@ int DoRipper2MoveHang(DSWActor* actor) // // //--------------------------------------------------------------------------- -int DoRipper2QuickJump(DSWActor* actor); int DoRipper2HangJF(DSWActor* actor) { @@ -1241,8 +1251,8 @@ void Ripper2Hatch(DSWActor* actor) // make immediately active actorNew->user.Flags |= (SPR_ACTIVE); - actorNew->setStateGroup(NAME_Jump); - actorNew->user.ActorActionFunc = AF(DoActorMoveJump); + NewStateGroup(actorNew, actorNew->user.ActorActionSet->Jump); + actorNew->user.ActorActionFunc = DoActorMoveJump; DoActorSetSpeed(actorNew, FAST_SPEED); PickJumpMaxSpeed(actorNew, -600); @@ -1297,7 +1307,7 @@ int DoRipper2Move(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); DoActorSectorDamage(actor); @@ -1341,9 +1351,36 @@ int ChestRipper2(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_ripper2_code[] = +{ + SAVE_CODE(InitRipper2Hang), + SAVE_CODE(DoRipper2Hang), + SAVE_CODE(DoRipper2MoveHang), + SAVE_CODE(DoRipper2HangJF), + + SAVE_CODE(DoRipper2BeginJumpAttack), + SAVE_CODE(DoRipper2MoveJump), + SAVE_CODE(DoRipper2QuickJump), + SAVE_CODE(NullRipper2), + SAVE_CODE(DoRipper2Pain), + SAVE_CODE(DoRipper2RipHeart), + SAVE_CODE(DoRipper2StandHeart), + SAVE_CODE(Ripper2Hatch), + SAVE_CODE(DoRipper2Move), + SAVE_CODE(InitRipper2Charge), + SAVE_CODE(ChestRipper2), +}; static saveable_data saveable_ripper2_data[] = { + SAVE_DATA(Ripper2Battle), + SAVE_DATA(Ripper2Offense), + SAVE_DATA(Ripper2Broadcast), + SAVE_DATA(Ripper2Surprised), + SAVE_DATA(Ripper2Evasive), + SAVE_DATA(Ripper2LostTarget), + SAVE_DATA(Ripper2CloseRange), + SAVE_DATA(Ripper2Personality), SAVE_DATA(Ripper2Attrib), @@ -1390,7 +1427,8 @@ static saveable_data saveable_ripper2_data[] = saveable_module saveable_ripper2 = { // code - nullptr, 0, + saveable_ripper2_code, + SIZ(saveable_ripper2_code), // data saveable_ripper2_data, diff --git a/source/games/sw/src/rotator.cpp b/source/games/sw/src/rotator.cpp index f9f6018fa3e..d1c68dfd8be 100644 --- a/source/games/sw/src/rotator.cpp +++ b/source/games/sw/src/rotator.cpp @@ -412,4 +412,27 @@ int DoRotator(DSWActor* actor) return 0; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +#include "saveable.h" + +static saveable_code saveable_rotator_code[] = +{ + SAVE_CODE(DoRotator) +}; + +saveable_module saveable_rotator = +{ + // code + saveable_rotator_code, + SIZ(saveable_rotator_code), + + // data + nullptr,0 +}; + END_SW_NS diff --git a/source/games/sw/src/save.cpp b/source/games/sw/src/save.cpp index 67f4f16eb8d..88b21313d6c 100644 --- a/source/games/sw/src/save.cpp +++ b/source/games/sw/src/save.cpp @@ -544,9 +544,11 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, SECTOR_OBJECT& w, ("morph_z_speed", w.morph_z_speed, def->morph_z_speed) ("morph_off", w.morph_off, def->morph_off) ("limit_ang_center", w.limit_ang_center, def->limit_ang_center) - ("limit_ang_delta", w.limit_ang_delta, def->limit_ang_delta) - ("premovescale", w.PreMoveScale, def->PreMoveScale) - ("animtype", w.AnimType, def->AnimType); + ("limit_ang_delta", w.limit_ang_delta, def->limit_ang_delta); + + SerializeCodePtr(arc, "preanimator", (void**)&w.PreMoveAnimator); + SerializeCodePtr(arc, "postanimator", (void**)&w.PostMoveAnimator); + SerializeCodePtr(arc, "animator", (void**)&w.Animator); arc.EndObject(); } @@ -592,19 +594,19 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, USER& w, USER* def if (arc.BeginObject(keyname)) { arc("WallP", w.WallP, def->WallP) - ("State", w.__legacyState.State, def->__legacyState.State) - ("Rot", w.__legacyState.Rot, def->__legacyState.Rot) - ("StateStart", w.__legacyState.StateStart, def->__legacyState.StateStart) - ("StateEnd", w.__legacyState.StateEnd, def->__legacyState.StateEnd) - ("StateFallOverride", w.__legacyState.StateFallOverride, def->__legacyState.StateFallOverride) - ("ActorActionSet", w.__legacyState.ActorActionSet, def->__legacyState.ActorActionSet) + ("State", w.State, def->State) + ("Rot", w.Rot, def->Rot) + ("StateStart", w.StateStart, def->StateStart) + ("StateEnd", w.StateEnd, def->StateEnd) + ("StateFallOverride", w.StateFallOverride, def->StateFallOverride) + ("ActorActionSet", w.ActorActionSet, def->ActorActionSet) ("Personality", w.Personality, def->Personality) - ("Attrib", w.__legacyState.Attrib, def->__legacyState.Attrib) + ("Attrib", w.Attrib, def->Attrib) ("sop_parent", w.sop_parent, def->sop_parent) ("flags", w.Flags, def->Flags) ("flags2", w.Flags2, def->Flags2) ("Tics", w.Tics, def->Tics) - ("RotNum", w.__legacyState.RotNum, def->__legacyState.RotNum) + ("RotNum", w.RotNum, def->RotNum) ("ID", w.ID, def->ID) ("Health", w.Health, def->Health) ("MaxHealth", w.MaxHealth, def->MaxHealth) @@ -675,9 +677,9 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, USER& w, USER* def ("filler", w.filler, def->filler) ("wallshade", w.WallShade) ("rotator", w.rotator) - ("actoractionfunc", w.ActorActionFunc) ("oz", w.oz, def->oz); + SerializeCodePtr(arc, "ActorActionFunc", (void**)&w.ActorActionFunc); arc.EndObject(); if (arc.isReading()) diff --git a/source/games/sw/src/saveable.cpp b/source/games/sw/src/saveable.cpp index 43676ea58b3..3d75c4e96ca 100644 --- a/source/games/sw/src/saveable.cpp +++ b/source/games/sw/src/saveable.cpp @@ -40,6 +40,9 @@ void Saveable_Init(void) saveablemodules.Push(&saveable_ ## x); \ } + MODULE(actor) + MODULE(ai) + MODULE(ai) // was 'build' but that is not used anywhere anymore. MODULE(bunny) MODULE(coolg) MODULE(coolie) @@ -50,19 +53,28 @@ void Saveable_Init(void) MODULE(jweapon) MODULE(lava) MODULE(miscactr) + MODULE(morph) MODULE(ninja) MODULE(panel) MODULE(player) MODULE(ripper) MODULE(ripper2) + MODULE(rotator) MODULE(serp) MODULE(skel) MODULE(skull) + MODULE(slidor) + MODULE(spike) MODULE(sprite) MODULE(sumo) + MODULE(track) + MODULE(vator) + MODULE(wallmove) MODULE(weapon) MODULE(zilla) MODULE(zombie) + + MODULE(sector) } //--------------------------------------------------------------------------- diff --git a/source/games/sw/src/sector.cpp b/source/games/sw/src/sector.cpp index 898a048271a..4a7055294cc 100644 --- a/source/games/sw/src/sector.cpp +++ b/source/games/sw/src/sector.cpp @@ -58,6 +58,7 @@ enum SINE_SLOPED = BIT(3), }; +ANIMATOR DoGrating; void DoPlayerBeginForceJump(DSWPlayer*); sectortype* FindNextSectorByTag(sectortype* sect, int tag); @@ -73,9 +74,6 @@ void DoRotatorMatch(DSWPlayer* pp, short match, bool); void DoSlidorOperate(DSWPlayer*, sectortype*); void DoSlidorMatch(DSWPlayer* pp, short match, bool); -void DoTornadoObject(SECTOR_OBJECT* sop); -void DoAutoTurretObject(SECTOR_OBJECT* sop); - void KillMatchingCrackSprites(short match); int DoTrapReset(short match); int DoTrapMatch(short match); @@ -393,8 +391,9 @@ void SectorSetup(void) memset(&SectorObject[ndx].sectp, 0, sizeof(SectorObject[0].sectp)); memset(&SectorObject[ndx].so_actors, 0, sizeof(SectorObject[0].so_actors)); SectorObject[ndx].match_event_actor = nullptr; - SectorObject[ndx].PreMoveScale = false; - SectorObject[ndx].AnimType = SOType_None; + SectorObject[ndx].PreMoveAnimator = nullptr; + SectorObject[ndx].PostMoveAnimator = nullptr; + SectorObject[ndx].Animator = nullptr; SectorObject[ndx].controller = nullptr; SectorObject[ndx].sp_child = nullptr; SectorObject[ndx].mid_sector = nullptr; @@ -983,7 +982,7 @@ void DoSpawnSpotsForKill(short match) if (actor->spr.hitag == SPAWN_SPOT && actor->spr.lotag == match) { change_actor_stat(actor, STAT_NO_STATE); - actor->user.ActorActionFunc = AF(DoSpawnSpot); + actor->user.ActorActionFunc = DoSpawnSpot; actor->user.WaitTics = SP_TAG5(actor) * 15; SetActorZ(actor, actor->spr.pos); // setting for Killed @@ -1010,7 +1009,7 @@ void DoSpawnSpotsForDamage(short match) if (actor->spr.hitag == SPAWN_SPOT && actor->spr.lotag == match) { change_actor_stat(actor, STAT_NO_STATE); - actor->user.ActorActionFunc = AF(DoSpawnSpot); + actor->user.ActorActionFunc = DoSpawnSpot; actor->user.WaitTics = SP_TAG7(actor) * 15; // setting for Damaged actor->user.LastDamage = 0; @@ -1753,7 +1752,7 @@ int OperateSprite(DSWActor* actor, short player_is_operating) SpawnUser(actor, 0, nullptr); - actor->user.ActorActionFunc = AF(DoGrating); + actor->user.ActorActionFunc = DoGrating; actor->spr.lotag = 0; actor->spr.hitag /= 2; @@ -2910,14 +2909,10 @@ void DoSector(void) } } - switch (sop->AnimType) + if (sop->Animator) { - case SOType_AutoTurret: - DoAutoTurretObject(sop); - break; - case SOType_Tornado: - DoTornadoObject(sop); - break; + (*sop->Animator)(sop); + continue; } // force sync SOs to be updated regularly @@ -2964,4 +2959,30 @@ void DoSector(void) DoSpringBoardDown(); } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + + +#include "saveable.h" + +static saveable_code saveable_sector_code[] = +{ + SAVE_CODE(DoSpawnSpot), +}; + +saveable_module saveable_sector = +{ + // code + saveable_sector_code, + SIZ(saveable_sector_code), + + // data + nullptr, + 0 +}; + + END_SW_NS diff --git a/source/games/sw/src/serp.cpp b/source/games/sw/src/serp.cpp index ebd11cf2d92..8e75b427c90 100644 --- a/source/games/sw/src/serp.cpp +++ b/source/games/sw/src/serp.cpp @@ -39,48 +39,49 @@ BEGIN_SW_NS DECISION SerpBattle[] = { - {670, &AF(InitActorMoveCloser ) }, - {700, &AF(InitActorSetDecide) }, - {710, &AF(InitActorRunAway ) }, - {1024, &AF(InitActorAttack ) } + {670, InitActorMoveCloser }, + {700, InitActorAmbientNoise }, + {710, InitActorRunAway }, + {1024, InitActorAttack } }; DECISION SerpOffense[] = { - {775, &AF(InitActorMoveCloser ) }, - {800, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {775, InitActorMoveCloser }, + {800, InitActorAmbientNoise }, + {1024, InitActorAttack } }; -DECISIONB SerpBroadcast[] = +DECISION SerpBroadcast[] = { - {10, attr_ambient }, - {1024, 0 } + //{21, InitActorAlertNoise }, + {10, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION SerpSurprised[] = { - {701, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorDecide ) } + {701, InitActorMoveCloser }, + {1024, InitActorDecide } }; DECISION SerpEvasive[] = { - {10, &AF(InitActorEvade) }, + {10, InitActorEvade }, {1024, nullptr } }; DECISION SerpLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {921, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {921, InitActorAmbientNoise }, + {1024, InitActorWanderAround } }; DECISION SerpCloseRange[] = { - {700, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {700, InitActorAttack }, + {1024, InitActorReposition } }; PERSONALITY SerpPersonality = @@ -128,37 +129,39 @@ ATTRIBUTE SerpPissedAttrib = #define SERP_RUN_RATE 24 +ANIMATOR DoSerpMove,NullSerp,DoActorDebris,NullSerp; + STATE s_SerpRun[5][4] = { { - {SERP_RUN_R0 + 0, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[0][1]}, - {SERP_RUN_R0 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[0][2]}, - {SERP_RUN_R0 + 2, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[0][3]}, - {SERP_RUN_R0 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[0][0]}, + {SERP_RUN_R0 + 0, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[0][1]}, + {SERP_RUN_R0 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[0][2]}, + {SERP_RUN_R0 + 2, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[0][3]}, + {SERP_RUN_R0 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[0][0]}, }, { - {SERP_RUN_R1 + 0, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[1][1]}, - {SERP_RUN_R1 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[1][2]}, - {SERP_RUN_R1 + 2, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[1][3]}, - {SERP_RUN_R1 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[1][0]}, + {SERP_RUN_R1 + 0, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[1][1]}, + {SERP_RUN_R1 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[1][2]}, + {SERP_RUN_R1 + 2, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[1][3]}, + {SERP_RUN_R1 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[1][0]}, }, { - {SERP_RUN_R2 + 0, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[2][1]}, - {SERP_RUN_R2 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[2][2]}, - {SERP_RUN_R2 + 2, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[2][3]}, - {SERP_RUN_R2 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[2][0]}, + {SERP_RUN_R2 + 0, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[2][1]}, + {SERP_RUN_R2 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[2][2]}, + {SERP_RUN_R2 + 2, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[2][3]}, + {SERP_RUN_R2 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[2][0]}, }, { - {SERP_RUN_R3 + 0, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[3][1]}, - {SERP_RUN_R3 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[3][2]}, - {SERP_RUN_R3 + 2, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[3][3]}, - {SERP_RUN_R3 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[3][0]}, + {SERP_RUN_R3 + 0, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[3][1]}, + {SERP_RUN_R3 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[3][2]}, + {SERP_RUN_R3 + 2, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[3][3]}, + {SERP_RUN_R3 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[3][0]}, }, { - {SERP_RUN_R4 + 0, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[4][1]}, - {SERP_RUN_R4 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[4][2]}, - {SERP_RUN_R4 + 2, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[4][3]}, - {SERP_RUN_R4 + 1, SERP_RUN_RATE, &AF(DoSerpMove), &s_SerpRun[4][0]}, + {SERP_RUN_R4 + 0, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[4][1]}, + {SERP_RUN_R4 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[4][2]}, + {SERP_RUN_R4 + 2, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[4][3]}, + {SERP_RUN_R4 + 1, SERP_RUN_RATE, DoSerpMove, &s_SerpRun[4][0]}, } }; @@ -179,68 +182,70 @@ STATE* sg_SerpRun[] = ////////////////////// #define SERP_SLASH_RATE 9 +ANIMATOR InitActorDecide; +ANIMATOR InitSerpSlash; STATE s_SerpSlash[5][10] = { { - {SERP_SLASH_R0 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[0][1]}, - {SERP_SLASH_R0 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[0][2]}, - {SERP_SLASH_R0 + 0, SERP_SLASH_RATE*2, &AF(NullSerp), &s_SerpSlash[0][3]}, - {SERP_SLASH_R0 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[0][4]}, - {SERP_SLASH_R0 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[0][5]}, - {SERP_SLASH_R0 + 3, SF_QUICK_CALL, &AF(InitSerpSlash), &s_SerpSlash[0][6]}, - {SERP_SLASH_R0 + 3, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[0][7]}, - {SERP_SLASH_R0 + 4, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[0][8]}, - {SERP_SLASH_R0 + 4, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSlash[0][9]}, - {SERP_SLASH_R0 + 4, SERP_SLASH_RATE, &AF(DoSerpMove), &s_SerpSlash[0][9]}, + {SERP_SLASH_R0 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[0][1]}, + {SERP_SLASH_R0 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[0][2]}, + {SERP_SLASH_R0 + 0, SERP_SLASH_RATE*2, NullSerp, &s_SerpSlash[0][3]}, + {SERP_SLASH_R0 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[0][4]}, + {SERP_SLASH_R0 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[0][5]}, + {SERP_SLASH_R0 + 3, SF_QUICK_CALL, InitSerpSlash, &s_SerpSlash[0][6]}, + {SERP_SLASH_R0 + 3, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[0][7]}, + {SERP_SLASH_R0 + 4, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[0][8]}, + {SERP_SLASH_R0 + 4, 0|SF_QUICK_CALL, InitActorDecide, &s_SerpSlash[0][9]}, + {SERP_SLASH_R0 + 4, SERP_SLASH_RATE, DoSerpMove, &s_SerpSlash[0][9]}, }, { - {SERP_SLASH_R1 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[1][1]}, - {SERP_SLASH_R1 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[1][2]}, - {SERP_SLASH_R1 + 0, SERP_SLASH_RATE*2, &AF(NullSerp), &s_SerpSlash[1][3]}, - {SERP_SLASH_R1 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[1][4]}, - {SERP_SLASH_R1 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[1][5]}, - {SERP_SLASH_R1 + 3, SF_QUICK_CALL, &AF(InitSerpSlash), &s_SerpSlash[1][6]}, - {SERP_SLASH_R1 + 3, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[1][7]}, - {SERP_SLASH_R1 + 4, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[1][8]}, - {SERP_SLASH_R1 + 4, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSlash[1][9]}, - {SERP_SLASH_R1 + 4, SERP_SLASH_RATE, &AF(DoSerpMove), &s_SerpSlash[1][9]}, + {SERP_SLASH_R1 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[1][1]}, + {SERP_SLASH_R1 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[1][2]}, + {SERP_SLASH_R1 + 0, SERP_SLASH_RATE*2, NullSerp, &s_SerpSlash[1][3]}, + {SERP_SLASH_R1 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[1][4]}, + {SERP_SLASH_R1 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[1][5]}, + {SERP_SLASH_R1 + 3, SF_QUICK_CALL, InitSerpSlash, &s_SerpSlash[1][6]}, + {SERP_SLASH_R1 + 3, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[1][7]}, + {SERP_SLASH_R1 + 4, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[1][8]}, + {SERP_SLASH_R1 + 4, 0|SF_QUICK_CALL, InitActorDecide, &s_SerpSlash[1][9]}, + {SERP_SLASH_R1 + 4, SERP_SLASH_RATE, DoSerpMove, &s_SerpSlash[1][9]}, }, { - {SERP_SLASH_R2 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[2][1]}, - {SERP_SLASH_R2 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[2][2]}, - {SERP_SLASH_R2 + 0, SERP_SLASH_RATE*2, &AF(NullSerp), &s_SerpSlash[2][3]}, - {SERP_SLASH_R2 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[2][4]}, - {SERP_SLASH_R2 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[2][5]}, - {SERP_SLASH_R2 + 3, SF_QUICK_CALL, &AF(InitSerpSlash), &s_SerpSlash[2][6]}, - {SERP_SLASH_R2 + 3, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[2][7]}, - {SERP_SLASH_R2 + 4, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[2][8]}, - {SERP_SLASH_R2 + 4, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSlash[2][9]}, - {SERP_SLASH_R2 + 4, SERP_SLASH_RATE, &AF(DoSerpMove), &s_SerpSlash[2][9]}, + {SERP_SLASH_R2 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[2][1]}, + {SERP_SLASH_R2 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[2][2]}, + {SERP_SLASH_R2 + 0, SERP_SLASH_RATE*2, NullSerp, &s_SerpSlash[2][3]}, + {SERP_SLASH_R2 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[2][4]}, + {SERP_SLASH_R2 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[2][5]}, + {SERP_SLASH_R2 + 3, SF_QUICK_CALL, InitSerpSlash, &s_SerpSlash[2][6]}, + {SERP_SLASH_R2 + 3, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[2][7]}, + {SERP_SLASH_R2 + 4, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[2][8]}, + {SERP_SLASH_R2 + 4, 0|SF_QUICK_CALL, InitActorDecide, &s_SerpSlash[2][9]}, + {SERP_SLASH_R2 + 4, SERP_SLASH_RATE, DoSerpMove, &s_SerpSlash[2][9]}, }, { - {SERP_SLASH_R3 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[3][1]}, - {SERP_SLASH_R3 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[3][2]}, - {SERP_SLASH_R3 + 0, SERP_SLASH_RATE*2, &AF(NullSerp), &s_SerpSlash[3][3]}, - {SERP_SLASH_R3 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[3][4]}, - {SERP_SLASH_R3 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[3][5]}, - {SERP_SLASH_R3 + 3, SF_QUICK_CALL, &AF(InitSerpSlash), &s_SerpSlash[3][6]}, - {SERP_SLASH_R3 + 3, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[3][7]}, - {SERP_SLASH_R3 + 4, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[3][8]}, - {SERP_SLASH_R3 + 4, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSlash[3][9]}, - {SERP_SLASH_R3 + 4, SERP_SLASH_RATE, &AF(DoSerpMove), &s_SerpSlash[3][9]}, + {SERP_SLASH_R3 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[3][1]}, + {SERP_SLASH_R3 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[3][2]}, + {SERP_SLASH_R3 + 0, SERP_SLASH_RATE*2, NullSerp, &s_SerpSlash[3][3]}, + {SERP_SLASH_R3 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[3][4]}, + {SERP_SLASH_R3 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[3][5]}, + {SERP_SLASH_R3 + 3, SF_QUICK_CALL, InitSerpSlash, &s_SerpSlash[3][6]}, + {SERP_SLASH_R3 + 3, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[3][7]}, + {SERP_SLASH_R3 + 4, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[3][8]}, + {SERP_SLASH_R3 + 4, 0|SF_QUICK_CALL, InitActorDecide, &s_SerpSlash[3][9]}, + {SERP_SLASH_R3 + 4, SERP_SLASH_RATE, DoSerpMove, &s_SerpSlash[3][9]}, }, { - {SERP_SLASH_R4 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[4][1]}, - {SERP_SLASH_R4 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[4][2]}, - {SERP_SLASH_R4 + 0, SERP_SLASH_RATE*2, &AF(NullSerp), &s_SerpSlash[4][3]}, - {SERP_SLASH_R4 + 1, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[4][4]}, - {SERP_SLASH_R4 + 2, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[4][5]}, - {SERP_SLASH_R4 + 3, SF_QUICK_CALL, &AF(InitSerpSlash), &s_SerpSlash[4][6]}, - {SERP_SLASH_R4 + 3, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[4][7]}, - {SERP_SLASH_R4 + 4, SERP_SLASH_RATE, &AF(NullSerp), &s_SerpSlash[4][8]}, - {SERP_SLASH_R4 + 4, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSlash[4][9]}, - {SERP_SLASH_R4 + 4, SERP_SLASH_RATE, &AF(DoSerpMove), &s_SerpSlash[4][9]}, + {SERP_SLASH_R4 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[4][1]}, + {SERP_SLASH_R4 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[4][2]}, + {SERP_SLASH_R4 + 0, SERP_SLASH_RATE*2, NullSerp, &s_SerpSlash[4][3]}, + {SERP_SLASH_R4 + 1, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[4][4]}, + {SERP_SLASH_R4 + 2, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[4][5]}, + {SERP_SLASH_R4 + 3, SF_QUICK_CALL, InitSerpSlash, &s_SerpSlash[4][6]}, + {SERP_SLASH_R4 + 3, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[4][7]}, + {SERP_SLASH_R4 + 4, SERP_SLASH_RATE, NullSerp, &s_SerpSlash[4][8]}, + {SERP_SLASH_R4 + 4, 0|SF_QUICK_CALL, InitActorDecide, &s_SerpSlash[4][9]}, + {SERP_SLASH_R4 + 4, SERP_SLASH_RATE, DoSerpMove, &s_SerpSlash[4][9]}, } }; @@ -262,58 +267,60 @@ STATE* sg_SerpSlash[] = ////////////////////// #define SERP_SKULL_SPELL_RATE 18 +ANIMATOR InitSerpSkullSpell; +ANIMATOR InitSerpRing; STATE s_SerpSkullSpell[5][8] = { { - {SERP_SPELL_R0 + 2, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[0][1]}, - {SERP_SPELL_R0 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[0][2]}, - {SERP_SPELL_R0 + 0, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[0][3]}, - {SERP_SPELL_R0 + 0, SF_QUICK_CALL, &AF(InitSerpRing), &s_SerpSkullSpell[0][4]}, - {SERP_SPELL_R0 + 0, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[0][5]}, - {SERP_SPELL_R0 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[0][6]}, - {SERP_SPELL_R0 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSkullSpell[0][7]}, - {SERP_SPELL_R0 + 1, SERP_SKULL_SPELL_RATE, &AF(DoSerpMove), &s_SerpSkullSpell[0][7]}, + {SERP_SPELL_R0 + 2, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[0][1]}, + {SERP_SPELL_R0 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[0][2]}, + {SERP_SPELL_R0 + 0, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[0][3]}, + {SERP_SPELL_R0 + 0, SF_QUICK_CALL, InitSerpRing, &s_SerpSkullSpell[0][4]}, + {SERP_SPELL_R0 + 0, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[0][5]}, + {SERP_SPELL_R0 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[0][6]}, + {SERP_SPELL_R0 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSkullSpell[0][7]}, + {SERP_SPELL_R0 + 1, SERP_SKULL_SPELL_RATE, DoSerpMove, &s_SerpSkullSpell[0][7]}, }, { - {SERP_SPELL_R1 + 2, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[1][1]}, - {SERP_SPELL_R1 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[1][2]}, - {SERP_SPELL_R1 + 0, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[1][3]}, - {SERP_SPELL_R1 + 0, SF_QUICK_CALL, &AF(InitSerpRing), &s_SerpSkullSpell[1][4]}, - {SERP_SPELL_R1 + 0, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[1][5]}, - {SERP_SPELL_R1 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[1][6]}, - {SERP_SPELL_R1 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSkullSpell[1][7]}, - {SERP_SPELL_R1 + 1, SERP_SKULL_SPELL_RATE, &AF(DoSerpMove), &s_SerpSkullSpell[1][7]}, + {SERP_SPELL_R1 + 2, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[1][1]}, + {SERP_SPELL_R1 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[1][2]}, + {SERP_SPELL_R1 + 0, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[1][3]}, + {SERP_SPELL_R1 + 0, SF_QUICK_CALL, InitSerpRing, &s_SerpSkullSpell[1][4]}, + {SERP_SPELL_R1 + 0, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[1][5]}, + {SERP_SPELL_R1 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[1][6]}, + {SERP_SPELL_R1 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSkullSpell[1][7]}, + {SERP_SPELL_R1 + 1, SERP_SKULL_SPELL_RATE, DoSerpMove, &s_SerpSkullSpell[1][7]}, }, { - {SERP_SPELL_R2 + 2, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[2][1]}, - {SERP_SPELL_R2 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[2][2]}, - {SERP_SPELL_R2 + 0, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[2][3]}, - {SERP_SPELL_R2 + 0, SF_QUICK_CALL, &AF(InitSerpRing), &s_SerpSkullSpell[2][4]}, - {SERP_SPELL_R2 + 0, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[2][5]}, - {SERP_SPELL_R2 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[2][6]}, - {SERP_SPELL_R2 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSkullSpell[2][7]}, - {SERP_SPELL_R2 + 1, SERP_SKULL_SPELL_RATE, &AF(DoSerpMove), &s_SerpSkullSpell[2][7]}, + {SERP_SPELL_R2 + 2, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[2][1]}, + {SERP_SPELL_R2 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[2][2]}, + {SERP_SPELL_R2 + 0, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[2][3]}, + {SERP_SPELL_R2 + 0, SF_QUICK_CALL, InitSerpRing, &s_SerpSkullSpell[2][4]}, + {SERP_SPELL_R2 + 0, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[2][5]}, + {SERP_SPELL_R2 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[2][6]}, + {SERP_SPELL_R2 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSkullSpell[2][7]}, + {SERP_SPELL_R2 + 1, SERP_SKULL_SPELL_RATE, DoSerpMove, &s_SerpSkullSpell[2][7]}, }, { - {SERP_SPELL_R3 + 2, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[3][1]}, - {SERP_SPELL_R3 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[3][2]}, - {SERP_SPELL_R3 + 0, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[3][3]}, - {SERP_SPELL_R3 + 0, SF_QUICK_CALL, &AF(InitSerpRing), &s_SerpSkullSpell[3][4]}, - {SERP_SPELL_R3 + 0, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[3][5]}, - {SERP_SPELL_R3 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[3][6]}, - {SERP_SPELL_R3 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSkullSpell[3][7]}, - {SERP_SPELL_R3 + 1, SERP_SKULL_SPELL_RATE, &AF(DoSerpMove), &s_SerpSkullSpell[3][7]}, + {SERP_SPELL_R3 + 2, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[3][1]}, + {SERP_SPELL_R3 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[3][2]}, + {SERP_SPELL_R3 + 0, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[3][3]}, + {SERP_SPELL_R3 + 0, SF_QUICK_CALL, InitSerpRing, &s_SerpSkullSpell[3][4]}, + {SERP_SPELL_R3 + 0, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[3][5]}, + {SERP_SPELL_R3 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[3][6]}, + {SERP_SPELL_R3 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSkullSpell[3][7]}, + {SERP_SPELL_R3 + 1, SERP_SKULL_SPELL_RATE, DoSerpMove, &s_SerpSkullSpell[3][7]}, }, { - {SERP_SPELL_R4 + 2, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[4][1]}, - {SERP_SPELL_R4 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[4][2]}, - {SERP_SPELL_R4 + 0, SERP_SKULL_SPELL_RATE*2, &AF(NullSerp), &s_SerpSkullSpell[4][3]}, - {SERP_SPELL_R4 + 0, SF_QUICK_CALL, &AF(InitSerpRing), &s_SerpSkullSpell[4][4]}, - {SERP_SPELL_R4 + 0, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[4][5]}, - {SERP_SPELL_R4 + 1, SERP_SKULL_SPELL_RATE, &AF(NullSerp), &s_SerpSkullSpell[4][6]}, - {SERP_SPELL_R4 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSkullSpell[4][7]}, - {SERP_SPELL_R4 + 1, SERP_SKULL_SPELL_RATE, &AF(DoSerpMove), &s_SerpSkullSpell[4][7]}, + {SERP_SPELL_R4 + 2, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[4][1]}, + {SERP_SPELL_R4 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[4][2]}, + {SERP_SPELL_R4 + 0, SERP_SKULL_SPELL_RATE*2, NullSerp, &s_SerpSkullSpell[4][3]}, + {SERP_SPELL_R4 + 0, SF_QUICK_CALL, InitSerpRing, &s_SerpSkullSpell[4][4]}, + {SERP_SPELL_R4 + 0, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[4][5]}, + {SERP_SPELL_R4 + 1, SERP_SKULL_SPELL_RATE, NullSerp, &s_SerpSkullSpell[4][6]}, + {SERP_SPELL_R4 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSkullSpell[4][7]}, + {SERP_SPELL_R4 + 1, SERP_SKULL_SPELL_RATE, DoSerpMove, &s_SerpSkullSpell[4][7]}, } }; @@ -336,58 +343,59 @@ STATE* sg_SerpSkullSpell[] = ////////////////////// #define SERP_SPELL_RATE 18 +ANIMATOR InitSerpSpell; STATE s_SerpSpell[5][8] = { { - {SERP_SPELL_R0 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[0][1]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[0][2]}, - {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[0][3]}, - {SERP_SPELL_R0 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpSpell[0][4]}, - {SERP_SPELL_R0 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[0][5]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[0][6]}, - {SERP_SPELL_R0 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSpell[0][7]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpSpell[0][7]}, + {SERP_SPELL_R0 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[0][1]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[0][2]}, + {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[0][3]}, + {SERP_SPELL_R0 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpSpell[0][4]}, + {SERP_SPELL_R0 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[0][5]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[0][6]}, + {SERP_SPELL_R0 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSpell[0][7]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpSpell[0][7]}, }, { - {SERP_SPELL_R1 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[1][1]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[1][2]}, - {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[1][3]}, - {SERP_SPELL_R1 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpSpell[1][4]}, - {SERP_SPELL_R1 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[1][5]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[1][6]}, - {SERP_SPELL_R1 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSpell[1][7]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpSpell[1][7]}, + {SERP_SPELL_R1 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[1][1]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[1][2]}, + {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[1][3]}, + {SERP_SPELL_R1 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpSpell[1][4]}, + {SERP_SPELL_R1 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[1][5]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[1][6]}, + {SERP_SPELL_R1 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSpell[1][7]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpSpell[1][7]}, }, { - {SERP_SPELL_R2 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[2][1]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[2][2]}, - {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[2][3]}, - {SERP_SPELL_R2 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpSpell[2][4]}, - {SERP_SPELL_R2 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[2][5]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[2][6]}, - {SERP_SPELL_R2 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSpell[2][7]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpSpell[2][7]}, + {SERP_SPELL_R2 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[2][1]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[2][2]}, + {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[2][3]}, + {SERP_SPELL_R2 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpSpell[2][4]}, + {SERP_SPELL_R2 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[2][5]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[2][6]}, + {SERP_SPELL_R2 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSpell[2][7]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpSpell[2][7]}, }, { - {SERP_SPELL_R3 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[3][1]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[3][2]}, - {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[3][3]}, - {SERP_SPELL_R3 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpSpell[3][4]}, - {SERP_SPELL_R3 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[3][5]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[3][6]}, - {SERP_SPELL_R3 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSpell[3][7]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpSpell[3][7]}, + {SERP_SPELL_R3 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[3][1]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[3][2]}, + {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[3][3]}, + {SERP_SPELL_R3 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpSpell[3][4]}, + {SERP_SPELL_R3 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[3][5]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[3][6]}, + {SERP_SPELL_R3 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSpell[3][7]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpSpell[3][7]}, }, { - {SERP_SPELL_R4 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[4][1]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[4][2]}, - {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpSpell[4][3]}, - {SERP_SPELL_R4 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpSpell[4][4]}, - {SERP_SPELL_R4 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[4][5]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpSpell[4][6]}, - {SERP_SPELL_R4 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpSpell[4][7]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpSpell[4][7]}, + {SERP_SPELL_R4 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[4][1]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[4][2]}, + {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpSpell[4][3]}, + {SERP_SPELL_R4 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpSpell[4][4]}, + {SERP_SPELL_R4 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[4][5]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpSpell[4][6]}, + {SERP_SPELL_R4 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpSpell[4][7]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpSpell[4][7]}, } }; @@ -407,57 +415,59 @@ STATE* sg_SerpSpell[] = // ////////////////////// +ANIMATOR InitSerpMonstSpell; + STATE s_SerpMonstSpell[5][8] = { { - {SERP_SPELL_R0 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[0][1]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[0][2]}, - {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[0][3]}, - {SERP_SPELL_R0 + 0, SF_QUICK_CALL, &AF(InitSerpMonstSpell), &s_SerpMonstSpell[0][4]}, - {SERP_SPELL_R0 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[0][5]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[0][6]}, - {SERP_SPELL_R0 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpMonstSpell[0][7]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpMonstSpell[0][7]}, + {SERP_SPELL_R0 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[0][1]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[0][2]}, + {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[0][3]}, + {SERP_SPELL_R0 + 0, SF_QUICK_CALL, InitSerpMonstSpell, &s_SerpMonstSpell[0][4]}, + {SERP_SPELL_R0 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[0][5]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[0][6]}, + {SERP_SPELL_R0 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpMonstSpell[0][7]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpMonstSpell[0][7]}, }, { - {SERP_SPELL_R1 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[1][1]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[1][2]}, - {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[1][3]}, - {SERP_SPELL_R1 + 0, SF_QUICK_CALL, &AF(InitSerpMonstSpell), &s_SerpMonstSpell[1][4]}, - {SERP_SPELL_R1 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[1][5]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[1][6]}, - {SERP_SPELL_R1 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpMonstSpell[1][7]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpMonstSpell[1][7]}, + {SERP_SPELL_R1 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[1][1]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[1][2]}, + {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[1][3]}, + {SERP_SPELL_R1 + 0, SF_QUICK_CALL, InitSerpMonstSpell, &s_SerpMonstSpell[1][4]}, + {SERP_SPELL_R1 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[1][5]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[1][6]}, + {SERP_SPELL_R1 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpMonstSpell[1][7]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpMonstSpell[1][7]}, }, { - {SERP_SPELL_R2 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[2][1]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[2][2]}, - {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[2][3]}, - {SERP_SPELL_R2 + 0, SF_QUICK_CALL, &AF(InitSerpMonstSpell), &s_SerpMonstSpell[2][4]}, - {SERP_SPELL_R2 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[2][5]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[2][6]}, - {SERP_SPELL_R2 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpMonstSpell[2][7]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpMonstSpell[2][7]}, + {SERP_SPELL_R2 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[2][1]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[2][2]}, + {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[2][3]}, + {SERP_SPELL_R2 + 0, SF_QUICK_CALL, InitSerpMonstSpell, &s_SerpMonstSpell[2][4]}, + {SERP_SPELL_R2 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[2][5]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[2][6]}, + {SERP_SPELL_R2 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpMonstSpell[2][7]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpMonstSpell[2][7]}, }, { - {SERP_SPELL_R3 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[3][1]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[3][2]}, - {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[3][3]}, - {SERP_SPELL_R3 + 0, SF_QUICK_CALL, &AF(InitSerpMonstSpell), &s_SerpMonstSpell[3][4]}, - {SERP_SPELL_R3 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[3][5]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[3][6]}, - {SERP_SPELL_R3 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpMonstSpell[3][7]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpMonstSpell[3][7]}, + {SERP_SPELL_R3 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[3][1]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[3][2]}, + {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[3][3]}, + {SERP_SPELL_R3 + 0, SF_QUICK_CALL, InitSerpMonstSpell, &s_SerpMonstSpell[3][4]}, + {SERP_SPELL_R3 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[3][5]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[3][6]}, + {SERP_SPELL_R3 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpMonstSpell[3][7]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpMonstSpell[3][7]}, }, { - {SERP_SPELL_R4 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[4][1]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[4][2]}, - {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpMonstSpell[4][3]}, - {SERP_SPELL_R4 + 0, SF_QUICK_CALL, &AF(InitSerpMonstSpell), &s_SerpMonstSpell[4][4]}, - {SERP_SPELL_R4 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[4][5]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpMonstSpell[4][6]}, - {SERP_SPELL_R4 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpMonstSpell[4][7]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpMonstSpell[4][7]}, + {SERP_SPELL_R4 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[4][1]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[4][2]}, + {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpMonstSpell[4][3]}, + {SERP_SPELL_R4 + 0, SF_QUICK_CALL, InitSerpMonstSpell, &s_SerpMonstSpell[4][4]}, + {SERP_SPELL_R4 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[4][5]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpMonstSpell[4][6]}, + {SERP_SPELL_R4 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpMonstSpell[4][7]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpMonstSpell[4][7]}, } }; @@ -479,68 +489,69 @@ STATE* sg_SerpMonstSpell[] = ////////////////////// #define SERP_SPELL_RATE 18 +ANIMATOR InitSerpRapidSpell; STATE s_SerpRapidSpell[5][10] = { { - {SERP_SPELL_R0 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[0][1]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[0][2]}, - {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[0][3]}, - {SERP_SPELL_R0 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[0][4]}, - {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[0][5]}, - {SERP_SPELL_R0 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[0][6]}, - {SERP_SPELL_R0 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[0][7]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[0][8]}, - {SERP_SPELL_R0 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpRapidSpell[0][9]}, - {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpRapidSpell[0][9]}, + {SERP_SPELL_R0 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[0][1]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[0][2]}, + {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[0][3]}, + {SERP_SPELL_R0 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[0][4]}, + {SERP_SPELL_R0 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[0][5]}, + {SERP_SPELL_R0 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[0][6]}, + {SERP_SPELL_R0 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[0][7]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[0][8]}, + {SERP_SPELL_R0 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpRapidSpell[0][9]}, + {SERP_SPELL_R0 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpRapidSpell[0][9]}, }, { - {SERP_SPELL_R1 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[1][1]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[1][2]}, - {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[1][3]}, - {SERP_SPELL_R1 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[1][4]}, - {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[1][5]}, - {SERP_SPELL_R1 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[1][6]}, - {SERP_SPELL_R1 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[1][7]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[1][8]}, - {SERP_SPELL_R1 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpRapidSpell[1][9]}, - {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpRapidSpell[1][9]}, + {SERP_SPELL_R1 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[1][1]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[1][2]}, + {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[1][3]}, + {SERP_SPELL_R1 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[1][4]}, + {SERP_SPELL_R1 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[1][5]}, + {SERP_SPELL_R1 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[1][6]}, + {SERP_SPELL_R1 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[1][7]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[1][8]}, + {SERP_SPELL_R1 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpRapidSpell[1][9]}, + {SERP_SPELL_R1 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpRapidSpell[1][9]}, }, { - {SERP_SPELL_R2 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[2][1]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[2][2]}, - {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[2][3]}, - {SERP_SPELL_R2 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[2][4]}, - {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[2][5]}, - {SERP_SPELL_R2 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[2][6]}, - {SERP_SPELL_R2 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[2][7]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[2][8]}, - {SERP_SPELL_R2 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpRapidSpell[2][9]}, - {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpRapidSpell[2][9]}, + {SERP_SPELL_R2 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[2][1]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[2][2]}, + {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[2][3]}, + {SERP_SPELL_R2 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[2][4]}, + {SERP_SPELL_R2 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[2][5]}, + {SERP_SPELL_R2 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[2][6]}, + {SERP_SPELL_R2 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[2][7]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[2][8]}, + {SERP_SPELL_R2 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpRapidSpell[2][9]}, + {SERP_SPELL_R2 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpRapidSpell[2][9]}, }, { - {SERP_SPELL_R3 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[3][1]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[3][2]}, - {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[3][3]}, - {SERP_SPELL_R3 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[3][4]}, - {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[3][5]}, - {SERP_SPELL_R3 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[3][6]}, - {SERP_SPELL_R3 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[3][7]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[3][8]}, - {SERP_SPELL_R3 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpRapidSpell[3][9]}, - {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpRapidSpell[3][9]}, + {SERP_SPELL_R3 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[3][1]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[3][2]}, + {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[3][3]}, + {SERP_SPELL_R3 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[3][4]}, + {SERP_SPELL_R3 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[3][5]}, + {SERP_SPELL_R3 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[3][6]}, + {SERP_SPELL_R3 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[3][7]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[3][8]}, + {SERP_SPELL_R3 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpRapidSpell[3][9]}, + {SERP_SPELL_R3 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpRapidSpell[3][9]}, }, { - {SERP_SPELL_R4 + 2, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[4][1]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[4][2]}, - {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[4][3]}, - {SERP_SPELL_R4 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[4][4]}, - {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, &AF(NullSerp), &s_SerpRapidSpell[4][5]}, - {SERP_SPELL_R4 + 0, SF_QUICK_CALL, &AF(InitSerpSpell), &s_SerpRapidSpell[4][6]}, - {SERP_SPELL_R4 + 0, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[4][7]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(NullSerp), &s_SerpRapidSpell[4][8]}, - {SERP_SPELL_R4 + 1, SF_QUICK_CALL, &AF(InitActorDecide), &s_SerpRapidSpell[4][9]}, - {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, &AF(DoSerpMove), &s_SerpRapidSpell[4][9]}, + {SERP_SPELL_R4 + 2, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[4][1]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[4][2]}, + {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[4][3]}, + {SERP_SPELL_R4 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[4][4]}, + {SERP_SPELL_R4 + 0, SERP_SPELL_RATE*2, NullSerp, &s_SerpRapidSpell[4][5]}, + {SERP_SPELL_R4 + 0, SF_QUICK_CALL, InitSerpSpell, &s_SerpRapidSpell[4][6]}, + {SERP_SPELL_R4 + 0, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[4][7]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, NullSerp, &s_SerpRapidSpell[4][8]}, + {SERP_SPELL_R4 + 1, SF_QUICK_CALL, InitActorDecide, &s_SerpRapidSpell[4][9]}, + {SERP_SPELL_R4 + 1, SERP_SPELL_RATE, DoSerpMove, &s_SerpRapidSpell[4][9]}, } }; @@ -565,19 +576,19 @@ STATE* sg_SerpRapidSpell[] = STATE s_SerpStand[5][1] = { { - {SERP_RUN_R0 + 0, SERP_STAND_RATE, &AF(DoSerpMove), &s_SerpStand[0][0]}, + {SERP_RUN_R0 + 0, SERP_STAND_RATE, DoSerpMove, &s_SerpStand[0][0]}, }, { - {SERP_RUN_R1 + 0, SERP_STAND_RATE, &AF(DoSerpMove), &s_SerpStand[1][0]}, + {SERP_RUN_R1 + 0, SERP_STAND_RATE, DoSerpMove, &s_SerpStand[1][0]}, }, { - {SERP_RUN_R2 + 0, SERP_STAND_RATE, &AF(DoSerpMove), &s_SerpStand[2][0]}, + {SERP_RUN_R2 + 0, SERP_STAND_RATE, DoSerpMove, &s_SerpStand[2][0]}, }, { - {SERP_RUN_R3 + 0, SERP_STAND_RATE, &AF(DoSerpMove), &s_SerpStand[3][0]}, + {SERP_RUN_R3 + 0, SERP_STAND_RATE, DoSerpMove, &s_SerpStand[3][0]}, }, { - {SERP_RUN_R4 + 0, SERP_STAND_RATE, &AF(DoSerpMove), &s_SerpStand[4][0]}, + {SERP_RUN_R4 + 0, SERP_STAND_RATE, DoSerpMove, &s_SerpStand[4][0]}, }, }; @@ -598,25 +609,26 @@ STATE* sg_SerpStand[] = ////////////////////// #define SERP_DIE_RATE 20 +ANIMATOR DoDeathSpecial; STATE s_SerpDie[] = { - {SERP_DIE + 0, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[1]}, - {SERP_DIE + 1, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[2]}, - {SERP_DIE + 2, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[3]}, - {SERP_DIE + 3, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[4]}, - {SERP_DIE + 4, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[5]}, - {SERP_DIE + 5, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[6]}, - {SERP_DIE + 6, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[7]}, - {SERP_DIE + 7, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[8]}, - {SERP_DIE + 8, SERP_DIE_RATE, &AF(NullSerp), &s_SerpDie[9]}, - {SERP_DIE + 8, SF_QUICK_CALL, &AF(DoDeathSpecial), &s_SerpDie[10]}, - {SERP_DEAD, SERP_DIE_RATE, &AF(DoActorDebris), &s_SerpDie[10]} + {SERP_DIE + 0, SERP_DIE_RATE, NullSerp, &s_SerpDie[1]}, + {SERP_DIE + 1, SERP_DIE_RATE, NullSerp, &s_SerpDie[2]}, + {SERP_DIE + 2, SERP_DIE_RATE, NullSerp, &s_SerpDie[3]}, + {SERP_DIE + 3, SERP_DIE_RATE, NullSerp, &s_SerpDie[4]}, + {SERP_DIE + 4, SERP_DIE_RATE, NullSerp, &s_SerpDie[5]}, + {SERP_DIE + 5, SERP_DIE_RATE, NullSerp, &s_SerpDie[6]}, + {SERP_DIE + 6, SERP_DIE_RATE, NullSerp, &s_SerpDie[7]}, + {SERP_DIE + 7, SERP_DIE_RATE, NullSerp, &s_SerpDie[8]}, + {SERP_DIE + 8, SERP_DIE_RATE, NullSerp, &s_SerpDie[9]}, + {SERP_DIE + 8, SF_QUICK_CALL, DoDeathSpecial, &s_SerpDie[10]}, + {SERP_DEAD, SERP_DIE_RATE, DoActorDebris, &s_SerpDie[10]} }; STATE s_SerpDead[] = { - {SERP_DEAD, SERP_DIE_RATE, &AF(DoActorDebris), &s_SerpDead[0]}, + {SERP_DEAD, SERP_DIE_RATE, DoActorDebris, &s_SerpDead[0]}, }; STATE* sg_SerpDie[] = @@ -683,6 +695,8 @@ ACTOR_ACTION_SET SerpActionSet = int SetupSerp(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,SERP_RUN_R0,s_SerpRun[0]); @@ -693,10 +707,10 @@ int SetupSerp(DSWActor* actor) if (Skill == 1) actor->user.Health = 2200; ChangeState(actor, s_SerpRun[0]); - actor->user.__legacyState.Attrib = &SerpAttrib; + actor->user.Attrib = &SerpAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_SerpDie; - actor->user.__legacyState.Rot = sg_SerpRun; + actor->user.StateEnd = s_SerpDie; + actor->user.Rot = sg_SerpRun; EnemyDefaults(actor, &SerpActionSet, &SerpPersonality); @@ -727,13 +741,6 @@ int SetupSerp(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWSerpent, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupSerp(self); - return 0; -} - int NullSerp(DSWActor* actor) { if (actor->user.Flags & (SPR_SLIDING)) @@ -753,7 +760,7 @@ int DoSerpMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); // serp ring if (actor->spr.pal != 16) @@ -800,8 +807,23 @@ int DoDeathSpecial(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_serp_code[] = +{ + SAVE_CODE(NullSerp), + SAVE_CODE(DoSerpMove), + SAVE_CODE(DoDeathSpecial), +}; + static saveable_data saveable_serp_data[] = { + SAVE_DATA(SerpBattle), + SAVE_DATA(SerpOffense), + SAVE_DATA(SerpBroadcast), + SAVE_DATA(SerpSurprised), + SAVE_DATA(SerpEvasive), + SAVE_DATA(SerpLostTarget), + SAVE_DATA(SerpCloseRange), + SAVE_DATA(SerpPersonality), SAVE_DATA(SerpAttrib), @@ -832,7 +854,8 @@ static saveable_data saveable_serp_data[] = saveable_module saveable_serp = { // code - nullptr, 0, + saveable_serp_code, + SIZ(saveable_serp_code), // data saveable_serp_data, diff --git a/source/games/sw/src/skel.cpp b/source/games/sw/src/skel.cpp index 239f2808dc6..ee747d9b874 100644 --- a/source/games/sw/src/skel.cpp +++ b/source/games/sw/src/skel.cpp @@ -36,49 +36,49 @@ BEGIN_SW_NS DECISION SkelBattle[] = { - {600, &AF(InitActorMoveCloser) }, - {602, &AF(InitActorSetDecide) }, - {700, &AF(InitActorRunAway ) }, - {1024, &AF(InitActorAttack ) } + {600, InitActorMoveCloser }, + {602, InitActorAlertNoise }, + {700, InitActorRunAway }, + {1024, InitActorAttack } }; DECISION SkelOffense[] = { - {700, &AF(InitActorMoveCloser) }, - {702, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {700, InitActorMoveCloser }, + {702, InitActorAlertNoise }, + {1024, InitActorAttack } }; -DECISIONB SkelBroadcast[] = +DECISION SkelBroadcast[] = { - {3, attr_alert }, - {6, attr_ambient }, - {1024, 0 } + {3, InitActorAlertNoise }, + {6, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION SkelSurprised[] = { - {701, &AF(InitActorMoveCloser) }, - {1024, &AF(InitActorDecide ) } + {701, InitActorMoveCloser }, + {1024, InitActorDecide } }; DECISION SkelEvasive[] = { - {22, &AF(InitActorDuck ) }, - {30, &AF(InitActorEvade) }, + {22, InitActorDuck }, + {30, InitActorEvade }, {1024, nullptr }, }; DECISION SkelLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION SkelCloseRange[] = { - {800, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {800, InitActorAttack }, + {1024, InitActorReposition } }; PERSONALITY SkelPersonality = @@ -113,49 +113,51 @@ ATTRIBUTE SkelAttrib = #define SKEL_RUN_RATE 12 +ANIMATOR DoSkelMove,NullSkel,DoActorDebris,NullSkel,DoSuicide,InitSkelSpell; + // +4 on frame #3 to add character STATE s_SkelRun[5][6] = { { - {SKEL_RUN_R0 + 0, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[0][1]}, - {SKEL_RUN_R0 + 1, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[0][2]}, - {SKEL_RUN_R0 + 2, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[0][3]}, - {SKEL_RUN_R0 + 3, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[0][4]}, - {SKEL_RUN_R0 + 4, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[0][5]}, - {SKEL_RUN_R0 + 5, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[0][0]}, + {SKEL_RUN_R0 + 0, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[0][1]}, + {SKEL_RUN_R0 + 1, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[0][2]}, + {SKEL_RUN_R0 + 2, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[0][3]}, + {SKEL_RUN_R0 + 3, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[0][4]}, + {SKEL_RUN_R0 + 4, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[0][5]}, + {SKEL_RUN_R0 + 5, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[0][0]}, }, { - {SKEL_RUN_R1 + 0, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[1][1]}, - {SKEL_RUN_R1 + 1, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[1][2]}, - {SKEL_RUN_R1 + 2, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[1][3]}, - {SKEL_RUN_R1 + 3, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[1][4]}, - {SKEL_RUN_R1 + 4, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[1][5]}, - {SKEL_RUN_R1 + 5, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[1][0]}, + {SKEL_RUN_R1 + 0, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[1][1]}, + {SKEL_RUN_R1 + 1, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[1][2]}, + {SKEL_RUN_R1 + 2, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[1][3]}, + {SKEL_RUN_R1 + 3, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[1][4]}, + {SKEL_RUN_R1 + 4, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[1][5]}, + {SKEL_RUN_R1 + 5, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[1][0]}, }, { - {SKEL_RUN_R2 + 0, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[2][1]}, - {SKEL_RUN_R2 + 1, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[2][2]}, - {SKEL_RUN_R2 + 2, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[2][3]}, - {SKEL_RUN_R2 + 3, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[2][4]}, - {SKEL_RUN_R2 + 4, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[2][5]}, - {SKEL_RUN_R2 + 5, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[2][0]}, + {SKEL_RUN_R2 + 0, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[2][1]}, + {SKEL_RUN_R2 + 1, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[2][2]}, + {SKEL_RUN_R2 + 2, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[2][3]}, + {SKEL_RUN_R2 + 3, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[2][4]}, + {SKEL_RUN_R2 + 4, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[2][5]}, + {SKEL_RUN_R2 + 5, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[2][0]}, }, { - {SKEL_RUN_R3 + 0, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[3][1]}, - {SKEL_RUN_R3 + 1, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[3][2]}, - {SKEL_RUN_R3 + 2, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[3][3]}, - {SKEL_RUN_R3 + 3, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[3][4]}, - {SKEL_RUN_R3 + 4, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[3][5]}, - {SKEL_RUN_R3 + 5, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[3][0]}, + {SKEL_RUN_R3 + 0, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[3][1]}, + {SKEL_RUN_R3 + 1, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[3][2]}, + {SKEL_RUN_R3 + 2, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[3][3]}, + {SKEL_RUN_R3 + 3, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[3][4]}, + {SKEL_RUN_R3 + 4, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[3][5]}, + {SKEL_RUN_R3 + 5, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[3][0]}, }, { - {SKEL_RUN_R4 + 0, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[4][1]}, - {SKEL_RUN_R4 + 1, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[4][2]}, - {SKEL_RUN_R4 + 2, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[4][3]}, - {SKEL_RUN_R4 + 3, SKEL_RUN_RATE+4, &AF(DoSkelMove), &s_SkelRun[4][4]}, - {SKEL_RUN_R4 + 4, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[4][5]}, - {SKEL_RUN_R4 + 5, SKEL_RUN_RATE, &AF(DoSkelMove), &s_SkelRun[4][0]}, + {SKEL_RUN_R4 + 0, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[4][1]}, + {SKEL_RUN_R4 + 1, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[4][2]}, + {SKEL_RUN_R4 + 2, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[4][3]}, + {SKEL_RUN_R4 + 3, SKEL_RUN_RATE+4, DoSkelMove, &s_SkelRun[4][4]}, + {SKEL_RUN_R4 + 4, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[4][5]}, + {SKEL_RUN_R4 + 5, SKEL_RUN_RATE, DoSkelMove, &s_SkelRun[4][0]}, } }; @@ -176,53 +178,55 @@ STATE* sg_SkelRun[] = ////////////////////// #define SKEL_SLASH_RATE 20 +ANIMATOR InitActorDecide; +ANIMATOR InitSkelSlash; STATE s_SkelSlash[5][7] = { { - {SKEL_SLASH_R0 + 0, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[0][1]}, - {SKEL_SLASH_R0 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[0][2]}, - {SKEL_SLASH_R0 + 2, 0|SF_QUICK_CALL, &AF(InitSkelSlash), &s_SkelSlash[0][3]}, - {SKEL_SLASH_R0 + 2, SKEL_SLASH_RATE*2, &AF(NullSkel), &s_SkelSlash[0][4]}, - {SKEL_SLASH_R0 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[0][5]}, - {SKEL_SLASH_R0 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSlash[0][6]}, - {SKEL_SLASH_R0 + 1, SKEL_SLASH_RATE, &AF(DoSkelMove), &s_SkelSlash[0][6]}, + {SKEL_SLASH_R0 + 0, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[0][1]}, + {SKEL_SLASH_R0 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[0][2]}, + {SKEL_SLASH_R0 + 2, 0|SF_QUICK_CALL, InitSkelSlash, &s_SkelSlash[0][3]}, + {SKEL_SLASH_R0 + 2, SKEL_SLASH_RATE*2, NullSkel, &s_SkelSlash[0][4]}, + {SKEL_SLASH_R0 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[0][5]}, + {SKEL_SLASH_R0 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSlash[0][6]}, + {SKEL_SLASH_R0 + 1, SKEL_SLASH_RATE, DoSkelMove, &s_SkelSlash[0][6]}, }, { - {SKEL_SLASH_R1 + 0, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[1][1]}, - {SKEL_SLASH_R1 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[1][2]}, - {SKEL_SLASH_R1 + 2, 0|SF_QUICK_CALL, &AF(InitSkelSlash), &s_SkelSlash[1][3]}, - {SKEL_SLASH_R1 + 2, SKEL_SLASH_RATE*2, &AF(NullSkel), &s_SkelSlash[1][4]}, - {SKEL_SLASH_R1 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[1][5]}, - {SKEL_SLASH_R1 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSlash[1][6]}, - {SKEL_SLASH_R1 + 1, SKEL_SLASH_RATE, &AF(DoSkelMove), &s_SkelSlash[1][6]}, + {SKEL_SLASH_R1 + 0, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[1][1]}, + {SKEL_SLASH_R1 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[1][2]}, + {SKEL_SLASH_R1 + 2, 0|SF_QUICK_CALL, InitSkelSlash, &s_SkelSlash[1][3]}, + {SKEL_SLASH_R1 + 2, SKEL_SLASH_RATE*2, NullSkel, &s_SkelSlash[1][4]}, + {SKEL_SLASH_R1 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[1][5]}, + {SKEL_SLASH_R1 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSlash[1][6]}, + {SKEL_SLASH_R1 + 1, SKEL_SLASH_RATE, DoSkelMove, &s_SkelSlash[1][6]}, }, { - {SKEL_SLASH_R2 + 0, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[2][1]}, - {SKEL_SLASH_R2 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[2][2]}, - {SKEL_SLASH_R2 + 2, 0|SF_QUICK_CALL, &AF(InitSkelSlash), &s_SkelSlash[2][3]}, - {SKEL_SLASH_R2 + 2, SKEL_SLASH_RATE*2, &AF(NullSkel), &s_SkelSlash[2][4]}, - {SKEL_SLASH_R2 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[2][5]}, - {SKEL_SLASH_R2 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSlash[2][6]}, - {SKEL_SLASH_R2 + 1, SKEL_SLASH_RATE, &AF(DoSkelMove), &s_SkelSlash[2][6]}, + {SKEL_SLASH_R2 + 0, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[2][1]}, + {SKEL_SLASH_R2 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[2][2]}, + {SKEL_SLASH_R2 + 2, 0|SF_QUICK_CALL, InitSkelSlash, &s_SkelSlash[2][3]}, + {SKEL_SLASH_R2 + 2, SKEL_SLASH_RATE*2, NullSkel, &s_SkelSlash[2][4]}, + {SKEL_SLASH_R2 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[2][5]}, + {SKEL_SLASH_R2 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSlash[2][6]}, + {SKEL_SLASH_R2 + 1, SKEL_SLASH_RATE, DoSkelMove, &s_SkelSlash[2][6]}, }, { - {SKEL_SLASH_R3 + 0, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[3][1]}, - {SKEL_SLASH_R3 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[3][2]}, - {SKEL_SLASH_R3 + 2, 0|SF_QUICK_CALL, &AF(InitSkelSlash), &s_SkelSlash[3][3]}, - {SKEL_SLASH_R3 + 2, SKEL_SLASH_RATE*2, &AF(NullSkel), &s_SkelSlash[3][4]}, - {SKEL_SLASH_R3 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[3][5]}, - {SKEL_SLASH_R3 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSlash[3][6]}, - {SKEL_SLASH_R3 + 1, SKEL_SLASH_RATE, &AF(DoSkelMove), &s_SkelSlash[3][6]}, + {SKEL_SLASH_R3 + 0, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[3][1]}, + {SKEL_SLASH_R3 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[3][2]}, + {SKEL_SLASH_R3 + 2, 0|SF_QUICK_CALL, InitSkelSlash, &s_SkelSlash[3][3]}, + {SKEL_SLASH_R3 + 2, SKEL_SLASH_RATE*2, NullSkel, &s_SkelSlash[3][4]}, + {SKEL_SLASH_R3 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[3][5]}, + {SKEL_SLASH_R3 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSlash[3][6]}, + {SKEL_SLASH_R3 + 1, SKEL_SLASH_RATE, DoSkelMove, &s_SkelSlash[3][6]}, }, { - {SKEL_SLASH_R4 + 0, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[4][1]}, - {SKEL_SLASH_R4 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[4][2]}, - {SKEL_SLASH_R4 + 2, 0|SF_QUICK_CALL, &AF(InitSkelSlash), &s_SkelSlash[4][3]}, - {SKEL_SLASH_R4 + 2, SKEL_SLASH_RATE*2, &AF(NullSkel), &s_SkelSlash[4][4]}, - {SKEL_SLASH_R4 + 1, SKEL_SLASH_RATE, &AF(NullSkel), &s_SkelSlash[4][5]}, - {SKEL_SLASH_R4 + 1, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSlash[4][6]}, - {SKEL_SLASH_R4 + 1, SKEL_SLASH_RATE, &AF(DoSkelMove), &s_SkelSlash[4][6]}, + {SKEL_SLASH_R4 + 0, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[4][1]}, + {SKEL_SLASH_R4 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[4][2]}, + {SKEL_SLASH_R4 + 2, 0|SF_QUICK_CALL, InitSkelSlash, &s_SkelSlash[4][3]}, + {SKEL_SLASH_R4 + 2, SKEL_SLASH_RATE*2, NullSkel, &s_SkelSlash[4][4]}, + {SKEL_SLASH_R4 + 1, SKEL_SLASH_RATE, NullSkel, &s_SkelSlash[4][5]}, + {SKEL_SLASH_R4 + 1, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSlash[4][6]}, + {SKEL_SLASH_R4 + 1, SKEL_SLASH_RATE, DoSkelMove, &s_SkelSlash[4][6]}, } }; @@ -248,49 +252,49 @@ STATE* sg_SkelSlash[] = STATE s_SkelSpell[5][7] = { { - {SKEL_SPELL_R0 + 0, SKEL_SPELL_RATE+9, &AF(NullSkel), &s_SkelSpell[0][1]}, - {SKEL_SPELL_R0 + 1, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[0][2]}, - {SKEL_SPELL_R0 + 2, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[0][3]}, - {SKEL_SPELL_R0 + 3, SKEL_SPELL_RATE*2, &AF(NullSkel), &s_SkelSpell[0][4]}, - {SKEL_SPELL_R0 + 3, 0|SF_QUICK_CALL, &AF(InitSkelSpell), &s_SkelSpell[0][5]}, - {SKEL_SPELL_R0 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSpell[0][6]}, - {SKEL_SPELL_R0 + 3, SKEL_SPELL_RATE, &AF(DoSkelMove), &s_SkelSpell[0][6]}, + {SKEL_SPELL_R0 + 0, SKEL_SPELL_RATE+9, NullSkel, &s_SkelSpell[0][1]}, + {SKEL_SPELL_R0 + 1, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[0][2]}, + {SKEL_SPELL_R0 + 2, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[0][3]}, + {SKEL_SPELL_R0 + 3, SKEL_SPELL_RATE*2, NullSkel, &s_SkelSpell[0][4]}, + {SKEL_SPELL_R0 + 3, 0|SF_QUICK_CALL, InitSkelSpell, &s_SkelSpell[0][5]}, + {SKEL_SPELL_R0 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSpell[0][6]}, + {SKEL_SPELL_R0 + 3, SKEL_SPELL_RATE, DoSkelMove, &s_SkelSpell[0][6]}, }, { - {SKEL_SPELL_R1 + 0, SKEL_SPELL_RATE+9, &AF(NullSkel), &s_SkelSpell[1][1]}, - {SKEL_SPELL_R1 + 1, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[1][2]}, - {SKEL_SPELL_R1 + 2, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[1][3]}, - {SKEL_SPELL_R1 + 3, SKEL_SPELL_RATE*2, &AF(NullSkel), &s_SkelSpell[1][4]}, - {SKEL_SPELL_R1 + 3, 0|SF_QUICK_CALL, &AF(InitSkelSpell), &s_SkelSpell[1][5]}, - {SKEL_SPELL_R1 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSpell[1][6]}, - {SKEL_SPELL_R1 + 3, SKEL_SPELL_RATE, &AF(DoSkelMove), &s_SkelSpell[1][6]}, + {SKEL_SPELL_R1 + 0, SKEL_SPELL_RATE+9, NullSkel, &s_SkelSpell[1][1]}, + {SKEL_SPELL_R1 + 1, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[1][2]}, + {SKEL_SPELL_R1 + 2, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[1][3]}, + {SKEL_SPELL_R1 + 3, SKEL_SPELL_RATE*2, NullSkel, &s_SkelSpell[1][4]}, + {SKEL_SPELL_R1 + 3, 0|SF_QUICK_CALL, InitSkelSpell, &s_SkelSpell[1][5]}, + {SKEL_SPELL_R1 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSpell[1][6]}, + {SKEL_SPELL_R1 + 3, SKEL_SPELL_RATE, DoSkelMove, &s_SkelSpell[1][6]}, }, { - {SKEL_SPELL_R2 + 0, SKEL_SPELL_RATE+9, &AF(NullSkel), &s_SkelSpell[2][1]}, - {SKEL_SPELL_R2 + 1, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[2][2]}, - {SKEL_SPELL_R2 + 2, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[2][3]}, - {SKEL_SPELL_R2 + 3, SKEL_SPELL_RATE*2, &AF(NullSkel), &s_SkelSpell[2][4]}, - {SKEL_SPELL_R2 + 3, 0|SF_QUICK_CALL, &AF(InitSkelSpell), &s_SkelSpell[2][5]}, - {SKEL_SPELL_R2 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSpell[2][6]}, - {SKEL_SPELL_R2 + 3, SKEL_SPELL_RATE, &AF(DoSkelMove), &s_SkelSpell[2][6]}, + {SKEL_SPELL_R2 + 0, SKEL_SPELL_RATE+9, NullSkel, &s_SkelSpell[2][1]}, + {SKEL_SPELL_R2 + 1, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[2][2]}, + {SKEL_SPELL_R2 + 2, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[2][3]}, + {SKEL_SPELL_R2 + 3, SKEL_SPELL_RATE*2, NullSkel, &s_SkelSpell[2][4]}, + {SKEL_SPELL_R2 + 3, 0|SF_QUICK_CALL, InitSkelSpell, &s_SkelSpell[2][5]}, + {SKEL_SPELL_R2 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSpell[2][6]}, + {SKEL_SPELL_R2 + 3, SKEL_SPELL_RATE, DoSkelMove, &s_SkelSpell[2][6]}, }, { - {SKEL_SPELL_R3 + 0, SKEL_SPELL_RATE+9, &AF(NullSkel), &s_SkelSpell[3][1]}, - {SKEL_SPELL_R3 + 1, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[3][2]}, - {SKEL_SPELL_R3 + 2, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[3][3]}, - {SKEL_SPELL_R3 + 3, SKEL_SPELL_RATE*2, &AF(NullSkel), &s_SkelSpell[3][4]}, - {SKEL_SPELL_R3 + 3, 0|SF_QUICK_CALL, &AF(InitSkelSpell), &s_SkelSpell[3][5]}, - {SKEL_SPELL_R3 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSpell[3][6]}, - {SKEL_SPELL_R3 + 3, SKEL_SPELL_RATE, &AF(DoSkelMove), &s_SkelSpell[3][6]}, + {SKEL_SPELL_R3 + 0, SKEL_SPELL_RATE+9, NullSkel, &s_SkelSpell[3][1]}, + {SKEL_SPELL_R3 + 1, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[3][2]}, + {SKEL_SPELL_R3 + 2, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[3][3]}, + {SKEL_SPELL_R3 + 3, SKEL_SPELL_RATE*2, NullSkel, &s_SkelSpell[3][4]}, + {SKEL_SPELL_R3 + 3, 0|SF_QUICK_CALL, InitSkelSpell, &s_SkelSpell[3][5]}, + {SKEL_SPELL_R3 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSpell[3][6]}, + {SKEL_SPELL_R3 + 3, SKEL_SPELL_RATE, DoSkelMove, &s_SkelSpell[3][6]}, }, { - {SKEL_SPELL_R4 + 0, SKEL_SPELL_RATE+9, &AF(NullSkel), &s_SkelSpell[4][1]}, - {SKEL_SPELL_R4 + 1, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[4][2]}, - {SKEL_SPELL_R4 + 2, SKEL_SPELL_RATE, &AF(NullSkel), &s_SkelSpell[4][3]}, - {SKEL_SPELL_R4 + 3, SKEL_SPELL_RATE*2, &AF(NullSkel), &s_SkelSpell[4][4]}, - {SKEL_SPELL_R4 + 3, 0|SF_QUICK_CALL, &AF(InitSkelSpell), &s_SkelSpell[4][5]}, - {SKEL_SPELL_R4 + 3, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelSpell[4][6]}, - {SKEL_SPELL_R4 + 3, SKEL_SPELL_RATE, &AF(DoSkelMove), &s_SkelSpell[4][6]}, + {SKEL_SPELL_R4 + 0, SKEL_SPELL_RATE+9, NullSkel, &s_SkelSpell[4][1]}, + {SKEL_SPELL_R4 + 1, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[4][2]}, + {SKEL_SPELL_R4 + 2, SKEL_SPELL_RATE, NullSkel, &s_SkelSpell[4][3]}, + {SKEL_SPELL_R4 + 3, SKEL_SPELL_RATE*2, NullSkel, &s_SkelSpell[4][4]}, + {SKEL_SPELL_R4 + 3, 0|SF_QUICK_CALL, InitSkelSpell, &s_SkelSpell[4][5]}, + {SKEL_SPELL_R4 + 3, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelSpell[4][6]}, + {SKEL_SPELL_R4 + 3, SKEL_SPELL_RATE, DoSkelMove, &s_SkelSpell[4][6]}, } }; @@ -311,23 +315,24 @@ STATE* sg_SkelSpell[] = ////////////////////// #define SKEL_PAIN_RATE 38 +ANIMATOR DoSkelPain; STATE s_SkelPain[5][1] = { { - {SKEL_PAIN_R0 + 0, SKEL_PAIN_RATE, &AF(DoSkelPain), &s_SkelPain[0][0]}, + {SKEL_PAIN_R0 + 0, SKEL_PAIN_RATE, DoSkelPain, &s_SkelPain[0][0]}, }, { - {SKEL_PAIN_R1 + 0, SKEL_PAIN_RATE, &AF(DoSkelPain), &s_SkelPain[1][0]}, + {SKEL_PAIN_R1 + 0, SKEL_PAIN_RATE, DoSkelPain, &s_SkelPain[1][0]}, }, { - {SKEL_PAIN_R2 + 0, SKEL_PAIN_RATE, &AF(DoSkelPain), &s_SkelPain[2][0]}, + {SKEL_PAIN_R2 + 0, SKEL_PAIN_RATE, DoSkelPain, &s_SkelPain[2][0]}, }, { - {SKEL_PAIN_R3 + 0, SKEL_PAIN_RATE, &AF(DoSkelPain), &s_SkelPain[3][0]}, + {SKEL_PAIN_R3 + 0, SKEL_PAIN_RATE, DoSkelPain, &s_SkelPain[3][0]}, }, { - {SKEL_PAIN_R4 + 0, SKEL_PAIN_RATE, &AF(DoSkelPain), &s_SkelPain[4][0]}, + {SKEL_PAIN_R4 + 0, SKEL_PAIN_RATE, DoSkelPain, &s_SkelPain[4][0]}, } }; @@ -348,29 +353,31 @@ STATE* sg_SkelPain[] = // ////////////////////// +ANIMATOR DoSkelInitTeleport, DoSkelTeleport, DoSkelTermTeleport; + #define SKEL_TELEPORT_RATE 20 STATE s_SkelTeleport[] = { - {SKEL_TELEPORT + 0, 1, nullptr, &s_SkelTeleport[1]}, - {SKEL_TELEPORT + 0, 0|SF_QUICK_CALL, &AF(DoSkelInitTeleport), &s_SkelTeleport[2]}, - {SKEL_TELEPORT + 0, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[3]}, - {SKEL_TELEPORT + 1, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[4]}, - {SKEL_TELEPORT + 2, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[5]}, - {SKEL_TELEPORT + 3, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[6]}, - {SKEL_TELEPORT + 4, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[7]}, - {SKEL_TELEPORT + 5, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[8]}, - - {SKEL_TELEPORT + 5, 0|SF_QUICK_CALL, &AF(DoSkelTeleport), &s_SkelTeleport[9]}, - - {SKEL_TELEPORT + 5, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[10]}, - {SKEL_TELEPORT + 4, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[11]}, - {SKEL_TELEPORT + 3, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[12]}, - {SKEL_TELEPORT + 2, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[13]}, - {SKEL_TELEPORT + 1, SKEL_TELEPORT_RATE, nullptr, &s_SkelTeleport[14]}, - {SKEL_TELEPORT + 0, SKEL_TELEPORT_RATE, &AF(DoSkelTermTeleport), &s_SkelTeleport[15]}, - {SKEL_TELEPORT + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SkelTeleport[16]}, - {SKEL_TELEPORT + 0, SKEL_TELEPORT_RATE, &AF(DoSkelMove), &s_SkelTeleport[16]}, + {SKEL_TELEPORT + 0, 1, NullAnimator, &s_SkelTeleport[1]}, + {SKEL_TELEPORT + 0, 0|SF_QUICK_CALL, DoSkelInitTeleport, &s_SkelTeleport[2]}, + {SKEL_TELEPORT + 0, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[3]}, + {SKEL_TELEPORT + 1, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[4]}, + {SKEL_TELEPORT + 2, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[5]}, + {SKEL_TELEPORT + 3, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[6]}, + {SKEL_TELEPORT + 4, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[7]}, + {SKEL_TELEPORT + 5, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[8]}, + + {SKEL_TELEPORT + 5, 0|SF_QUICK_CALL, DoSkelTeleport, &s_SkelTeleport[9]}, + + {SKEL_TELEPORT + 5, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[10]}, + {SKEL_TELEPORT + 4, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[11]}, + {SKEL_TELEPORT + 3, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[12]}, + {SKEL_TELEPORT + 2, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[13]}, + {SKEL_TELEPORT + 1, SKEL_TELEPORT_RATE, NullAnimator, &s_SkelTeleport[14]}, + {SKEL_TELEPORT + 0, SKEL_TELEPORT_RATE, DoSkelTermTeleport, &s_SkelTeleport[15]}, + {SKEL_TELEPORT + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_SkelTeleport[16]}, + {SKEL_TELEPORT + 0, SKEL_TELEPORT_RATE, DoSkelMove, &s_SkelTeleport[16]}, }; STATE* sg_SkelTeleport[] = @@ -393,19 +400,19 @@ STATE* sg_SkelTeleport[] = STATE s_SkelStand[5][1] = { { - {SKEL_RUN_R0 + 0, SKEL_STAND_RATE, &AF(DoSkelMove), &s_SkelStand[0][0]}, + {SKEL_RUN_R0 + 0, SKEL_STAND_RATE, DoSkelMove, &s_SkelStand[0][0]}, }, { - {SKEL_RUN_R1 + 0, SKEL_STAND_RATE, &AF(DoSkelMove), &s_SkelStand[1][0]}, + {SKEL_RUN_R1 + 0, SKEL_STAND_RATE, DoSkelMove, &s_SkelStand[1][0]}, }, { - {SKEL_RUN_R2 + 0, SKEL_STAND_RATE, &AF(DoSkelMove), &s_SkelStand[2][0]}, + {SKEL_RUN_R2 + 0, SKEL_STAND_RATE, DoSkelMove, &s_SkelStand[2][0]}, }, { - {SKEL_RUN_R3 + 0, SKEL_STAND_RATE, &AF(DoSkelMove), &s_SkelStand[3][0]}, + {SKEL_RUN_R3 + 0, SKEL_STAND_RATE, DoSkelMove, &s_SkelStand[3][0]}, }, { - {SKEL_RUN_R4 + 0, SKEL_STAND_RATE, &AF(DoSkelMove), &s_SkelStand[4][0]}, + {SKEL_RUN_R4 + 0, SKEL_STAND_RATE, DoSkelMove, &s_SkelStand[4][0]}, }, }; @@ -429,12 +436,12 @@ STATE* sg_SkelStand[] = STATE s_SkelDie[] = { - {SKEL_DIE + 0, SKEL_DIE_RATE, nullptr, &s_SkelDie[1]}, - {SKEL_DIE + 1, SKEL_DIE_RATE, nullptr, &s_SkelDie[2]}, - {SKEL_DIE + 2, SKEL_DIE_RATE, nullptr, &s_SkelDie[3]}, - {SKEL_DIE + 3, SKEL_DIE_RATE, nullptr, &s_SkelDie[4]}, - {SKEL_DIE + 4, SKEL_DIE_RATE, nullptr, &s_SkelDie[5]}, - {SKEL_DIE + 5, SKEL_DIE_RATE, &AF(DoSuicide), &s_SkelDie[5]}, + {SKEL_DIE + 0, SKEL_DIE_RATE, NullAnimator, &s_SkelDie[1]}, + {SKEL_DIE + 1, SKEL_DIE_RATE, NullAnimator, &s_SkelDie[2]}, + {SKEL_DIE + 2, SKEL_DIE_RATE, NullAnimator, &s_SkelDie[3]}, + {SKEL_DIE + 3, SKEL_DIE_RATE, NullAnimator, &s_SkelDie[4]}, + {SKEL_DIE + 4, SKEL_DIE_RATE, NullAnimator, &s_SkelDie[5]}, + {SKEL_DIE + 5, SKEL_DIE_RATE, DoSuicide, &s_SkelDie[5]}, }; STATE* sg_SkelDie[] = @@ -501,6 +508,8 @@ ACTOR_ACTION_SET SkelActionSet = int SetupSkel(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,SKEL_RUN_R0,s_SkelRun[0]); @@ -508,10 +517,10 @@ int SetupSkel(DSWActor* actor) } ChangeState(actor, s_SkelRun[0]); - actor->user.__legacyState.Attrib = &SkelAttrib; + actor->user.Attrib = &SkelAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_SkelDie; - actor->user.__legacyState.Rot = sg_SkelRun; + actor->user.StateEnd = s_SkelDie; + actor->user.Rot = sg_SkelRun; EnemyDefaults(actor, &SkelActionSet, &SkelPersonality); @@ -522,13 +531,6 @@ int SetupSkel(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWSkeleton, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupSkel(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -634,7 +636,7 @@ int DoSkelMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); KeepActorOnFloor(actor); @@ -652,8 +654,26 @@ int DoSkelMove(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_skel_code[] = +{ + SAVE_CODE(DoSkelInitTeleport), + SAVE_CODE(DoSkelTeleport), + SAVE_CODE(DoSkelTermTeleport), + SAVE_CODE(NullSkel), + SAVE_CODE(DoSkelPain), + SAVE_CODE(DoSkelMove), +}; + static saveable_data saveable_skel_data[] = { + SAVE_DATA(SkelBattle), + SAVE_DATA(SkelOffense), + SAVE_DATA(SkelBroadcast), + SAVE_DATA(SkelSurprised), + SAVE_DATA(SkelEvasive), + SAVE_DATA(SkelLostTarget), + SAVE_DATA(SkelCloseRange), + SAVE_DATA(SkelPersonality), SAVE_DATA(SkelAttrib), @@ -679,7 +699,8 @@ static saveable_data saveable_skel_data[] = saveable_module saveable_skel = { // code - nullptr, 0, + saveable_skel_code, + SIZ(saveable_skel_code), // data saveable_skel_data, diff --git a/source/games/sw/src/skull.cpp b/source/games/sw/src/skull.cpp index 545c36567f6..d402fde616f 100644 --- a/source/games/sw/src/skull.cpp +++ b/source/games/sw/src/skull.cpp @@ -47,25 +47,27 @@ int InitCaltrops(DSWActor* actor); extern DAMAGE_DATA DamageData[]; +ANIMATOR DoSkullMove,DoActorDebris; #define SKULL_RATE 10 +ANIMATOR DoSkullWait; STATE s_SkullWait[5][1] = { { - {SKULL_R0 + 0, SKULL_RATE, &AF(DoSkullWait), &s_SkullWait[0][0]}, + {SKULL_R0 + 0, SKULL_RATE, DoSkullWait, &s_SkullWait[0][0]}, }, { - {SKULL_R1 + 0, SKULL_RATE, &AF(DoSkullWait), &s_SkullWait[1][0]}, + {SKULL_R1 + 0, SKULL_RATE, DoSkullWait, &s_SkullWait[1][0]}, }, { - {SKULL_R2 + 0, SKULL_RATE, &AF(DoSkullWait), &s_SkullWait[2][0]}, + {SKULL_R2 + 0, SKULL_RATE, DoSkullWait, &s_SkullWait[2][0]}, }, { - {SKULL_R3 + 0, SKULL_RATE, &AF(DoSkullWait), &s_SkullWait[3][0]}, + {SKULL_R3 + 0, SKULL_RATE, DoSkullWait, &s_SkullWait[3][0]}, }, { - {SKULL_R4 + 0, SKULL_RATE, &AF(DoSkullWait), &s_SkullWait[4][0]}, + {SKULL_R4 + 0, SKULL_RATE, DoSkullWait, &s_SkullWait[4][0]}, } }; @@ -96,22 +98,24 @@ ATTRIBUTE SkullAttrib = // ////////////////////// +ANIMATOR DoSerpRing; + STATE s_SkullRing[5][1] = { { - {SKULL_R0 + 0, SKULL_RATE, &AF(DoSerpRing), &s_SkullRing[0][0]}, + {SKULL_R0 + 0, SKULL_RATE, DoSerpRing, &s_SkullRing[0][0]}, }, { - {SKULL_R1 + 0, SKULL_RATE, &AF(DoSerpRing), &s_SkullRing[1][0]}, + {SKULL_R1 + 0, SKULL_RATE, DoSerpRing, &s_SkullRing[1][0]}, }, { - {SKULL_R2 + 0, SKULL_RATE, &AF(DoSerpRing), &s_SkullRing[2][0]}, + {SKULL_R2 + 0, SKULL_RATE, DoSerpRing, &s_SkullRing[2][0]}, }, { - {SKULL_R3 + 0, SKULL_RATE, &AF(DoSerpRing), &s_SkullRing[3][0]}, + {SKULL_R3 + 0, SKULL_RATE, DoSerpRing, &s_SkullRing[3][0]}, }, { - {SKULL_R4 + 0, SKULL_RATE, &AF(DoSerpRing), &s_SkullRing[4][0]}, + {SKULL_R4 + 0, SKULL_RATE, DoSerpRing, &s_SkullRing[4][0]}, } }; @@ -133,22 +137,24 @@ STATE* sg_SkullRing[] = // ////////////////////// +ANIMATOR DoSkullJump; + STATE s_SkullJump[5][1] = { { - {SKULL_R0 + 0, SKULL_RATE, &AF(DoSkullJump), &s_SkullJump[0][0]}, + {SKULL_R0 + 0, SKULL_RATE, DoSkullJump, &s_SkullJump[0][0]}, }, { - {SKULL_R1 + 0, SKULL_RATE, &AF(DoSkullJump), &s_SkullJump[1][0]}, + {SKULL_R1 + 0, SKULL_RATE, DoSkullJump, &s_SkullJump[1][0]}, }, { - {SKULL_R2 + 0, SKULL_RATE, &AF(DoSkullJump), &s_SkullJump[2][0]}, + {SKULL_R2 + 0, SKULL_RATE, DoSkullJump, &s_SkullJump[2][0]}, }, { - {SKULL_R3 + 0, SKULL_RATE, &AF(DoSkullJump), &s_SkullJump[3][0]}, + {SKULL_R3 + 0, SKULL_RATE, DoSkullJump, &s_SkullJump[3][0]}, }, { - {SKULL_R4 + 0, SKULL_RATE, &AF(DoSkullJump), &s_SkullJump[4][0]}, + {SKULL_R4 + 0, SKULL_RATE, DoSkullJump, &s_SkullJump[4][0]}, } }; @@ -170,27 +176,29 @@ STATE* sg_SkullJump[] = ////////////////////// #define SKULL_EXPLODE_RATE 11 +ANIMATOR DoSuicide; +ANIMATOR DoSkullSpawnShrap; STATE s_SkullExplode[] = { - {SKULL_EXPLODE + 0, 1, nullptr, &s_SkullExplode[1]}, - {SKULL_EXPLODE + 0, SF_QUICK_CALL, &AF(DoDamageTest), &s_SkullExplode[2]}, - {SKULL_EXPLODE + 0, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[3]}, - {SKULL_EXPLODE + 1, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[4]}, - {SKULL_EXPLODE + 2, SF_QUICK_CALL, &AF(DoSkullSpawnShrap), &s_SkullExplode[5]}, - {SKULL_EXPLODE + 2, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[6]}, - {SKULL_EXPLODE + 3, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[7]}, - {SKULL_EXPLODE + 4, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[8]}, - {SKULL_EXPLODE + 5, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[9]}, - {SKULL_EXPLODE + 6, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[10]}, - {SKULL_EXPLODE + 7, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[11]}, - {SKULL_EXPLODE + 8, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[12]}, - {SKULL_EXPLODE + 9, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[13]}, - {SKULL_EXPLODE +10, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[14]}, - {SKULL_EXPLODE +11, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[15]}, - {SKULL_EXPLODE +12, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[16]}, - {SKULL_EXPLODE +13, SKULL_EXPLODE_RATE, nullptr, &s_SkullExplode[17]}, - {SKULL_EXPLODE +13, SKULL_EXPLODE_RATE, &AF(DoSuicide), &s_SkullExplode[17]} + {SKULL_EXPLODE + 0, 1, NullAnimator, &s_SkullExplode[1]}, + {SKULL_EXPLODE + 0, SF_QUICK_CALL, DoDamageTest, &s_SkullExplode[2]}, + {SKULL_EXPLODE + 0, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[3]}, + {SKULL_EXPLODE + 1, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[4]}, + {SKULL_EXPLODE + 2, SF_QUICK_CALL, DoSkullSpawnShrap, &s_SkullExplode[5]}, + {SKULL_EXPLODE + 2, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[6]}, + {SKULL_EXPLODE + 3, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[7]}, + {SKULL_EXPLODE + 4, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[8]}, + {SKULL_EXPLODE + 5, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[9]}, + {SKULL_EXPLODE + 6, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[10]}, + {SKULL_EXPLODE + 7, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[11]}, + {SKULL_EXPLODE + 8, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[12]}, + {SKULL_EXPLODE + 9, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[13]}, + {SKULL_EXPLODE +10, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[14]}, + {SKULL_EXPLODE +11, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[15]}, + {SKULL_EXPLODE +12, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[16]}, + {SKULL_EXPLODE +13, SKULL_EXPLODE_RATE, NullAnimator, &s_SkullExplode[17]}, + {SKULL_EXPLODE +13, SKULL_EXPLODE_RATE, DoSuicide, &s_SkullExplode[17]} }; STATE* sg_SkullExplode[] = @@ -207,6 +215,8 @@ STATE* sg_SkullExplode[] = int SetupSkull(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,SKULL_R0,s_SkullWait[0]); @@ -214,10 +224,10 @@ int SetupSkull(DSWActor* actor) } ChangeState(actor, s_SkullWait[0]); - actor->user.__legacyState.Attrib = &SkullAttrib; + actor->user.Attrib = &SkullAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_SkullExplode; - actor->user.__legacyState.Rot = sg_SkullWait; + actor->user.StateEnd = s_SkullExplode; + actor->user.Rot = sg_SkullWait; actor->user.ID = SKULL_R0; @@ -247,13 +257,6 @@ int SetupSkull(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWSkull, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupSkull(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -341,7 +344,7 @@ int DoSkullBeginDeath(DSWActor* actor) } actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); - actor->user.__legacyState.RotNum = 0; + actor->user.RotNum = 0; actor->user.Tics = 0; actor->user.ID = SKULL_R0; actor->user.Radius = DamageData[DMG_SKULL_EXP].radius; //*DamageRadiusSkull; @@ -510,34 +513,37 @@ int DoSkullWait(DSWActor* actor) ////////////////////// +ANIMATOR DoBettyMove,DoActorDebris; + #define BETTY_RATE 10 +ANIMATOR DoBettyWait; STATE s_BettyWait[5][3] = { { - {BETTY_R0 + 0, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[0][1]}, - {BETTY_R0 + 1, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[0][2]}, - {BETTY_R0 + 2, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[0][0]}, + {BETTY_R0 + 0, BETTY_RATE, DoBettyWait, &s_BettyWait[0][1]}, + {BETTY_R0 + 1, BETTY_RATE, DoBettyWait, &s_BettyWait[0][2]}, + {BETTY_R0 + 2, BETTY_RATE, DoBettyWait, &s_BettyWait[0][0]}, }, { - {BETTY_R1 + 0, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[1][1]}, - {BETTY_R1 + 1, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[1][2]}, - {BETTY_R1 + 2, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[1][0]}, + {BETTY_R1 + 0, BETTY_RATE, DoBettyWait, &s_BettyWait[1][1]}, + {BETTY_R1 + 1, BETTY_RATE, DoBettyWait, &s_BettyWait[1][2]}, + {BETTY_R1 + 2, BETTY_RATE, DoBettyWait, &s_BettyWait[1][0]}, }, { - {BETTY_R2 + 0, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[2][1]}, - {BETTY_R2 + 1, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[2][2]}, - {BETTY_R2 + 2, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[2][0]}, + {BETTY_R2 + 0, BETTY_RATE, DoBettyWait, &s_BettyWait[2][1]}, + {BETTY_R2 + 1, BETTY_RATE, DoBettyWait, &s_BettyWait[2][2]}, + {BETTY_R2 + 2, BETTY_RATE, DoBettyWait, &s_BettyWait[2][0]}, }, { - {BETTY_R3 + 0, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[3][1]}, - {BETTY_R3 + 1, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[3][2]}, - {BETTY_R3 + 2, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[3][0]}, + {BETTY_R3 + 0, BETTY_RATE, DoBettyWait, &s_BettyWait[3][1]}, + {BETTY_R3 + 1, BETTY_RATE, DoBettyWait, &s_BettyWait[3][2]}, + {BETTY_R3 + 2, BETTY_RATE, DoBettyWait, &s_BettyWait[3][0]}, }, { - {BETTY_R4 + 0, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[4][1]}, - {BETTY_R4 + 1, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[4][2]}, - {BETTY_R4 + 2, BETTY_RATE, &AF(DoBettyWait), &s_BettyWait[4][0]}, + {BETTY_R4 + 0, BETTY_RATE, DoBettyWait, &s_BettyWait[4][1]}, + {BETTY_R4 + 1, BETTY_RATE, DoBettyWait, &s_BettyWait[4][2]}, + {BETTY_R4 + 2, BETTY_RATE, DoBettyWait, &s_BettyWait[4][0]}, } }; @@ -565,22 +571,24 @@ ATTRIBUTE BettyAttrib = // ////////////////////// +ANIMATOR DoBettyJump; + STATE s_BettyJump[5][1] = { { - {BETTY_R0 + 0, BETTY_RATE, &AF(DoBettyJump), &s_BettyJump[0][0]}, + {BETTY_R0 + 0, BETTY_RATE, DoBettyJump, &s_BettyJump[0][0]}, }, { - {BETTY_R1 + 0, BETTY_RATE, &AF(DoBettyJump), &s_BettyJump[1][0]}, + {BETTY_R1 + 0, BETTY_RATE, DoBettyJump, &s_BettyJump[1][0]}, }, { - {BETTY_R2 + 0, BETTY_RATE, &AF(DoBettyJump), &s_BettyJump[2][0]}, + {BETTY_R2 + 0, BETTY_RATE, DoBettyJump, &s_BettyJump[2][0]}, }, { - {BETTY_R3 + 0, BETTY_RATE, &AF(DoBettyJump), &s_BettyJump[3][0]}, + {BETTY_R3 + 0, BETTY_RATE, DoBettyJump, &s_BettyJump[3][0]}, }, { - {BETTY_R4 + 0, BETTY_RATE, &AF(DoBettyJump), &s_BettyJump[4][0]}, + {BETTY_R4 + 0, BETTY_RATE, DoBettyJump, &s_BettyJump[4][0]}, } }; @@ -603,11 +611,13 @@ STATE* sg_BettyJump[] = #define BETTY_EXPLODE_RATE 11 #define BETTY_EXPLODE BETTY_R0 +ANIMATOR DoSuicide; +ANIMATOR DoBettySpawnShrap; STATE s_BettyExplode[] = { - {BETTY_EXPLODE + 0, SF_QUICK_CALL, &AF(DoDamageTest), &s_BettyExplode[1]}, - {BETTY_EXPLODE + 0, BETTY_EXPLODE_RATE, &AF(DoSuicide), &s_BettyExplode[0]} + {BETTY_EXPLODE + 0, SF_QUICK_CALL, DoDamageTest, &s_BettyExplode[1]}, + {BETTY_EXPLODE + 0, BETTY_EXPLODE_RATE, DoSuicide, &s_BettyExplode[0]} }; STATE* sg_BettyExplode[] = @@ -624,6 +634,8 @@ STATE* sg_BettyExplode[] = int SetupBetty(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,BETTY_R0,s_BettyWait[0]); @@ -631,10 +643,10 @@ int SetupBetty(DSWActor* actor) } ChangeState(actor, s_BettyWait[0]); - actor->user.__legacyState.Attrib = &BettyAttrib; + actor->user.Attrib = &BettyAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_BettyExplode; - actor->user.__legacyState.Rot = sg_BettyWait; + actor->user.StateEnd = s_BettyExplode; + actor->user.Rot = sg_BettyWait; actor->user.ID = BETTY_R0; @@ -664,13 +676,6 @@ int SetupBetty(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWBetty, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupBetty(self); - return 0; -} - //--------------------------------------------------------------------------- // // @@ -746,7 +751,7 @@ int DoBettyBeginDeath(DSWActor* actor) } actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); - actor->user.__legacyState.RotNum = 0; + actor->user.RotNum = 0; actor->user.Tics = 0; actor->user.ID = BETTY_R0; actor->user.Radius = DamageData[DMG_SKULL_EXP].radius; //*DamageRadiusBetty; @@ -907,6 +912,23 @@ int DoBettyWait(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_skull_code[] = +{ + SAVE_CODE(DoSkullMove), + SAVE_CODE(DoSkullBeginDeath), + SAVE_CODE(DoSkullJump), + SAVE_CODE(DoSkullBob), + SAVE_CODE(DoSkullSpawnShrap), + SAVE_CODE(DoSkullWait), + + SAVE_CODE(DoBettyMove), + SAVE_CODE(DoBettyBeginDeath), + SAVE_CODE(DoBettyJump), + SAVE_CODE(DoBettyBob), + SAVE_CODE(DoBettySpawnShrap), + SAVE_CODE(DoBettyWait), +}; + static saveable_data saveable_skull_data[] = { SAVE_DATA(s_SkullWait), @@ -934,7 +956,8 @@ static saveable_data saveable_skull_data[] = saveable_module saveable_skull = { // code - nullptr, 0, + saveable_skull_code, + SIZ(saveable_skull_code), // data saveable_skull_data, diff --git a/source/games/sw/src/slidor.cpp b/source/games/sw/src/slidor.cpp index 1c40fc98564..6ca9f61c0cf 100644 --- a/source/games/sw/src/slidor.cpp +++ b/source/games/sw/src/slidor.cpp @@ -609,4 +609,26 @@ int DoSlidor(DSWActor* actor) return 0; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + +#include "saveable.h" + +static saveable_code saveable_slidor_code[] = +{ + SAVE_CODE(DoSlidor), +}; + +saveable_module saveable_slidor = +{ + // code + saveable_slidor_code, + SIZ(saveable_slidor_code), + + // data + nullptr,0 +}; END_SW_NS diff --git a/source/games/sw/src/sounds.cpp b/source/games/sw/src/sounds.cpp index a0192801ddf..befb3922d98 100644 --- a/source/games/sw/src/sounds.cpp +++ b/source/games/sw/src/sounds.cpp @@ -706,7 +706,7 @@ void Terminate3DSounds(void) void PlaySpriteSound(DSWActor* actor, int attrib_ndx, int flags) { if (actor->hasU() && attrib_ndx > attr_none && attrib_ndx < MAXATTRIBSNDS) - PlaySound(actor->user.__legacyState.Attrib->Sounds[attrib_ndx - 1], actor, flags); + PlaySound(actor->user.Attrib->Sounds[attrib_ndx], actor, flags); } //========================================================================== diff --git a/source/games/sw/src/spike.cpp b/source/games/sw/src/spike.cpp index d4dc7d89969..48766eec305 100644 --- a/source/games/sw/src/spike.cpp +++ b/source/games/sw/src/spike.cpp @@ -477,4 +477,28 @@ int DoSpikeAuto(DSWActor* actor) return 0; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + + +#include "saveable.h" + +static saveable_code saveable_spike_code[] = +{ + SAVE_CODE(DoSpike), + SAVE_CODE(DoSpikeAuto), +}; + +saveable_module saveable_spike = +{ + // code + saveable_spike_code, + SIZ(saveable_spike_code), + + // data + nullptr,0 +}; END_SW_NS diff --git a/source/games/sw/src/sprite.cpp b/source/games/sw/src/sprite.cpp index 45844bb82c5..1fe952e86c6 100644 --- a/source/games/sw/src/sprite.cpp +++ b/source/games/sw/src/sprite.cpp @@ -85,6 +85,11 @@ int SetupPachinko2(DSWActor*); int SetupPachinko3(DSWActor*); int SetupPachinko4(DSWActor*); int SetupGirlNinja(DSWActor*); +ANIMATOR DoVator, DoVatorAuto; +ANIMATOR DoRotator; +ANIMATOR DoSlidor; +ANIMATOR DoSpike, DoSpikeAuto; +ANIMATOR DoLavaErupt; int DoSlidorInstantClose(DSWActor*); void InitWeaponRocket(DSWPlayer*); @@ -120,82 +125,84 @@ int DirArr[] = {NORTH, NE, EAST, SE, SOUTH, SW, WEST, NW, NORTH, NE, EAST, SE, S STATE s_DebrisNinja[] = { - {NINJA_DIE + 3, 100, &AF(DoActorDebris), &s_DebrisNinja[0]}, + {NINJA_DIE + 3, 100, DoActorDebris, &s_DebrisNinja[0]}, }; STATE s_DebrisRat[] = { - {750, 100, &AF(DoActorDebris), &s_DebrisRat[0]}, + {750, 100, DoActorDebris, &s_DebrisRat[0]}, }; STATE s_DebrisCrab[] = { - {423, 100, &AF(DoActorDebris), &s_DebrisCrab[0]}, + {423, 100, DoActorDebris, &s_DebrisCrab[0]}, }; STATE s_DebrisStarFish[] = { - {426, 100, &AF(DoActorDebris), &s_DebrisStarFish[0]}, + {426, 100, DoActorDebris, &s_DebrisStarFish[0]}, }; +ANIMATOR DoGet, DoKey, DoSpriteFade; + // temporary #define ICON_REPAIR_KIT 1813 #define REPAIR_KIT_RATE 1100 STATE s_RepairKit[] = { - {ICON_REPAIR_KIT + 0, REPAIR_KIT_RATE, &AF(DoGet), &s_RepairKit[0]} + {ICON_REPAIR_KIT + 0, REPAIR_KIT_RATE, DoGet, &s_RepairKit[0]} }; STATE s_GoldSkelKey[] = { - {GOLD_SKELKEY, 100, &AF(DoGet), &s_GoldSkelKey[0]} + {GOLD_SKELKEY, 100, DoGet, &s_GoldSkelKey[0]} }; STATE s_BlueKey[] = { - {BLUE_KEY, 100, &AF(DoGet), &s_BlueKey[0]} + {BLUE_KEY, 100, DoGet, &s_BlueKey[0]} }; STATE s_BlueCard[] = { - {BLUE_CARD, 100, &AF(DoGet), &s_BlueCard[0]} + {BLUE_CARD, 100, DoGet, &s_BlueCard[0]} }; STATE s_SilverSkelKey[] = { - {SILVER_SKELKEY, 100, &AF(DoGet), &s_SilverSkelKey[0]} + {SILVER_SKELKEY, 100, DoGet, &s_SilverSkelKey[0]} }; STATE s_RedKey[] = { - {RED_KEY, 100, &AF(DoGet), &s_RedKey[0]} + {RED_KEY, 100, DoGet, &s_RedKey[0]} }; STATE s_RedCard[] = { - {RED_CARD, 100, &AF(DoGet), &s_RedCard[0]} + {RED_CARD, 100, DoGet, &s_RedCard[0]} }; STATE s_BronzeSkelKey[] = { - {BRONZE_SKELKEY, 100, &AF(DoGet), &s_BronzeSkelKey[0]} + {BRONZE_SKELKEY, 100, DoGet, &s_BronzeSkelKey[0]} }; STATE s_GreenKey[] = { - {GREEN_KEY, 100, &AF(DoGet), &s_GreenKey[0]} + {GREEN_KEY, 100, DoGet, &s_GreenKey[0]} }; STATE s_GreenCard[] = { - {GREEN_CARD, 100, &AF(DoGet), &s_GreenCard[0]} + {GREEN_CARD, 100, DoGet, &s_GreenCard[0]} }; STATE s_RedSkelKey[] = { - {RED_SKELKEY, 100, &AF(DoGet), &s_RedSkelKey[0]} + {RED_SKELKEY, 100, DoGet, &s_RedSkelKey[0]} }; STATE s_YellowKey[] = { - {YELLOW_KEY, 100, &AF(DoGet), &s_YellowKey[0]} + {YELLOW_KEY, 100, DoGet, &s_YellowKey[0]} }; STATE s_YellowCard[] = { - {YELLOW_CARD, 100, &AF(DoGet), &s_YellowCard[0]} + {YELLOW_CARD, 100, DoGet, &s_YellowCard[0]} }; STATE* s_Key[] = @@ -216,6 +223,73 @@ STATE* s_Key[] = #define KEY_RATE 25 +#if 0 +STATE s_BlueKey[] = +{ + {BLUE_KEY + 0, KEY_RATE, DoKey, &s_BlueKey[0]} +}; + +STATE s_RedKey[] = +{ + {RED_KEY + 0, KEY_RATE, DoKey, &s_RedKey[0]} +}; + +STATE s_GreenKey[] = +{ + {GREEN_KEY + 0, KEY_RATE, DoKey, &s_GreenKey[0]} +}; + +STATE s_YellowKey[] = +{ + {YELLOW_KEY + 0, KEY_RATE, DoKey, &s_YellowKey[0]} +}; + +STATE* s_Key[] = +{ + s_RedKey, + s_BlueKey, + s_GreenKey, + s_YellowKey, + s_RedCard, + s_BlueCard, + s_GreenCard, + s_YellowCard, + s_GoldSkelKey, + s_SilverSkelKey, + s_BronzeSkelKey, + s_RedSkelKey +}; +#endif + +#if 0 +STATE s_BlueKeyStatue[] = +{ + {BLUE_KEY_STATUE + 0, KEY_RATE, DoSpriteFade, &s_BlueKeyStatue[0]} +}; + +STATE s_RedKeyStatue[] = +{ + {RED_KEY_STATUE + 0, KEY_RATE, DoSpriteFade, &s_RedKeyStatue[0]} +}; + +STATE s_GreenKeyStatue[] = +{ + {GREEN_KEY_STATUE + 0, KEY_RATE, DoSpriteFade, &s_GreenKeyStatue[0]} +}; + +STATE s_YellowKeyStatue[] = +{ + {YELLOW_KEY_STATUE + 0, KEY_RATE, DoSpriteFade, &s_YellowKeyStatue[0]} +}; + +STATE* s_KeyStatue[] = +{ + s_RedKeyStatue, + s_BlueKeyStatue, + s_GreenKeyStatue, + s_YellowKeyStatue, +}; +#endif #define Red_COIN 2440 #define Yellow_COIN 2450 @@ -223,269 +297,289 @@ STATE* s_Key[] = #define RED_COIN_RATE 10 #define YELLOW_COIN_RATE 8 #define GREEN_COIN_RATE 6 +ANIMATOR DoCoin; STATE s_RedCoin[] = { - {Red_COIN + 0, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[1]}, - {Red_COIN + 1, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[2]}, - {Red_COIN + 2, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[3]}, - {Red_COIN + 3, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[4]}, - {Red_COIN + 4, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[5]}, - {Red_COIN + 5, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[6]}, - {Red_COIN + 6, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[7]}, - {Red_COIN + 7, RED_COIN_RATE, &AF(DoCoin), &s_RedCoin[0]}, + {Red_COIN + 0, RED_COIN_RATE, DoCoin, &s_RedCoin[1]}, + {Red_COIN + 1, RED_COIN_RATE, DoCoin, &s_RedCoin[2]}, + {Red_COIN + 2, RED_COIN_RATE, DoCoin, &s_RedCoin[3]}, + {Red_COIN + 3, RED_COIN_RATE, DoCoin, &s_RedCoin[4]}, + {Red_COIN + 4, RED_COIN_RATE, DoCoin, &s_RedCoin[5]}, + {Red_COIN + 5, RED_COIN_RATE, DoCoin, &s_RedCoin[6]}, + {Red_COIN + 6, RED_COIN_RATE, DoCoin, &s_RedCoin[7]}, + {Red_COIN + 7, RED_COIN_RATE, DoCoin, &s_RedCoin[0]}, }; // !JIM! Frank, I made coins go progressively faster STATE s_YellowCoin[] = { - {Yellow_COIN + 0, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[1]}, - {Yellow_COIN + 1, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[2]}, - {Yellow_COIN + 2, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[3]}, - {Yellow_COIN + 3, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[4]}, - {Yellow_COIN + 4, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[5]}, - {Yellow_COIN + 5, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[6]}, - {Yellow_COIN + 6, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[7]}, - {Yellow_COIN + 7, YELLOW_COIN_RATE, &AF(DoCoin), &s_YellowCoin[0]}, + {Yellow_COIN + 0, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[1]}, + {Yellow_COIN + 1, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[2]}, + {Yellow_COIN + 2, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[3]}, + {Yellow_COIN + 3, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[4]}, + {Yellow_COIN + 4, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[5]}, + {Yellow_COIN + 5, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[6]}, + {Yellow_COIN + 6, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[7]}, + {Yellow_COIN + 7, YELLOW_COIN_RATE, DoCoin, &s_YellowCoin[0]}, }; STATE s_GreenCoin[] = { - {Green_COIN + 0, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[1]}, - {Green_COIN + 1, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[2]}, - {Green_COIN + 2, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[3]}, - {Green_COIN + 3, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[4]}, - {Green_COIN + 4, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[5]}, - {Green_COIN + 5, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[6]}, - {Green_COIN + 6, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[7]}, - {Green_COIN + 7, GREEN_COIN_RATE, &AF(DoCoin), &s_GreenCoin[0]}, + {Green_COIN + 0, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[1]}, + {Green_COIN + 1, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[2]}, + {Green_COIN + 2, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[3]}, + {Green_COIN + 3, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[4]}, + {Green_COIN + 4, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[5]}, + {Green_COIN + 5, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[6]}, + {Green_COIN + 6, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[7]}, + {Green_COIN + 7, GREEN_COIN_RATE, DoCoin, &s_GreenCoin[0]}, +}; + +ANIMATOR DoFireFly; + +#if 0 +STATE s_FireFly[] = +{ + {FIRE_FLY0, 120 * 3, DoFireFly, &s_FireFly[1]}, + {FIRE_FLY1, 20, DoFireFly, &s_FireFly[2]}, + {FIRE_FLY2, 20, DoFireFly, &s_FireFly[3]}, + {FIRE_FLY3, 20, DoFireFly, &s_FireFly[4]}, + {FIRE_FLY4, 60, DoFireFly, &s_FireFly[0]}, }; +#else STATE s_FireFly[] = { - {FIRE_FLY0, FIRE_FLY_RATE * 4, &AF(DoFireFly), &s_FireFly[0]} + {FIRE_FLY0, FIRE_FLY_RATE * 4, DoFireFly, &s_FireFly[0]} }; +#endif + STATE s_IconStar[] = { - {ICON_STAR, 100, &AF(DoGet), &s_IconStar[0]} + {ICON_STAR, 100, DoGet, &s_IconStar[0]} }; STATE s_IconUzi[] = { - {ICON_UZI, 100, &AF(DoGet), &s_IconUzi[0]} + {ICON_UZI, 100, DoGet, &s_IconUzi[0]} }; STATE s_IconLgUziAmmo[] = { - {ICON_LG_UZI_AMMO, 100, &AF(DoGet), &s_IconLgUziAmmo[0]} + {ICON_LG_UZI_AMMO, 100, DoGet, &s_IconLgUziAmmo[0]} }; STATE s_IconUziFloor[] = { - {ICON_UZIFLOOR, 100, &AF(DoGet), &s_IconUziFloor[0]} + {ICON_UZIFLOOR, 100, DoGet, &s_IconUziFloor[0]} }; STATE s_IconRocket[] = { - {ICON_ROCKET, 100, &AF(DoGet), &s_IconRocket[0]} + {ICON_ROCKET, 100, DoGet, &s_IconRocket[0]} }; STATE s_IconLgRocket[] = { - {ICON_LG_ROCKET, 100, &AF(DoGet), &s_IconLgRocket[0]} + {ICON_LG_ROCKET, 100, DoGet, &s_IconLgRocket[0]} }; STATE s_IconShotgun[] = { - {ICON_SHOTGUN, 100, &AF(DoGet), &s_IconShotgun[0]} + {ICON_SHOTGUN, 100, DoGet, &s_IconShotgun[0]} }; STATE s_IconLgShotshell[] = { - {ICON_LG_SHOTSHELL, 100, &AF(DoGet), &s_IconLgShotshell[0]} + {ICON_LG_SHOTSHELL, 100, DoGet, &s_IconLgShotshell[0]} }; STATE s_IconAutoRiot[] = { - {ICON_AUTORIOT, 100, &AF(DoGet), &s_IconAutoRiot[0]} + {ICON_AUTORIOT, 100, DoGet, &s_IconAutoRiot[0]} }; STATE s_IconGrenadeLauncher[] = { - {ICON_GRENADE_LAUNCHER, 100, &AF(DoGet), &s_IconGrenadeLauncher[0]} + {ICON_GRENADE_LAUNCHER, 100, DoGet, &s_IconGrenadeLauncher[0]} }; STATE s_IconLgGrenade[] = { - {ICON_LG_GRENADE, 100, &AF(DoGet), &s_IconLgGrenade[0]} + {ICON_LG_GRENADE, 100, DoGet, &s_IconLgGrenade[0]} }; STATE s_IconLgMine[] = { - {ICON_LG_MINE, 100, &AF(DoGet), &s_IconLgMine[0]} + {ICON_LG_MINE, 100, DoGet, &s_IconLgMine[0]} }; STATE s_IconGuardHead[] = { - {ICON_GUARD_HEAD + 0, 15, &AF(DoGet), &s_IconGuardHead[0]}, + {ICON_GUARD_HEAD + 0, 15, DoGet, &s_IconGuardHead[0]}, +// {ICON_GUARD_HEAD + 1, 15, DoGet, &s_IconGuardHead[2]}, +// {ICON_GUARD_HEAD + 2, 15, DoGet, &s_IconGuardHead[0]} }; #define FIREBALL_LG_AMMO_RATE 12 STATE s_IconFireballLgAmmo[] = { - {ICON_FIREBALL_LG_AMMO + 0, FIREBALL_LG_AMMO_RATE, &AF(DoGet), &s_IconFireballLgAmmo[1]}, - {ICON_FIREBALL_LG_AMMO + 1, FIREBALL_LG_AMMO_RATE, &AF(DoGet), &s_IconFireballLgAmmo[2]}, - {ICON_FIREBALL_LG_AMMO + 2, FIREBALL_LG_AMMO_RATE, &AF(DoGet), &s_IconFireballLgAmmo[0]}, + {ICON_FIREBALL_LG_AMMO + 0, FIREBALL_LG_AMMO_RATE, DoGet, &s_IconFireballLgAmmo[1]}, + {ICON_FIREBALL_LG_AMMO + 1, FIREBALL_LG_AMMO_RATE, DoGet, &s_IconFireballLgAmmo[2]}, + {ICON_FIREBALL_LG_AMMO + 2, FIREBALL_LG_AMMO_RATE, DoGet, &s_IconFireballLgAmmo[0]}, }; STATE s_IconHeart[] = { - {ICON_HEART + 0, 25, &AF(DoGet), &s_IconHeart[1]}, - {ICON_HEART + 1, 25, &AF(DoGet), &s_IconHeart[0]}, + {ICON_HEART + 0, 25, DoGet, &s_IconHeart[1]}, + {ICON_HEART + 1, 25, DoGet, &s_IconHeart[0]}, }; #define HEART_LG_AMMO_RATE 12 STATE s_IconHeartLgAmmo[] = { - {ICON_HEART_LG_AMMO + 0, HEART_LG_AMMO_RATE, &AF(DoGet), &s_IconHeartLgAmmo[1]}, - {ICON_HEART_LG_AMMO + 1, HEART_LG_AMMO_RATE, &AF(DoGet), &s_IconHeartLgAmmo[0]}, + {ICON_HEART_LG_AMMO + 0, HEART_LG_AMMO_RATE, DoGet, &s_IconHeartLgAmmo[1]}, + {ICON_HEART_LG_AMMO + 1, HEART_LG_AMMO_RATE, DoGet, &s_IconHeartLgAmmo[0]}, }; STATE s_IconMicroGun[] = { - {ICON_MICRO_GUN, 100, &AF(DoGet), &s_IconMicroGun[0]} + {ICON_MICRO_GUN, 100, DoGet, &s_IconMicroGun[0]} }; STATE s_IconMicroBattery[] = { - {ICON_MICRO_BATTERY, 100, &AF(DoGet), &s_IconMicroBattery[0]} + {ICON_MICRO_BATTERY, 100, DoGet, &s_IconMicroBattery[0]} }; // !JIM! Added rail crap STATE s_IconRailGun[] = { - {ICON_RAIL_GUN, 100, &AF(DoGet), &s_IconRailGun[0]} + {ICON_RAIL_GUN, 100, DoGet, &s_IconRailGun[0]} }; STATE s_IconRailAmmo[] = { - {ICON_RAIL_AMMO, 100, &AF(DoGet), &s_IconRailAmmo[0]} + {ICON_RAIL_AMMO, 100, DoGet, &s_IconRailAmmo[0]} }; STATE s_IconElectro[] = { - {ICON_ELECTRO + 0, 25, &AF(DoGet), &s_IconElectro[1]}, - {ICON_ELECTRO + 1, 25, &AF(DoGet), &s_IconElectro[0]}, + {ICON_ELECTRO + 0, 25, DoGet, &s_IconElectro[1]}, + {ICON_ELECTRO + 1, 25, DoGet, &s_IconElectro[0]}, }; #define ICON_SPELL_RATE 8 STATE s_IconSpell[] = { - {ICON_SPELL + 0, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[1]}, - {ICON_SPELL + 1, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[2]}, - {ICON_SPELL + 2, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[3]}, - {ICON_SPELL + 3, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[4]}, - {ICON_SPELL + 4, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[5]}, - {ICON_SPELL + 5, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[6]}, - {ICON_SPELL + 6, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[7]}, - {ICON_SPELL + 7, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[8]}, - {ICON_SPELL + 8, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[9]}, - {ICON_SPELL + 9, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[10]}, - {ICON_SPELL + 10, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[11]}, - {ICON_SPELL + 11, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[12]}, - {ICON_SPELL + 12, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[13]}, - {ICON_SPELL + 13, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[14]}, - {ICON_SPELL + 14, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[15]}, - {ICON_SPELL + 15, ICON_SPELL_RATE, &AF(DoGet), &s_IconSpell[0]}, + {ICON_SPELL + 0, ICON_SPELL_RATE, DoGet, &s_IconSpell[1]}, + {ICON_SPELL + 1, ICON_SPELL_RATE, DoGet, &s_IconSpell[2]}, + {ICON_SPELL + 2, ICON_SPELL_RATE, DoGet, &s_IconSpell[3]}, + {ICON_SPELL + 3, ICON_SPELL_RATE, DoGet, &s_IconSpell[4]}, + {ICON_SPELL + 4, ICON_SPELL_RATE, DoGet, &s_IconSpell[5]}, + {ICON_SPELL + 5, ICON_SPELL_RATE, DoGet, &s_IconSpell[6]}, + {ICON_SPELL + 6, ICON_SPELL_RATE, DoGet, &s_IconSpell[7]}, + {ICON_SPELL + 7, ICON_SPELL_RATE, DoGet, &s_IconSpell[8]}, + {ICON_SPELL + 8, ICON_SPELL_RATE, DoGet, &s_IconSpell[9]}, + {ICON_SPELL + 9, ICON_SPELL_RATE, DoGet, &s_IconSpell[10]}, + {ICON_SPELL + 10, ICON_SPELL_RATE, DoGet, &s_IconSpell[11]}, + {ICON_SPELL + 11, ICON_SPELL_RATE, DoGet, &s_IconSpell[12]}, + {ICON_SPELL + 12, ICON_SPELL_RATE, DoGet, &s_IconSpell[13]}, + {ICON_SPELL + 13, ICON_SPELL_RATE, DoGet, &s_IconSpell[14]}, + {ICON_SPELL + 14, ICON_SPELL_RATE, DoGet, &s_IconSpell[15]}, + {ICON_SPELL + 15, ICON_SPELL_RATE, DoGet, &s_IconSpell[0]}, }; STATE s_IconArmor[] = { - {ICON_ARMOR + 0, 15, &AF(DoGet), &s_IconArmor[0]}, + {ICON_ARMOR + 0, 15, DoGet, &s_IconArmor[0]}, }; STATE s_IconMedkit[] = { - {ICON_MEDKIT + 0, 15, &AF(DoGet), &s_IconMedkit[0]}, + {ICON_MEDKIT + 0, 15, DoGet, &s_IconMedkit[0]}, }; STATE s_IconChemBomb[] = { - {ICON_CHEMBOMB, 15, &AF(DoGet), &s_IconChemBomb[0]}, + {ICON_CHEMBOMB, 15, DoGet, &s_IconChemBomb[0]}, }; STATE s_IconFlashBomb[] = { - {ICON_FLASHBOMB, 15, &AF(DoGet), &s_IconFlashBomb[0]}, + {ICON_FLASHBOMB, 15, DoGet, &s_IconFlashBomb[0]}, }; STATE s_IconNuke[] = { - {ICON_NUKE, 15, &AF(DoGet), &s_IconNuke[0]}, + {ICON_NUKE, 15, DoGet, &s_IconNuke[0]}, }; STATE s_IconCaltrops[] = { - {ICON_CALTROPS, 15, &AF(DoGet), &s_IconCaltrops[0]}, + {ICON_CALTROPS, 15, DoGet, &s_IconCaltrops[0]}, }; #define ICON_SM_MEDKIT 1802 STATE s_IconSmMedkit[] = { - {ICON_SM_MEDKIT + 0, 15, &AF(DoGet), &s_IconSmMedkit[0]}, + {ICON_SM_MEDKIT + 0, 15, DoGet, &s_IconSmMedkit[0]}, }; #define ICON_BOOSTER 1810 STATE s_IconBooster[] = { - {ICON_BOOSTER + 0, 15, &AF(DoGet), &s_IconBooster[0]}, + {ICON_BOOSTER + 0, 15, DoGet, &s_IconBooster[0]}, }; #define ICON_HEAT_CARD 1819 STATE s_IconHeatCard[] = { - {ICON_HEAT_CARD + 0, 15, &AF(DoGet), &s_IconHeatCard[0]}, + {ICON_HEAT_CARD + 0, 15, DoGet, &s_IconHeatCard[0]}, }; #if 0 STATE s_IconEnvironSuit[] = { - {ICON_ENVIRON_SUIT + 0, 20, &AF(DoGet), &s_IconEnvironSuit[0]}, + {ICON_ENVIRON_SUIT + 0, 20, DoGet, &s_IconEnvironSuit[0]}, }; #endif STATE s_IconCloak[] = { - {ICON_CLOAK + 0, 20, &AF(DoGet), &s_IconCloak[0]}, +// {ICON_CLOAK + 0, 20, DoGet, &s_IconCloak[1]}, +// {ICON_CLOAK + 1, 20, DoGet, &s_IconCloak[2]}, + {ICON_CLOAK + 0, 20, DoGet, &s_IconCloak[0]}, }; STATE s_IconFly[] = { - {ICON_FLY + 0, 20, &AF(DoGet), &s_IconFly[1]}, - {ICON_FLY + 1, 20, &AF(DoGet), &s_IconFly[2]}, - {ICON_FLY + 2, 20, &AF(DoGet), &s_IconFly[3]}, - {ICON_FLY + 3, 20, &AF(DoGet), &s_IconFly[4]}, - {ICON_FLY + 4, 20, &AF(DoGet), &s_IconFly[5]}, - {ICON_FLY + 5, 20, &AF(DoGet), &s_IconFly[6]}, - {ICON_FLY + 6, 20, &AF(DoGet), &s_IconFly[7]}, - {ICON_FLY + 7, 20, &AF(DoGet), &s_IconFly[0]} + {ICON_FLY + 0, 20, DoGet, &s_IconFly[1]}, + {ICON_FLY + 1, 20, DoGet, &s_IconFly[2]}, + {ICON_FLY + 2, 20, DoGet, &s_IconFly[3]}, + {ICON_FLY + 3, 20, DoGet, &s_IconFly[4]}, + {ICON_FLY + 4, 20, DoGet, &s_IconFly[5]}, + {ICON_FLY + 5, 20, DoGet, &s_IconFly[6]}, + {ICON_FLY + 6, 20, DoGet, &s_IconFly[7]}, + {ICON_FLY + 7, 20, DoGet, &s_IconFly[0]} }; STATE s_IconNightVision[] = { - {ICON_NIGHT_VISION + 0, 20, &AF(DoGet), &s_IconNightVision[0]}, + {ICON_NIGHT_VISION + 0, 20, DoGet, &s_IconNightVision[0]}, }; STATE s_IconFlag[] = { - {ICON_FLAG + 0, 32, &AF(DoGet), &s_IconFlag[1]}, - {ICON_FLAG + 1, 32, &AF(DoGet), &s_IconFlag[2]}, - {ICON_FLAG + 2, 32, &AF(DoGet), &s_IconFlag[0]} + {ICON_FLAG + 0, 32, DoGet, &s_IconFlag[1]}, + {ICON_FLAG + 1, 32, DoGet, &s_IconFlag[2]}, + {ICON_FLAG + 2, 32, DoGet, &s_IconFlag[0]} }; //--------------------------------------------------------------------------- @@ -694,7 +788,7 @@ void ChangeState(DSWActor* actor, STATE* statep) return; actor->user.Tics = 0; - actor->user.__legacyState.State = actor->user.__legacyState.StateStart = statep; + actor->user.State = actor->user.StateStart = statep; actor->spr.cstat2 |= CSTAT2_SPRITE_NOANIMATE; // just in case } @@ -765,7 +859,7 @@ void SpawnUser(DSWActor* actor, short id, STATE* state) PRODUCTION_ASSERT(actor->hasU()); // be careful State can be nullptr - actor->user.__legacyState.State = actor->user.__legacyState.StateStart = state; + actor->user.State = actor->user.StateStart = state; change_actor_stat(actor, actor->spr.statnum); @@ -826,9 +920,9 @@ DSWActor* SpawnActor(int stat, int id, STATE* state, sectortype* sect, const DVe SpawnUser(spawnedActor, id, state); // be careful State can be nullptr - if (spawnedActor->user.__legacyState.State) + if (spawnedActor->user.State) { - spawnedActor->spr.picnum = spawnedActor->user.__legacyState.State->Pic; + spawnedActor->spr.picnum = spawnedActor->user.State->Pic; spawnedActor->spr.cstat2 |= CSTAT2_SPRITE_NOANIMATE; // just in case } @@ -912,7 +1006,7 @@ bool ActorTestSpawn(DSWActor* actor) actor->spr.picnum == SAILORGIRL_R0) && (g_gameType & GAMEFLAG_ADDON)) return true; // spawn Bouncing Betty (mine) in TD map 09 Warehouse - if (actor->spr.picnum == BETTY_R0 && (currentLevel->gameflags & LEVEL_SW_SPAWNMINES)) + if (actor->spr.picnum == 817 && (currentLevel->gameflags & LEVEL_SW_SPAWNMINES)) return true; return false; @@ -1468,7 +1562,7 @@ void SpriteSetupPost(void) jActor->user.ceiling_dist = 4; jActor->user.floor_dist = -2; - jActor->user.ActorActionFunc = AF(DoActorDebris); + jActor->user.ActorActionFunc = DoActorDebris; jActor->spr.cstat |= CSTAT_SPRITE_BREAKABLE; jActor->spr.extra |= SPRX_BREAKABLE; @@ -1476,1275 +1570,1245 @@ void SpriteSetupPost(void) } } -void SetupST1(DSWActor* actor) -{ - sectortype* sectp = actor->sector(); - short tag; - short bit; +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- - // get rid of defaults - if (SP_TAG3(actor) == 32) - SP_TAG3(actor) = 0; +void SpriteSetup(void) +{ + short num; + double cz,fz; - tag = actor->spr.hitag; + MinEnemySkill = EnemyCheckSkill(); - actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN); - actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); + // special case for player + //PicAnimOff(PLAYER_NINJA_RUN_R0); - // for bounding sector objects - if ((tag >= 500 && tag < 600) || tag == SECT_SO_CENTER) - { - // NOTE: These will get deleted by the sector object - // setup code - change_actor_stat(actor, STAT_ST1); - return; - } + // Clear Sprite Extension structure - if (tag < 16) + // Clear all extra bits - they are set by sprites + for(auto& sect: sector) { - bit = 1 << (tag); - - actor->sector()->extra |= (bit); - - if (bit & (SECTFX_SINK)) - { - sectp->u_defined = true; - sectp->depth_fixed = IntToFixed(actor->spr.lotag); - KillActor(actor); - } - else if (bit & (SECTFX_OPERATIONAL)) - { - KillActor(actor); - } - else if (bit & (SECTFX_CURRENT)) - { - sectp->u_defined = true; - sectp->speed = actor->spr.lotag; - sectp->angle = actor->spr.Angles.Yaw; - KillActor(actor); - } - else if (bit & (SECTFX_NO_RIDE)) - { - change_actor_stat(actor, STAT_NO_RIDE); - } - else if (bit & (SECTFX_DIVE_AREA)) - { - sectp->u_defined = true; - sectp->number = actor->spr.lotag; - change_actor_stat(actor, STAT_DIVE_AREA); - } - else if (bit & (SECTFX_UNDERWATER)) - { - sectp->u_defined = true; - sectp->number = actor->spr.lotag; - change_actor_stat(actor, STAT_UNDERWATER); - } - else if (bit & (SECTFX_UNDERWATER2)) - { - sectp->u_defined = true; - sectp->number = actor->spr.lotag; - if (actor->spr.clipdist == 1) // notreallyclipdist - sectp->flags |= (SECTFU_CANT_SURFACE); - change_actor_stat(actor, STAT_UNDERWATER2); - } + sect.extra = 0; } - else - { - switch (tag) - { -#if 0 - case MULTI_PLAYER_START: - change_actor_stat(actor, STAT_MULTI_START + actor->spr.lotag); - break; - case MULTI_COOPERATIVE_START: - change_actor_stat(actor, STAT_CO_OP_START + actor->spr.lotag); - break; -#endif - - case SECT_MATCH: - sectp->u_defined = true; - sectp->number = actor->spr.lotag; - - KillActor(actor); - break; - - case SLIDE_SECTOR: - sectp->u_defined = true; - sectp->flags |= (SECTFU_SLIDE_SECTOR); - sectp->speed = SP_TAG2(actor); - KillActor(actor); - break; - - case SECT_DAMAGE: - { - sectp->u_defined = true; - if (TEST_BOOL1(actor)) - sectp->flags |= (SECTFU_DAMAGE_ABOVE_SECTOR); - sectp->damage = actor->spr.lotag; - KillActor(actor); - break; - } - - case PARALLAX_LEVEL: - { - parallaxyscale_override = 8192; - pskybits_override = actor->spr.lotag; - if (SP_TAG4(actor) > 2048) - parallaxyscale_override = SP_TAG4(actor); - defineSky(nullptr, pskybits_override, nullptr, 0, parallaxyscale_override / 8192.f); - KillActor(actor); - break; - } - case BREAKABLE: - // used for wall info - if (SP_TAG5(actor) >= 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG5(actor)); - - change_actor_stat(actor, STAT_BREAKABLE); - break; - - case SECT_DONT_COPY_PALETTE: - { - sectp->u_defined = true; - sectp->flags |= (SECTFU_DONT_COPY_PALETTE); - KillActor(actor); - break; - } + // Clear PARALLAX_LEVEL overrides + parallaxyscale_override = 0; + pskybits_override = -1; - case SECT_FLOOR_PAN: - { - // if moves with SO - if (TEST_BOOL1(actor)) - actor->vel.X = 0; - else - actor->vel.X = actor->spr.lotag * maptoworld; + // Call my little sprite setup routine first + JS_SpriteSetup(); - StartInterpolation(actor->sector(), Interp_Sect_FloorPanX); - StartInterpolation(actor->sector(), Interp_Sect_FloorPanY); - change_actor_stat(actor, STAT_FLOOR_PAN); - break; - } + int minEnemySkill = EnemyCheckSkill(); - case SECT_CEILING_PAN: + SWStatIterator it(STAT_DEFAULT); + while (auto actor = it.Next()) + { + // not used yetv + calcSlope(actor->sector(), actor->spr.pos, &cz, &fz); + if (actor->spr.pos.Z > ((cz + fz) * 0.5)) { - // if moves with SO - if (TEST_BOOL1(actor)) - actor->vel.X = 0; - else - actor->vel.X = actor->spr.lotag * maptoworld; - StartInterpolation(actor->sector(), Interp_Sect_CeilingPanX); - StartInterpolation(actor->sector(), Interp_Sect_CeilingPanY); - change_actor_stat(actor, STAT_CEILING_PAN); - break; + // closer to a floor + actor->spr.cstat |= (CSTAT_SPRITE_CLOSE_FLOOR); } - case SECT_WALL_PAN_SPEED: - { - HitInfo hit{}; - hitscan(actor->spr.pos.plusZ(-8), actor->sector(), DVector3(actor->spr.Angles.Yaw.ToVector() * 1024, 0), hit, CLIPMASK_MISSILE); + // CSTAT_SPIN is insupported - get rid of it + if ((actor->spr.cstat & (CSTAT_SPRITE_ALIGNMENT_MASK)) == CSTAT_SPRITE_ALIGNMENT_SLAB) + actor->spr.cstat &= ~(CSTAT_SPRITE_ALIGNMENT_SLAB); - if (hit.hitWall == nullptr) - { - KillActor(actor); - break; - } + // if BLOCK is set set BLOCK_HITSCAN + // Hope this doesn't screw up anything + if (actor->spr.cstat & (CSTAT_SPRITE_BLOCK)) + actor->spr.cstat |= (CSTAT_SPRITE_BLOCK_HITSCAN); - actor->tempwall = hit.hitWall; - // if moves with SO - if (TEST_BOOL1(actor)) - actor->vel.X = 0; - else - actor->vel.X = actor->spr.lotag * maptoworld; - actor->spr.Angles.Yaw = mapangle(SP_TAG6(actor)); - // attach to the sector that contains the wall - ChangeActorSect(actor, hit.hitSector); - StartInterpolation(hit.hitWall, Interp_Wall_PanX); - StartInterpolation(hit.hitWall, Interp_Wall_PanY); - change_actor_stat(actor, STAT_WALL_PAN); - break; - } + //////////////////////////////////////////// + // + // BREAKABLE CHECK + // + //////////////////////////////////////////// - case WALL_DONT_STICK: + // USER SETUP - TAGGED BY USER + // Non ST1 sprites that are tagged like them + if (TEST_BOOL1(actor) && actor->spr.picnum != ST1) { - HitInfo hit{}; - hitscan(actor->spr.pos.plusZ(-8), actor->sector(), DVector3(actor->spr.Angles.Yaw.ToVector() * 1024, 0), hit, CLIPMASK_MISSILE); + actor->spr.extra &= ~( + SPRX_BOOL4| + SPRX_BOOL5| + SPRX_BOOL6| + SPRX_BOOL7| + SPRX_BOOL8| + SPRX_BOOL9| + SPRX_BOOL10); - if (hit.hitWall == nullptr) + switch (actor->spr.hitag) { - KillActor(actor); + case BREAKABLE: + // need something that tells missiles to hit them + // but allows actors to move through them + SetActorSizeX(actor); + actor->spr.extra |= (SPRX_BREAKABLE); + actor->spr.cstat |= (CSTAT_SPRITE_BREAKABLE); break; } - - hit.hitWall->extra |= WALLFX_DONT_STICK; - KillActor(actor); - break; - } - - case TRIGGER_SECTOR: - { - actor->sector()->extra |= (SECTFX_TRIGGER); - change_actor_stat(actor, STAT_TRIGGER); - break; } - - case DELETE_SPRITE: + else { - change_actor_stat(actor, STAT_DELETE_SPRITE); - break; + // BREAK SETUP TABLE AUTOMATED + SetupSpriteForBreak(actor); } - case SPAWN_ITEMS: + if (actor->spr.lotag == TAG_SPRITE_HIT_MATCH) { + // if multi item and not a modem game if ((actor->spr.extra & SPRX_MULTI_ITEM)) { if (numplayers <= 1 || gNet.MultiGameType == MULTI_GAME_COOPERATIVE) { KillActor(actor); - break; + continue; } } - change_actor_stat(actor, STAT_SPAWN_ITEMS); - break; - } - - case CEILING_FLOOR_PIC_OVERRIDE: - { - // block hitscans depending on translucency - if (SP_TAG7(actor) == 0 || SP_TAG7(actor) == 1) + // crack sprite + if (actor->spr.picnum == CRACK) { - if (SP_TAG3(actor) == 0) - actor->sector()->ceilingstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); - else - actor->sector()->floorstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); + actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); + actor->spr.cstat |= (CSTAT_SPRITE_BLOCK_HITSCAN|CSTAT_SPRITE_BLOCK_MISSILE);; } - else if (TEST_BOOL1(actor)) + else { - if (SP_TAG3(actor) == 0) - actor->sector()->ceilingstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); - else - actor->sector()->floorstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); + actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); + actor->spr.cstat |= (CSTAT_SPRITE_BLOCK_HITSCAN|CSTAT_SPRITE_BLOCK_MISSILE);; + actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE);; } - // copy tag 7 to tag 6 and pre-shift it - SP_TAG6(actor) = SP_TAG7(actor); - SP_TAG6(actor) <<= 7; - if (SP_TAG2(actor) >= 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG2(actor)); - change_actor_stat(actor, STAT_CEILING_FLOOR_PIC_OVERRIDE); - break; - } + if (SP_TAG8(actor) & BIT(0)) + actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); - case QUAKE_SPOT: - { - change_actor_stat(actor, STAT_QUAKE_SPOT); - SET_SP_TAG13(actor, ((SP_TAG6(actor) * 10) * 120)); - break; - } + if (SP_TAG8(actor) & BIT(1)) + actor->spr.cstat &= ~(CSTAT_SPRITE_INVISIBLE); - case SECT_CHANGOR: - { - if (SP_TAG4(actor) >= 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG4(actor)); - change_actor_stat(actor, STAT_CHANGOR); - break; + change_actor_stat(actor, STAT_SPRITE_HIT_MATCH); + continue; } - - case SECT_VATOR: + if (actor->spr.picnum >= TRACK_SPRITE && + actor->spr.picnum <= TRACK_SPRITE + MAX_TRACKS) { - short speed, vel, time, type, start_on, floor_vator; - SpawnUser(actor, 0, nullptr); + short track_num; - // vator already set - ceiling AND floor vator - if ((sectp->extra & SECTFX_VATOR)) - { - sectp->u_defined = true; - sectp->flags |= (SECTFU_VATOR_BOTH); - } - sectp->extra |= (SECTFX_VATOR); - SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, true, true); - actor->sector()->extra |= (SECTFX_DYNAMIC_AREA); - - // don't step on toes of other sector settings - if (sectp->lotag == 0 && sectp->hitag == 0) - sectp->lotag = TAG_VATOR; - - type = SP_TAG3(actor); - speed = SP_TAG4(actor); - vel = SP_TAG5(actor); - time = SP_TAG9(actor); - start_on = !!TEST_BOOL1(actor); - floor_vator = true; - if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) - floor_vator = false; - - actor->user.jump_speed = actor->user.vel_tgt = speed; - actor->user.vel_rate = vel; - actor->user.WaitTics = time * 15; // 1/8 of a sec - actor->user.Tics = 0; - - actor->user.Flags |= (SPR_ACTIVE); - - switch (type) - { - case 0: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoVator); - break; - case 1: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoVator); - break; - case 2: - actor->user.ActorActionFunc = AF(DoVatorAuto); - break; - case 3: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoVatorAuto); - break; - } + // skip this sprite, just for numbering walls/sectors + if (actor->spr.cstat & (CSTAT_SPRITE_ALIGNMENT_WALL)) + continue; - if (floor_vator) - { - // start off - actor->user.pos.Z = sectp->floorz; - actor->user.z_tgt = actor->spr.pos.Z; - if (start_on) - { - double amt = actor->spr.pos.Z - sectp->floorz; + track_num = actor->spr.picnum - TRACK_SPRITE + 0; - // start in the on position - sectp->setfloorz(actor->spr.pos.Z); - actor->user.z_tgt = actor->user.pos.Z; + change_actor_stat(actor, STAT_TRACK + track_num); - MoveSpritesWithSector(actor->sector(), amt, false); // floor - } + continue; + } - // set orig z - actor->opos.Z = sectp->floorz; - actor->user.oz = actor->opos.Z; - } - else - { - // start off - actor->user.pos.Z = sectp->ceilingz; - actor->user.z_tgt = actor->spr.pos.Z; - if (start_on) - { - double amt = actor->spr.pos.Z - sectp->ceilingz; - - // starting in the on position - sectp->setceilingz(actor->spr.pos.Z); - actor->user.z_tgt = actor->user.pos.Z; - - MoveSpritesWithSector(actor->sector(), amt, true); // ceiling - } - - // set orig z - actor->opos.Z = sectp->ceilingz; - actor->user.oz = actor->opos.Z; - } - - - change_actor_stat(actor, STAT_VATOR); - break; - } + if (ActorSpawn(actor)) + continue; - case SECT_ROTATOR_PIVOT: + switch (actor->spr.picnum) { - change_actor_stat(actor, STAT_ROTATOR_PIVOT); + case ST_QUICK_JUMP: + change_actor_stat(actor, STAT_QUICK_JUMP); + break; + case ST_QUICK_JUMP_DOWN: + change_actor_stat(actor, STAT_QUICK_JUMP_DOWN); + break; + case ST_QUICK_SUPER_JUMP: + change_actor_stat(actor, STAT_QUICK_SUPER_JUMP); + break; + case ST_QUICK_SCAN: + change_actor_stat(actor, STAT_QUICK_SCAN); + break; + case ST_QUICK_EXIT: + change_actor_stat(actor, STAT_QUICK_EXIT); + break; + case ST_QUICK_OPERATE: + change_actor_stat(actor, STAT_QUICK_OPERATE); + break; + case ST_QUICK_DUCK: + change_actor_stat(actor, STAT_QUICK_DUCK); + break; + case ST_QUICK_DEFEND: + change_actor_stat(actor, STAT_QUICK_DEFEND); break; - } - case SECT_ROTATOR: + case ST1: { - short time, type; - short wallcount, startwall, endwall, w; - SpawnUser(actor, 0, nullptr); - - SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, true, true); - - // need something for this - sectp->lotag = TAG_ROTATOR; - sectp->hitag = actor->spr.lotag; + sectortype* sectp = actor->sector(); + short tag; + short bit; - type = SP_TAG3(actor); - time = SP_TAG9(actor); + // get rid of defaults + if (SP_TAG3(actor) == 32) + SP_TAG3(actor) = 0; - actor->user.WaitTics = time * 15; // 1/8 of a sec - actor->user.Tics = 0; + tag = actor->spr.hitag; - actor->user.rotator.Alloc(); - actor->user.rotator->open_dest = SP_TAG5(actor); - actor->user.rotator->speed = SP_TAG7(actor); - actor->user.rotator->vel = SP_TAG8(actor); - actor->user.rotator->pos = 0; // closed - actor->user.rotator->tgt = actor->user.rotator->open_dest; // closed - actor->user.rotator->SetNumWalls(actor->sector()->walls.Size()); - - actor->user.rotator->orig_speed = actor->user.rotator->speed; + actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK|CSTAT_SPRITE_BLOCK_HITSCAN); + actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); - wallcount = 0; - for (auto& wal : actor->sector()->walls) + // for bounding sector objects + if ((tag >= 500 && tag < 600) || tag == SECT_SO_CENTER) { - actor->user.rotator->orig[wallcount] = wal.pos; - wallcount++; + // NOTE: These will get deleted by the sector object + // setup code + change_actor_stat(actor, STAT_ST1); + break; } - actor->user.Flags |= (SPR_ACTIVE); - - switch (type) + if (tag < 16) { - case 0: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoRotator); - break; - case 1: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoRotator); - break; - } + bit = 1 << (tag); - change_actor_stat(actor, STAT_ROTATOR); - break; - } + actor->sector()->extra |= (bit); - case SECT_SLIDOR: - { - short time, type; + if (bit & (SECTFX_SINK)) + { + sectp->u_defined = true; + sectp->depth_fixed = IntToFixed(actor->spr.lotag); + KillActor(actor); + } + else if (bit & (SECTFX_OPERATIONAL)) + { + KillActor(actor); + } + else if (bit & (SECTFX_CURRENT)) + { + sectp->u_defined = true; + sectp->speed = actor->spr.lotag; + sectp->angle = actor->spr.Angles.Yaw; + KillActor(actor); + } + else if (bit & (SECTFX_NO_RIDE)) + { + change_actor_stat(actor, STAT_NO_RIDE); + } + else if (bit & (SECTFX_DIVE_AREA)) + { + sectp->u_defined = true; + sectp->number = actor->spr.lotag; + change_actor_stat(actor, STAT_DIVE_AREA); + } + else if (bit & (SECTFX_UNDERWATER)) + { + sectp->u_defined = true; + sectp->number = actor->spr.lotag; + change_actor_stat(actor, STAT_UNDERWATER); + } + else if (bit & (SECTFX_UNDERWATER2)) + { + sectp->u_defined = true; + sectp->number = actor->spr.lotag; + if (actor->spr.clipdist == 1) // notreallyclipdist + sectp->flags |= (SECTFU_CANT_SURFACE); + change_actor_stat(actor, STAT_UNDERWATER2); + } + } + else + { + switch (tag) + { +#if 0 + case MULTI_PLAYER_START: + change_actor_stat(actor, STAT_MULTI_START + actor->spr.lotag); + break; + case MULTI_COOPERATIVE_START: + change_actor_stat(actor, STAT_CO_OP_START + actor->spr.lotag); + break; +#endif - SpawnUser(actor, 0, nullptr); + case SECT_MATCH: + sectp->u_defined = true; + sectp->number = actor->spr.lotag; - SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, true, true); + KillActor(actor); + break; - // need something for this - sectp->lotag = TAG_SLIDOR; - sectp->hitag = actor->spr.lotag; + case SLIDE_SECTOR: + sectp->u_defined = true; + sectp->flags |= (SECTFU_SLIDE_SECTOR); + sectp->speed = SP_TAG2(actor); + KillActor(actor); + break; - type = SP_TAG3(actor); - time = SP_TAG9(actor); + case SECT_DAMAGE: + { + sectp->u_defined = true; + if (TEST_BOOL1(actor)) + sectp->flags |= (SECTFU_DAMAGE_ABOVE_SECTOR); + sectp->damage = actor->spr.lotag; + KillActor(actor); + break; + } - actor->user.WaitTics = time * 15; // 1/8 of a sec - actor->user.Tics = 0; + case PARALLAX_LEVEL: + { + parallaxyscale_override = 8192; + pskybits_override = actor->spr.lotag; + if (SP_TAG4(actor) > 2048) + parallaxyscale_override = SP_TAG4(actor); + defineSky(nullptr, pskybits_override, nullptr, 0, parallaxyscale_override / 8192.f); + KillActor(actor); + break; + } - actor->user.rotator.Alloc(); - actor->user.rotator->open_dest = SP_TAG5(actor); - actor->user.rotator->speed = SP_TAG7(actor); - actor->user.rotator->vel = SP_TAG8(actor); - actor->user.rotator->pos = 0; // closed - actor->user.rotator->tgt = actor->user.rotator->open_dest; // closed - actor->user.rotator->ClearWalls(); - actor->user.rotator->orig_speed = actor->user.rotator->speed; + case BREAKABLE: + // used for wall info + if (SP_TAG5(actor) >= 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG5(actor)); - actor->user.Flags |= (SPR_ACTIVE); + change_actor_stat(actor, STAT_BREAKABLE); + break; - switch (type) - { - case 0: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoSlidor); - break; - case 1: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoSlidor); - break; - } + case SECT_DONT_COPY_PALETTE: + { + sectp->u_defined = true; + sectp->flags |= (SECTFU_DONT_COPY_PALETTE); + KillActor(actor); + break; + } + case SECT_FLOOR_PAN: + { + // if moves with SO + if (TEST_BOOL1(actor)) + actor->vel.X = 0; + else + actor->vel.X = actor->spr.lotag * maptoworld; - if (TEST_BOOL5(actor)) - { - DoSlidorInstantClose(actor); - } + StartInterpolation(actor->sector(), Interp_Sect_FloorPanX); + StartInterpolation(actor->sector(), Interp_Sect_FloorPanY); + change_actor_stat(actor, STAT_FLOOR_PAN); + break; + } - change_actor_stat(actor, STAT_SLIDOR); - break; - } + case SECT_CEILING_PAN: + { + // if moves with SO + if (TEST_BOOL1(actor)) + actor->vel.X = 0; + else + actor->vel.X = actor->spr.lotag * maptoworld; + StartInterpolation(actor->sector(), Interp_Sect_CeilingPanX); + StartInterpolation(actor->sector(), Interp_Sect_CeilingPanY); + change_actor_stat(actor, STAT_CEILING_PAN); + break; + } - case SECT_SPIKE: - { - short speed, vel, time, type, start_on, floor_vator; - double florz, ceilz; - Collision trash; - SpawnUser(actor, 0, nullptr); - - SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, false, true); - actor->sector()->extra |= (SECTFX_DYNAMIC_AREA); - - type = SP_TAG3(actor); - speed = SP_TAG4(actor); - vel = SP_TAG5(actor); - time = SP_TAG9(actor); - start_on = !!TEST_BOOL1(actor); - floor_vator = true; - if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) - floor_vator = false; - - actor->user.jump_speed = actor->user.vel_tgt = speed; - actor->user.vel_rate = vel; - actor->user.WaitTics = time * 15; // 1/8 of a sec - actor->user.Tics = 0; - - actor->user.Flags |= (SPR_ACTIVE); - - switch (type) - { - case 0: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoSpike); - break; - case 1: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoSpike); - break; - case 2: - actor->user.ActorActionFunc = AF(DoSpikeAuto); - break; - case 3: - actor->user.Flags &= ~(SPR_ACTIVE); - actor->user.ActorActionFunc = AF(DoSpikeAuto); - break; - } + case SECT_WALL_PAN_SPEED: + { + HitInfo hit{}; + hitscan(actor->spr.pos.plusZ(-8), actor->sector(), DVector3(actor->spr.Angles.Yaw.ToVector() * 1024, 0), hit, CLIPMASK_MISSILE); - getzrangepoint(actor->spr.pos, actor->sector(), &ceilz, &trash, &florz, &trash); + if (hit.hitWall == nullptr) + { + KillActor(actor); + break; + } - if (floor_vator) - { - actor->user.zclip = florz; + actor->tempwall = hit.hitWall; + // if moves with SO + if (TEST_BOOL1(actor)) + actor->vel.X = 0; + else + actor->vel.X = actor->spr.lotag * maptoworld; + actor->spr.Angles.Yaw = mapangle(SP_TAG6(actor)); + // attach to the sector that contains the wall + ChangeActorSect(actor, hit.hitSector); + StartInterpolation(hit.hitWall, Interp_Wall_PanX); + StartInterpolation(hit.hitWall, Interp_Wall_PanY); + change_actor_stat(actor, STAT_WALL_PAN); + break; + } - // start off - actor->user.pos.Z = actor->user.zclip; - actor->user.z_tgt = actor->spr.pos.Z; - if (start_on) + case WALL_DONT_STICK: { - // start in the on position - actor->user.zclip = actor->spr.pos.Z; - actor->user.z_tgt = actor->user.pos.Z; - SpikeAlign(actor); - } + HitInfo hit{}; + hitscan(actor->spr.pos.plusZ(-8), actor->sector(), DVector3(actor->spr.Angles.Yaw.ToVector() * 1024, 0), hit, CLIPMASK_MISSILE); - // set orig z - actor->user.oz = actor->user.zclip; - actor->opos.Z = actor->user.oz; - } - else - { - actor->user.zclip = ceilz; + if (hit.hitWall == nullptr) + { + KillActor(actor); + break; + } - // start off - actor->user.pos.Z = actor->user.zclip; - actor->user.z_tgt = actor->spr.pos.Z; - if (start_on) + hit.hitWall->extra |= WALLFX_DONT_STICK; + KillActor(actor); + break; + } + + case TRIGGER_SECTOR: { - // starting in the on position - actor->user.zclip = actor->spr.pos.Z; - actor->user.z_tgt = actor->user.pos.Z; - SpikeAlign(actor); + actor->sector()->extra |= (SECTFX_TRIGGER); + change_actor_stat(actor, STAT_TRIGGER); + break; } - // set orig z - actor->user.oz = actor->user.zclip; - actor->opos.Z = actor->user.oz; - } + case DELETE_SPRITE: + { + change_actor_stat(actor, STAT_DELETE_SPRITE); + break; + } - change_actor_stat(actor, STAT_SPIKE); - break; - } + case SPAWN_ITEMS: + { + if ((actor->spr.extra & SPRX_MULTI_ITEM)) + { + if (numplayers <= 1 || gNet.MultiGameType == MULTI_GAME_COOPERATIVE) + { + KillActor(actor); + break; + } + } - case LIGHTING: - { - int wallcount = 0; - int8_t* wall_shade; - LIGHT_Tics(actor) = 0; + change_actor_stat(actor, STAT_SPAWN_ITEMS); + break; + } - if (LIGHT_ShadeInc(actor) == 0) - LIGHT_ShadeInc(actor) = 1; + case CEILING_FLOOR_PIC_OVERRIDE: + { + // block hitscans depending on translucency + if (SP_TAG7(actor) == 0 || SP_TAG7(actor) == 1) + { + if (SP_TAG3(actor) == 0) + actor->sector()->ceilingstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); + else + actor->sector()->floorstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); + } + else if (TEST_BOOL1(actor)) + { + if (SP_TAG3(actor) == 0) + actor->sector()->ceilingstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); + else + actor->sector()->floorstat |= (CSTAT_SECTOR_FAF_BLOCK_HITSCAN); + } - // save off original floor and ceil shades - LIGHT_FloorShade(actor) = actor->sector()->floorshade; - LIGHT_CeilingShade(actor) = actor->sector()->ceilingshade; + // copy tag 7 to tag 6 and pre-shift it + SP_TAG6(actor) = SP_TAG7(actor); + SP_TAG6(actor) <<= 7; + if (SP_TAG2(actor) >= 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG2(actor)); + change_actor_stat(actor, STAT_CEILING_FLOOR_PIC_OVERRIDE); + break; + } - // count walls of sector - for (auto& wal : actor->sector()->walls) - { - wallcount++; - if (TEST_BOOL5(actor)) + case QUAKE_SPOT: { - if (wal.twoSided()) - wallcount++; + change_actor_stat(actor, STAT_QUAKE_SPOT); + SET_SP_TAG13(actor, ((SP_TAG6(actor)*10) * 120)); + break; } - } - - SpawnUser(actor, 0, nullptr); - actor->user.WallShade.Resize(wallcount); - wallcount = 0; - wall_shade = actor->user.WallShade.Data(); - // save off original wall shades - for (auto& wal : actor->sector()->walls) - { - wall_shade[wallcount] = wal.shade; - wallcount++; - if (TEST_BOOL5(actor)) + case SECT_CHANGOR: { - if (wal.twoSided()) - { - wall_shade[wallcount] = wal.nextWall()->shade; - wallcount++; - } + if (SP_TAG4(actor) >= 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG4(actor)); + change_actor_stat(actor, STAT_CHANGOR); + break; } - } - actor->user.spal = actor->spr.pal; +#if 0 + case SECT_DEBRIS_SEWER: + { + ANIMATOR DoGenerateSewerDebris; - // DON'T USE COVER function - change_actor_stat(actor, STAT_LIGHTING, true); - break; - } + SpawnUser(actor, 0, nullptr); - case LIGHTING_DIFFUSE: - { - int wallcount = 0; - int8_t* wall_shade; + ASSERT(actor->hasU()); + actor->user.RotNum = 0; + actor->user.WaitTics = actor->spr.lotag * 120; - LIGHT_Tics(actor) = 0; + actor->user.ActorActionFunc = DoGenerateSewerDebris; - // save off original floor and ceil shades - LIGHT_FloorShade(actor) = actor->sector()->floorshade; - LIGHT_CeilingShade(actor) = actor->sector()->ceilingshade; + change_actor_stat(actor, STAT_NO_STATE); + break; + } +#endif - // count walls of sector - for (auto& wal : actor->sector()->walls) - { - wallcount++; - if (TEST_BOOL5(actor)) + case SECT_VATOR: { - if (wal.twoSided()) - wallcount++; - } - } + short speed,vel,time,type,start_on,floor_vator; + SpawnUser(actor, 0, nullptr); - // !LIGHT - // make an wall_shade array and put it in User - SpawnUser(actor, 0, nullptr); - actor->user.WallShade.Resize(wallcount); - wallcount = 0; - wall_shade = actor->user.WallShade.Data(); + // vator already set - ceiling AND floor vator + if ((sectp->extra & SECTFX_VATOR)) + { + sectp->u_defined = true; + sectp->flags |= (SECTFU_VATOR_BOTH); + } + sectp->extra |= (SECTFX_VATOR); + SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, true, true); + actor->sector()->extra |= (SECTFX_DYNAMIC_AREA); + + // don't step on toes of other sector settings + if (sectp->lotag == 0 && sectp->hitag == 0) + sectp->lotag = TAG_VATOR; + + type = SP_TAG3(actor); + speed = SP_TAG4(actor); + vel = SP_TAG5(actor); + time = SP_TAG9(actor); + start_on = !!TEST_BOOL1(actor); + floor_vator = true; + if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) + floor_vator = false; + + actor->user.jump_speed = actor->user.vel_tgt = speed; + actor->user.vel_rate = vel; + actor->user.WaitTics = time*15; // 1/8 of a sec + actor->user.Tics = 0; + + actor->user.Flags |= (SPR_ACTIVE); + + switch (type) + { + case 0: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoVator; + break; + case 1: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoVator; + break; + case 2: + actor->user.ActorActionFunc = DoVatorAuto; + break; + case 3: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoVatorAuto; + break; + } - // save off original wall shades - for (auto& wal : actor->sector()->walls) - { - wall_shade[wallcount] = wal.shade; - wallcount++; - if (TEST_BOOL5(actor)) - { - if (wal.twoSided()) + if (floor_vator) { - wall_shade[wallcount] = wal.nextWall()->shade; - wallcount++; + // start off + actor->user.pos.Z = sectp->floorz; + actor->user.z_tgt = actor->spr.pos.Z; + if (start_on) + { + double amt = actor->spr.pos.Z - sectp->floorz; + + // start in the on position + sectp->setfloorz(actor->spr.pos.Z); + actor->user.z_tgt = actor->user.pos.Z; + + MoveSpritesWithSector(actor->sector(), amt, false); // floor + } + + // set orig z + actor->opos.Z = sectp->floorz; + actor->user.oz = actor->opos.Z; + } + else + { + // start off + actor->user.pos.Z = sectp->ceilingz; + actor->user.z_tgt = actor->spr.pos.Z; + if (start_on) + { + double amt = actor->spr.pos.Z - sectp->ceilingz; + + // starting in the on position + sectp->setceilingz(actor->spr.pos.Z); + actor->user.z_tgt = actor->user.pos.Z; + + MoveSpritesWithSector(actor->sector(), amt, true); // ceiling + } + + // set orig z + actor->opos.Z = sectp->ceilingz; + actor->user.oz = actor->opos.Z; } - } - } - // DON'T USE COVER function - change_actor_stat(actor, STAT_LIGHTING_DIFFUSE, true); - break; - } - case SECT_VATOR_DEST: - change_actor_stat(actor, STAT_VATOR); - break; + change_actor_stat(actor, STAT_VATOR); + break; + } - case SO_WALL_DONT_MOVE_UPPER: - change_actor_stat(actor, STAT_WALL_DONT_MOVE_UPPER); - break; + case SECT_ROTATOR_PIVOT: + { + change_actor_stat(actor, STAT_ROTATOR_PIVOT); + break; + } - case SO_WALL_DONT_MOVE_LOWER: - change_actor_stat(actor, STAT_WALL_DONT_MOVE_LOWER); - break; + case SECT_ROTATOR: + { + short time,type; + short wallcount,startwall,endwall,w; + SpawnUser(actor, 0, nullptr); - case FLOOR_SLOPE_DONT_DRAW: - change_actor_stat(actor, STAT_FLOOR_SLOPE_DONT_DRAW); - break; + SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, true, true); - case DEMO_CAMERA: - actor->vel.Z = 100 / 256.; //attempt horiz control - change_actor_stat(actor, STAT_DEMO_CAMERA); - break; + // need something for this + sectp->lotag = TAG_ROTATOR; + sectp->hitag = actor->spr.lotag; - case LAVA_ERUPT: - { + type = SP_TAG3(actor); + time = SP_TAG9(actor); - SpawnUser(actor, ST1, nullptr); + actor->user.WaitTics = time*15; // 1/8 of a sec + actor->user.Tics = 0; - change_actor_stat(actor, STAT_NO_STATE); - actor->user.ActorActionFunc = AF(DoLavaErupt); + actor->user.rotator.Alloc(); + actor->user.rotator->open_dest = SP_TAG5(actor); + actor->user.rotator->speed = SP_TAG7(actor); + actor->user.rotator->vel = SP_TAG8(actor); + actor->user.rotator->pos = 0; // closed + actor->user.rotator->tgt = actor->user.rotator->open_dest; // closed + actor->user.rotator->SetNumWalls(actor->sector()->walls.Size()); - // interval between erupts - if (SP_TAG10(actor) == 0) - SP_TAG10(actor) = 20; + actor->user.rotator->orig_speed = actor->user.rotator->speed; - // interval in seconds - actor->user.WaitTics = RandomRange(SP_TAG10(actor)) * 120; + wallcount = 0; + for(auto& wal : actor->sector()->walls) + { + actor->user.rotator->orig[wallcount] = wal.pos; + wallcount++; + } - // time to erupt - if (SP_TAG9(actor) == 0) - SP_TAG9(actor) = 10; + actor->user.Flags |= (SPR_ACTIVE); - actor->spr.pos.Z += 30; + switch (type) + { + case 0: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoRotator; + break; + case 1: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoRotator; + break; + } - break; - } + change_actor_stat(actor, STAT_ROTATOR); + break; + } + case SECT_SLIDOR: + { + short time,type; - case SECT_EXPLODING_CEIL_FLOOR: - { - SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, false, true); + SpawnUser(actor, 0, nullptr); - if ((sectp->floorstat & CSTAT_SECTOR_SLOPE)) - { - SP_TAG5(actor) = sectp->floorheinum; - sectp->setfloorslope(0); - } + SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, true, true); - if ((sectp->ceilingstat & CSTAT_SECTOR_SLOPE)) - { - SP_TAG6(actor) = sectp->ceilingheinum; - sectp->setceilingslope(0); - } + // need something for this + sectp->lotag = TAG_SLIDOR; + sectp->hitag = actor->spr.lotag; - SP_TAG4(actor) = int(fabs(sectp->ceilingz - sectp->floorz)); + type = SP_TAG3(actor); + time = SP_TAG9(actor); - sectp->setceilingz(sectp->floorz); + actor->user.WaitTics = time*15; // 1/8 of a sec + actor->user.Tics = 0; - change_actor_stat(actor, STAT_EXPLODING_CEIL_FLOOR); - break; - } + actor->user.rotator.Alloc(); + actor->user.rotator->open_dest = SP_TAG5(actor); + actor->user.rotator->speed = SP_TAG7(actor); + actor->user.rotator->vel = SP_TAG8(actor); + actor->user.rotator->pos = 0; // closed + actor->user.rotator->tgt = actor->user.rotator->open_dest; // closed + actor->user.rotator->ClearWalls(); + actor->user.rotator->orig_speed = actor->user.rotator->speed; - case SECT_COPY_SOURCE: - change_actor_stat(actor, STAT_COPY_SOURCE); - break; + actor->user.Flags |= (SPR_ACTIVE); - case SECT_COPY_DEST: - { - SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, false, true); - change_actor_stat(actor, STAT_COPY_DEST); - break; - } + switch (type) + { + case 0: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoSlidor; + break; + case 1: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoSlidor; + break; + } - case SECT_WALL_MOVE: - // this type considers tilenum 0 invalid. - if (SP_TAG5(actor) > 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG5(actor)); - if (SP_TAG6(actor) > 0 && !actor->texparam.isValid()) actor->texparam2 = tileGetTextureID(SP_TAG6(actor)); - change_actor_stat(actor, STAT_WALL_MOVE); - break; - case SECT_WALL_MOVE_CANSEE: - change_actor_stat(actor, STAT_WALL_MOVE_CANSEE); - break; + if (TEST_BOOL5(actor)) + { + DoSlidorInstantClose(actor); + } - case SPRI_CLIMB_MARKER: - { - // setup climb marker - change_actor_stat(actor, STAT_CLIMB_MARKER); + change_actor_stat(actor, STAT_SLIDOR); + break; + } - // make a QUICK_LADDER sprite automatically - auto actorNew = insertActor(actor->sector(), STAT_QUICK_LADDER); + case SECT_SPIKE: + { + short speed,vel,time,type,start_on,floor_vator; + double florz,ceilz; + Collision trash; + SpawnUser(actor, 0, nullptr); + + SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, false, true); + actor->sector()->extra |= (SECTFX_DYNAMIC_AREA); + + type = SP_TAG3(actor); + speed = SP_TAG4(actor); + vel = SP_TAG5(actor); + time = SP_TAG9(actor); + start_on = !!TEST_BOOL1(actor); + floor_vator = true; + if (actor->spr.cstat & (CSTAT_SPRITE_YFLIP)) + floor_vator = false; + + actor->user.jump_speed = actor->user.vel_tgt = speed; + actor->user.vel_rate = vel; + actor->user.WaitTics = time*15; // 1/8 of a sec + actor->user.Tics = 0; + + actor->user.Flags |= (SPR_ACTIVE); + + switch (type) + { + case 0: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoSpike; + break; + case 1: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoSpike; + break; + case 2: + actor->user.ActorActionFunc = DoSpikeAuto; + break; + case 3: + actor->user.Flags &= ~(SPR_ACTIVE); + actor->user.ActorActionFunc = DoSpikeAuto; + break; + } - actorNew->spr.cstat = 0; - actorNew->spr.extra = 0; - actorNew->spr.pos = actor->spr.pos; - actorNew->spr.Angles.Yaw += DAngle180; - actorNew->spr.picnum = actor->spr.picnum; + getzrangepoint(actor->spr.pos, actor->sector(), &ceilz, &trash, &florz, &trash); - actorNew->spr.pos += actor->spr.Angles.Yaw.ToVector() * 24; + if (floor_vator) + { + actor->user.zclip = florz; + + // start off + actor->user.pos.Z = actor->user.zclip; + actor->user.z_tgt = actor->spr.pos.Z; + if (start_on) + { + // start in the on position + actor->user.zclip = actor->spr.pos.Z; + actor->user.z_tgt = actor->user.pos.Z; + SpikeAlign(actor); + } + + // set orig z + actor->user.oz = actor->user.zclip; + actor->opos.Z = actor->user.oz; + } + else + { + actor->user.zclip = ceilz; + + // start off + actor->user.pos.Z = actor->user.zclip; + actor->user.z_tgt = actor->spr.pos.Z; + if (start_on) + { + // starting in the on position + actor->user.zclip = actor->spr.pos.Z; + actor->user.z_tgt = actor->user.pos.Z; + SpikeAlign(actor); + } + + // set orig z + actor->user.oz = actor->user.zclip; + actor->opos.Z = actor->user.oz; + } - break; - } + change_actor_stat(actor, STAT_SPIKE); + break; + } - case SO_AUTO_TURRET: -#if 0 - switch (gNet.MultiGameType) - { - case MULTI_GAME_NONE: - change_actor_stat(actor, STAT_ST1); - break; - case MULTI_GAME_COMMBAT: - KillActor(actor); - break; - case MULTI_GAME_COOPERATIVE: - change_actor_stat(actor, STAT_ST1); - break; - } -#else - change_actor_stat(actor, STAT_ST1); -#endif - break; + case LIGHTING: + { + int wallcount = 0; + int8_t* wall_shade; - case SO_DRIVABLE_ATTRIB: - case SO_SCALE_XY_MULT: - case SO_SCALE_INFO: - case SO_SCALE_POINT_INFO: - case SO_TORNADO: - case SO_FLOOR_MORPH: - case SO_AMOEBA: - case SO_SET_SPEED: - case SO_ANGLE: - case SO_SPIN: - case SO_SPIN_REVERSE: - case SO_BOB_START: - case SO_BOB_SPEED: - case SO_TURN_SPEED: - case SO_SYNC1: - case SO_SYNC2: - case SO_LIMIT_TURN: - case SO_MATCH_EVENT: - case SO_MAX_DAMAGE: - case SO_RAM_DAMAGE: - case SO_SLIDE: - case SO_KILLABLE: - case SECT_SO_SPRITE_OBJ: - case SECT_SO_DONT_ROTATE: - case SECT_SO_CLIP_DIST: - { - // NOTE: These will get deleted by the sector - // object - // setup code + LIGHT_Tics(actor) = 0; - change_actor_stat(actor, STAT_ST1); - break; - } + if (LIGHT_ShadeInc(actor) == 0) + LIGHT_ShadeInc(actor) = 1; - case SOUND_SPOT: - SET_SP_TAG13(actor, SP_TAG4(actor)); - change_actor_stat(actor, STAT_SOUND_SPOT); - break; + // save off original floor and ceil shades + LIGHT_FloorShade(actor) = actor->sector()->floorshade; + LIGHT_CeilingShade(actor) = actor->sector()->ceilingshade; - case STOP_SOUND_SPOT: - change_actor_stat(actor, STAT_STOP_SOUND_SPOT); - break; + // count walls of sector + for(auto& wal : actor->sector()->walls) + { + wallcount++; + if (TEST_BOOL5(actor)) + { + if (wal.twoSided()) + wallcount++; + } + } - case SPAWN_SPOT: - if (!actor->hasU()) - SpawnUser(actor, ST1, nullptr); + SpawnUser(actor, 0, nullptr); + actor->user.WallShade.Resize(wallcount); + wallcount = 0; + wall_shade = actor->user.WallShade.Data(); - if (actor->spr.scale.X == 1 && actor->spr.scale.Y == 1) // clear default scale. - actor->spr.scale = DVector2(0, 0); + // save off original wall shades + for(auto& wal : actor->sector()->walls) + { + wall_shade[wallcount] = wal.shade; + wallcount++; + if (TEST_BOOL5(actor)) + { + if (wal.twoSided()) + { + wall_shade[wallcount] = wal.nextWall()->shade; + wallcount++; + } + } + } - change_actor_stat(actor, STAT_SPAWN_SPOT); - break; + actor->user.spal = actor->spr.pal; - case VIEW_THRU_CEILING: - case VIEW_THRU_FLOOR: - { - // make sure there is only one set per level of these - SWStatIterator it2(STAT_FAF); - while (auto itActor = it2.Next()) - { - if (itActor->spr.hitag == actor->spr.hitag && itActor->spr.lotag == actor->spr.lotag) - { - I_Error("Two VIEW_THRU_ tags with same match found on level\n1: x %d, y %d \n2: x %d, y %d", int(actor->spr.pos.X), int(actor->spr.pos.Y), int(itActor->spr.pos.X), int(itActor->spr.pos.Y)); + // DON'T USE COVER function + change_actor_stat(actor, STAT_LIGHTING, true); + break; } - } - change_actor_stat(actor, STAT_FAF); - break; - } - case VIEW_LEVEL1: - case VIEW_LEVEL2: - case VIEW_LEVEL3: - case VIEW_LEVEL4: - case VIEW_LEVEL5: - case VIEW_LEVEL6: - { - change_actor_stat(actor, STAT_FAF); - break; - } + case LIGHTING_DIFFUSE: + { + int wallcount = 0; + int8_t* wall_shade; - case PLAX_GLOB_Z_ADJUST: - { - actor->sector()->extra |= (SECTFX_Z_ADJUST); - PlaxCeilGlobZadjust = SP_TAG2(actor) * zmaptoworld; - PlaxFloorGlobZadjust = SP_TAG3(actor) * zmaptoworld; - KillActor(actor); - break; - } + LIGHT_Tics(actor) = 0; - case CEILING_Z_ADJUST: - { - actor->sector()->extra |= (SECTFX_Z_ADJUST); - change_actor_stat(actor, STAT_ST1); - break; - } + // save off original floor and ceil shades + LIGHT_FloorShade(actor) = actor->sector()->floorshade; + LIGHT_CeilingShade(actor) = actor->sector()->ceilingshade; - case FLOOR_Z_ADJUST: - { - actor->sector()->extra |= (SECTFX_Z_ADJUST); - change_actor_stat(actor, STAT_ST1); - break; - } + // count walls of sector + for (auto& wal : actor->sector()->walls) + { + wallcount++; + if (TEST_BOOL5(actor)) + { + if (wal.twoSided()) + wallcount++; + } + } - case WARP_TELEPORTER: - { - actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); - actor->sector()->extra |= (SECTFX_WARP_SECTOR); - change_actor_stat(actor, STAT_WARP); + // !LIGHT + // make an wall_shade array and put it in User + SpawnUser(actor, 0, nullptr); + actor->user.WallShade.Resize(wallcount); + wallcount = 0; + wall_shade = actor->user.WallShade.Data(); - // if just a destination teleporter - // don't set up flags - if (SP_TAG10(actor) == 1) - break; + // save off original wall shades + for (auto& wal : actor->sector()->walls) + { + wall_shade[wallcount] = wal.shade; + wallcount++; + if (TEST_BOOL5(actor)) + { + if (wal.twoSided()) + { + wall_shade[wallcount] = wal.nextWall()->shade; + wallcount++; + } + } + } - // move the the next wall - auto start_wall = actor->sector()->walls.Data(); - auto wall_num = start_wall; + // DON'T USE COVER function + change_actor_stat(actor, STAT_LIGHTING_DIFFUSE, true); + break; + } - // Travel all the way around loop setting wall bits - do - { - // DO NOT TAG WHITE WALLS! - if (wall_num->twoSided()) + case SECT_VATOR_DEST: + change_actor_stat(actor, STAT_VATOR); + break; + + case SO_WALL_DONT_MOVE_UPPER: + change_actor_stat(actor, STAT_WALL_DONT_MOVE_UPPER); + break; + + case SO_WALL_DONT_MOVE_LOWER: + change_actor_stat(actor, STAT_WALL_DONT_MOVE_LOWER); + break; + + case FLOOR_SLOPE_DONT_DRAW: + change_actor_stat(actor, STAT_FLOOR_SLOPE_DONT_DRAW); + break; + + case DEMO_CAMERA: + actor->vel.Z = 100 / 256.; //attempt horiz control + change_actor_stat(actor, STAT_DEMO_CAMERA); + break; + + case LAVA_ERUPT: { - wall_num->cstat |= (CSTAT_WALL_WARP_HITSCAN); - } - wall_num = wall_num->point2Wall(); - } while (wall_num != start_wall); + SpawnUser(actor, ST1, nullptr); - break; - } + change_actor_stat(actor, STAT_NO_STATE); + actor->user.ActorActionFunc = DoLavaErupt; - case WARP_CEILING_PLANE: - case WARP_FLOOR_PLANE: - { - actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); - actor->sector()->extra |= (SECTFX_WARP_SECTOR); - change_actor_stat(actor, STAT_WARP); - break; - } + // interval between erupts + if (SP_TAG10(actor) == 0) + SP_TAG10(actor) = 20; - case WARP_COPY_SPRITE1: - actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); - actor->sector()->extra |= (SECTFX_WARP_SECTOR); - change_actor_stat(actor, STAT_WARP_COPY_SPRITE1); - break; - case WARP_COPY_SPRITE2: - actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); - actor->sector()->extra |= (SECTFX_WARP_SECTOR); - change_actor_stat(actor, STAT_WARP_COPY_SPRITE2); - break; + // interval in seconds + actor->user.WaitTics = RandomRange(SP_TAG10(actor)) * 120; - case FIREBALL_TRAP: - case BOLT_TRAP: - case SPEAR_TRAP: - { - SpawnUser(actor, 0, nullptr); - ClearOwner(actor); - change_actor_stat(actor, STAT_TRAP); - break; - } + // time to erupt + if (SP_TAG9(actor) == 0) + SP_TAG9(actor) = 10; - case SECT_SO_DONT_BOB: - { - sectp->u_defined = true; - sectp->flags |= (SECTFU_SO_DONT_BOB); - KillActor(actor); - break; - } + actor->spr.pos.Z += 30; - case SECT_LOCK_DOOR: - { - sectp->u_defined = true; - sectp->number = actor->spr.lotag; - sectp->stag = SECT_LOCK_DOOR; - KillActor(actor); - break; - } + break; + } - case SECT_SO_SINK_DEST: - { - sectp->u_defined = true; - sectp->flags |= (SECTFU_SO_SINK_DEST); - sectp->number = actor->spr.lotag; // acually the offset Z - // value - KillActor(actor); - break; - } - case SECT_SO_DONT_SINK: - { - sectp->u_defined = true; - sectp->flags |= (SECTFU_SO_DONT_SINK); - KillActor(actor); - break; - } + case SECT_EXPLODING_CEIL_FLOOR: + { + SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, false, true); - case SO_SLOPE_FLOOR_TO_POINT: - { - sectp->u_defined = true; - sectp->flags |= (SECTFU_SO_SLOPE_FLOOR_TO_POINT); - sectp->extra |= (SECTFX_DYNAMIC_AREA); - KillActor(actor); - break; - } + if ((sectp->floorstat & CSTAT_SECTOR_SLOPE)) + { + SP_TAG5(actor) = sectp->floorheinum; + sectp->setfloorslope(0); + } - case SO_SLOPE_CEILING_TO_POINT: - { - sectp->u_defined = true; - sectp->flags |= (SECTFU_SO_SLOPE_CEILING_TO_POINT); - sectp->extra |= (SECTFX_DYNAMIC_AREA); - KillActor(actor); - break; - } - case SECT_SO_FORM_WHIRLPOOL: - { - sectp->u_defined = true; - sectp->stag = SECT_SO_FORM_WHIRLPOOL; - sectp->height = actor->spr.lotag; - KillActor(actor); - break; - } + if ((sectp->ceilingstat & CSTAT_SECTOR_SLOPE)) + { + SP_TAG6(actor) = sectp->ceilingheinum; + sectp->setceilingslope(0); + } - case SECT_ACTOR_BLOCK: - { - // move the the next wall - auto start_wall = actor->sector()->walls.Data(); - auto wall_num = start_wall; + SP_TAG4(actor) = int(fabs(sectp->ceilingz - sectp->floorz)); - // Travel all the way around loop setting wall bits - do - { - wall_num->cstat |= (CSTAT_WALL_BLOCK_ACTOR); - if (wall_num->twoSided()) - wall_num->nextWall()->cstat |= CSTAT_WALL_BLOCK_ACTOR; - wall_num = wall_num->point2Wall(); - } while (wall_num != start_wall); + sectp->setceilingz(sectp->floorz); - KillActor(actor); - break; - } - } - } -} + change_actor_stat(actor, STAT_EXPLODING_CEIL_FLOOR); + break; + } -DEFINE_ACTION_FUNCTION(DSWTrigger1, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupST1(self); - return 0; -} + case SECT_COPY_SOURCE: + change_actor_stat(actor, STAT_COPY_SOURCE); + break; + case SECT_COPY_DEST: + { + SetSectorWallBits(actor->sector(), WALLFX_DONT_STICK, false, true); + change_actor_stat(actor, STAT_COPY_DEST); + break; + } -void SetupKey(DSWActor* actor, int num) -{ - if (gNet.MultiGameType == MULTI_GAME_COMMBAT || gNet.MultiGameType == MULTI_GAME_AI_BOTS) - { - KillActor(actor); - return; - } + case SECT_WALL_MOVE: + // this type considers tilenum 0 invalid. + if (SP_TAG5(actor) > 0 && !actor->texparam.isValid()) actor->texparam = tileGetTextureID(SP_TAG5(actor)); + if (SP_TAG6(actor) > 0 && !actor->texparam.isValid()) actor->texparam2 = tileGetTextureID(SP_TAG6(actor)); + change_actor_stat(actor, STAT_WALL_MOVE); + break; + case SECT_WALL_MOVE_CANSEE: + change_actor_stat(actor, STAT_WALL_MOVE_CANSEE); + break; - SpawnUser(actor, 0, nullptr); + case SPRI_CLIMB_MARKER: + { + // setup climb marker + change_actor_stat(actor, STAT_CLIMB_MARKER); - actor->spr.picnum = actor->user.ID = actor->spr.picnum; + // make a QUICK_LADDER sprite automatically + auto actorNew = insertActor(actor->sector(), STAT_QUICK_LADDER); - actor->user.spal = actor->spr.pal; // Set the palette from build + actorNew->spr.cstat = 0; + actorNew->spr.extra = 0; + actorNew->spr.pos = actor->spr.pos; + actorNew->spr.Angles.Yaw += DAngle180; + actorNew->spr.picnum = actor->spr.picnum; - //actor->spr.cstat |= (CSTAT_SPRITE_ALIGNMENT_WALL); + actorNew->spr.pos += actor->spr.Angles.Yaw.ToVector() * 24; - ChangeState(actor, s_Key[num]); + break; + } - change_actor_stat(actor, STAT_ITEM); - actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN | CSTAT_SPRITE_ONE_SIDE); - actor->spr.cstat2 |= CSTAT2_SPRITE_NOANIMATE; - actor->user.Radius = 500; - actor->spr.hitag = LUMINOUS; //Set so keys over ride colored lighting + case SO_AUTO_TURRET: +#if 0 + switch (gNet.MultiGameType) + { + case MULTI_GAME_NONE: + change_actor_stat(actor, STAT_ST1); + break; + case MULTI_GAME_COMMBAT: + KillActor(actor); + break; + case MULTI_GAME_COOPERATIVE: + change_actor_stat(actor, STAT_ST1); + break; + } +#else + change_actor_stat(actor, STAT_ST1); +#endif + break; - DoActorZrange(actor); -} + case SO_DRIVABLE_ATTRIB: + case SO_SCALE_XY_MULT: + case SO_SCALE_INFO: + case SO_SCALE_POINT_INFO: + case SO_TORNADO: + case SO_FLOOR_MORPH: + case SO_AMOEBA: + case SO_SET_SPEED: + case SO_ANGLE: + case SO_SPIN: + case SO_SPIN_REVERSE: + case SO_BOB_START: + case SO_BOB_SPEED: + case SO_TURN_SPEED: + case SO_SYNC1: + case SO_SYNC2: + case SO_LIMIT_TURN: + case SO_MATCH_EVENT: + case SO_MAX_DAMAGE: + case SO_RAM_DAMAGE: + case SO_SLIDE: + case SO_KILLABLE: + case SECT_SO_SPRITE_OBJ: + case SECT_SO_DONT_ROTATE: + case SECT_SO_CLIP_DIST: + { + // NOTE: These will get deleted by the sector + // object + // setup code -DEFINE_ACTION_FUNCTION(DSWKey, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupKey(self, self->IntVar("keynum")); - return 0; -} + change_actor_stat(actor, STAT_ST1); + break; + } + case SOUND_SPOT: + SET_SP_TAG13(actor, SP_TAG4(actor)); + change_actor_stat(actor, STAT_SOUND_SPOT); + break; -//--------------------------------------------------------------------------- -// -// -// -//--------------------------------------------------------------------------- + case STOP_SOUND_SPOT: + change_actor_stat(actor, STAT_STOP_SOUND_SPOT); + break; -void SpriteSetup(void) -{ - short num; - double cz,fz; + case SPAWN_SPOT: + if (!actor->hasU()) + SpawnUser(actor, ST1, nullptr); - MinEnemySkill = EnemyCheckSkill(); + if (actor->spr.scale.X == 1 && actor->spr.scale.Y == 1) // clear default scale. + actor->spr.scale = DVector2(0, 0); - // special case for player - //PicAnimOff(PLAYER_NINJA_RUN_R0); + change_actor_stat(actor, STAT_SPAWN_SPOT); + break; - // Clear Sprite Extension structure + case VIEW_THRU_CEILING: + case VIEW_THRU_FLOOR: + { + // make sure there is only one set per level of these + SWStatIterator it2(STAT_FAF); + while (auto itActor = it2.Next()) + { + if (itActor->spr.hitag == actor->spr.hitag && itActor->spr.lotag == actor->spr.lotag) + { + I_Error("Two VIEW_THRU_ tags with same match found on level\n1: x %d, y %d \n2: x %d, y %d", int(actor->spr.pos.X), int(actor->spr.pos.Y), int(itActor->spr.pos.X), int(itActor->spr.pos.Y)); + } + } + change_actor_stat(actor, STAT_FAF); + break; + } - // Clear all extra bits - they are set by sprites - for(auto& sect: sector) - { - sect.extra = 0; - } + case VIEW_LEVEL1: + case VIEW_LEVEL2: + case VIEW_LEVEL3: + case VIEW_LEVEL4: + case VIEW_LEVEL5: + case VIEW_LEVEL6: + { + change_actor_stat(actor, STAT_FAF); + break; + } - // Clear PARALLAX_LEVEL overrides - parallaxyscale_override = 0; - pskybits_override = -1; + case PLAX_GLOB_Z_ADJUST: + { + actor->sector()->extra |= (SECTFX_Z_ADJUST); + PlaxCeilGlobZadjust = SP_TAG2(actor) * zmaptoworld; + PlaxFloorGlobZadjust = SP_TAG3(actor) * zmaptoworld; + KillActor(actor); + break; + } - // Call my little sprite setup routine first - JS_SpriteSetup(); + case CEILING_Z_ADJUST: + { + actor->sector()->extra |= (SECTFX_Z_ADJUST); + change_actor_stat(actor, STAT_ST1); + break; + } - int minEnemySkill = EnemyCheckSkill(); + case FLOOR_Z_ADJUST: + { + actor->sector()->extra |= (SECTFX_Z_ADJUST); + change_actor_stat(actor, STAT_ST1); + break; + } - SWStatIterator it(STAT_DEFAULT); - while (auto actor = it.Next()) - { - // not used yetv - calcSlope(actor->sector(), actor->spr.pos, &cz, &fz); - if (actor->spr.pos.Z > ((cz + fz) * 0.5)) - { - // closer to a floor - actor->spr.cstat |= (CSTAT_SPRITE_CLOSE_FLOOR); - } + case WARP_TELEPORTER: + { + actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); + actor->sector()->extra |= (SECTFX_WARP_SECTOR); + change_actor_stat(actor, STAT_WARP); - // CSTAT_SPIN is insupported - get rid of it - if ((actor->spr.cstat & (CSTAT_SPRITE_ALIGNMENT_MASK)) == CSTAT_SPRITE_ALIGNMENT_SLAB) - actor->spr.cstat &= ~(CSTAT_SPRITE_ALIGNMENT_SLAB); + // if just a destination teleporter + // don't set up flags + if (SP_TAG10(actor) == 1) + break; - // if BLOCK is set set BLOCK_HITSCAN - // Hope this doesn't screw up anything - if (actor->spr.cstat & (CSTAT_SPRITE_BLOCK)) - actor->spr.cstat |= (CSTAT_SPRITE_BLOCK_HITSCAN); + // move the the next wall + auto start_wall = actor->sector()->walls.Data(); + auto wall_num = start_wall; - //////////////////////////////////////////// - // - // BREAKABLE CHECK - // - //////////////////////////////////////////// + // Travel all the way around loop setting wall bits + do + { + // DO NOT TAG WHITE WALLS! + if (wall_num->twoSided()) + { + wall_num->cstat |= (CSTAT_WALL_WARP_HITSCAN); + } - // USER SETUP - TAGGED BY USER - // Non ST1 sprites that are tagged like them - if (TEST_BOOL1(actor) && actor->spr.picnum != ST1) - { - actor->spr.extra &= ~( - SPRX_BOOL4| - SPRX_BOOL5| - SPRX_BOOL6| - SPRX_BOOL7| - SPRX_BOOL8| - SPRX_BOOL9| - SPRX_BOOL10); + wall_num = wall_num->point2Wall(); + } + while (wall_num != start_wall); - switch (actor->spr.hitag) - { - case BREAKABLE: - // need something that tells missiles to hit them - // but allows actors to move through them - SetActorSizeX(actor); - actor->spr.extra |= (SPRX_BREAKABLE); - actor->spr.cstat |= (CSTAT_SPRITE_BREAKABLE); - break; - } - } - else - { - // BREAK SETUP TABLE AUTOMATED - SetupSpriteForBreak(actor); - } + break; + } - if (actor->spr.lotag == TAG_SPRITE_HIT_MATCH) - { - // if multi item and not a modem game - if ((actor->spr.extra & SPRX_MULTI_ITEM)) - { - if (numplayers <= 1 || gNet.MultiGameType == MULTI_GAME_COOPERATIVE) + case WARP_CEILING_PLANE: + case WARP_FLOOR_PLANE: { - KillActor(actor); - continue; + actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); + actor->sector()->extra |= (SECTFX_WARP_SECTOR); + change_actor_stat(actor, STAT_WARP); + break; } - } - - - // crack sprite - if (actor->spr.picnum == CRACK) - { - actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); - actor->spr.cstat |= (CSTAT_SPRITE_BLOCK_HITSCAN|CSTAT_SPRITE_BLOCK_MISSILE);; - } - else - { - actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK); - actor->spr.cstat |= (CSTAT_SPRITE_BLOCK_HITSCAN|CSTAT_SPRITE_BLOCK_MISSILE);; - actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE);; - } - if (SP_TAG8(actor) & BIT(0)) - actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); + case WARP_COPY_SPRITE1: + actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); + actor->sector()->extra |= (SECTFX_WARP_SECTOR); + change_actor_stat(actor, STAT_WARP_COPY_SPRITE1); + break; + case WARP_COPY_SPRITE2: + actor->spr.cstat |= (CSTAT_SPRITE_INVISIBLE); + actor->sector()->extra |= (SECTFX_WARP_SECTOR); + change_actor_stat(actor, STAT_WARP_COPY_SPRITE2); + break; - if (SP_TAG8(actor) & BIT(1)) - actor->spr.cstat &= ~(CSTAT_SPRITE_INVISIBLE); + case FIREBALL_TRAP: + case BOLT_TRAP: + case SPEAR_TRAP: + { + SpawnUser(actor, 0, nullptr); + ClearOwner(actor); + change_actor_stat(actor, STAT_TRAP); + break; + } - change_actor_stat(actor, STAT_SPRITE_HIT_MATCH); - continue; - } + case SECT_SO_DONT_BOB: + { + sectp->u_defined = true; + sectp->flags |= (SECTFU_SO_DONT_BOB); + KillActor(actor); + break; + } - if (actor->spr.picnum >= TRACK_SPRITE && - actor->spr.picnum <= TRACK_SPRITE + MAX_TRACKS) - { - short track_num; + case SECT_LOCK_DOOR: + { + sectp->u_defined = true; + sectp->number = actor->spr.lotag; + sectp->stag = SECT_LOCK_DOOR; + KillActor(actor); + break; + } - // skip this sprite, just for numbering walls/sectors - if (actor->spr.cstat & (CSTAT_SPRITE_ALIGNMENT_WALL)) - continue; + case SECT_SO_SINK_DEST: + { + sectp->u_defined = true; + sectp->flags |= (SECTFU_SO_SINK_DEST); + sectp->number = actor->spr.lotag; // acually the offset Z + // value + KillActor(actor); + break; + } - track_num = actor->spr.picnum - TRACK_SPRITE + 0; + case SECT_SO_DONT_SINK: + { + sectp->u_defined = true; + sectp->flags |= (SECTFU_SO_DONT_SINK); + KillActor(actor); + break; + } - change_actor_stat(actor, STAT_TRACK + track_num); + case SO_SLOPE_FLOOR_TO_POINT: + { + sectp->u_defined = true; + sectp->flags |= (SECTFU_SO_SLOPE_FLOOR_TO_POINT); + sectp->extra |= (SECTFX_DYNAMIC_AREA); + KillActor(actor); + break; + } - continue; - } + case SO_SLOPE_CEILING_TO_POINT: + { + sectp->u_defined = true; + sectp->flags |= (SECTFU_SO_SLOPE_CEILING_TO_POINT); + sectp->extra |= (SECTFX_DYNAMIC_AREA); + KillActor(actor); + break; + } + case SECT_SO_FORM_WHIRLPOOL: + { + sectp->u_defined = true; + sectp->stag = SECT_SO_FORM_WHIRLPOOL; + sectp->height = actor->spr.lotag; + KillActor(actor); + break; + } - if (ActorSpawn(actor)) - continue; + case SECT_ACTOR_BLOCK: + { + // move the the next wall + auto start_wall = actor->sector()->walls.Data(); + auto wall_num = start_wall; - switch (actor->spr.picnum) - { - case ST_QUICK_JUMP: - change_actor_stat(actor, STAT_QUICK_JUMP); - break; - case ST_QUICK_JUMP_DOWN: - change_actor_stat(actor, STAT_QUICK_JUMP_DOWN); - break; - case ST_QUICK_SUPER_JUMP: - change_actor_stat(actor, STAT_QUICK_SUPER_JUMP); - break; - case ST_QUICK_SCAN: - change_actor_stat(actor, STAT_QUICK_SCAN); - break; - case ST_QUICK_EXIT: - change_actor_stat(actor, STAT_QUICK_EXIT); - break; - case ST_QUICK_OPERATE: - change_actor_stat(actor, STAT_QUICK_OPERATE); - break; - case ST_QUICK_DUCK: - change_actor_stat(actor, STAT_QUICK_DUCK); - break; - case ST_QUICK_DEFEND: - change_actor_stat(actor, STAT_QUICK_DEFEND); - break; + // Travel all the way around loop setting wall bits + do + { + wall_num->cstat |= (CSTAT_WALL_BLOCK_ACTOR); + if (wall_num->twoSided()) + wall_num->nextWall()->cstat |= CSTAT_WALL_BLOCK_ACTOR; + wall_num = wall_num->point2Wall(); + } + while (wall_num != start_wall); - case ST1: - { - SetupST1(actor); + KillActor(actor); + break; + } + } + } } break; @@ -2783,16 +2847,42 @@ void SpriteSetup(void) goto KeyMain; case RED_SKELKEY: num = 11; - KeyMain: - SetupKey(actor, num); +KeyMain: + { + + if (gNet.MultiGameType == MULTI_GAME_COMMBAT || gNet.MultiGameType == MULTI_GAME_AI_BOTS) + { + KillActor(actor); + break; + } + + SpawnUser(actor, 0, nullptr); + + actor->spr.picnum = actor->user.ID = actor->spr.picnum; + + actor->user.spal = actor->spr.pal; // Set the palette from build + + //actor->spr.cstat |= (CSTAT_SPRITE_ALIGNMENT_WALL); + + ChangeState(actor, s_Key[num]); + + change_actor_stat(actor, STAT_ITEM); + actor->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN | CSTAT_SPRITE_ONE_SIDE); + actor->spr.cstat2 |= CSTAT2_SPRITE_NOANIMATE; + actor->user.Radius = 500; + actor->spr.hitag = LUMINOUS; //Set so keys over ride colored lighting + + DoActorZrange(actor); + } + break; // Used for multiplayer locks - case SKEL_LOCKED: - case RAMCARD_LOCKED: - case CARD_LOCKED: - case EXIT_SWITCH: + case MPLOCK1: + case MPLOCK2: + case MPLOCK3: + case MPLOCK4: if ((actor->spr.extra & SPRX_MULTI_ITEM)) if (numplayers <= 1 || gNet.MultiGameType == MULTI_GAME_COOPERATIVE) @@ -4200,11 +4290,11 @@ int NewStateGroup(DSWActor* actor, STATE* StateGroup[]) // Kind of a goofy check, but it should catch alot of invalid states! // BTW, 6144 is the max tile number allowed in editart. - if (actor->user.__legacyState.State && (actor->user.__legacyState.State->Pic < 0 || actor->user.__legacyState.State->Pic > MAXTILES)) // JBF: verify this! + if (actor->user.State && (actor->user.State->Pic < 0 || actor->user.State->Pic > MAXTILES)) // JBF: verify this! return 0; - actor->user.__legacyState.Rot = StateGroup; - actor->user.__legacyState.State = actor->user.__legacyState.StateStart = StateGroup[0]; + actor->user.Rot = StateGroup; + actor->user.State = actor->user.StateStart = StateGroup[0]; actor->user.Tics = 0; @@ -4698,20 +4788,20 @@ int DoCoin(DSWActor* actor) if (actor->user.WaitTics < 10*120) { - if (actor->user.__legacyState.StateStart != s_GreenCoin) + if (actor->user.StateStart != s_GreenCoin) { - offset = int(actor->user.__legacyState.State - actor->user.__legacyState.StateStart); + offset = int(actor->user.State - actor->user.StateStart); ChangeState(actor, s_GreenCoin); - actor->user.__legacyState.State = actor->user.__legacyState.StateStart + offset; + actor->user.State = actor->user.StateStart + offset; } } else if (actor->user.WaitTics < 20*120) { - if (actor->user.__legacyState.StateStart != s_YellowCoin) + if (actor->user.StateStart != s_YellowCoin) { - offset = int(actor->user.__legacyState.State - actor->user.__legacyState.StateStart); + offset = int(actor->user.State - actor->user.StateStart); ChangeState(actor, s_YellowCoin); - actor->user.__legacyState.State = actor->user.__legacyState.StateStart + offset; + actor->user.State = actor->user.StateStart + offset; } } @@ -5920,9 +6010,10 @@ int StateControl(DSWActor* actor) { short StateTics; - if (!actor->user.__legacyState.State) + if (!actor->user.State) { - actor->callAction(); + ASSERT(actor->user.ActorActionFunc); + (actor->user.ActorActionFunc)(actor); return 0; } @@ -5932,30 +6023,30 @@ int StateControl(DSWActor* actor) actor->user.Tics += ACTORMOVETICS; // Skip states if too much time has passed - while (actor->user.Tics >= (actor->user.__legacyState.State->Tics & SF_TICS_MASK)) + while (actor->user.Tics >= (actor->user.State->Tics & SF_TICS_MASK)) { - StateTics = (actor->user.__legacyState.State->Tics & SF_TICS_MASK); + StateTics = (actor->user.State->Tics & SF_TICS_MASK); - if ((actor->user.__legacyState.State->Tics & SF_TIC_ADJUST)) + if ((actor->user.State->Tics & SF_TIC_ADJUST)) { - ASSERT(actor->user.__legacyState.Attrib); + ASSERT(actor->user.Attrib); ASSERT(actor->user.speed < MAX_SPEED); - ASSERT(StateTics > -actor->user.__legacyState.Attrib->TicAdjust[actor->user.speed]); + ASSERT(StateTics > -actor->user.Attrib->TicAdjust[actor->user.speed]); - StateTics += actor->user.__legacyState.Attrib->TicAdjust[actor->user.speed]; + StateTics += actor->user.Attrib->TicAdjust[actor->user.speed]; } // Set Tics actor->user.Tics -= StateTics; // Transition to the next state - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + actor->user.State = actor->user.State->NextState; // Look for flags embedded into the Tics variable - while ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) + while ((actor->user.State->Tics & SF_QUICK_CALL)) { // Call it once and go to the next state - actor->callStateAction(); + (*actor->user.State->Animator)(actor); ASSERT(actor->hasU()); //put this in to see if actor was getting killed with in his QUICK_CALL state @@ -5964,38 +6055,39 @@ int StateControl(DSWActor* actor) // if still on the same QUICK_CALL should you // go to the next state. - if ((actor->user.__legacyState.State->Tics & SF_QUICK_CALL)) - actor->user.__legacyState.State = actor->user.__legacyState.State->NextState; + if ((actor->user.State->Tics & SF_QUICK_CALL)) + actor->user.State = actor->user.State->NextState; } if (!actor->hasU()) break; - if (!actor->user.__legacyState.State->Pic) + if (!actor->user.State->Pic) { - NewStateGroup(actor, (STATE* *) actor->user.__legacyState.State->NextState); + NewStateGroup(actor, (STATE* *) actor->user.State->NextState); } } if (actor->hasU()) { - ASSERT(actor->user.__legacyState.State); + ASSERT(actor->user.State); // Set the correct pic - if ((actor->user.__legacyState.State->Tics & SF_WALL_STATE)) + if ((actor->user.State->Tics & SF_WALL_STATE)) { ASSERT(actor->user.WallP); - actor->user.WallP->setwalltexture(tileGetTextureID(actor->user.__legacyState.State->Pic)); + actor->user.WallP->setwalltexture(tileGetTextureID(actor->user.State->Pic)); } else { - if (actor->user.__legacyState.RotNum > 1) - actor->spr.picnum = actor->user.__legacyState.Rot[0]->Pic; + if (actor->user.RotNum > 1) + actor->spr.picnum = actor->user.Rot[0]->Pic; else - actor->spr.picnum = actor->user.__legacyState.State->Pic; + actor->spr.picnum = actor->user.State->Pic; } // Call the correct animator - actor->callStateAction(); + if (actor->user.State->Animator && actor->user.State->Animator != NullAnimator) + (*actor->user.State->Animator)(actor); } return 0; @@ -6091,7 +6183,8 @@ void SpriteControl(void) it.Reset(STAT_NO_STATE); while (auto actor = it.Next()) { - if (actor->hasU()) actor->callAction(); + if (actor->hasU() && actor->user.ActorActionFunc) + actor->user.ActorActionFunc(actor); } if (MoveSkip8 == 0) @@ -6130,7 +6223,7 @@ void SpriteControl(void) if (!(actor->user.Flags & SPR_ACTIVE)) continue; - actor->callAction(); + actor->user.ActorActionFunc(actor); } it.Reset(STAT_SPIKE); @@ -6147,7 +6240,7 @@ void SpriteControl(void) if (!(actor->user.Flags & SPR_ACTIVE)) continue; - actor->callAction(); + actor->user.ActorActionFunc(actor); } it.Reset(STAT_ROTATOR); @@ -6164,7 +6257,7 @@ void SpriteControl(void) if (!(actor->user.Flags & SPR_ACTIVE)) continue; - actor->callAction(); + actor->user.ActorActionFunc(actor); } it.Reset(STAT_SLIDOR); @@ -6181,7 +6274,7 @@ void SpriteControl(void) if (!(actor->user.Flags & SPR_ACTIVE)) continue; - actor->callAction(); + actor->user.ActorActionFunc(actor); } it.Reset(STAT_SUICIDE); @@ -6673,6 +6766,14 @@ Collision move_ground_missile(DSWActor* actor, const DVector2& change, double ce #include "saveable.h" +static saveable_code saveable_sprite_code[] = +{ + SAVE_CODE(DoGrating), + SAVE_CODE(DoKey), + SAVE_CODE(DoCoin), + SAVE_CODE(DoGet), +}; + static saveable_data saveable_sprite_data[] = { SAVE_DATA(Track), @@ -6701,7 +6802,13 @@ static saveable_data saveable_sprite_data[] = SAVE_DATA(s_GreenKey), SAVE_DATA(s_YellowKey), SAVE_DATA(s_Key), - + /* + SAVE_DATA(s_BlueKeyStatue), + SAVE_DATA(s_RedKeyStatue), + SAVE_DATA(s_GreenKeyStatue), + SAVE_DATA(s_YellowKeyStatue), + SAVE_DATA(s_KeyStatue), + */ SAVE_DATA(s_RedCoin), SAVE_DATA(s_YellowCoin), SAVE_DATA(s_GreenCoin), @@ -6737,6 +6844,7 @@ static saveable_data saveable_sprite_data[] = SAVE_DATA(s_IconSmMedkit), SAVE_DATA(s_IconBooster), SAVE_DATA(s_IconHeatCard), + //SAVE_DATA(s_IconEnvironSuit), SAVE_DATA(s_IconCloak), SAVE_DATA(s_IconFly), SAVE_DATA(s_IconNightVision), @@ -6746,7 +6854,8 @@ static saveable_data saveable_sprite_data[] = saveable_module saveable_sprite = { // code - nullptr, 0, + saveable_sprite_code, + SIZ(saveable_sprite_code), // data saveable_sprite_data, diff --git a/source/games/sw/src/sumo.cpp b/source/games/sw/src/sumo.cpp index a8a22befe07..42a98b50b1e 100644 --- a/source/games/sw/src/sumo.cpp +++ b/source/games/sw/src/sumo.cpp @@ -51,48 +51,50 @@ bool bosswasseen[3]; DSWActor* BossSpriteNum[3]; +ANIMATOR InitSumoCharge; + DECISION SumoBattle[] = { - {690, &AF(InitActorMoveCloser) }, - {692, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {690, InitActorMoveCloser }, + {692, InitActorAlertNoise }, + {1024, InitActorAttack } }; DECISION SumoOffense[] = { - {690, &AF(InitActorMoveCloser) }, - {692, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {690, InitActorMoveCloser }, + {692, InitActorAlertNoise }, + {1024, InitActorAttack } }; -DECISIONB SumoBroadcast[] = +DECISION SumoBroadcast[] = { - {2, attr_alert }, - {4, attr_ambient }, - {1024, 0 } + {2, InitActorAlertNoise }, + {4, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION SumoSurprised[] = { - {700, &AF(InitActorMoveCloser) }, - {703, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorDecide ) } + {700, InitActorMoveCloser }, + {703, InitActorAlertNoise }, + {1024, InitActorDecide } }; DECISION SumoEvasive[] = { - {1024, &AF(InitActorAttack) } + {1024, InitActorAttack } }; DECISION SumoLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION SumoCloseRange[] = { - {1024, &AF(InitActorAttack) } + {1024, InitActorAttack } }; PERSONALITY SumoPersonality = @@ -127,37 +129,41 @@ ATTRIBUTE SumoAttrib = #define SUMO_RATE 24 +ANIMATOR DoSumoMove,NullSumo,DoStayOnFloor, + DoActorDebris, SpawnSumoExp, + SpawnCoolg; + STATE s_SumoRun[5][4] = { { - {SUMO_RUN_R0 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[0][1]}, - {SUMO_RUN_R0 + 1, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[0][2]}, - {SUMO_RUN_R0 + 2, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[0][3]}, - {SUMO_RUN_R0 + 3, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[0][0]} + {SUMO_RUN_R0 + 0, SUMO_RATE, DoSumoMove, &s_SumoRun[0][1]}, + {SUMO_RUN_R0 + 1, SUMO_RATE, DoSumoMove, &s_SumoRun[0][2]}, + {SUMO_RUN_R0 + 2, SUMO_RATE, DoSumoMove, &s_SumoRun[0][3]}, + {SUMO_RUN_R0 + 3, SUMO_RATE, DoSumoMove, &s_SumoRun[0][0]} }, { - {SUMO_RUN_R1 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[1][1]}, - {SUMO_RUN_R1 + 1, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[1][2]}, - {SUMO_RUN_R1 + 2, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[1][3]}, - {SUMO_RUN_R1 + 3, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[1][0]} + {SUMO_RUN_R1 + 0, SUMO_RATE, DoSumoMove, &s_SumoRun[1][1]}, + {SUMO_RUN_R1 + 1, SUMO_RATE, DoSumoMove, &s_SumoRun[1][2]}, + {SUMO_RUN_R1 + 2, SUMO_RATE, DoSumoMove, &s_SumoRun[1][3]}, + {SUMO_RUN_R1 + 3, SUMO_RATE, DoSumoMove, &s_SumoRun[1][0]} }, { - {SUMO_RUN_R2 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[2][1]}, - {SUMO_RUN_R2 + 1, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[2][2]}, - {SUMO_RUN_R2 + 2, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[2][3]}, - {SUMO_RUN_R2 + 3, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[2][0]} + {SUMO_RUN_R2 + 0, SUMO_RATE, DoSumoMove, &s_SumoRun[2][1]}, + {SUMO_RUN_R2 + 1, SUMO_RATE, DoSumoMove, &s_SumoRun[2][2]}, + {SUMO_RUN_R2 + 2, SUMO_RATE, DoSumoMove, &s_SumoRun[2][3]}, + {SUMO_RUN_R2 + 3, SUMO_RATE, DoSumoMove, &s_SumoRun[2][0]} }, { - {SUMO_RUN_R3 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[3][1]}, - {SUMO_RUN_R3 + 1, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[3][2]}, - {SUMO_RUN_R3 + 2, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[3][3]}, - {SUMO_RUN_R3 + 3, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[3][0]} + {SUMO_RUN_R3 + 0, SUMO_RATE, DoSumoMove, &s_SumoRun[3][1]}, + {SUMO_RUN_R3 + 1, SUMO_RATE, DoSumoMove, &s_SumoRun[3][2]}, + {SUMO_RUN_R3 + 2, SUMO_RATE, DoSumoMove, &s_SumoRun[3][3]}, + {SUMO_RUN_R3 + 3, SUMO_RATE, DoSumoMove, &s_SumoRun[3][0]} }, { - {SUMO_RUN_R4 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[4][1]}, - {SUMO_RUN_R4 + 1, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[4][2]}, - {SUMO_RUN_R4 + 2, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[4][3]}, - {SUMO_RUN_R4 + 3, SUMO_RATE, &AF(DoSumoMove), &s_SumoRun[4][0]}, + {SUMO_RUN_R4 + 0, SUMO_RATE, DoSumoMove, &s_SumoRun[4][1]}, + {SUMO_RUN_R4 + 1, SUMO_RATE, DoSumoMove, &s_SumoRun[4][2]}, + {SUMO_RUN_R4 + 2, SUMO_RATE, DoSumoMove, &s_SumoRun[4][3]}, + {SUMO_RUN_R4 + 3, SUMO_RATE, DoSumoMove, &s_SumoRun[4][0]}, } }; @@ -171,6 +177,61 @@ STATE* sg_SumoRun[] = }; +////////////////////// +// +// SUMO CHARGE +// +////////////////////// +#if 0 + +#define SUMO_RATE 12 + +ANIMATOR DoSumoMove,NullSumo,DoStayOnFloor, + DoActorDebris, DoSumoRumble; + +STATE s_SumoCharge[5][4] = +{ + { + {SUMO_RUN_R0 + 0, SUMO_RATE, DoSumoMove, &s_SumoCharge[0][1]}, + {SUMO_RUN_R0 + 1, SUMO_RATE, DoSumoMove, &s_SumoCharge[0][2]}, + {SUMO_RUN_R0 + 2, SUMO_RATE, DoSumoMove, &s_SumoCharge[0][3]}, + {SUMO_RUN_R0 + 3, SUMO_RATE, DoSumoMove, &s_SumoCharge[0][0]}, + }, + { + {SUMO_RUN_R1 + 0, SUMO_RATE, DoSumoMove, &s_SumoCharge[1][1]}, + {SUMO_RUN_R1 + 1, SUMO_RATE, DoSumoMove, &s_SumoCharge[1][2]}, + {SUMO_RUN_R1 + 2, SUMO_RATE, DoSumoMove, &s_SumoCharge[1][3]}, + {SUMO_RUN_R1 + 3, SUMO_RATE, DoSumoMove, &s_SumoCharge[1][0]}, + }, + { + {SUMO_RUN_R2 + 0, SUMO_RATE, DoSumoMove, &s_SumoCharge[2][1]}, + {SUMO_RUN_R2 + 1, SUMO_RATE, DoSumoMove, &s_SumoCharge[2][2]}, + {SUMO_RUN_R2 + 2, SUMO_RATE, DoSumoMove, &s_SumoCharge[2][3]}, + {SUMO_RUN_R2 + 3, SUMO_RATE, DoSumoMove, &s_SumoCharge[2][0]}, + }, + { + {SUMO_RUN_R3 + 0, SUMO_RATE, DoSumoMove, &s_SumoCharge[3][1]}, + {SUMO_RUN_R3 + 1, SUMO_RATE, DoSumoMove, &s_SumoCharge[3][2]}, + {SUMO_RUN_R3 + 2, SUMO_RATE, DoSumoMove, &s_SumoCharge[3][3]}, + {SUMO_RUN_R3 + 3, SUMO_RATE, DoSumoMove, &s_SumoCharge[3][0]}, + }, + { + {SUMO_RUN_R4 + 0, SUMO_RATE, DoSumoMove, &s_SumoCharge[4][1]}, + {SUMO_RUN_R4 + 1, SUMO_RATE, DoSumoMove, &s_SumoCharge[4][2]}, + {SUMO_RUN_R4 + 2, SUMO_RATE, DoSumoMove, &s_SumoCharge[4][3]}, + {SUMO_RUN_R4 + 3, SUMO_RATE, DoSumoMove, &s_SumoCharge[4][0]}, + } +}; + +STATE* sg_SumoCharge[] = +{ + &s_SumoCharge[0][0], + &s_SumoCharge[1][0], + &s_SumoCharge[2][0], + &s_SumoCharge[3][0], + &s_SumoCharge[4][0] +}; +#endif ////////////////////// // @@ -181,19 +242,19 @@ STATE* sg_SumoRun[] = STATE s_SumoStand[5][1] = { { - {SUMO_RUN_R0 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoStand[0][0]} + {SUMO_RUN_R0 + 0, SUMO_RATE, DoSumoMove, &s_SumoStand[0][0]} }, { - {SUMO_RUN_R1 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoStand[1][0]} + {SUMO_RUN_R1 + 0, SUMO_RATE, DoSumoMove, &s_SumoStand[1][0]} }, { - {SUMO_RUN_R2 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoStand[2][0]} + {SUMO_RUN_R2 + 0, SUMO_RATE, DoSumoMove, &s_SumoStand[2][0]} }, { - {SUMO_RUN_R3 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoStand[3][0]} + {SUMO_RUN_R3 + 0, SUMO_RATE, DoSumoMove, &s_SumoStand[3][0]} }, { - {SUMO_RUN_R4 + 0, SUMO_RATE, &AF(DoSumoMove), &s_SumoStand[4][0]} + {SUMO_RUN_R4 + 0, SUMO_RATE, DoSumoMove, &s_SumoStand[4][0]} } }; @@ -217,24 +278,24 @@ STATE* sg_SumoStand[] = STATE s_SumoPain[5][2] = { { - {SUMO_PAIN_R0 + 0, SUMO_PAIN_RATE, &AF(NullSumo), &s_SumoPain[0][1]}, - {SUMO_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoPain[0][0]} + {SUMO_PAIN_R0 + 0, SUMO_PAIN_RATE, NullSumo, &s_SumoPain[0][1]}, + {SUMO_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoPain[0][0]} }, { - {SUMO_PAIN_R1 + 0, SUMO_PAIN_RATE, &AF(NullSumo), &s_SumoPain[1][1]}, - {SUMO_PAIN_R1 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoPain[1][0]} + {SUMO_PAIN_R1 + 0, SUMO_PAIN_RATE, NullSumo, &s_SumoPain[1][1]}, + {SUMO_PAIN_R1 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoPain[1][0]} }, { - {SUMO_PAIN_R2 + 0, SUMO_PAIN_RATE, &AF(NullSumo), &s_SumoPain[2][1]}, - {SUMO_PAIN_R2 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoPain[2][0]} + {SUMO_PAIN_R2 + 0, SUMO_PAIN_RATE, NullSumo, &s_SumoPain[2][1]}, + {SUMO_PAIN_R2 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoPain[2][0]} }, { - {SUMO_PAIN_R3 + 0, SUMO_PAIN_RATE, &AF(NullSumo), &s_SumoPain[3][1]}, - {SUMO_PAIN_R3 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoPain[3][0]} + {SUMO_PAIN_R3 + 0, SUMO_PAIN_RATE, NullSumo, &s_SumoPain[3][1]}, + {SUMO_PAIN_R3 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoPain[3][0]} }, { - {SUMO_PAIN_R4 + 0, SUMO_PAIN_RATE, &AF(NullSumo), &s_SumoPain[4][1]}, - {SUMO_PAIN_R4 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoPain[4][0]} + {SUMO_PAIN_R4 + 0, SUMO_PAIN_RATE, NullSumo, &s_SumoPain[4][1]}, + {SUMO_PAIN_R4 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoPain[4][0]} } }; @@ -254,48 +315,49 @@ STATE* sg_SumoPain[] = ////////////////////// #define SUMO_FART_RATE 12 +ANIMATOR InitSumoFart; STATE s_SumoFart[5][6] = { { - {SUMO_FART_R0 + 0, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[0][1]}, - {SUMO_FART_R0 + 0, SF_QUICK_CALL, &AF(InitSumoFart), &s_SumoFart[0][2]}, - {SUMO_FART_R0 + 1, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[0][3]}, - {SUMO_FART_R0 + 2, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[0][4]}, - {SUMO_FART_R0 + 3, SUMO_FART_RATE*10, &AF(NullSumo), &s_SumoFart[0][5]}, - {SUMO_FART_R0 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoFart[0][0]} + {SUMO_FART_R0 + 0, SUMO_FART_RATE, NullSumo, &s_SumoFart[0][1]}, + {SUMO_FART_R0 + 0, SF_QUICK_CALL, InitSumoFart, &s_SumoFart[0][2]}, + {SUMO_FART_R0 + 1, SUMO_FART_RATE, NullSumo, &s_SumoFart[0][3]}, + {SUMO_FART_R0 + 2, SUMO_FART_RATE, NullSumo, &s_SumoFart[0][4]}, + {SUMO_FART_R0 + 3, SUMO_FART_RATE*10, NullSumo, &s_SumoFart[0][5]}, + {SUMO_FART_R0 + 3, SF_QUICK_CALL, InitActorDecide, &s_SumoFart[0][0]} }, { - {SUMO_FART_R1 + 0, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[1][1]}, - {SUMO_FART_R1 + 0, SF_QUICK_CALL, &AF(InitSumoFart), &s_SumoFart[1][2]}, - {SUMO_FART_R1 + 1, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[1][3]}, - {SUMO_FART_R1 + 2, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[1][4]}, - {SUMO_FART_R1 + 3, SUMO_FART_RATE*10, &AF(NullSumo), &s_SumoFart[1][5]}, - {SUMO_FART_R1 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoFart[1][0]} + {SUMO_FART_R1 + 0, SUMO_FART_RATE, NullSumo, &s_SumoFart[1][1]}, + {SUMO_FART_R1 + 0, SF_QUICK_CALL, InitSumoFart, &s_SumoFart[1][2]}, + {SUMO_FART_R1 + 1, SUMO_FART_RATE, NullSumo, &s_SumoFart[1][3]}, + {SUMO_FART_R1 + 2, SUMO_FART_RATE, NullSumo, &s_SumoFart[1][4]}, + {SUMO_FART_R1 + 3, SUMO_FART_RATE*10, NullSumo, &s_SumoFart[1][5]}, + {SUMO_FART_R1 + 0, SF_QUICK_CALL, InitActorDecide, &s_SumoFart[1][0]} }, { - {SUMO_FART_R2 + 0, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[2][1]}, - {SUMO_FART_R2 + 0, SF_QUICK_CALL, &AF(InitSumoFart), &s_SumoFart[2][2]}, - {SUMO_FART_R2 + 1, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[2][3]}, - {SUMO_FART_R2 + 2, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[2][4]}, - {SUMO_FART_R2 + 3, SUMO_FART_RATE*10, &AF(NullSumo), &s_SumoFart[2][5]}, - {SUMO_FART_R2 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoFart[2][0]} + {SUMO_FART_R2 + 0, SUMO_FART_RATE, NullSumo, &s_SumoFart[2][1]}, + {SUMO_FART_R2 + 0, SF_QUICK_CALL, InitSumoFart, &s_SumoFart[2][2]}, + {SUMO_FART_R2 + 1, SUMO_FART_RATE, NullSumo, &s_SumoFart[2][3]}, + {SUMO_FART_R2 + 2, SUMO_FART_RATE, NullSumo, &s_SumoFart[2][4]}, + {SUMO_FART_R2 + 3, SUMO_FART_RATE*10, NullSumo, &s_SumoFart[2][5]}, + {SUMO_FART_R2 + 0, SF_QUICK_CALL, InitActorDecide, &s_SumoFart[2][0]} }, { - {SUMO_FART_R3 + 0, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[3][1]}, - {SUMO_FART_R3 + 0, SF_QUICK_CALL, &AF(InitSumoFart), &s_SumoFart[3][2]}, - {SUMO_FART_R3 + 1, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[3][3]}, - {SUMO_FART_R3 + 2, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[3][4]}, - {SUMO_FART_R3 + 3, SUMO_FART_RATE*10, &AF(NullSumo), &s_SumoFart[3][5]}, - {SUMO_FART_R3 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoFart[3][0]} + {SUMO_FART_R3 + 0, SUMO_FART_RATE, NullSumo, &s_SumoFart[3][1]}, + {SUMO_FART_R3 + 0, SF_QUICK_CALL, InitSumoFart, &s_SumoFart[3][2]}, + {SUMO_FART_R3 + 1, SUMO_FART_RATE, NullSumo, &s_SumoFart[3][3]}, + {SUMO_FART_R3 + 2, SUMO_FART_RATE, NullSumo, &s_SumoFart[3][4]}, + {SUMO_FART_R3 + 3, SUMO_FART_RATE*10, NullSumo, &s_SumoFart[3][5]}, + {SUMO_FART_R3 + 0, SF_QUICK_CALL, InitActorDecide, &s_SumoFart[3][0]} }, { - {SUMO_FART_R4 + 0, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[4][1]}, - {SUMO_FART_R4 + 0, SF_QUICK_CALL, &AF(InitSumoFart), &s_SumoFart[4][2]}, - {SUMO_FART_R4 + 1, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[4][3]}, - {SUMO_FART_R4 + 2, SUMO_FART_RATE, &AF(NullSumo), &s_SumoFart[4][4]}, - {SUMO_FART_R4 + 3, SUMO_FART_RATE*10, &AF(NullSumo), &s_SumoFart[4][5]}, - {SUMO_FART_R4 + 0, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoFart[4][0]} + {SUMO_FART_R4 + 0, SUMO_FART_RATE, NullSumo, &s_SumoFart[4][1]}, + {SUMO_FART_R4 + 0, SF_QUICK_CALL, InitSumoFart, &s_SumoFart[4][2]}, + {SUMO_FART_R4 + 1, SUMO_FART_RATE, NullSumo, &s_SumoFart[4][3]}, + {SUMO_FART_R4 + 2, SUMO_FART_RATE, NullSumo, &s_SumoFart[4][4]}, + {SUMO_FART_R4 + 3, SUMO_FART_RATE*10, NullSumo, &s_SumoFart[4][5]}, + {SUMO_FART_R4 + 0, SF_QUICK_CALL, InitActorDecide, &s_SumoFart[4][0]} } }; @@ -315,48 +377,49 @@ STATE* sg_SumoFart[] = ////////////////////// #define SUMO_CLAP_RATE 12 +ANIMATOR InitSumoClap; STATE s_SumoClap[5][6] = { { - {SUMO_CLAP_R0 + 0, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[0][1]}, - {SUMO_CLAP_R0 + 1, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[0][2]}, - {SUMO_CLAP_R0 + 2, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[0][3]}, - {SUMO_CLAP_R0 + 2, SF_QUICK_CALL, &AF(InitSumoClap), &s_SumoClap[0][4]}, - {SUMO_CLAP_R0 + 3, SUMO_CLAP_RATE*10, &AF(NullSumo), &s_SumoClap[0][5]}, - {SUMO_CLAP_R0 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoClap[0][5]} + {SUMO_CLAP_R0 + 0, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[0][1]}, + {SUMO_CLAP_R0 + 1, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[0][2]}, + {SUMO_CLAP_R0 + 2, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[0][3]}, + {SUMO_CLAP_R0 + 2, SF_QUICK_CALL, InitSumoClap, &s_SumoClap[0][4]}, + {SUMO_CLAP_R0 + 3, SUMO_CLAP_RATE*10, NullSumo, &s_SumoClap[0][5]}, + {SUMO_CLAP_R0 + 3, SF_QUICK_CALL, InitActorDecide, &s_SumoClap[0][5]} }, { - {SUMO_CLAP_R1 + 0, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[1][1]}, - {SUMO_CLAP_R1 + 1, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[1][2]}, - {SUMO_CLAP_R1 + 2, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[1][3]}, - {SUMO_CLAP_R1 + 2, SF_QUICK_CALL, &AF(InitSumoClap), &s_SumoClap[1][4]}, - {SUMO_CLAP_R1 + 3, SUMO_CLAP_RATE*10, &AF(NullSumo), &s_SumoClap[1][5]}, - {SUMO_CLAP_R1 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoClap[1][5]} + {SUMO_CLAP_R1 + 0, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[1][1]}, + {SUMO_CLAP_R1 + 1, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[1][2]}, + {SUMO_CLAP_R1 + 2, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[1][3]}, + {SUMO_CLAP_R1 + 2, SF_QUICK_CALL, InitSumoClap, &s_SumoClap[1][4]}, + {SUMO_CLAP_R1 + 3, SUMO_CLAP_RATE*10, NullSumo, &s_SumoClap[1][5]}, + {SUMO_CLAP_R1 + 3, SF_QUICK_CALL, InitActorDecide, &s_SumoClap[1][5]} }, { - {SUMO_CLAP_R2 + 0, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[2][1]}, - {SUMO_CLAP_R2 + 1, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[2][2]}, - {SUMO_CLAP_R2 + 2, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[2][3]}, - {SUMO_CLAP_R2 + 2, SF_QUICK_CALL, &AF(InitSumoClap), &s_SumoClap[2][4]}, - {SUMO_CLAP_R2 + 3, SUMO_CLAP_RATE*10, &AF(NullSumo), &s_SumoClap[2][5]}, - {SUMO_CLAP_R2 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoClap[2][5]} + {SUMO_CLAP_R2 + 0, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[2][1]}, + {SUMO_CLAP_R2 + 1, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[2][2]}, + {SUMO_CLAP_R2 + 2, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[2][3]}, + {SUMO_CLAP_R2 + 2, SF_QUICK_CALL, InitSumoClap, &s_SumoClap[2][4]}, + {SUMO_CLAP_R2 + 3, SUMO_CLAP_RATE*10, NullSumo, &s_SumoClap[2][5]}, + {SUMO_CLAP_R2 + 3, SF_QUICK_CALL, InitActorDecide, &s_SumoClap[2][5]} }, { - {SUMO_CLAP_R3 + 0, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[3][1]}, - {SUMO_CLAP_R3 + 1, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[3][2]}, - {SUMO_CLAP_R3 + 2, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[3][3]}, - {SUMO_CLAP_R3 + 2, SF_QUICK_CALL, &AF(InitSumoClap), &s_SumoClap[3][4]}, - {SUMO_CLAP_R3 + 3, SUMO_CLAP_RATE*10, &AF(NullSumo), &s_SumoClap[3][5]}, - {SUMO_CLAP_R3 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoClap[3][5]} + {SUMO_CLAP_R3 + 0, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[3][1]}, + {SUMO_CLAP_R3 + 1, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[3][2]}, + {SUMO_CLAP_R3 + 2, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[3][3]}, + {SUMO_CLAP_R3 + 2, SF_QUICK_CALL, InitSumoClap, &s_SumoClap[3][4]}, + {SUMO_CLAP_R3 + 3, SUMO_CLAP_RATE*10, NullSumo, &s_SumoClap[3][5]}, + {SUMO_CLAP_R3 + 3, SF_QUICK_CALL, InitActorDecide, &s_SumoClap[3][5]} }, { - {SUMO_CLAP_R4 + 0, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[4][1]}, - {SUMO_CLAP_R4 + 1, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[4][2]}, - {SUMO_CLAP_R4 + 2, SUMO_CLAP_RATE, &AF(NullSumo), &s_SumoClap[4][3]}, - {SUMO_CLAP_R4 + 2, SF_QUICK_CALL, &AF(InitSumoClap), &s_SumoClap[4][4]}, - {SUMO_CLAP_R4 + 3, SUMO_CLAP_RATE*10, &AF(NullSumo), &s_SumoClap[4][5]}, - {SUMO_CLAP_R4 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoClap[4][5]} + {SUMO_CLAP_R4 + 0, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[4][1]}, + {SUMO_CLAP_R4 + 1, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[4][2]}, + {SUMO_CLAP_R4 + 2, SUMO_CLAP_RATE, NullSumo, &s_SumoClap[4][3]}, + {SUMO_CLAP_R4 + 2, SF_QUICK_CALL, InitSumoClap, &s_SumoClap[4][4]}, + {SUMO_CLAP_R4 + 3, SUMO_CLAP_RATE*10, NullSumo, &s_SumoClap[4][5]}, + {SUMO_CLAP_R4 + 3, SF_QUICK_CALL, InitActorDecide, &s_SumoClap[4][5]} } }; @@ -376,48 +439,49 @@ STATE* sg_SumoClap[] = ////////////////////// #define SUMO_STOMP_RATE 30 +ANIMATOR InitSumoStomp; STATE s_SumoStomp[5][6] = { { - {SUMO_STOMP_R0 + 0, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[0][1]}, - {SUMO_STOMP_R0 + 1, SUMO_STOMP_RATE*3, &AF(NullSumo), &s_SumoStomp[0][2]}, - {SUMO_STOMP_R0 + 2, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[0][3]}, - {SUMO_STOMP_R0 + 2, 0|SF_QUICK_CALL, &AF(InitSumoStomp), &s_SumoStomp[0][4]}, - {SUMO_STOMP_R0 + 2, 8, &AF(NullSumo), &s_SumoStomp[0][5]}, - {SUMO_STOMP_R0 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoStomp[0][5]} + {SUMO_STOMP_R0 + 0, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[0][1]}, + {SUMO_STOMP_R0 + 1, SUMO_STOMP_RATE*3, NullSumo, &s_SumoStomp[0][2]}, + {SUMO_STOMP_R0 + 2, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[0][3]}, + {SUMO_STOMP_R0 + 2, 0|SF_QUICK_CALL, InitSumoStomp, &s_SumoStomp[0][4]}, + {SUMO_STOMP_R0 + 2, 8, NullSumo, &s_SumoStomp[0][5]}, + {SUMO_STOMP_R0 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoStomp[0][5]} }, { - {SUMO_STOMP_R1 + 0, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[1][1]}, - {SUMO_STOMP_R1 + 1, SUMO_STOMP_RATE*3, &AF(NullSumo), &s_SumoStomp[1][2]}, - {SUMO_STOMP_R1 + 2, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[1][3]}, - {SUMO_STOMP_R1 + 2, 0|SF_QUICK_CALL, &AF(InitSumoStomp), &s_SumoStomp[1][4]}, - {SUMO_STOMP_R1 + 2, 8, &AF(NullSumo), &s_SumoStomp[1][5]}, - {SUMO_STOMP_R1 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoStomp[1][5]} + {SUMO_STOMP_R1 + 0, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[1][1]}, + {SUMO_STOMP_R1 + 1, SUMO_STOMP_RATE*3, NullSumo, &s_SumoStomp[1][2]}, + {SUMO_STOMP_R1 + 2, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[1][3]}, + {SUMO_STOMP_R1 + 2, 0|SF_QUICK_CALL, InitSumoStomp, &s_SumoStomp[1][4]}, + {SUMO_STOMP_R1 + 2, 8, NullSumo, &s_SumoStomp[1][5]}, + {SUMO_STOMP_R1 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoStomp[1][5]} }, { - {SUMO_STOMP_R2 + 0, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[2][1]}, - {SUMO_STOMP_R2 + 1, SUMO_STOMP_RATE*3, &AF(NullSumo), &s_SumoStomp[2][2]}, - {SUMO_STOMP_R2 + 2, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[2][3]}, - {SUMO_STOMP_R2 + 2, 0|SF_QUICK_CALL, &AF(InitSumoStomp), &s_SumoStomp[2][4]}, - {SUMO_STOMP_R2 + 2, 8, &AF(NullSumo), &s_SumoStomp[2][5]}, - {SUMO_STOMP_R2 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoStomp[2][5]} + {SUMO_STOMP_R2 + 0, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[2][1]}, + {SUMO_STOMP_R2 + 1, SUMO_STOMP_RATE*3, NullSumo, &s_SumoStomp[2][2]}, + {SUMO_STOMP_R2 + 2, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[2][3]}, + {SUMO_STOMP_R2 + 2, 0|SF_QUICK_CALL, InitSumoStomp, &s_SumoStomp[2][4]}, + {SUMO_STOMP_R2 + 2, 8, NullSumo, &s_SumoStomp[2][5]}, + {SUMO_STOMP_R2 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoStomp[2][5]} }, { - {SUMO_STOMP_R3 + 0, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[3][1]}, - {SUMO_STOMP_R3 + 1, SUMO_STOMP_RATE*3, &AF(NullSumo), &s_SumoStomp[3][2]}, - {SUMO_STOMP_R3 + 2, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[3][3]}, - {SUMO_STOMP_R3 + 2, 0|SF_QUICK_CALL, &AF(InitSumoStomp), &s_SumoStomp[3][4]}, - {SUMO_STOMP_R3 + 2, 8, &AF(NullSumo), &s_SumoStomp[3][5]}, - {SUMO_STOMP_R3 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoStomp[3][5]} + {SUMO_STOMP_R3 + 0, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[3][1]}, + {SUMO_STOMP_R3 + 1, SUMO_STOMP_RATE*3, NullSumo, &s_SumoStomp[3][2]}, + {SUMO_STOMP_R3 + 2, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[3][3]}, + {SUMO_STOMP_R3 + 2, 0|SF_QUICK_CALL, InitSumoStomp, &s_SumoStomp[3][4]}, + {SUMO_STOMP_R3 + 2, 8, NullSumo, &s_SumoStomp[3][5]}, + {SUMO_STOMP_R3 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoStomp[3][5]} }, { - {SUMO_STOMP_R4 + 0, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[4][1]}, - {SUMO_STOMP_R4 + 1, SUMO_STOMP_RATE*3, &AF(NullSumo), &s_SumoStomp[4][2]}, - {SUMO_STOMP_R4 + 2, SUMO_STOMP_RATE, &AF(NullSumo), &s_SumoStomp[4][3]}, - {SUMO_STOMP_R4 + 2, 0|SF_QUICK_CALL, &AF(InitSumoStomp), &s_SumoStomp[4][4]}, - {SUMO_STOMP_R4 + 2, 8, &AF(NullSumo), &s_SumoStomp[4][5]}, - {SUMO_STOMP_R4 + 2, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_SumoStomp[4][5]} + {SUMO_STOMP_R4 + 0, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[4][1]}, + {SUMO_STOMP_R4 + 1, SUMO_STOMP_RATE*3, NullSumo, &s_SumoStomp[4][2]}, + {SUMO_STOMP_R4 + 2, SUMO_STOMP_RATE, NullSumo, &s_SumoStomp[4][3]}, + {SUMO_STOMP_R4 + 2, 0|SF_QUICK_CALL, InitSumoStomp, &s_SumoStomp[4][4]}, + {SUMO_STOMP_R4 + 2, 8, NullSumo, &s_SumoStomp[4][5]}, + {SUMO_STOMP_R4 + 2, 0|SF_QUICK_CALL, InitActorDecide, &s_SumoStomp[4][5]} } }; @@ -438,26 +502,27 @@ STATE* sg_SumoStomp[] = ////////////////////// #define SUMO_DIE_RATE 30 +ANIMATOR DoSumoDeathMelt; STATE s_SumoDie[] = { - {SUMO_DIE + 0, SUMO_DIE_RATE*2, &AF(NullSumo), &s_SumoDie[1]}, - {SUMO_DIE + 1, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[2]}, - {SUMO_DIE + 2, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[3]}, - {SUMO_DIE + 3, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[4]}, - {SUMO_DIE + 4, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[5]}, - {SUMO_DIE + 5, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[6]}, - {SUMO_DIE + 6, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[7]}, - {SUMO_DIE + 6, SUMO_DIE_RATE*3, &AF(NullSumo), &s_SumoDie[8]}, - {SUMO_DIE + 7, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[9]}, - {SUMO_DIE + 6, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[10]}, - {SUMO_DIE + 7, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[11]}, - {SUMO_DIE + 6, SUMO_DIE_RATE-8, &AF(NullSumo), &s_SumoDie[12]}, - {SUMO_DIE + 7, SUMO_DIE_RATE, &AF(NullSumo), &s_SumoDie[13]}, - {SUMO_DIE + 7, SF_QUICK_CALL, &AF(DoSumoDeathMelt), &s_SumoDie[14]}, - {SUMO_DIE + 6, SUMO_DIE_RATE-15, &AF(NullSumo), &s_SumoDie[15]}, - {SUMO_DEAD, SF_QUICK_CALL, &AF(QueueFloorBlood), &s_SumoDie[16]}, - {SUMO_DEAD, SUMO_DIE_RATE, &AF(DoActorDebris), &s_SumoDie[16]} + {SUMO_DIE + 0, SUMO_DIE_RATE*2, NullSumo, &s_SumoDie[1]}, + {SUMO_DIE + 1, SUMO_DIE_RATE, NullSumo, &s_SumoDie[2]}, + {SUMO_DIE + 2, SUMO_DIE_RATE, NullSumo, &s_SumoDie[3]}, + {SUMO_DIE + 3, SUMO_DIE_RATE, NullSumo, &s_SumoDie[4]}, + {SUMO_DIE + 4, SUMO_DIE_RATE, NullSumo, &s_SumoDie[5]}, + {SUMO_DIE + 5, SUMO_DIE_RATE, NullSumo, &s_SumoDie[6]}, + {SUMO_DIE + 6, SUMO_DIE_RATE, NullSumo, &s_SumoDie[7]}, + {SUMO_DIE + 6, SUMO_DIE_RATE*3, NullSumo, &s_SumoDie[8]}, + {SUMO_DIE + 7, SUMO_DIE_RATE, NullSumo, &s_SumoDie[9]}, + {SUMO_DIE + 6, SUMO_DIE_RATE, NullSumo, &s_SumoDie[10]}, + {SUMO_DIE + 7, SUMO_DIE_RATE, NullSumo, &s_SumoDie[11]}, + {SUMO_DIE + 6, SUMO_DIE_RATE-8, NullSumo, &s_SumoDie[12]}, + {SUMO_DIE + 7, SUMO_DIE_RATE, NullSumo, &s_SumoDie[13]}, + {SUMO_DIE + 7, SF_QUICK_CALL, DoSumoDeathMelt, &s_SumoDie[14]}, + {SUMO_DIE + 6, SUMO_DIE_RATE-15, NullSumo, &s_SumoDie[15]}, + {SUMO_DEAD, SF_QUICK_CALL, QueueFloorBlood, &s_SumoDie[16]}, + {SUMO_DEAD, SUMO_DIE_RATE, DoActorDebris, &s_SumoDie[16]} }; STATE* sg_SumoDie[] = @@ -467,7 +532,7 @@ STATE* sg_SumoDie[] = STATE s_SumoDead[] = { - {SUMO_DEAD, SUMO_DIE_RATE, &AF(DoActorDebris), &s_SumoDead[0]}, + {SUMO_DEAD, SUMO_DIE_RATE, DoActorDebris, &s_SumoDead[0]}, }; STATE* sg_SumoDead[] = @@ -540,6 +605,8 @@ ACTOR_ACTION_SET MiniSumoActionSet = int SetupSumo(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor,SUMO_RUN_R0,s_SumoRun[0]); @@ -550,10 +617,10 @@ int SetupSumo(DSWActor* actor) if (Skill == 1) actor->user.Health = 4000; ChangeState(actor,s_SumoRun[0]); - actor->user.__legacyState.Attrib = &SumoAttrib; + actor->user.Attrib = &SumoAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_SumoDie; - actor->user.__legacyState.Rot = sg_SumoRun; + actor->user.StateEnd = s_SumoDie; + actor->user.Rot = sg_SumoRun; EnemyDefaults(actor, &SumoActionSet, &SumoPersonality); @@ -562,7 +629,7 @@ int SetupSumo(DSWActor* actor) { // Mini Sumo actor->spr.scale = DVector2(0.671875, 0.453125); - actor->user.__legacyState.ActorActionSet = &MiniSumoActionSet; + actor->user.ActorActionSet = &MiniSumoActionSet; actor->user.Health = 500; } else @@ -575,14 +642,6 @@ int SetupSumo(DSWActor* actor) return 0; } -DEFINE_ACTION_FUNCTION(DSWSumo, Initialize) -{ - PARAM_SELF_PROLOGUE(DSWActor); - SetupSumo(self); - return 0; -} - - //--------------------------------------------------------------------------- // // @@ -610,7 +669,7 @@ int DoSumoMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); KeepActorOnFloor(actor); @@ -853,14 +912,35 @@ void BossHealthMeter(void) #include "saveable.h" +static saveable_code saveable_sumo_code[] = +{ + SAVE_CODE(NullSumo), + SAVE_CODE(DoSumoMove), + SAVE_CODE(DoSumoRumble), + SAVE_CODE(InitSumoFart), + SAVE_CODE(InitSumoStomp), + SAVE_CODE(InitSumoClap), + SAVE_CODE(DoSumoDeathMelt), +}; + static saveable_data saveable_sumo_data[] = { + SAVE_DATA(SumoBattle), + SAVE_DATA(SumoOffense), + SAVE_DATA(SumoBroadcast), + SAVE_DATA(SumoSurprised), + SAVE_DATA(SumoEvasive), + SAVE_DATA(SumoLostTarget), + SAVE_DATA(SumoCloseRange), + SAVE_DATA(SumoPersonality), SAVE_DATA(SumoAttrib), SAVE_DATA(s_SumoRun), SAVE_DATA(sg_SumoRun), + //SAVE_DATA(s_SumoCharge), + //SAVE_DATA(sg_SumoCharge), SAVE_DATA(s_SumoStand), SAVE_DATA(sg_SumoStand), SAVE_DATA(s_SumoPain), @@ -883,7 +963,8 @@ static saveable_data saveable_sumo_data[] = saveable_module saveable_sumo = { // code - nullptr, 0, + saveable_sumo_code, + SIZ(saveable_sumo_code), // data saveable_sumo_data, diff --git a/source/games/sw/src/swactor.h b/source/games/sw/src/swactor.h index 03aec3a49cb..ac85ae766bf 100644 --- a/source/games/sw/src/swactor.h +++ b/source/games/sw/src/swactor.h @@ -4,7 +4,6 @@ BEGIN_SW_NS -struct Personality; class DSWActor : public DCoreActor { @@ -19,10 +18,6 @@ class DSWActor : public DCoreActor TObjPtr ownerActor; FTextureID texparam, texparam2; // some special variants of ST1 need this... - // These should probably be elsewhere later but for now this is most convenient. - int16_t CloseAttackPercent[MAX_ACTOR_CLOSE_ATTACK]; - int16_t AttackPercent[MAX_ACTOR_ATTACK]; - DSWActor() = default; bool hasU() { return hasUser; } @@ -40,23 +35,6 @@ class DSWActor : public DCoreActor } void Serialize(FSerializer& arc) override; - // wrappers to static class data. Must be stored in the meta data, but will require better means of access than what's currently available. - Personality* getPersonality(); - int16_t* getCloseAttackPercent() { return CloseAttackPercent; } - int16_t* getAttackPercent() { return AttackPercent; } - - // wrappers that hide legacy implementation details. - void ChangeStateEnd(); - void clearActionFunc() { user.ActorActionFunc = nullptr; } - void setActionDecide(); - void setStateGroup(FName label, int substate = 0); // substate is only valid for Attack and CloseAttack - bool checkStateGroup(FName label, int substate = 0); - bool hasState(FName label, int substate = 0); - void callAction(); - void callStateAction(); - int callFunction(VMFunction* func); - - }; inline void UpdateChangeXY(DSWActor* actor) diff --git a/source/games/sw/src/track.cpp b/source/games/sw/src/track.cpp index c87483c8d3b..b037d781627 100644 --- a/source/games/sw/src/track.cpp +++ b/source/games/sw/src/track.cpp @@ -42,8 +42,11 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS DVector2 DoTrack(SECTOR_OBJECT* sop, short locktics); +void DoAutoTurretObject(SECTOR_OBJECT* sop); +void DoTornadoObject(SECTOR_OBJECT* sop); int PickJumpSpeed(DSWActor*, int pix_height); DSWActor* FindNearSprite(DSWActor, short); +ANIMATOR NinjaJumpActionFunc; #define ACTOR_STD_JUMP (-384) DAngle GlobSpeedSO; @@ -151,7 +154,7 @@ short ActorFindTrack(DSWActor* actor, int8_t player_dir, int track_type, int* tr { case BIT(TT_DUCK_N_SHOOT): { - if (!actor->hasState(NAME_Duck)) + if (!actor->user.ActorActionSet->Duck) return -1; end_point[1] = 0; @@ -161,7 +164,7 @@ short ActorFindTrack(DSWActor* actor, int8_t player_dir, int track_type, int* tr // for ladders only look at first track point case BIT(TT_LADDER): { - if (!actor->hasState(NAME_Climb)) + if (!actor->user.ActorActionSet->Climb) return -1; end_point[1] = 0; @@ -171,7 +174,7 @@ short ActorFindTrack(DSWActor* actor, int8_t player_dir, int track_type, int* tr case BIT(TT_JUMP_UP): case BIT(TT_JUMP_DOWN): { - if (!actor->hasState(NAME_Jump)) + if (!actor->user.ActorActionSet->Jump) return -1; end_point[1] = 0; @@ -180,7 +183,7 @@ short ActorFindTrack(DSWActor* actor, int8_t player_dir, int track_type, int* tr case BIT(TT_TRAVERSE): { - if (!actor->hasState(NAME_Crawl) || !!actor->hasState(NAME_Jump)) + if (!actor->user.ActorActionSet->Crawl || !actor->user.ActorActionSet->Jump) return -1; break; @@ -801,7 +804,7 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) if (!itActor->hasU()) SpawnUser(itActor, 0, nullptr); - itActor->user.__legacyState.RotNum = 0; + itActor->user.RotNum = 0; itActor->backuppos(); itActor->user.oz = itActor->opos.Z; @@ -927,6 +930,12 @@ void SetupSectorObject(sectortype* sectp, short tag) // initialize stuff first time through if (sop->num_sectors == -1) { + void DoTornadoObject(SECTOR_OBJECT* sop); + void MorphTornado(SECTOR_OBJECT* sop); + void MorphFloor(SECTOR_OBJECT* sop); + void ScaleSectorObject(SECTOR_OBJECT* sop); + void DoAutoTurretObject(SECTOR_OBJECT* sop); + memset(sop->sectp, 0, sizeof(sop->sectp)); memset(sop->so_actors, 0, sizeof(sop->so_actors)); sop->morph_wall_point = nullptr; @@ -979,8 +988,9 @@ void SetupSectorObject(sectortype* sectp, short tag) sop->morph_dist = 0; sop->morph_off = { 0,0 }; - sop->PreMoveScale = false; - sop->AnimType = SOType_None; + sop->PreMoveAnimator = nullptr; + sop->PostMoveAnimator = nullptr; + sop->Animator = nullptr; } switch (tag % 5) @@ -1061,12 +1071,12 @@ void SetupSectorObject(sectortype* sectp, short tag) { change_actor_stat(actor, STAT_NO_STATE); SpawnUser(actor, 0, nullptr); - actor->clearActionFunc(); + actor->user.ActorActionFunc = nullptr; } break; case SO_AUTO_TURRET: - sop->AnimType = SOType_AutoTurret; + sop->Animator = DoAutoTurretObject; KillActor(actor); break; @@ -1079,8 +1089,9 @@ void SetupSectorObject(sectortype* sectp, short tag) sop->spin_speed = DAngle22_5 * (1. / 16); sop->last_ang = sop->ang; // animators - sop->PreMoveScale = true; - sop->AnimType = SOType_Tornado; + sop->Animator = DoTornadoObject; + sop->PreMoveAnimator = ScaleSectorObject; + sop->PostMoveAnimator = MorphTornado; // clip sop->clipdist = 156.25; // morph point @@ -1097,7 +1108,7 @@ void SetupSectorObject(sectortype* sectp, short tag) sop->scale_type = SO_SCALE_NONE; sop->morph_speed = 7.5; sop->morph_z_speed = 7; - sop->AnimType = SOType_Floor; + sop->PostMoveAnimator = MorphFloor; sop->morph_dist_max = 250; sop->morph_rand_freq = 8; KillActor(actor); @@ -1107,7 +1118,7 @@ void SetupSectorObject(sectortype* sectp, short tag) sop->flags |= (SOBJ_DYNAMIC); //sop->scale_type = SO_SCALE_CYCLE; sop->scale_type = SO_SCALE_RANDOM_POINT; - sop->PreMoveScale = true; + sop->PreMoveAnimator = ScaleSectorObject; memset(sop->scale_point_dist,0,sizeof(sop->scale_point_dist));; sop->scale_point_base_speed = 0.25 + RandomRangeF(0.5); @@ -1277,7 +1288,7 @@ void SetupSectorObject(sectortype* sectp, short tag) sectp->hitag = 0; if (sop->max_damage <= 0) - VehicleSetSmoke(sop, AF(SpawnVehicleSmoke)); + VehicleSetSmoke(sop, SpawnVehicleSmoke); break; } @@ -1759,8 +1770,8 @@ void RefreshPoints(SECTOR_OBJECT* sop, const DVector2& move, bool dynamic) DAngle delta_ang_from_orig; // do scaling - if (dynamic && sop->PreMoveScale) - ScaleSectorObject(sop); + if (dynamic && sop->PreMoveAnimator) + (*sop->PreMoveAnimator)(sop); sectortype** sectp; int j; @@ -1832,18 +1843,8 @@ void RefreshPoints(SECTOR_OBJECT* sop, const DVector2& move, bool dynamic) MovePoints(sop, delta_ang_from_orig, move); // do morphing - angle independent - if (dynamic) - { - switch (sop->AnimType) - { - case SOType_Floor: - MorphFloor(sop); - break; - case SOType_Tornado: - MorphTornado(sop); - break; - } - } + if (dynamic && sop->PostMoveAnimator) + (*sop->PostMoveAnimator)(sop); } void KillSectorObjectSprites(SECTOR_OBJECT* sop) @@ -2564,7 +2565,7 @@ void PlaceSectorObject(SECTOR_OBJECT* sop, const DVector2& pos) RefreshPoints(sop, pos - sop->pmid.XY(), false); } -void VehicleSetSmoke(SECTOR_OBJECT* sop, VMFunction* animator) +void VehicleSetSmoke(SECTOR_OBJECT* sop, ANIMATOR* animator) { sectortype* *sectp; @@ -2896,11 +2897,11 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) break; case TRACK_ACTOR_STAND: - actor->setStateGroup(NAME_Stand); + NewStateGroup(actor, actor->user.ActorActionSet->Stand); break; case TRACK_ACTOR_JUMP: - if (actor->hasState(NAME_Jump)) + if (actor->user.ActorActionSet->Jump) { actor->spr.Angles.Yaw = tpoint->angle; @@ -2910,14 +2911,14 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) actor->user.jump_speed = -tpoint->tag_high; DoActorBeginJump(actor); - actor->user.ActorActionFunc = AF(DoActorMoveJump); + actor->user.ActorActionFunc = DoActorMoveJump; } break; case TRACK_ACTOR_QUICK_JUMP: case TRACK_ACTOR_QUICK_SUPER_JUMP: - if (actor->hasState(NAME_Jump)) + if (actor->user.ActorActionSet->Jump) { int zdiff; HitInfo hit{}; @@ -2956,7 +2957,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) } DoActorBeginJump(actor); - actor->user.ActorActionFunc = AF(DoActorMoveJump); + actor->user.ActorActionFunc = DoActorMoveJump; return false; } @@ -2965,7 +2966,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) case TRACK_ACTOR_QUICK_JUMP_DOWN: - if (actor->hasState(NAME_Jump)) + if (actor->user.ActorActionSet->Jump) { actor->spr.Angles.Yaw = tpoint->angle; @@ -2981,7 +2982,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) } DoActorBeginJump(actor); - actor->user.ActorActionFunc = AF(DoActorMoveJump); + actor->user.ActorActionFunc = DoActorMoveJump; return false; } @@ -2989,7 +2990,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) case TRACK_ACTOR_QUICK_SCAN: - if (actor->hasState(NAME_Jump)) + if (actor->user.ActorActionSet->Jump) { ActorLeaveTrack(actor); return false; @@ -2999,7 +3000,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) case TRACK_ACTOR_QUICK_DUCK: - if (!actor->checkStateGroup(NAME_Duck)) + if (actor->user.Rot != actor->user.ActorActionSet->Duck) { actor->spr.Angles.Yaw = tpoint->angle; @@ -3011,7 +3012,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) actor->user.WaitTics = tpoint->tag_high * 128; InitActorDuck(actor); - actor->user.ActorActionFunc = AF(DoActorDuck); + actor->user.ActorActionFunc = DoActorDuck; return false; } @@ -3023,7 +3024,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) HitInfo near{}; double z[2]; - if (actor->checkStateGroup(NAME_Sit) || actor->checkStateGroup(NAME_Stand)) + if (actor->user.Rot == actor->user.ActorActionSet->Sit || actor->user.Rot == actor->user.ActorActionSet->Stand) return false; actor->spr.Angles.Yaw = tpoint->angle; @@ -3044,7 +3045,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) else actor->user.WaitTics = tpoint->tag_high * 128; - actor->setStateGroup(NAME_Stand); + NewStateGroup(actor, actor->user.ActorActionSet->Stand); } } } @@ -3058,7 +3059,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) else actor->user.WaitTics = tpoint->tag_high * 128; - actor->setStateGroup(NAME_Sit); + NewStateGroup(actor, actor->user.ActorActionSet->Sit); } } @@ -3066,7 +3067,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) } case TRACK_ACTOR_JUMP_IF_FORWARD: - if (actor->hasState(NAME_Jump) && actor->user.track_dir == 1) + if (actor->user.ActorActionSet->Jump && actor->user.track_dir == 1) { if (!tpoint->tag_high) actor->user.jump_speed = ACTOR_STD_JUMP; @@ -3079,7 +3080,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) break; case TRACK_ACTOR_JUMP_IF_REVERSE: - if (actor->hasState(NAME_Jump) && actor->user.track_dir == -1) + if (actor->user.ActorActionSet->Jump && actor->user.track_dir == -1) { if (!tpoint->tag_high) actor->user.jump_speed = ACTOR_STD_JUMP; @@ -3092,92 +3093,92 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) break; case TRACK_ACTOR_CRAWL: - if (!actor->checkStateGroup(NAME_Crawl)) - actor->setStateGroup(NAME_Crawl); + if (actor->user.Rot != actor->user.ActorActionSet->Crawl) + NewStateGroup(actor, actor->user.ActorActionSet->Crawl); else - actor->setStateGroup(NAME_Rise); + NewStateGroup(actor, actor->user.ActorActionSet->Rise); break; case TRACK_ACTOR_SWIM: - if (!actor->checkStateGroup(NAME_Swim)) - actor->setStateGroup(NAME_Swim); + if (actor->user.Rot != actor->user.ActorActionSet->Swim) + NewStateGroup(actor, actor->user.ActorActionSet->Swim); else - actor->setStateGroup(NAME_Rise); + NewStateGroup(actor, actor->user.ActorActionSet->Rise); break; case TRACK_ACTOR_FLY: - actor->setStateGroup(NAME_Fly); + NewStateGroup(actor, actor->user.ActorActionSet->Fly); break; case TRACK_ACTOR_SIT: - if (actor->hasState(NAME_Sit)) + if (actor->user.ActorActionSet->Sit) { if (!tpoint->tag_high) actor->user.WaitTics = 3 * 120; else actor->user.WaitTics = tpoint->tag_high * 128; - actor->setStateGroup(NAME_Sit); + NewStateGroup(actor, actor->user.ActorActionSet->Sit); } break; case TRACK_ACTOR_DEATH1: - if (actor->hasState(NAME_Death2)) + if (actor->user.ActorActionSet->Death2) { actor->user.WaitTics = 4 * 120; - actor->setStateGroup(NAME_Death1); + NewStateGroup(actor, actor->user.ActorActionSet->Death1); } break; case TRACK_ACTOR_DEATH2: - if (actor->hasState(NAME_Death2)) + if (actor->user.ActorActionSet->Death2) { actor->user.WaitTics = 4 * 120; - actor->setStateGroup(NAME_Death2); + NewStateGroup(actor, actor->user.ActorActionSet->Death2); } break; case TRACK_ACTOR_DEATH_JUMP: - if (actor->hasState(NAME_DeathJump)) + if (actor->user.ActorActionSet->DeathJump) { actor->user.Flags |= (SPR_DEAD); actor->vel.X *= 2; actor->user.jump_speed = -495; DoActorBeginJump(actor); - actor->setStateGroup(NAME_DeathJump); + NewStateGroup(actor, actor->user.ActorActionSet->DeathJump); } break; case TRACK_ACTOR_CLOSE_ATTACK1: - if (actor->hasState(NAME_CloseAttack, 0)) + if (actor->user.ActorActionSet->CloseAttack[0]) { if (!tpoint->tag_high) actor->user.WaitTics = 2 * 120; else actor->user.WaitTics = tpoint->tag_high * 128; - actor->setStateGroup(NAME_CloseAttack, 0); + NewStateGroup(actor, actor->user.ActorActionSet->CloseAttack[0]); } break; case TRACK_ACTOR_CLOSE_ATTACK2: - if (actor->hasState(NAME_CloseAttack, 1)) + if (actor->user.ActorActionSet->CloseAttack[1]) { if (!tpoint->tag_high) actor->user.WaitTics = 4 * 120; else actor->user.WaitTics = tpoint->tag_high * 128; - actor->setStateGroup(NAME_CloseAttack, 1); + NewStateGroup(actor, actor->user.ActorActionSet->CloseAttack[1]); } break; @@ -3189,7 +3190,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) case TRACK_ACTOR_ATTACK5: case TRACK_ACTOR_ATTACK6: { - STATE* **ap = &actor->user.__legacyState.ActorActionSet->Attack[0] + (tpoint->tag_low - TRACK_ACTOR_ATTACK1); + STATE* **ap = &actor->user.ActorActionSet->Attack[0] + (tpoint->tag_low - TRACK_ACTOR_ATTACK1); if (*ap) @@ -3220,7 +3221,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) case TRACK_ACTOR_CLIMB_LADDER: - if (actor->hasState(NAME_Jump)) + if (actor->user.ActorActionSet->Jump) { HitInfo near; @@ -3289,7 +3290,7 @@ bool ActorTrackDecide(TRACK_POINT* tpoint, DSWActor* actor) // actor->user.Flags |= (SPR_CLIMBING); - actor->setStateGroup(NAME_Climb); + NewStateGroup(actor, actor->user.ActorActionSet->Climb); actor->vel.Z -= 1; } @@ -3355,7 +3356,7 @@ int ActorFollowTrack(DSWActor* actor, short locktics) if (actor->user.WaitTics <= 0) { actor->user.Flags &= ~(SPR_DONT_UPDATE_ANG); - actor->setStateGroup(NAME_Run); + NewStateGroup(actor, actor->user.ActorActionSet->Run); actor->user.WaitTics = 0; } @@ -3435,7 +3436,7 @@ int ActorFollowTrack(DSWActor* actor, short locktics) actor->spr.pos.Z += actor->user.pos.Y; DoActorSetSpeed(actor, SLOW_SPEED); - actor->user.ActorActionFunc = AF(NinjaJumpActionFunc); + actor->user.ActorActionFunc = NinjaJumpActionFunc; actor->user.jump_speed = -650; DoActorBeginJump(actor); @@ -3466,4 +3467,22 @@ int ActorFollowTrack(DSWActor* actor, short locktics) } +#include "saveable.h" + +static saveable_code saveable_track_code[] = +{ + SAVE_CODE(DoTornadoObject), + SAVE_CODE(DoAutoTurretObject), +}; + +saveable_module saveable_track = +{ + // code + saveable_track_code, + SIZ(saveable_track_code), + + // data + nullptr,0 +}; + END_SW_NS diff --git a/source/games/sw/src/vator.cpp b/source/games/sw/src/vator.cpp index c7a13ec461b..698205a9db6 100644 --- a/source/games/sw/src/vator.cpp +++ b/source/games/sw/src/vator.cpp @@ -574,4 +574,21 @@ int DoVatorAuto(DSWActor* actor) } +#include "saveable.h" + +static saveable_code saveable_vator_code[] = +{ + SAVE_CODE(DoVator), + SAVE_CODE(DoVatorAuto), +}; + +saveable_module saveable_vator = +{ + // code + saveable_vator_code, + SIZ(saveable_vator_code), + + // data + nullptr,0 +}; END_SW_NS diff --git a/source/games/sw/src/wallmove.cpp b/source/games/sw/src/wallmove.cpp index 5c6442a8bbe..59fa2f575e4 100644 --- a/source/games/sw/src/wallmove.cpp +++ b/source/games/sw/src/wallmove.cpp @@ -213,4 +213,29 @@ int DoWallMoveMatch(short match) return found; } +//--------------------------------------------------------------------------- +// +// +// +//--------------------------------------------------------------------------- + + +#include "saveable.h" + +static saveable_code saveable_wallmove_code[] = +{ + SAVE_CODE(DoWallMove), + SAVE_CODE(CanSeeWallMove), + SAVE_CODE(DoWallMoveMatch), +}; + +saveable_module saveable_wallmove = +{ + // code + saveable_wallmove_code, + SIZ(saveable_wallmove_code), + + // data + nullptr,0 +}; END_SW_NS diff --git a/source/games/sw/src/weapon.cpp b/source/games/sw/src/weapon.cpp index 9b98dbfeed9..895545aacc5 100644 --- a/source/games/sw/src/weapon.cpp +++ b/source/games/sw/src/weapon.cpp @@ -55,10 +55,15 @@ struct MISSILE_PLACEMENT void SpawnZombie2(DSWActor*); Collision move_ground_missile(DSWActor* actor, const DVector2& change, double ceildist, double flordist, uint32_t cliptype, int numtics); void DoPlayerBeginDie(DSWPlayer*); +void VehicleSetSmoke(SECTOR_OBJECT* sop, ANIMATOR* animator); void ScaleSpriteVector(DSWActor* actor, int scalex, int scaley, int scalez); void ScaleSpriteVector(DSWActor* actor, int scale); +ANIMATOR DoBettyBeginDeath; +ANIMATOR DoSkullBeginDeath; +ANIMATOR DoRipperGrow; + constexpr DAngle FacingAngle = mapangle(150); // @@ -99,12 +104,19 @@ int WeaponIsAmmo = BIT(WPN_STAR) | BIT(WPN_SWORD) | BIT(WPN_MINE) | BIT(WPN_FIST short target_ang; +ANIMATOR DoStar; +ANIMATOR DoCrossBolt; +ANIMATOR DoSuicide, DoUziSmoke; +ANIMATOR DoShrapJumpFall; +ANIMATOR DoFastShrapJumpFall; + int SpawnSmokePuff(DSWActor* actor); bool WarpToSurface(DVector3& pos, sectortype** sect); bool WarpToUnderwater(DVector3& pos, sectortype** sect); bool TestDontStickSector(sectortype* hit_sect); +ANIMATOR SpawnShrapX; bool WeaponMoveHit(DSWActor* actor); void SpawnMidSplash(DSWActor* actor); @@ -154,17 +166,17 @@ short StatDamageList[STAT_DAMAGE_LIST_SIZE] = // state for sprites that are not restored STATE s_NotRestored[] = { - {2323, 100, nullptr, &s_NotRestored[0]} + {2323, 100, NullAnimator, &s_NotRestored[0]} }; STATE s_Suicide[] = { - {1, 100, &AF(DoSuicide), &s_Suicide[0]} + {1, 100, DoSuicide, &s_Suicide[0]} }; STATE s_DeadLoWang[] = { - {1160, 100, nullptr, &s_DeadLoWang[0]}, + {1160, 100, NullAnimator, &s_DeadLoWang[0]}, }; ////////////////////// @@ -173,70 +185,72 @@ STATE s_DeadLoWang[] = // ////////////////////// +ANIMATOR DoDefaultStat; + #define BREAK_LIGHT_RATE 18 STATE s_BreakLight[] = { - {BREAK_LIGHT_ANIM + 0, BREAK_LIGHT_RATE, nullptr, &s_BreakLight[1]}, - {BREAK_LIGHT_ANIM + 1, BREAK_LIGHT_RATE, nullptr, &s_BreakLight[2]}, - {BREAK_LIGHT_ANIM + 2, BREAK_LIGHT_RATE, nullptr, &s_BreakLight[3]}, - {BREAK_LIGHT_ANIM + 3, BREAK_LIGHT_RATE, nullptr, &s_BreakLight[4]}, - {BREAK_LIGHT_ANIM + 4, BREAK_LIGHT_RATE, nullptr, &s_BreakLight[5]}, - {BREAK_LIGHT_ANIM + 5, BREAK_LIGHT_RATE, nullptr, &s_BreakLight[5]} + {BREAK_LIGHT_ANIM + 0, BREAK_LIGHT_RATE, NullAnimator, &s_BreakLight[1]}, + {BREAK_LIGHT_ANIM + 1, BREAK_LIGHT_RATE, NullAnimator, &s_BreakLight[2]}, + {BREAK_LIGHT_ANIM + 2, BREAK_LIGHT_RATE, NullAnimator, &s_BreakLight[3]}, + {BREAK_LIGHT_ANIM + 3, BREAK_LIGHT_RATE, NullAnimator, &s_BreakLight[4]}, + {BREAK_LIGHT_ANIM + 4, BREAK_LIGHT_RATE, NullAnimator, &s_BreakLight[5]}, + {BREAK_LIGHT_ANIM + 5, BREAK_LIGHT_RATE, NullAnimator, &s_BreakLight[5]} }; #define BREAK_BARREL_RATE 18 STATE s_BreakBarrel[] = { - {BREAK_BARREL + 4, BREAK_BARREL_RATE, nullptr, &s_BreakBarrel[1]}, - {BREAK_BARREL + 5, BREAK_BARREL_RATE, nullptr, &s_BreakBarrel[2]}, - {BREAK_BARREL + 6, BREAK_BARREL_RATE, nullptr, &s_BreakBarrel[3]}, - {BREAK_BARREL + 7, BREAK_BARREL_RATE, nullptr, &s_BreakBarrel[4]}, - {BREAK_BARREL + 8, BREAK_BARREL_RATE, nullptr, &s_BreakBarrel[5]}, - {BREAK_BARREL + 9, BREAK_BARREL_RATE, &AF(DoDefaultStat), &s_BreakBarrel[5]}, + {BREAK_BARREL + 4, BREAK_BARREL_RATE, NullAnimator, &s_BreakBarrel[1]}, + {BREAK_BARREL + 5, BREAK_BARREL_RATE, NullAnimator, &s_BreakBarrel[2]}, + {BREAK_BARREL + 6, BREAK_BARREL_RATE, NullAnimator, &s_BreakBarrel[3]}, + {BREAK_BARREL + 7, BREAK_BARREL_RATE, NullAnimator, &s_BreakBarrel[4]}, + {BREAK_BARREL + 8, BREAK_BARREL_RATE, NullAnimator, &s_BreakBarrel[5]}, + {BREAK_BARREL + 9, BREAK_BARREL_RATE, DoDefaultStat, &s_BreakBarrel[5]}, }; #define BREAK_PEDISTAL_RATE 28 STATE s_BreakPedistal[] = { - {BREAK_PEDISTAL + 1, BREAK_PEDISTAL_RATE, nullptr, &s_BreakPedistal[1]}, - {BREAK_PEDISTAL + 2, BREAK_PEDISTAL_RATE, nullptr, &s_BreakPedistal[2]}, - {BREAK_PEDISTAL + 3, BREAK_PEDISTAL_RATE, nullptr, &s_BreakPedistal[3]}, - {BREAK_PEDISTAL + 4, BREAK_PEDISTAL_RATE, nullptr, &s_BreakPedistal[3]}, + {BREAK_PEDISTAL + 1, BREAK_PEDISTAL_RATE, NullAnimator, &s_BreakPedistal[1]}, + {BREAK_PEDISTAL + 2, BREAK_PEDISTAL_RATE, NullAnimator, &s_BreakPedistal[2]}, + {BREAK_PEDISTAL + 3, BREAK_PEDISTAL_RATE, NullAnimator, &s_BreakPedistal[3]}, + {BREAK_PEDISTAL + 4, BREAK_PEDISTAL_RATE, NullAnimator, &s_BreakPedistal[3]}, }; #define BREAK_BOTTLE1_RATE 18 STATE s_BreakBottle1[] = { - {BREAK_BOTTLE1 + 1, BREAK_BOTTLE1_RATE, nullptr, &s_BreakBottle1[1]}, - {BREAK_BOTTLE1 + 2, BREAK_BOTTLE1_RATE, nullptr, &s_BreakBottle1[2]}, - {BREAK_BOTTLE1 + 3, BREAK_BOTTLE1_RATE, nullptr, &s_BreakBottle1[3]}, - {BREAK_BOTTLE1 + 4, BREAK_BOTTLE1_RATE, nullptr, &s_BreakBottle1[4]}, - {BREAK_BOTTLE1 + 5, BREAK_BOTTLE1_RATE, nullptr, &s_BreakBottle1[5]}, - {BREAK_BOTTLE1 + 6, BREAK_BOTTLE1_RATE, nullptr, &s_BreakBottle1[5]}, + {BREAK_BOTTLE1 + 1, BREAK_BOTTLE1_RATE, NullAnimator, &s_BreakBottle1[1]}, + {BREAK_BOTTLE1 + 2, BREAK_BOTTLE1_RATE, NullAnimator, &s_BreakBottle1[2]}, + {BREAK_BOTTLE1 + 3, BREAK_BOTTLE1_RATE, NullAnimator, &s_BreakBottle1[3]}, + {BREAK_BOTTLE1 + 4, BREAK_BOTTLE1_RATE, NullAnimator, &s_BreakBottle1[4]}, + {BREAK_BOTTLE1 + 5, BREAK_BOTTLE1_RATE, NullAnimator, &s_BreakBottle1[5]}, + {BREAK_BOTTLE1 + 6, BREAK_BOTTLE1_RATE, NullAnimator, &s_BreakBottle1[5]}, }; #define BREAK_BOTTLE2_RATE 18 STATE s_BreakBottle2[] = { - {BREAK_BOTTLE2 + 1, BREAK_BOTTLE2_RATE, nullptr, &s_BreakBottle2[1]}, - {BREAK_BOTTLE2 + 2, BREAK_BOTTLE2_RATE, nullptr, &s_BreakBottle2[2]}, - {BREAK_BOTTLE2 + 3, BREAK_BOTTLE2_RATE, nullptr, &s_BreakBottle2[3]}, - {BREAK_BOTTLE2 + 4, BREAK_BOTTLE2_RATE, nullptr, &s_BreakBottle2[4]}, - {BREAK_BOTTLE2 + 5, BREAK_BOTTLE2_RATE, nullptr, &s_BreakBottle2[5]}, - {BREAK_BOTTLE2 + 6, BREAK_BOTTLE2_RATE, nullptr, &s_BreakBottle2[5]}, + {BREAK_BOTTLE2 + 1, BREAK_BOTTLE2_RATE, NullAnimator, &s_BreakBottle2[1]}, + {BREAK_BOTTLE2 + 2, BREAK_BOTTLE2_RATE, NullAnimator, &s_BreakBottle2[2]}, + {BREAK_BOTTLE2 + 3, BREAK_BOTTLE2_RATE, NullAnimator, &s_BreakBottle2[3]}, + {BREAK_BOTTLE2 + 4, BREAK_BOTTLE2_RATE, NullAnimator, &s_BreakBottle2[4]}, + {BREAK_BOTTLE2 + 5, BREAK_BOTTLE2_RATE, NullAnimator, &s_BreakBottle2[5]}, + {BREAK_BOTTLE2 + 6, BREAK_BOTTLE2_RATE, NullAnimator, &s_BreakBottle2[5]}, }; #define PUFF_RATE 8 - +ANIMATOR DoPuff; STATE s_Puff[] = { - {PUFF + 0, PUFF_RATE, &AF(DoPuff), &s_Puff[1]}, - {PUFF + 1, PUFF_RATE, &AF(DoPuff), &s_Puff[2]}, - {PUFF + 2, PUFF_RATE, &AF(DoPuff), &s_Puff[3]}, - {PUFF + 3, PUFF_RATE, &AF(DoPuff), &s_Puff[4]}, - {PUFF + 4, PUFF_RATE, &AF(DoPuff), &s_Puff[5]}, - {PUFF + 5, PUFF_RATE, &AF(DoPuff), &s_Puff[6]}, - {PUFF + 5, 100, &AF(DoSuicide), &s_Puff[0]} + {PUFF + 0, PUFF_RATE, DoPuff, &s_Puff[1]}, + {PUFF + 1, PUFF_RATE, DoPuff, &s_Puff[2]}, + {PUFF + 2, PUFF_RATE, DoPuff, &s_Puff[3]}, + {PUFF + 3, PUFF_RATE, DoPuff, &s_Puff[4]}, + {PUFF + 4, PUFF_RATE, DoPuff, &s_Puff[5]}, + {PUFF + 5, PUFF_RATE, DoPuff, &s_Puff[6]}, + {PUFF + 5, 100, DoSuicide, &s_Puff[0]} }; #define RAIL_PUFF_R0 3969 @@ -244,65 +258,66 @@ STATE s_Puff[] = #define RAIL_PUFF_R2 4001 #define RAIL_PUFF_RATE 6 +ANIMATOR DoRailPuff; STATE s_RailPuff[3][17] = { { - {RAIL_PUFF_R0 + 0, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][1]}, - {RAIL_PUFF_R0 + 1, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][2]}, - {RAIL_PUFF_R0 + 2, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][3]}, - {RAIL_PUFF_R0 + 3, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][4]}, - {RAIL_PUFF_R0 + 4, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][5]}, - {RAIL_PUFF_R0 + 5, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][6]}, - {RAIL_PUFF_R0 + 6, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][7]}, - {RAIL_PUFF_R0 + 7, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][8]}, - {RAIL_PUFF_R0 + 8, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][9]}, - {RAIL_PUFF_R0 + 9, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][10]}, - {RAIL_PUFF_R0 + 10, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][11]}, - {RAIL_PUFF_R0 + 11, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][12]}, - {RAIL_PUFF_R0 + 12, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][13]}, - {RAIL_PUFF_R0 + 13, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][14]}, - {RAIL_PUFF_R0 + 14, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][15]}, - {RAIL_PUFF_R0 + 15, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[0][16]}, - {RAIL_PUFF_R0 + 15, 100, &AF(DoSuicide), &s_RailPuff[0][0]}, + {RAIL_PUFF_R0 + 0, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][1]}, + {RAIL_PUFF_R0 + 1, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][2]}, + {RAIL_PUFF_R0 + 2, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][3]}, + {RAIL_PUFF_R0 + 3, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][4]}, + {RAIL_PUFF_R0 + 4, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][5]}, + {RAIL_PUFF_R0 + 5, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][6]}, + {RAIL_PUFF_R0 + 6, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][7]}, + {RAIL_PUFF_R0 + 7, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][8]}, + {RAIL_PUFF_R0 + 8, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][9]}, + {RAIL_PUFF_R0 + 9, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][10]}, + {RAIL_PUFF_R0 + 10, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][11]}, + {RAIL_PUFF_R0 + 11, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][12]}, + {RAIL_PUFF_R0 + 12, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][13]}, + {RAIL_PUFF_R0 + 13, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][14]}, + {RAIL_PUFF_R0 + 14, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][15]}, + {RAIL_PUFF_R0 + 15, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[0][16]}, + {RAIL_PUFF_R0 + 15, 100, DoSuicide, &s_RailPuff[0][0]}, }, { - {RAIL_PUFF_R1 + 0, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][1]}, - {RAIL_PUFF_R1 + 1, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][2]}, - {RAIL_PUFF_R1 + 2, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][3]}, - {RAIL_PUFF_R1 + 3, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][4]}, - {RAIL_PUFF_R1 + 4, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][5]}, - {RAIL_PUFF_R1 + 5, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][6]}, - {RAIL_PUFF_R1 + 6, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][7]}, - {RAIL_PUFF_R1 + 7, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][8]}, - {RAIL_PUFF_R1 + 8, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][9]}, - {RAIL_PUFF_R1 + 9, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][10]}, - {RAIL_PUFF_R1 + 10, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][11]}, - {RAIL_PUFF_R1 + 11, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][12]}, - {RAIL_PUFF_R1 + 12, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][13]}, - {RAIL_PUFF_R1 + 13, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][14]}, - {RAIL_PUFF_R1 + 14, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][15]}, - {RAIL_PUFF_R1 + 15, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[1][16]}, - {RAIL_PUFF_R1 + 15, 100, &AF(DoSuicide), &s_RailPuff[1][0]}, + {RAIL_PUFF_R1 + 0, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][1]}, + {RAIL_PUFF_R1 + 1, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][2]}, + {RAIL_PUFF_R1 + 2, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][3]}, + {RAIL_PUFF_R1 + 3, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][4]}, + {RAIL_PUFF_R1 + 4, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][5]}, + {RAIL_PUFF_R1 + 5, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][6]}, + {RAIL_PUFF_R1 + 6, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][7]}, + {RAIL_PUFF_R1 + 7, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][8]}, + {RAIL_PUFF_R1 + 8, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][9]}, + {RAIL_PUFF_R1 + 9, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][10]}, + {RAIL_PUFF_R1 + 10, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][11]}, + {RAIL_PUFF_R1 + 11, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][12]}, + {RAIL_PUFF_R1 + 12, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][13]}, + {RAIL_PUFF_R1 + 13, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][14]}, + {RAIL_PUFF_R1 + 14, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][15]}, + {RAIL_PUFF_R1 + 15, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[1][16]}, + {RAIL_PUFF_R1 + 15, 100, DoSuicide, &s_RailPuff[1][0]}, }, { - {RAIL_PUFF_R2 + 0, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][1]}, - {RAIL_PUFF_R2 + 1, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][2]}, - {RAIL_PUFF_R2 + 2, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][3]}, - {RAIL_PUFF_R2 + 3, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][4]}, - {RAIL_PUFF_R2 + 4, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][5]}, - {RAIL_PUFF_R2 + 5, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][6]}, - {RAIL_PUFF_R2 + 6, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][7]}, - {RAIL_PUFF_R2 + 7, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][8]}, - {RAIL_PUFF_R2 + 8, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][9]}, - {RAIL_PUFF_R2 + 9, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][10]}, - {RAIL_PUFF_R2 + 10, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][11]}, - {RAIL_PUFF_R2 + 11, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][12]}, - {RAIL_PUFF_R2 + 12, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][13]}, - {RAIL_PUFF_R2 + 13, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][14]}, - {RAIL_PUFF_R2 + 14, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][15]}, - {RAIL_PUFF_R2 + 15, RAIL_PUFF_RATE, &AF(DoRailPuff), &s_RailPuff[2][16]}, - {RAIL_PUFF_R2 + 15, 100, &AF(DoSuicide), &s_RailPuff[2][0]}, + {RAIL_PUFF_R2 + 0, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][1]}, + {RAIL_PUFF_R2 + 1, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][2]}, + {RAIL_PUFF_R2 + 2, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][3]}, + {RAIL_PUFF_R2 + 3, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][4]}, + {RAIL_PUFF_R2 + 4, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][5]}, + {RAIL_PUFF_R2 + 5, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][6]}, + {RAIL_PUFF_R2 + 6, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][7]}, + {RAIL_PUFF_R2 + 7, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][8]}, + {RAIL_PUFF_R2 + 8, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][9]}, + {RAIL_PUFF_R2 + 9, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][10]}, + {RAIL_PUFF_R2 + 10, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][11]}, + {RAIL_PUFF_R2 + 11, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][12]}, + {RAIL_PUFF_R2 + 12, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][13]}, + {RAIL_PUFF_R2 + 13, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][14]}, + {RAIL_PUFF_R2 + 14, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][15]}, + {RAIL_PUFF_R2 + 15, RAIL_PUFF_RATE, DoRailPuff, &s_RailPuff[2][16]}, + {RAIL_PUFF_R2 + 15, 100, DoSuicide, &s_RailPuff[2][0]}, } }; @@ -323,79 +338,80 @@ STATE s_LaserPuff[] = {LASER_PUFF + 0, LASER_PUFF_RATE, nullptr, &s_LaserPuff[1]}, //{LASER_PUFF + 1, LASER_PUFF_RATE, nullptr, &s_LaserPuff[2]}, //{LASER_PUFF + 2, LASER_PUFF_RATE, nullptr, &s_LaserPuff[3]}, - {LASER_PUFF + 0, 100, &AF(DoSuicide), &s_LaserPuff[0]} + {LASER_PUFF + 0, 100, DoSuicide, &s_LaserPuff[0]} }; #define TRACER 3201 #define TRACER_RATE 6 - +ANIMATOR DoTracer; STATE s_Tracer[] = { - {TRACER + 0, TRACER_RATE, &AF(DoTracer), &s_Tracer[1]}, - {TRACER + 1, TRACER_RATE, &AF(DoTracer), &s_Tracer[2]}, - {TRACER + 2, TRACER_RATE, &AF(DoTracer), &s_Tracer[3]}, - {TRACER + 3, TRACER_RATE, &AF(DoTracer), &s_Tracer[4]}, - {TRACER + 4, TRACER_RATE, &AF(DoTracer), &s_Tracer[5]}, - {TRACER + 5, TRACER_RATE, &AF(DoTracer), &s_Tracer[0]} + {TRACER + 0, TRACER_RATE, DoTracer, &s_Tracer[1]}, + {TRACER + 1, TRACER_RATE, DoTracer, &s_Tracer[2]}, + {TRACER + 2, TRACER_RATE, DoTracer, &s_Tracer[3]}, + {TRACER + 3, TRACER_RATE, DoTracer, &s_Tracer[4]}, + {TRACER + 4, TRACER_RATE, DoTracer, &s_Tracer[5]}, + {TRACER + 5, TRACER_RATE, DoTracer, &s_Tracer[0]} }; #define EMP 2058 #define EMP_RATE 6 +ANIMATOR DoEMP; STATE s_EMP[] = { - {EMP + 0, EMP_RATE, &AF(DoEMP), &s_EMP[1]}, - {EMP + 1, EMP_RATE, &AF(DoEMP), &s_EMP[2]}, - {EMP + 2, EMP_RATE, &AF(DoEMP), &s_EMP[0]} + {EMP + 0, EMP_RATE, DoEMP, &s_EMP[1]}, + {EMP + 1, EMP_RATE, DoEMP, &s_EMP[2]}, + {EMP + 2, EMP_RATE, DoEMP, &s_EMP[0]} }; - +ANIMATOR DoEMPBurst; STATE s_EMPBurst[] = { - {EMP + 0, EMP_RATE, &AF(DoEMPBurst), &s_EMPBurst[1]}, - {EMP + 1, EMP_RATE, &AF(DoEMPBurst), &s_EMPBurst[2]}, - {EMP + 2, EMP_RATE, &AF(DoEMPBurst), &s_EMPBurst[0]} + {EMP + 0, EMP_RATE, DoEMPBurst, &s_EMPBurst[1]}, + {EMP + 1, EMP_RATE, DoEMPBurst, &s_EMPBurst[2]}, + {EMP + 2, EMP_RATE, DoEMPBurst, &s_EMPBurst[0]} }; STATE s_EMPShrap[] = { - {EMP + 0, EMP_RATE, &AF(DoFastShrapJumpFall), &s_EMPShrap[1]}, - {EMP + 1, EMP_RATE, &AF(DoFastShrapJumpFall), &s_EMPShrap[2]}, - {EMP + 2, EMP_RATE, &AF(DoFastShrapJumpFall), &s_EMPShrap[0]}, + {EMP + 0, EMP_RATE, DoFastShrapJumpFall, &s_EMPShrap[1]}, + {EMP + 1, EMP_RATE, DoFastShrapJumpFall, &s_EMPShrap[2]}, + {EMP + 2, EMP_RATE, DoFastShrapJumpFall, &s_EMPShrap[0]}, }; #define TANK_SHELL 3201 #define TANK_SHELL_RATE 6 - +ANIMATOR DoTankShell; STATE s_TankShell[] = { - {TRACER + 0, 200, &AF(DoTankShell), &s_TankShell[0]} + {TRACER + 0, 200, DoTankShell, &s_TankShell[0]} }; - +ANIMATOR DoVehicleSmoke; #define VEHICLE_SMOKE_RATE 18 STATE s_VehicleSmoke[] = { - {PUFF + 0, VEHICLE_SMOKE_RATE, &AF(DoVehicleSmoke), &s_VehicleSmoke[1]}, - {PUFF + 1, VEHICLE_SMOKE_RATE, &AF(DoVehicleSmoke), &s_VehicleSmoke[2]}, - {PUFF + 2, VEHICLE_SMOKE_RATE, &AF(DoVehicleSmoke), &s_VehicleSmoke[3]}, - {PUFF + 3, VEHICLE_SMOKE_RATE, &AF(DoVehicleSmoke), &s_VehicleSmoke[4]}, - {PUFF + 4, VEHICLE_SMOKE_RATE, &AF(DoVehicleSmoke), &s_VehicleSmoke[5]}, - {PUFF + 5, VEHICLE_SMOKE_RATE, &AF(DoVehicleSmoke), &s_VehicleSmoke[6]}, - {PUFF + 5, 100, &AF(DoSuicide), &s_VehicleSmoke[6]} + {PUFF + 0, VEHICLE_SMOKE_RATE, DoVehicleSmoke, &s_VehicleSmoke[1]}, + {PUFF + 1, VEHICLE_SMOKE_RATE, DoVehicleSmoke, &s_VehicleSmoke[2]}, + {PUFF + 2, VEHICLE_SMOKE_RATE, DoVehicleSmoke, &s_VehicleSmoke[3]}, + {PUFF + 3, VEHICLE_SMOKE_RATE, DoVehicleSmoke, &s_VehicleSmoke[4]}, + {PUFF + 4, VEHICLE_SMOKE_RATE, DoVehicleSmoke, &s_VehicleSmoke[5]}, + {PUFF + 5, VEHICLE_SMOKE_RATE, DoVehicleSmoke, &s_VehicleSmoke[6]}, + {PUFF + 5, 100, DoSuicide, &s_VehicleSmoke[6]} }; - +ANIMATOR DoWaterSmoke, SpawnWaterSmoke; #define WATER_SMOKE_RATE 18 STATE s_WaterSmoke[] = { - {PUFF + 0, WATER_SMOKE_RATE, &AF(DoWaterSmoke), &s_WaterSmoke[1]}, - {PUFF + 1, WATER_SMOKE_RATE, &AF(DoWaterSmoke), &s_WaterSmoke[2]}, - {PUFF + 2, WATER_SMOKE_RATE, &AF(DoWaterSmoke), &s_WaterSmoke[3]}, - {PUFF + 3, WATER_SMOKE_RATE, &AF(DoWaterSmoke), &s_WaterSmoke[4]}, - {PUFF + 4, WATER_SMOKE_RATE, &AF(DoWaterSmoke), &s_WaterSmoke[5]}, - {PUFF + 5, WATER_SMOKE_RATE, &AF(DoWaterSmoke), &s_WaterSmoke[6]}, - {PUFF + 5, 100, &AF(DoSuicide), &s_WaterSmoke[6]} + {PUFF + 0, WATER_SMOKE_RATE, DoWaterSmoke, &s_WaterSmoke[1]}, + {PUFF + 1, WATER_SMOKE_RATE, DoWaterSmoke, &s_WaterSmoke[2]}, + {PUFF + 2, WATER_SMOKE_RATE, DoWaterSmoke, &s_WaterSmoke[3]}, + {PUFF + 3, WATER_SMOKE_RATE, DoWaterSmoke, &s_WaterSmoke[4]}, + {PUFF + 4, WATER_SMOKE_RATE, DoWaterSmoke, &s_WaterSmoke[5]}, + {PUFF + 5, WATER_SMOKE_RATE, DoWaterSmoke, &s_WaterSmoke[6]}, + {PUFF + 5, 100, DoSuicide, &s_WaterSmoke[6]} }; constexpr double UZI_SPARK_REPEAT = 0.375; @@ -403,60 +419,63 @@ constexpr double UZI_SMOKE_REPEAT = 0.375; #define UZI_SMOKE_RATE 16 // Was 9 STATE s_UziSmoke[] = { - {UZI_SMOKE + 0, UZI_SMOKE_RATE, &AF(DoUziSmoke), &s_UziSmoke[1]}, - {UZI_SMOKE + 1, UZI_SMOKE_RATE, &AF(DoUziSmoke), &s_UziSmoke[2]}, - {UZI_SMOKE + 2, UZI_SMOKE_RATE, &AF(DoUziSmoke), &s_UziSmoke[3]}, - {UZI_SMOKE + 3, UZI_SMOKE_RATE, &AF(DoUziSmoke), &s_UziSmoke[4]}, - {UZI_SMOKE + 3, 100, &AF(DoSuicide), &s_UziSmoke[0]}, + {UZI_SMOKE + 0, UZI_SMOKE_RATE, DoUziSmoke, &s_UziSmoke[1]}, + {UZI_SMOKE + 1, UZI_SMOKE_RATE, DoUziSmoke, &s_UziSmoke[2]}, + {UZI_SMOKE + 2, UZI_SMOKE_RATE, DoUziSmoke, &s_UziSmoke[3]}, + {UZI_SMOKE + 3, UZI_SMOKE_RATE, DoUziSmoke, &s_UziSmoke[4]}, + {UZI_SMOKE + 3, 100, DoSuicide, &s_UziSmoke[0]}, }; #define SHOTGUN_SMOKE_RATE 16 #define SHOTGUN_SMOKE UZI_SMOKE+1 +ANIMATOR DoShotgunSmoke; STATE s_ShotgunSmoke[] = { - {UZI_SMOKE + 0, SHOTGUN_SMOKE_RATE, &AF(DoShotgunSmoke), &s_ShotgunSmoke[1]}, - {UZI_SMOKE + 1, SHOTGUN_SMOKE_RATE, &AF(DoShotgunSmoke), &s_ShotgunSmoke[2]}, - {UZI_SMOKE + 2, SHOTGUN_SMOKE_RATE, &AF(DoShotgunSmoke), &s_ShotgunSmoke[3]}, - {UZI_SMOKE + 3, SHOTGUN_SMOKE_RATE, &AF(DoShotgunSmoke), &s_ShotgunSmoke[4]}, - {UZI_SMOKE + 3, 100, &AF(DoSuicide), &s_ShotgunSmoke[0]}, + {UZI_SMOKE + 0, SHOTGUN_SMOKE_RATE, DoShotgunSmoke, &s_ShotgunSmoke[1]}, + {UZI_SMOKE + 1, SHOTGUN_SMOKE_RATE, DoShotgunSmoke, &s_ShotgunSmoke[2]}, + {UZI_SMOKE + 2, SHOTGUN_SMOKE_RATE, DoShotgunSmoke, &s_ShotgunSmoke[3]}, + {UZI_SMOKE + 3, SHOTGUN_SMOKE_RATE, DoShotgunSmoke, &s_ShotgunSmoke[4]}, + {UZI_SMOKE + 3, 100, DoSuicide, &s_ShotgunSmoke[0]}, }; #define UZI_BULLET_RATE 100 #define UZI_BULLET 717 // actually a bubble +ANIMATOR DoUziBullet; STATE s_UziBullet[] = { - {UZI_BULLET + 0, UZI_BULLET_RATE, &AF(DoUziBullet), &s_UziBullet[0]}, + {UZI_BULLET + 0, UZI_BULLET_RATE, DoUziBullet, &s_UziBullet[0]}, }; #define UZI_SPARK_RATE 8 STATE s_UziSpark[] = { - {UZI_SPARK + 0, UZI_SPARK_RATE, nullptr, &s_UziSpark[1]}, - {UZI_SPARK + 1, UZI_SPARK_RATE, nullptr, &s_UziSpark[2]}, - {UZI_SPARK + 2, UZI_SPARK_RATE, nullptr, &s_UziSpark[3]}, - {UZI_SPARK + 3, UZI_SPARK_RATE, nullptr, &s_UziSpark[4]}, - {UZI_SPARK + 4, UZI_SPARK_RATE, nullptr, &s_UziSpark[5]}, - {UZI_SPARK + 4, 100, &AF(DoSuicide), &s_UziSpark[0]}, + {UZI_SPARK + 0, UZI_SPARK_RATE, NullAnimator, &s_UziSpark[1]}, + {UZI_SPARK + 1, UZI_SPARK_RATE, NullAnimator, &s_UziSpark[2]}, + {UZI_SPARK + 2, UZI_SPARK_RATE, NullAnimator, &s_UziSpark[3]}, + {UZI_SPARK + 3, UZI_SPARK_RATE, NullAnimator, &s_UziSpark[4]}, + {UZI_SPARK + 4, UZI_SPARK_RATE, NullAnimator, &s_UziSpark[5]}, + {UZI_SPARK + 4, 100, DoSuicide, &s_UziSpark[0]}, }; STATE s_UziPowerSpark[] = { - {UZI_SPARK + 0, UZI_SPARK_RATE, &AF(DoUziSmoke), &s_UziSpark[1]}, - {UZI_SPARK + 1, UZI_SPARK_RATE, &AF(DoUziSmoke), &s_UziSpark[2]}, - {UZI_SPARK + 2, UZI_SPARK_RATE, &AF(DoUziSmoke), &s_UziSpark[3]}, - {UZI_SPARK + 3, UZI_SPARK_RATE, &AF(DoUziSmoke), &s_UziSpark[4]}, - {UZI_SPARK + 4, UZI_SPARK_RATE, &AF(DoUziSmoke), &s_UziSpark[5]}, - {UZI_SPARK + 4, 100, &AF(DoSuicide), &s_UziSpark[0]}, + {UZI_SPARK + 0, UZI_SPARK_RATE, DoUziSmoke, &s_UziSpark[1]}, + {UZI_SPARK + 1, UZI_SPARK_RATE, DoUziSmoke, &s_UziSpark[2]}, + {UZI_SPARK + 2, UZI_SPARK_RATE, DoUziSmoke, &s_UziSpark[3]}, + {UZI_SPARK + 3, UZI_SPARK_RATE, DoUziSmoke, &s_UziSpark[4]}, + {UZI_SPARK + 4, UZI_SPARK_RATE, DoUziSmoke, &s_UziSpark[5]}, + {UZI_SPARK + 4, 100, DoSuicide, &s_UziSpark[0]}, }; #define BUBBLE 716 #define BUBBLE_RATE 100 +ANIMATOR DoBubble; STATE s_Bubble[] = { - {BUBBLE + 0, BUBBLE_RATE, &AF(DoBubble), &s_Bubble[0]} + {BUBBLE + 0, BUBBLE_RATE, DoBubble, &s_Bubble[0]} }; @@ -466,12 +485,12 @@ STATE s_Bubble[] = STATE s_Splash[] = { - {SPLASH + 0, SPLASH_RATE, nullptr, &s_Splash[1]}, - {SPLASH + 1, SPLASH_RATE, nullptr, &s_Splash[2]}, - {SPLASH + 2, SPLASH_RATE, nullptr, &s_Splash[3]}, - {SPLASH + 3, SPLASH_RATE, nullptr, &s_Splash[4]}, - {SPLASH + 4, SPLASH_RATE, nullptr, &s_Splash[5]}, - {SPLASH + 4, 100, &AF(DoSuicide), &s_Splash[0]} + {SPLASH + 0, SPLASH_RATE, NullAnimator, &s_Splash[1]}, + {SPLASH + 1, SPLASH_RATE, NullAnimator, &s_Splash[2]}, + {SPLASH + 2, SPLASH_RATE, NullAnimator, &s_Splash[3]}, + {SPLASH + 3, SPLASH_RATE, NullAnimator, &s_Splash[4]}, + {SPLASH + 4, SPLASH_RATE, NullAnimator, &s_Splash[5]}, + {SPLASH + 4, 100, DoSuicide, &s_Splash[0]} }; #define CROSSBOLT 2230 @@ -479,19 +498,19 @@ STATE s_Splash[] = STATE s_CrossBolt[5][1] = { { - {CROSSBOLT + 0, CROSSBOLT_RATE, &AF(DoCrossBolt), &s_CrossBolt[0][0]}, + {CROSSBOLT + 0, CROSSBOLT_RATE, DoCrossBolt, &s_CrossBolt[0][0]}, }, { - {CROSSBOLT + 2, CROSSBOLT_RATE, &AF(DoCrossBolt), &s_CrossBolt[1][0]}, + {CROSSBOLT + 2, CROSSBOLT_RATE, DoCrossBolt, &s_CrossBolt[1][0]}, }, { - {CROSSBOLT + 3, CROSSBOLT_RATE, &AF(DoCrossBolt), &s_CrossBolt[2][0]}, + {CROSSBOLT + 3, CROSSBOLT_RATE, DoCrossBolt, &s_CrossBolt[2][0]}, }, { - {CROSSBOLT + 4, CROSSBOLT_RATE, &AF(DoCrossBolt), &s_CrossBolt[3][0]}, + {CROSSBOLT + 4, CROSSBOLT_RATE, DoCrossBolt, &s_CrossBolt[3][0]}, }, { - {CROSSBOLT + 1, CROSSBOLT_RATE, &AF(DoCrossBolt), &s_CrossBolt[4][0]}, + {CROSSBOLT + 1, CROSSBOLT_RATE, DoCrossBolt, &s_CrossBolt[4][0]}, } }; @@ -509,29 +528,29 @@ STATE* sg_CrossBolt[] = #define STAR_RATE 6 STATE s_Star[] = { - {STAR + 0, STAR_RATE, &AF(DoStar), &s_Star[1]}, - {STAR + 1, STAR_RATE, &AF(DoStar), &s_Star[2]}, - {STAR + 2, STAR_RATE, &AF(DoStar), &s_Star[3]}, - {STAR + 3, STAR_RATE, &AF(DoStar), &s_Star[0]} + {STAR + 0, STAR_RATE, DoStar, &s_Star[1]}, + {STAR + 1, STAR_RATE, DoStar, &s_Star[2]}, + {STAR + 2, STAR_RATE, DoStar, &s_Star[3]}, + {STAR + 3, STAR_RATE, DoStar, &s_Star[0]} }; STATE s_StarStuck[] = { - {STAR + 0, STAR_RATE, nullptr, &s_StarStuck[0]}, + {STAR + 0, STAR_RATE, NullAnimator, &s_StarStuck[0]}, }; #define STAR_DOWN 2066 STATE s_StarDown[] = { - {STAR_DOWN + 0, STAR_RATE, &AF(DoStar), &s_StarDown[1]}, - {STAR_DOWN + 1, STAR_RATE, &AF(DoStar), &s_StarDown[2]}, - {STAR_DOWN + 2, STAR_RATE, &AF(DoStar), &s_StarDown[3]}, - {STAR_DOWN + 3, STAR_RATE, &AF(DoStar), &s_StarDown[0]} + {STAR_DOWN + 0, STAR_RATE, DoStar, &s_StarDown[1]}, + {STAR_DOWN + 1, STAR_RATE, DoStar, &s_StarDown[2]}, + {STAR_DOWN + 2, STAR_RATE, DoStar, &s_StarDown[3]}, + {STAR_DOWN + 3, STAR_RATE, DoStar, &s_StarDown[0]} }; STATE s_StarDownStuck[] = { - {STAR + 0, STAR_RATE, nullptr, &s_StarDownStuck[0]}, + {STAR + 0, STAR_RATE, NullAnimator, &s_StarDownStuck[0]}, }; ////////////////////// @@ -541,43 +560,44 @@ STATE s_StarDownStuck[] = ////////////////////// #define LAVA_BOULDER_RATE 6 +ANIMATOR DoLavaBoulder,DoShrapDamage,DoVulcanBoulder; STATE s_LavaBoulder[] = { - {LAVA_BOULDER + 1, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[1]}, - {LAVA_BOULDER + 2, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[2]}, - {LAVA_BOULDER + 3, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[3]}, - {LAVA_BOULDER + 4, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[4]}, - {LAVA_BOULDER + 5, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[5]}, - {LAVA_BOULDER + 6, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[6]}, - {LAVA_BOULDER + 7, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[7]}, - {LAVA_BOULDER + 8, LAVA_BOULDER_RATE, &AF(DoLavaBoulder), &s_LavaBoulder[0]}, + {LAVA_BOULDER + 1, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[1]}, + {LAVA_BOULDER + 2, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[2]}, + {LAVA_BOULDER + 3, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[3]}, + {LAVA_BOULDER + 4, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[4]}, + {LAVA_BOULDER + 5, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[5]}, + {LAVA_BOULDER + 6, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[6]}, + {LAVA_BOULDER + 7, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[7]}, + {LAVA_BOULDER + 8, LAVA_BOULDER_RATE, DoLavaBoulder, &s_LavaBoulder[0]}, }; #define LAVA_SHARD (LAVA_BOULDER+1) STATE s_LavaShard[] = { - {LAVA_BOULDER + 1, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[1]}, - {LAVA_BOULDER + 2, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[2]}, - {LAVA_BOULDER + 3, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[3]}, - {LAVA_BOULDER + 4, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[4]}, - {LAVA_BOULDER + 5, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[5]}, - {LAVA_BOULDER + 6, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[6]}, - {LAVA_BOULDER + 7, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[7]}, - {LAVA_BOULDER + 8, LAVA_BOULDER_RATE, &AF(DoShrapDamage), &s_LavaShard[0]}, + {LAVA_BOULDER + 1, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[1]}, + {LAVA_BOULDER + 2, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[2]}, + {LAVA_BOULDER + 3, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[3]}, + {LAVA_BOULDER + 4, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[4]}, + {LAVA_BOULDER + 5, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[5]}, + {LAVA_BOULDER + 6, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[6]}, + {LAVA_BOULDER + 7, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[7]}, + {LAVA_BOULDER + 8, LAVA_BOULDER_RATE, DoShrapDamage, &s_LavaShard[0]}, }; STATE s_VulcanBoulder[] = { - {LAVA_BOULDER + 1, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[1]}, - {LAVA_BOULDER + 2, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[2]}, - {LAVA_BOULDER + 3, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[3]}, - {LAVA_BOULDER + 4, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[4]}, - {LAVA_BOULDER + 5, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[5]}, - {LAVA_BOULDER + 6, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[6]}, - {LAVA_BOULDER + 7, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[7]}, - {LAVA_BOULDER + 8, LAVA_BOULDER_RATE, &AF(DoVulcanBoulder), &s_VulcanBoulder[0]}, + {LAVA_BOULDER + 1, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[1]}, + {LAVA_BOULDER + 2, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[2]}, + {LAVA_BOULDER + 3, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[3]}, + {LAVA_BOULDER + 4, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[4]}, + {LAVA_BOULDER + 5, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[5]}, + {LAVA_BOULDER + 6, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[6]}, + {LAVA_BOULDER + 7, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[7]}, + {LAVA_BOULDER + 8, LAVA_BOULDER_RATE, DoVulcanBoulder, &s_VulcanBoulder[0]}, }; ////////////////////// @@ -587,6 +607,18 @@ STATE s_VulcanBoulder[] = ////////////////////// #if 0 +ANIMATOR DoGrenade; +#undef GRENADE +#define GRENADE 5000 +#define GRENADE_RATE 8 + +STATE s_Grenade[] = +{ + {FIREBALL + 0, GRENADE_RATE, DoGrenade, &s_Grenade[1]}, + {FIREBALL + 1, GRENADE_RATE, DoGrenade, &s_Grenade[2]}, + {FIREBALL + 2, GRENADE_RATE, DoGrenade, &s_Grenade[3]}, + {FIREBALL + 3, GRENADE_RATE, DoGrenade, &s_Grenade[0]} +}; #else #define GRENADE_FRAMES 1 #define GRENADE_R0 2110 @@ -598,23 +630,24 @@ STATE s_VulcanBoulder[] = #undef GRENADE #define GRENADE GRENADE_R0 #define GRENADE_RATE 8 +ANIMATOR DoGrenade; STATE s_Grenade[5][1] = { { - {GRENADE_R0 + 0, GRENADE_RATE, &AF(DoGrenade), &s_Grenade[0][0]}, + {GRENADE_R0 + 0, GRENADE_RATE, DoGrenade, &s_Grenade[0][0]}, }, { - {GRENADE_R1 + 0, GRENADE_RATE, &AF(DoGrenade), &s_Grenade[1][0]}, + {GRENADE_R1 + 0, GRENADE_RATE, DoGrenade, &s_Grenade[1][0]}, }, { - {GRENADE_R2 + 0, GRENADE_RATE, &AF(DoGrenade), &s_Grenade[2][0]}, + {GRENADE_R2 + 0, GRENADE_RATE, DoGrenade, &s_Grenade[2][0]}, }, { - {GRENADE_R3 + 0, GRENADE_RATE, &AF(DoGrenade), &s_Grenade[3][0]}, + {GRENADE_R3 + 0, GRENADE_RATE, DoGrenade, &s_Grenade[3][0]}, }, { - {GRENADE_R4 + 0, GRENADE_RATE, &AF(DoGrenade), &s_Grenade[4][0]}, + {GRENADE_R4 + 0, GRENADE_RATE, DoGrenade, &s_Grenade[4][0]}, } }; @@ -635,6 +668,7 @@ STATE* sg_Grenade[] = // ////////////////////// +ANIMATOR DoMine,DoMineStuck; #undef MINE #define MINE 2223 #define MINE_SHRAP 5011 @@ -642,24 +676,24 @@ STATE* sg_Grenade[] = STATE s_MineStuck[] = { - {MINE + 0, MINE_RATE, &AF(DoMineStuck), &s_MineStuck[0]}, + {MINE + 0, MINE_RATE, DoMineStuck, &s_MineStuck[0]}, }; STATE s_Mine[] = { - {MINE + 0, MINE_RATE, &AF(DoMine), &s_Mine[1]}, - {MINE + 1, MINE_RATE, &AF(DoMine), &s_Mine[0]}, + {MINE + 0, MINE_RATE, DoMine, &s_Mine[1]}, + {MINE + 1, MINE_RATE, DoMine, &s_Mine[0]}, }; - +ANIMATOR DoMineSpark; STATE s_MineSpark[] = { - {UZI_SPARK + 0, UZI_SPARK_RATE, &AF(DoMineSpark), &s_MineSpark[1]}, - {UZI_SPARK + 1, UZI_SPARK_RATE, &AF(DoMineSpark), &s_MineSpark[2]}, - {UZI_SPARK + 2, UZI_SPARK_RATE, &AF(DoMineSpark), &s_MineSpark[3]}, - {UZI_SPARK + 3, UZI_SPARK_RATE, &AF(DoMineSpark), &s_MineSpark[4]}, - {UZI_SPARK + 4, UZI_SPARK_RATE, &AF(DoMineSpark), &s_MineSpark[5]}, - {UZI_SPARK + 4, 100, &AF(DoSuicide), &s_MineSpark[0]}, + {UZI_SPARK + 0, UZI_SPARK_RATE, DoMineSpark, &s_MineSpark[1]}, + {UZI_SPARK + 1, UZI_SPARK_RATE, DoMineSpark, &s_MineSpark[2]}, + {UZI_SPARK + 2, UZI_SPARK_RATE, DoMineSpark, &s_MineSpark[3]}, + {UZI_SPARK + 3, UZI_SPARK_RATE, DoMineSpark, &s_MineSpark[4]}, + {UZI_SPARK + 4, UZI_SPARK_RATE, DoMineSpark, &s_MineSpark[5]}, + {UZI_SPARK + 4, 100, DoSuicide, &s_MineSpark[0]}, }; ////////////////////// @@ -677,39 +711,39 @@ STATE s_MineSpark[] = #define METEOR STAR #define METEOR_RATE 8 - +ANIMATOR DoMeteor; STATE s_Meteor[5][4] = { { - {METEOR_R0 + 0, METEOR_RATE, &AF(DoMeteor), &s_Meteor[0][1]}, - {METEOR_R0 + 1, METEOR_RATE, &AF(DoMeteor), &s_Meteor[0][2]}, - {METEOR_R0 + 2, METEOR_RATE, &AF(DoMeteor), &s_Meteor[0][3]}, - {METEOR_R0 + 3, METEOR_RATE, &AF(DoMeteor), &s_Meteor[0][0]}, + {METEOR_R0 + 0, METEOR_RATE, DoMeteor, &s_Meteor[0][1]}, + {METEOR_R0 + 1, METEOR_RATE, DoMeteor, &s_Meteor[0][2]}, + {METEOR_R0 + 2, METEOR_RATE, DoMeteor, &s_Meteor[0][3]}, + {METEOR_R0 + 3, METEOR_RATE, DoMeteor, &s_Meteor[0][0]}, }, { - {METEOR_R1 + 0, METEOR_RATE, &AF(DoMeteor), &s_Meteor[1][1]}, - {METEOR_R1 + 1, METEOR_RATE, &AF(DoMeteor), &s_Meteor[1][2]}, - {METEOR_R1 + 2, METEOR_RATE, &AF(DoMeteor), &s_Meteor[1][3]}, - {METEOR_R1 + 3, METEOR_RATE, &AF(DoMeteor), &s_Meteor[1][0]}, + {METEOR_R1 + 0, METEOR_RATE, DoMeteor, &s_Meteor[1][1]}, + {METEOR_R1 + 1, METEOR_RATE, DoMeteor, &s_Meteor[1][2]}, + {METEOR_R1 + 2, METEOR_RATE, DoMeteor, &s_Meteor[1][3]}, + {METEOR_R1 + 3, METEOR_RATE, DoMeteor, &s_Meteor[1][0]}, }, { - {METEOR_R2 + 0, METEOR_RATE, &AF(DoMeteor), &s_Meteor[2][1]}, - {METEOR_R2 + 1, METEOR_RATE, &AF(DoMeteor), &s_Meteor[2][2]}, - {METEOR_R2 + 2, METEOR_RATE, &AF(DoMeteor), &s_Meteor[2][3]}, - {METEOR_R2 + 3, METEOR_RATE, &AF(DoMeteor), &s_Meteor[2][0]}, + {METEOR_R2 + 0, METEOR_RATE, DoMeteor, &s_Meteor[2][1]}, + {METEOR_R2 + 1, METEOR_RATE, DoMeteor, &s_Meteor[2][2]}, + {METEOR_R2 + 2, METEOR_RATE, DoMeteor, &s_Meteor[2][3]}, + {METEOR_R2 + 3, METEOR_RATE, DoMeteor, &s_Meteor[2][0]}, }, { - {METEOR_R3 + 0, METEOR_RATE, &AF(DoMeteor), &s_Meteor[3][1]}, - {METEOR_R3 + 1, METEOR_RATE, &AF(DoMeteor), &s_Meteor[3][2]}, - {METEOR_R3 + 2, METEOR_RATE, &AF(DoMeteor), &s_Meteor[3][3]}, - {METEOR_R3 + 3, METEOR_RATE, &AF(DoMeteor), &s_Meteor[3][0]}, + {METEOR_R3 + 0, METEOR_RATE, DoMeteor, &s_Meteor[3][1]}, + {METEOR_R3 + 1, METEOR_RATE, DoMeteor, &s_Meteor[3][2]}, + {METEOR_R3 + 2, METEOR_RATE, DoMeteor, &s_Meteor[3][3]}, + {METEOR_R3 + 3, METEOR_RATE, DoMeteor, &s_Meteor[3][0]}, }, { - {METEOR_R4 + 0, METEOR_RATE, &AF(DoMeteor), &s_Meteor[4][1]}, - {METEOR_R4 + 1, METEOR_RATE, &AF(DoMeteor), &s_Meteor[4][2]}, - {METEOR_R4 + 2, METEOR_RATE, &AF(DoMeteor), &s_Meteor[4][3]}, - {METEOR_R4 + 3, METEOR_RATE, &AF(DoMeteor), &s_Meteor[4][0]}, + {METEOR_R4 + 0, METEOR_RATE, DoMeteor, &s_Meteor[4][1]}, + {METEOR_R4 + 1, METEOR_RATE, DoMeteor, &s_Meteor[4][2]}, + {METEOR_R4 + 2, METEOR_RATE, DoMeteor, &s_Meteor[4][3]}, + {METEOR_R4 + 3, METEOR_RATE, DoMeteor, &s_Meteor[4][0]}, } }; @@ -728,48 +762,48 @@ STATE* sg_Meteor[] = STATE s_MeteorExp[] = { - {METEOR_EXP + 0, METEOR_EXP_RATE, nullptr, &s_MeteorExp[1]}, - {METEOR_EXP + 1, METEOR_EXP_RATE, nullptr, &s_MeteorExp[2]}, - {METEOR_EXP + 2, METEOR_EXP_RATE, nullptr, &s_MeteorExp[3]}, - {METEOR_EXP + 3, METEOR_EXP_RATE, nullptr, &s_MeteorExp[4]}, - {METEOR_EXP + 4, METEOR_EXP_RATE, nullptr, &s_MeteorExp[5]}, - {METEOR_EXP + 5, METEOR_EXP_RATE, nullptr, &s_MeteorExp[6]}, - {METEOR_EXP + 5, METEOR_EXP_RATE, &AF(DoSuicide), &s_MeteorExp[6]} + {METEOR_EXP + 0, METEOR_EXP_RATE, NullAnimator, &s_MeteorExp[1]}, + {METEOR_EXP + 1, METEOR_EXP_RATE, NullAnimator, &s_MeteorExp[2]}, + {METEOR_EXP + 2, METEOR_EXP_RATE, NullAnimator, &s_MeteorExp[3]}, + {METEOR_EXP + 3, METEOR_EXP_RATE, NullAnimator, &s_MeteorExp[4]}, + {METEOR_EXP + 4, METEOR_EXP_RATE, NullAnimator, &s_MeteorExp[5]}, + {METEOR_EXP + 5, METEOR_EXP_RATE, NullAnimator, &s_MeteorExp[6]}, + {METEOR_EXP + 5, METEOR_EXP_RATE, DoSuicide, &s_MeteorExp[6]} }; #define MIRV_METEOR METEOR_R0 - +ANIMATOR DoMirvMissile; STATE s_MirvMeteor[5][4] = { { - {METEOR_R0 + 0, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[0][1]}, - {METEOR_R0 + 1, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[0][2]}, - {METEOR_R0 + 2, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[0][3]}, - {METEOR_R0 + 3, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[0][0]}, + {METEOR_R0 + 0, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[0][1]}, + {METEOR_R0 + 1, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[0][2]}, + {METEOR_R0 + 2, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[0][3]}, + {METEOR_R0 + 3, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[0][0]}, }, { - {METEOR_R1 + 0, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[1][1]}, - {METEOR_R1 + 1, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[1][2]}, - {METEOR_R1 + 2, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[1][3]}, - {METEOR_R1 + 3, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[1][0]}, + {METEOR_R1 + 0, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[1][1]}, + {METEOR_R1 + 1, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[1][2]}, + {METEOR_R1 + 2, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[1][3]}, + {METEOR_R1 + 3, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[1][0]}, }, { - {METEOR_R2 + 0, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[2][1]}, - {METEOR_R2 + 1, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[2][2]}, - {METEOR_R2 + 2, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[2][3]}, - {METEOR_R2 + 3, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[2][0]}, + {METEOR_R2 + 0, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[2][1]}, + {METEOR_R2 + 1, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[2][2]}, + {METEOR_R2 + 2, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[2][3]}, + {METEOR_R2 + 3, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[2][0]}, }, { - {METEOR_R3 + 0, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[3][1]}, - {METEOR_R3 + 1, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[3][2]}, - {METEOR_R3 + 2, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[3][3]}, - {METEOR_R3 + 3, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[3][0]}, + {METEOR_R3 + 0, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[3][1]}, + {METEOR_R3 + 1, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[3][2]}, + {METEOR_R3 + 2, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[3][3]}, + {METEOR_R3 + 3, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[3][0]}, }, { - {METEOR_R4 + 0, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[4][1]}, - {METEOR_R4 + 1, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[4][2]}, - {METEOR_R4 + 2, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[4][3]}, - {METEOR_R4 + 3, METEOR_RATE, &AF(DoMirvMissile), &s_MirvMeteor[4][0]}, + {METEOR_R4 + 0, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[4][1]}, + {METEOR_R4 + 1, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[4][2]}, + {METEOR_R4 + 2, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[4][3]}, + {METEOR_R4 + 3, METEOR_RATE, DoMirvMissile, &s_MirvMeteor[4][0]}, } }; @@ -785,48 +819,48 @@ STATE* sg_MirvMeteor[] = STATE s_MirvMeteorExp[] = { - {METEOR_EXP + 0, METEOR_EXP_RATE, nullptr, &s_MirvMeteorExp[1]}, - {METEOR_EXP + 1, METEOR_EXP_RATE, nullptr, &s_MirvMeteorExp[2]}, - {METEOR_EXP + 2, METEOR_EXP_RATE, nullptr, &s_MirvMeteorExp[3]}, - {METEOR_EXP + 3, METEOR_EXP_RATE, nullptr, &s_MirvMeteorExp[4]}, - {METEOR_EXP + 4, METEOR_EXP_RATE, nullptr, &s_MirvMeteorExp[5]}, - {METEOR_EXP + 5, METEOR_EXP_RATE, nullptr, &s_MirvMeteorExp[6]}, - {METEOR_EXP + 5, METEOR_EXP_RATE, &AF(DoSuicide), &s_MirvMeteorExp[6]} + {METEOR_EXP + 0, METEOR_EXP_RATE, NullAnimator, &s_MirvMeteorExp[1]}, + {METEOR_EXP + 1, METEOR_EXP_RATE, NullAnimator, &s_MirvMeteorExp[2]}, + {METEOR_EXP + 2, METEOR_EXP_RATE, NullAnimator, &s_MirvMeteorExp[3]}, + {METEOR_EXP + 3, METEOR_EXP_RATE, NullAnimator, &s_MirvMeteorExp[4]}, + {METEOR_EXP + 4, METEOR_EXP_RATE, NullAnimator, &s_MirvMeteorExp[5]}, + {METEOR_EXP + 5, METEOR_EXP_RATE, NullAnimator, &s_MirvMeteorExp[6]}, + {METEOR_EXP + 5, METEOR_EXP_RATE, DoSuicide, &s_MirvMeteorExp[6]} }; #define SERP_METEOR METEOR_R0+1 - +ANIMATOR DoSerpMeteor; STATE s_SerpMeteor[5][4] = { { - {2031 + 0, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[0][1]}, - {2031 + 1, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[0][2]}, - {2031 + 2, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[0][3]}, - {2031 + 3, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[0][0]}, + {2031 + 0, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[0][1]}, + {2031 + 1, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[0][2]}, + {2031 + 2, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[0][3]}, + {2031 + 3, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[0][0]}, }, { - {2031 + 0, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[1][1]}, - {2031 + 1, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[1][2]}, - {2031 + 2, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[1][3]}, - {2031 + 3, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[1][0]}, + {2031 + 0, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[1][1]}, + {2031 + 1, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[1][2]}, + {2031 + 2, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[1][3]}, + {2031 + 3, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[1][0]}, }, { - {2031 + 0, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[2][1]}, - {2031 + 1, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[2][2]}, - {2031 + 2, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[2][3]}, - {2031 + 3, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[2][0]}, + {2031 + 0, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[2][1]}, + {2031 + 1, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[2][2]}, + {2031 + 2, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[2][3]}, + {2031 + 3, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[2][0]}, }, { - {2031 + 0, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[3][1]}, - {2031 + 1, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[3][2]}, - {2031 + 2, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[3][3]}, - {2031 + 3, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[3][0]}, + {2031 + 0, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[3][1]}, + {2031 + 1, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[3][2]}, + {2031 + 2, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[3][3]}, + {2031 + 3, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[3][0]}, }, { - {2031 + 0, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[4][1]}, - {2031 + 1, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[4][2]}, - {2031 + 2, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[4][3]}, - {2031 + 3, METEOR_RATE, &AF(DoSerpMeteor), &s_SerpMeteor[4][0]}, + {2031 + 0, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[4][1]}, + {2031 + 1, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[4][2]}, + {2031 + 2, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[4][3]}, + {2031 + 3, METEOR_RATE, DoSerpMeteor, &s_SerpMeteor[4][0]}, } }; @@ -843,13 +877,13 @@ STATE* sg_SerpMeteor[] = STATE s_SerpMeteorExp[] = { - {METEOR_EXP + 0, METEOR_EXP_RATE, nullptr, &s_SerpMeteorExp[1]}, - {METEOR_EXP + 1, METEOR_EXP_RATE, nullptr, &s_SerpMeteorExp[2]}, - {METEOR_EXP + 2, METEOR_EXP_RATE, nullptr, &s_SerpMeteorExp[3]}, - {METEOR_EXP + 3, METEOR_EXP_RATE, nullptr, &s_SerpMeteorExp[4]}, - {METEOR_EXP + 4, METEOR_EXP_RATE, nullptr, &s_SerpMeteorExp[5]}, - {METEOR_EXP + 5, METEOR_EXP_RATE, nullptr, &s_SerpMeteorExp[6]}, - {METEOR_EXP + 5, METEOR_EXP_RATE, &AF(DoSuicide), &s_SerpMeteorExp[6]} + {METEOR_EXP + 0, METEOR_EXP_RATE, NullAnimator, &s_SerpMeteorExp[1]}, + {METEOR_EXP + 1, METEOR_EXP_RATE, NullAnimator, &s_SerpMeteorExp[2]}, + {METEOR_EXP + 2, METEOR_EXP_RATE, NullAnimator, &s_SerpMeteorExp[3]}, + {METEOR_EXP + 3, METEOR_EXP_RATE, NullAnimator, &s_SerpMeteorExp[4]}, + {METEOR_EXP + 4, METEOR_EXP_RATE, NullAnimator, &s_SerpMeteorExp[5]}, + {METEOR_EXP + 5, METEOR_EXP_RATE, NullAnimator, &s_SerpMeteorExp[6]}, + {METEOR_EXP + 5, METEOR_EXP_RATE, DoSuicide, &s_SerpMeteorExp[6]} }; ////////////////////// @@ -859,24 +893,24 @@ STATE s_SerpMeteorExp[] = ////////////////////// #define SPEAR_RATE 8 - +ANIMATOR DoSpear; STATE s_Spear[5][1] = { { - {SPEAR_R0 + 0, SPEAR_RATE, &AF(DoSpear), s_Spear[0]}, + {SPEAR_R0 + 0, SPEAR_RATE, DoSpear, s_Spear[0]}, }, { - {SPEAR_R1 + 0, SPEAR_RATE, &AF(DoSpear), s_Spear[1]}, + {SPEAR_R1 + 0, SPEAR_RATE, DoSpear, s_Spear[1]}, }, { - {SPEAR_R2 + 0, SPEAR_RATE, &AF(DoSpear), s_Spear[2]}, + {SPEAR_R2 + 0, SPEAR_RATE, DoSpear, s_Spear[2]}, }, { - {SPEAR_R3 + 0, SPEAR_RATE, &AF(DoSpear), s_Spear[3]}, + {SPEAR_R3 + 0, SPEAR_RATE, DoSpear, s_Spear[3]}, }, { - {SPEAR_R4 + 0, SPEAR_RATE, &AF(DoSpear), s_Spear[4]}, + {SPEAR_R4 + 0, SPEAR_RATE, DoSpear, s_Spear[4]}, } }; @@ -902,25 +936,25 @@ STATE* sg_Spear[] = #define ROCKET_R3 ROCKET_R0 + (ROCKET_FRAMES * 4) #define ROCKET_R4 ROCKET_R0 + (ROCKET_FRAMES * 1) - +ANIMATOR DoRocket; #define ROCKET_RATE 8 STATE s_Rocket[5][1] = { { - {ROCKET_R0 + 0, ROCKET_RATE, &AF(DoRocket), &s_Rocket[0][0]}, + {ROCKET_R0 + 0, ROCKET_RATE, DoRocket, &s_Rocket[0][0]}, }, { - {ROCKET_R1 + 0, ROCKET_RATE, &AF(DoRocket), &s_Rocket[1][0]}, + {ROCKET_R1 + 0, ROCKET_RATE, DoRocket, &s_Rocket[1][0]}, }, { - {ROCKET_R2 + 0, ROCKET_RATE, &AF(DoRocket), &s_Rocket[2][0]}, + {ROCKET_R2 + 0, ROCKET_RATE, DoRocket, &s_Rocket[2][0]}, }, { - {ROCKET_R3 + 0, ROCKET_RATE, &AF(DoRocket), &s_Rocket[3][0]}, + {ROCKET_R3 + 0, ROCKET_RATE, DoRocket, &s_Rocket[3][0]}, }, { - {ROCKET_R4 + 0, ROCKET_RATE, &AF(DoRocket), &s_Rocket[4][0]}, + {ROCKET_R4 + 0, ROCKET_RATE, DoRocket, &s_Rocket[4][0]}, } }; @@ -946,25 +980,25 @@ STATE* sg_Rocket[] = #define BUNNYROCKET_R3 BUNNYROCKET_R0 + (BUNNYROCKET_FRAMES * 3) #define BUNNYROCKET_R4 BUNNYROCKET_R0 + (BUNNYROCKET_FRAMES * 4) - +ANIMATOR DoRocket; #define BUNNYROCKET_RATE 8 STATE s_BunnyRocket[5][1] = { { - {BUNNYROCKET_R0 + 2, BUNNYROCKET_RATE, &AF(DoRocket), &s_BunnyRocket[0][0]}, + {BUNNYROCKET_R0 + 2, BUNNYROCKET_RATE, DoRocket, &s_BunnyRocket[0][0]}, }, { - {BUNNYROCKET_R1 + 2, BUNNYROCKET_RATE, &AF(DoRocket), &s_BunnyRocket[1][0]}, + {BUNNYROCKET_R1 + 2, BUNNYROCKET_RATE, DoRocket, &s_BunnyRocket[1][0]}, }, { - {BUNNYROCKET_R2 + 2, BUNNYROCKET_RATE, &AF(DoRocket), &s_BunnyRocket[2][0]}, + {BUNNYROCKET_R2 + 2, BUNNYROCKET_RATE, DoRocket, &s_BunnyRocket[2][0]}, }, { - {BUNNYROCKET_R3 + 2, BUNNYROCKET_RATE, &AF(DoRocket), &s_BunnyRocket[3][0]}, + {BUNNYROCKET_R3 + 2, BUNNYROCKET_RATE, DoRocket, &s_BunnyRocket[3][0]}, }, { - {BUNNYROCKET_R4 + 2, BUNNYROCKET_RATE, &AF(DoRocket), &s_BunnyRocket[4][0]}, + {BUNNYROCKET_R4 + 2, BUNNYROCKET_RATE, DoRocket, &s_BunnyRocket[4][0]}, } }; @@ -977,25 +1011,25 @@ STATE* sg_BunnyRocket[] = &s_BunnyRocket[4][0] }; - +ANIMATOR DoRail; #define RAIL_RATE 8 STATE s_Rail[5][1] = { { - {ROCKET_R0 + 0, RAIL_RATE, &AF(DoRail), &s_Rail[0][0]}, + {ROCKET_R0 + 0, RAIL_RATE, DoRail, &s_Rail[0][0]}, }, { - {ROCKET_R1 + 0, RAIL_RATE, &AF(DoRail), &s_Rail[1][0]}, + {ROCKET_R1 + 0, RAIL_RATE, DoRail, &s_Rail[1][0]}, }, { - {ROCKET_R2 + 0, RAIL_RATE, &AF(DoRail), &s_Rail[2][0]}, + {ROCKET_R2 + 0, RAIL_RATE, DoRail, &s_Rail[2][0]}, }, { - {ROCKET_R3 + 0, RAIL_RATE, &AF(DoRail), &s_Rail[3][0]}, + {ROCKET_R3 + 0, RAIL_RATE, DoRail, &s_Rail[3][0]}, }, { - {ROCKET_R4 + 0, RAIL_RATE, &AF(DoRail), &s_Rail[4][0]}, + {ROCKET_R4 + 0, RAIL_RATE, DoRail, &s_Rail[4][0]}, } }; @@ -1008,12 +1042,12 @@ STATE* sg_Rail[] = &s_Rail[4][0] }; - +ANIMATOR DoLaser; #define LASER_RATE 8 STATE s_Laser[] = { - {ROCKET_R0 + 0, LASER_RATE, &AF(DoLaser), &s_Laser[0]} + {ROCKET_R0 + 0, LASER_RATE, DoLaser, &s_Laser[0]} }; ////////////////////// @@ -1029,25 +1063,41 @@ STATE s_Laser[] = #define MICRO_R3 MICRO_R0 + (MICRO_FRAMES * 4) #define MICRO_R4 MICRO_R0 + (MICRO_FRAMES * 1) - +ANIMATOR DoMicro; #define MICRO_RATE 8 +#if 0 +#define PUFF 1748 +#define PUFF_RATE 8 +ANIMATOR DoMicroPuffSuicide; +STATE s_MicroPuff[] = +{ + {PUFF + 0, PUFF_RATE, DoPuff, &s_MicroPuff[1]}, + {PUFF + 1, PUFF_RATE, DoPuff, &s_MicroPuff[2]}, + {PUFF + 2, PUFF_RATE, DoPuff, &s_MicroPuff[3]}, + {PUFF + 3, PUFF_RATE, DoPuff, &s_MicroPuff[4]}, + {PUFF + 4, PUFF_RATE, DoPuff, &s_MicroPuff[5]}, + {PUFF + 5, PUFF_RATE, DoPuff, &s_MicroPuff[6]}, + {PUFF + 5, 100, DoMicroPuffSuicide, &s_MicroPuff[6]} +}; +#endif + STATE s_Micro[5][1] = { { - {MICRO_R0 + 0, MICRO_RATE, &AF(DoMicro), &s_Micro[0][0]}, + {MICRO_R0 + 0, MICRO_RATE, DoMicro, &s_Micro[0][0]}, }, { - {MICRO_R1 + 0, MICRO_RATE, &AF(DoMicro), &s_Micro[1][0]}, + {MICRO_R1 + 0, MICRO_RATE, DoMicro, &s_Micro[1][0]}, }, { - {MICRO_R2 + 0, MICRO_RATE, &AF(DoMicro), &s_Micro[2][0]}, + {MICRO_R2 + 0, MICRO_RATE, DoMicro, &s_Micro[2][0]}, }, { - {MICRO_R3 + 0, MICRO_RATE, &AF(DoMicro), &s_Micro[3][0]}, + {MICRO_R3 + 0, MICRO_RATE, DoMicro, &s_Micro[3][0]}, }, { - {MICRO_R4 + 0, MICRO_RATE, &AF(DoMicro), &s_Micro[4][0]}, + {MICRO_R4 + 0, MICRO_RATE, DoMicro, &s_Micro[4][0]}, } }; @@ -1060,23 +1110,23 @@ STATE* sg_Micro[] = &s_Micro[4][0] }; - +ANIMATOR DoMicroMini; STATE s_MicroMini[5][1] = { { - {MICRO_R0 + 0, MICRO_RATE, &AF(DoMicroMini), &s_MicroMini[0][0]}, + {MICRO_R0 + 0, MICRO_RATE, DoMicroMini, &s_MicroMini[0][0]}, }, { - {MICRO_R1 + 0, MICRO_RATE, &AF(DoMicroMini), &s_MicroMini[1][0]}, + {MICRO_R1 + 0, MICRO_RATE, DoMicroMini, &s_MicroMini[1][0]}, }, { - {MICRO_R2 + 0, MICRO_RATE, &AF(DoMicroMini), &s_MicroMini[2][0]}, + {MICRO_R2 + 0, MICRO_RATE, DoMicroMini, &s_MicroMini[2][0]}, }, { - {MICRO_R3 + 0, MICRO_RATE, &AF(DoMicroMini), &s_MicroMini[3][0]}, + {MICRO_R3 + 0, MICRO_RATE, DoMicroMini, &s_MicroMini[3][0]}, }, { - {MICRO_R4 + 0, MICRO_RATE, &AF(DoMicroMini), &s_MicroMini[4][0]}, + {MICRO_R4 + 0, MICRO_RATE, DoMicroMini, &s_MicroMini[4][0]}, } }; @@ -1096,24 +1146,24 @@ STATE* sg_MicroMini[] = ////////////////////// #define BOLT_THINMAN_RATE 8 - +ANIMATOR DoBoltThinMan; STATE s_BoltThinMan[5][1] = { { - {BOLT_THINMAN_R0 + 0, BOLT_THINMAN_RATE, &AF(DoBoltThinMan), &s_BoltThinMan[0][0]}, + {BOLT_THINMAN_R0 + 0, BOLT_THINMAN_RATE, DoBoltThinMan, &s_BoltThinMan[0][0]}, }, { - {BOLT_THINMAN_R1 + 0, BOLT_THINMAN_RATE, &AF(DoBoltThinMan), &s_BoltThinMan[1][0]}, + {BOLT_THINMAN_R1 + 0, BOLT_THINMAN_RATE, DoBoltThinMan, &s_BoltThinMan[1][0]}, }, { - {BOLT_THINMAN_R2 + 0, BOLT_THINMAN_RATE, &AF(DoBoltThinMan), &s_BoltThinMan[2][0]}, + {BOLT_THINMAN_R2 + 0, BOLT_THINMAN_RATE, DoBoltThinMan, &s_BoltThinMan[2][0]}, }, { - {BOLT_THINMAN_R3 + 0, BOLT_THINMAN_RATE, &AF(DoBoltThinMan), &s_BoltThinMan[3][0]}, + {BOLT_THINMAN_R3 + 0, BOLT_THINMAN_RATE, DoBoltThinMan, &s_BoltThinMan[3][0]}, }, { - {BOLT_THINMAN_R4 + 0, BOLT_THINMAN_RATE, &AF(DoBoltThinMan), &s_BoltThinMan[4][0]}, + {BOLT_THINMAN_R4 + 0, BOLT_THINMAN_RATE, DoBoltThinMan, &s_BoltThinMan[4][0]}, } }; @@ -1127,24 +1177,24 @@ STATE* sg_BoltThinMan[] = }; #define BOLT_SEEKER_RATE 8 - +ANIMATOR DoBoltSeeker; STATE s_BoltSeeker[5][1] = { { - {BOLT_THINMAN_R0 + 0, BOLT_SEEKER_RATE, &AF(DoBoltSeeker), &s_BoltSeeker[0][0]}, + {BOLT_THINMAN_R0 + 0, BOLT_SEEKER_RATE, DoBoltSeeker, &s_BoltSeeker[0][0]}, }, { - {BOLT_THINMAN_R1 + 0, BOLT_SEEKER_RATE, &AF(DoBoltSeeker), &s_BoltSeeker[1][0]}, + {BOLT_THINMAN_R1 + 0, BOLT_SEEKER_RATE, DoBoltSeeker, &s_BoltSeeker[1][0]}, }, { - {BOLT_THINMAN_R2 + 0, BOLT_SEEKER_RATE, &AF(DoBoltSeeker), &s_BoltSeeker[2][0]}, + {BOLT_THINMAN_R2 + 0, BOLT_SEEKER_RATE, DoBoltSeeker, &s_BoltSeeker[2][0]}, }, { - {BOLT_THINMAN_R3 + 0, BOLT_SEEKER_RATE, &AF(DoBoltSeeker), &s_BoltSeeker[3][0]}, + {BOLT_THINMAN_R3 + 0, BOLT_SEEKER_RATE, DoBoltSeeker, &s_BoltSeeker[3][0]}, }, { - {BOLT_THINMAN_R4 + 0, BOLT_SEEKER_RATE, &AF(DoBoltSeeker), &s_BoltSeeker[4][0]}, + {BOLT_THINMAN_R4 + 0, BOLT_SEEKER_RATE, DoBoltSeeker, &s_BoltSeeker[4][0]}, } }; @@ -1160,40 +1210,40 @@ STATE* sg_BoltSeeker[] = #define BOLT_FATMAN STAR #define BOLT_FATMAN_RATE 8 - +ANIMATOR DoBoltFatMan; STATE s_BoltFatMan[] = { - {BOLT_FATMAN + 0, BOLT_FATMAN_RATE, &AF(DoBoltFatMan), &s_BoltFatMan[1]}, - {BOLT_FATMAN + 1, BOLT_FATMAN_RATE, &AF(DoBoltFatMan), &s_BoltFatMan[2]}, - {BOLT_FATMAN + 2, BOLT_FATMAN_RATE, &AF(DoBoltFatMan), &s_BoltFatMan[3]}, - {BOLT_FATMAN + 3, BOLT_FATMAN_RATE, &AF(DoBoltFatMan), &s_BoltFatMan[0]} + {BOLT_FATMAN + 0, BOLT_FATMAN_RATE, DoBoltFatMan, &s_BoltFatMan[1]}, + {BOLT_FATMAN + 1, BOLT_FATMAN_RATE, DoBoltFatMan, &s_BoltFatMan[2]}, + {BOLT_FATMAN + 2, BOLT_FATMAN_RATE, DoBoltFatMan, &s_BoltFatMan[3]}, + {BOLT_FATMAN + 3, BOLT_FATMAN_RATE, DoBoltFatMan, &s_BoltFatMan[0]} }; #define BOLT_SHRAPNEL STAR #define BOLT_SHRAPNEL_RATE 8 - +ANIMATOR DoBoltShrapnel; STATE s_BoltShrapnel[] = { - {BOLT_SHRAPNEL + 0, BOLT_SHRAPNEL_RATE, &AF(DoBoltShrapnel), &s_BoltShrapnel[1]}, - {BOLT_SHRAPNEL + 1, BOLT_SHRAPNEL_RATE, &AF(DoBoltShrapnel), &s_BoltShrapnel[2]}, - {BOLT_SHRAPNEL + 2, BOLT_SHRAPNEL_RATE, &AF(DoBoltShrapnel), &s_BoltShrapnel[3]}, - {BOLT_SHRAPNEL + 3, BOLT_SHRAPNEL_RATE, &AF(DoBoltShrapnel), &s_BoltShrapnel[0]} + {BOLT_SHRAPNEL + 0, BOLT_SHRAPNEL_RATE, DoBoltShrapnel, &s_BoltShrapnel[1]}, + {BOLT_SHRAPNEL + 1, BOLT_SHRAPNEL_RATE, DoBoltShrapnel, &s_BoltShrapnel[2]}, + {BOLT_SHRAPNEL + 2, BOLT_SHRAPNEL_RATE, DoBoltShrapnel, &s_BoltShrapnel[3]}, + {BOLT_SHRAPNEL + 3, BOLT_SHRAPNEL_RATE, DoBoltShrapnel, &s_BoltShrapnel[0]} }; #define COOLG_FIRE 2430 //#define COOLG_FIRE 1465 #define COOLG_W_FIRE_RATE 8 - +ANIMATOR DoCoolgFire; STATE s_CoolgFire[] = { - {2031 + 0, COOLG_W_FIRE_RATE, &AF(DoCoolgFire), &s_CoolgFire[1]}, - {2031 + 1, COOLG_W_FIRE_RATE, &AF(DoCoolgFire), &s_CoolgFire[2]}, - {2031 + 2, COOLG_W_FIRE_RATE, &AF(DoCoolgFire), &s_CoolgFire[3]}, - {2031 + 3, COOLG_W_FIRE_RATE, &AF(DoCoolgFire), &s_CoolgFire[0]} + {2031 + 0, COOLG_W_FIRE_RATE, DoCoolgFire, &s_CoolgFire[1]}, + {2031 + 1, COOLG_W_FIRE_RATE, DoCoolgFire, &s_CoolgFire[2]}, + {2031 + 2, COOLG_W_FIRE_RATE, DoCoolgFire, &s_CoolgFire[3]}, + {2031 + 3, COOLG_W_FIRE_RATE, DoCoolgFire, &s_CoolgFire[0]} }; #define COOLG_FIRE_DONE 2410 @@ -1203,45 +1253,45 @@ STATE s_CoolgFire[] = STATE s_CoolgFireDone[] = { - {COOLG_FIRE_DONE + 0, COOLG_FIRE_DONE_RATE, nullptr, &s_CoolgFireDone[1]}, - {COOLG_FIRE_DONE + 1, COOLG_FIRE_DONE_RATE, nullptr, &s_CoolgFireDone[2]}, - {COOLG_FIRE_DONE + 2, COOLG_FIRE_DONE_RATE, nullptr, &s_CoolgFireDone[3]}, - {COOLG_FIRE_DONE + 3, COOLG_FIRE_DONE_RATE, nullptr, &s_CoolgFireDone[4]}, - {COOLG_FIRE_DONE + 4, COOLG_FIRE_DONE_RATE, nullptr, &s_CoolgFireDone[5]}, - {COOLG_FIRE_DONE + 4, COOLG_FIRE_DONE_RATE, &AF(DoSuicide), &s_CoolgFireDone[5]} + {COOLG_FIRE_DONE + 0, COOLG_FIRE_DONE_RATE, NullAnimator, &s_CoolgFireDone[1]}, + {COOLG_FIRE_DONE + 1, COOLG_FIRE_DONE_RATE, NullAnimator, &s_CoolgFireDone[2]}, + {COOLG_FIRE_DONE + 2, COOLG_FIRE_DONE_RATE, NullAnimator, &s_CoolgFireDone[3]}, + {COOLG_FIRE_DONE + 3, COOLG_FIRE_DONE_RATE, NullAnimator, &s_CoolgFireDone[4]}, + {COOLG_FIRE_DONE + 4, COOLG_FIRE_DONE_RATE, NullAnimator, &s_CoolgFireDone[5]}, + {COOLG_FIRE_DONE + 4, COOLG_FIRE_DONE_RATE, DoSuicide, &s_CoolgFireDone[5]} }; - +ANIMATOR DoCoolgDrip; #define COOLG_DRIP 1720 STATE s_CoolgDrip[] = { - {COOLG_DRIP + 0, 100, &AF(DoCoolgDrip), &s_CoolgDrip[0]} + {COOLG_DRIP + 0, 100, DoCoolgDrip, &s_CoolgDrip[0]} }; #define GORE_FLOOR_SPLASH_RATE 8 #define GORE_FLOOR_SPLASH 1710 STATE s_GoreFloorSplash[] = { - {GORE_FLOOR_SPLASH + 0, GORE_FLOOR_SPLASH_RATE, nullptr, &s_GoreFloorSplash[1]}, - {GORE_FLOOR_SPLASH + 1, GORE_FLOOR_SPLASH_RATE, nullptr, &s_GoreFloorSplash[2]}, - {GORE_FLOOR_SPLASH + 2, GORE_FLOOR_SPLASH_RATE, nullptr, &s_GoreFloorSplash[3]}, - {GORE_FLOOR_SPLASH + 3, GORE_FLOOR_SPLASH_RATE, nullptr, &s_GoreFloorSplash[4]}, - {GORE_FLOOR_SPLASH + 4, GORE_FLOOR_SPLASH_RATE, nullptr, &s_GoreFloorSplash[5]}, - {GORE_FLOOR_SPLASH + 5, GORE_FLOOR_SPLASH_RATE, nullptr, &s_GoreFloorSplash[6]}, - {GORE_FLOOR_SPLASH + 5, GORE_FLOOR_SPLASH_RATE, &AF(DoSuicide), &s_GoreFloorSplash[6]} + {GORE_FLOOR_SPLASH + 0, GORE_FLOOR_SPLASH_RATE, NullAnimator, &s_GoreFloorSplash[1]}, + {GORE_FLOOR_SPLASH + 1, GORE_FLOOR_SPLASH_RATE, NullAnimator, &s_GoreFloorSplash[2]}, + {GORE_FLOOR_SPLASH + 2, GORE_FLOOR_SPLASH_RATE, NullAnimator, &s_GoreFloorSplash[3]}, + {GORE_FLOOR_SPLASH + 3, GORE_FLOOR_SPLASH_RATE, NullAnimator, &s_GoreFloorSplash[4]}, + {GORE_FLOOR_SPLASH + 4, GORE_FLOOR_SPLASH_RATE, NullAnimator, &s_GoreFloorSplash[5]}, + {GORE_FLOOR_SPLASH + 5, GORE_FLOOR_SPLASH_RATE, NullAnimator, &s_GoreFloorSplash[6]}, + {GORE_FLOOR_SPLASH + 5, GORE_FLOOR_SPLASH_RATE, DoSuicide, &s_GoreFloorSplash[6]} }; #define GORE_SPLASH_RATE 8 #define GORE_SPLASH 2410 STATE s_GoreSplash[] = { - {GORE_SPLASH + 0, GORE_SPLASH_RATE, nullptr, &s_GoreSplash[1]}, - {GORE_SPLASH + 1, GORE_SPLASH_RATE, nullptr, &s_GoreSplash[2]}, - {GORE_SPLASH + 2, GORE_SPLASH_RATE, nullptr, &s_GoreSplash[3]}, - {GORE_SPLASH + 3, GORE_SPLASH_RATE, nullptr, &s_GoreSplash[4]}, - {GORE_SPLASH + 4, GORE_SPLASH_RATE, nullptr, &s_GoreSplash[5]}, - {GORE_SPLASH + 5, GORE_SPLASH_RATE, nullptr, &s_GoreSplash[6]}, - {GORE_SPLASH + 5, GORE_SPLASH_RATE, &AF(DoSuicide), &s_GoreSplash[6]} + {GORE_SPLASH + 0, GORE_SPLASH_RATE, NullAnimator, &s_GoreSplash[1]}, + {GORE_SPLASH + 1, GORE_SPLASH_RATE, NullAnimator, &s_GoreSplash[2]}, + {GORE_SPLASH + 2, GORE_SPLASH_RATE, NullAnimator, &s_GoreSplash[3]}, + {GORE_SPLASH + 3, GORE_SPLASH_RATE, NullAnimator, &s_GoreSplash[4]}, + {GORE_SPLASH + 4, GORE_SPLASH_RATE, NullAnimator, &s_GoreSplash[5]}, + {GORE_SPLASH + 5, GORE_SPLASH_RATE, NullAnimator, &s_GoreSplash[6]}, + {GORE_SPLASH + 5, GORE_SPLASH_RATE, DoSuicide, &s_GoreSplash[6]} }; ////////////////////////////////////////////// @@ -1255,98 +1305,106 @@ STATE s_GoreSplash[] = #define PLASMA_RATE 8 #define PLASMA_FOUNTAIN_TIME (3*120); +ANIMATOR DoPlasma; + // regular bolt from heart STATE s_Plasma[] = { - {PLASMA + 0, PLASMA_RATE, &AF(DoPlasma), &s_Plasma[1]}, - {PLASMA + 1, PLASMA_RATE, &AF(DoPlasma), &s_Plasma[2]}, - {PLASMA + 2, PLASMA_RATE, &AF(DoPlasma), &s_Plasma[0]} + {PLASMA + 0, PLASMA_RATE, DoPlasma, &s_Plasma[1]}, + {PLASMA + 1, PLASMA_RATE, DoPlasma, &s_Plasma[2]}, + {PLASMA + 2, PLASMA_RATE, DoPlasma, &s_Plasma[0]} }; +ANIMATOR DoPlasmaFountain; + // follows actor spewing blood #define PLASMA_Drip 1562 //2420 STATE s_PlasmaFountain[] = { - {PLASMA_Drip + 0, PLASMA_RATE, &AF(DoPlasmaFountain), &s_PlasmaFountain[1]}, - {PLASMA_Drip + 1, PLASMA_RATE, &AF(DoPlasmaFountain), &s_PlasmaFountain[2]}, - {PLASMA_Drip + 2, PLASMA_RATE, &AF(DoPlasmaFountain), &s_PlasmaFountain[3]}, - {PLASMA_Drip + 3, PLASMA_RATE, &AF(DoPlasmaFountain), &s_PlasmaFountain[0]}, + {PLASMA_Drip + 0, PLASMA_RATE, DoPlasmaFountain, &s_PlasmaFountain[1]}, + {PLASMA_Drip + 1, PLASMA_RATE, DoPlasmaFountain, &s_PlasmaFountain[2]}, + {PLASMA_Drip + 2, PLASMA_RATE, DoPlasmaFountain, &s_PlasmaFountain[3]}, + {PLASMA_Drip + 3, PLASMA_RATE, DoPlasmaFountain, &s_PlasmaFountain[0]}, }; #define PLASMA_Drip_RATE 12 STATE s_PlasmaDrip[] = { - {PLASMA_Drip + 0, PLASMA_Drip_RATE, &AF(DoShrapJumpFall), &s_PlasmaDrip[1]}, - {PLASMA_Drip + 1, PLASMA_Drip_RATE, &AF(DoShrapJumpFall), &s_PlasmaDrip[2]}, - {PLASMA_Drip + 2, PLASMA_Drip_RATE, &AF(DoShrapJumpFall), &s_PlasmaDrip[3]}, - {PLASMA_Drip + 3, PLASMA_Drip_RATE, &AF(DoShrapJumpFall), &s_PlasmaDrip[4]}, - {PLASMA_Drip + 4, PLASMA_Drip_RATE, &AF(DoShrapJumpFall), &s_PlasmaDrip[5]}, - {PLASMA_Drip + 5, PLASMA_Drip_RATE, &AF(DoShrapJumpFall), &s_PlasmaDrip[6]}, - {PLASMA_Drip + 7, PLASMA_Drip_RATE, &AF(DoSuicide), &s_PlasmaDrip[6]} + {PLASMA_Drip + 0, PLASMA_Drip_RATE, DoShrapJumpFall, &s_PlasmaDrip[1]}, + {PLASMA_Drip + 1, PLASMA_Drip_RATE, DoShrapJumpFall, &s_PlasmaDrip[2]}, + {PLASMA_Drip + 2, PLASMA_Drip_RATE, DoShrapJumpFall, &s_PlasmaDrip[3]}, + {PLASMA_Drip + 3, PLASMA_Drip_RATE, DoShrapJumpFall, &s_PlasmaDrip[4]}, + {PLASMA_Drip + 4, PLASMA_Drip_RATE, DoShrapJumpFall, &s_PlasmaDrip[5]}, + {PLASMA_Drip + 5, PLASMA_Drip_RATE, DoShrapJumpFall, &s_PlasmaDrip[6]}, + {PLASMA_Drip + 7, PLASMA_Drip_RATE, DoSuicide, &s_PlasmaDrip[6]} }; #define PLASMA_DONE 2061 #define PLASMA_DONE_RATE 15 +ANIMATOR DoPlasmaDone; STATE s_PlasmaDone[] = { - {PLASMA + 0, PLASMA_DONE_RATE, &AF(DoPlasmaDone), &s_PlasmaDone[1]}, - {PLASMA + 2, PLASMA_DONE_RATE, &AF(DoPlasmaDone), &s_PlasmaDone[2]}, - {PLASMA + 1, PLASMA_DONE_RATE, &AF(DoPlasmaDone), &s_PlasmaDone[0]} + {PLASMA + 0, PLASMA_DONE_RATE, DoPlasmaDone, &s_PlasmaDone[1]}, + {PLASMA + 2, PLASMA_DONE_RATE, DoPlasmaDone, &s_PlasmaDone[2]}, + {PLASMA + 1, PLASMA_DONE_RATE, DoPlasmaDone, &s_PlasmaDone[0]} }; #define TELEPORT_EFFECT 3240 #define TELEPORT_EFFECT_RATE 6 +ANIMATOR DoTeleportEffect; STATE s_TeleportEffect[] = { - {TELEPORT_EFFECT + 0, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[1]}, - {TELEPORT_EFFECT + 1, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[2]}, - {TELEPORT_EFFECT + 2, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[3]}, - {TELEPORT_EFFECT + 3, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[4]}, - {TELEPORT_EFFECT + 4, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[5]}, - {TELEPORT_EFFECT + 5, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[6]}, - {TELEPORT_EFFECT + 6, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[7]}, - {TELEPORT_EFFECT + 7, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[8]}, - {TELEPORT_EFFECT + 8, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[9]}, - {TELEPORT_EFFECT + 9, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[10]}, - {TELEPORT_EFFECT + 10, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[11]}, - {TELEPORT_EFFECT + 11, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[12]}, - {TELEPORT_EFFECT + 12, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[13]}, - {TELEPORT_EFFECT + 13, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[14]}, - {TELEPORT_EFFECT + 14, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[15]}, - {TELEPORT_EFFECT + 15, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[16]}, - {TELEPORT_EFFECT + 16, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[17]}, - {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect[18]}, - {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, &AF(DoSuicide), &s_TeleportEffect[18]}, + {TELEPORT_EFFECT + 0, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[1]}, + {TELEPORT_EFFECT + 1, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[2]}, + {TELEPORT_EFFECT + 2, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[3]}, + {TELEPORT_EFFECT + 3, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[4]}, + {TELEPORT_EFFECT + 4, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[5]}, + {TELEPORT_EFFECT + 5, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[6]}, + {TELEPORT_EFFECT + 6, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[7]}, + {TELEPORT_EFFECT + 7, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[8]}, + {TELEPORT_EFFECT + 8, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[9]}, + {TELEPORT_EFFECT + 9, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[10]}, + {TELEPORT_EFFECT + 10, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[11]}, + {TELEPORT_EFFECT + 11, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[12]}, + {TELEPORT_EFFECT + 12, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[13]}, + {TELEPORT_EFFECT + 13, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[14]}, + {TELEPORT_EFFECT + 14, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[15]}, + {TELEPORT_EFFECT + 15, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[16]}, + {TELEPORT_EFFECT + 16, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[17]}, + {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect[18]}, + {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, DoSuicide, &s_TeleportEffect[18]}, }; // Spawn a RIPPER teleport effect +ANIMATOR DoTeleRipper; STATE s_TeleportEffect2[] = { - {TELEPORT_EFFECT + 0, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[1]}, - {TELEPORT_EFFECT + 1, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[2]}, - {TELEPORT_EFFECT + 2, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[3]}, - {TELEPORT_EFFECT + 3, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[4]}, - {TELEPORT_EFFECT + 4, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[5]}, - {TELEPORT_EFFECT + 5, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[6]}, - {TELEPORT_EFFECT + 6, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[7]}, - {TELEPORT_EFFECT + 7, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[8]}, - {TELEPORT_EFFECT + 8, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[9]}, - {TELEPORT_EFFECT + 9, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[10]}, - {TELEPORT_EFFECT + 10, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[11]}, - {TELEPORT_EFFECT + 11, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[12]}, - {TELEPORT_EFFECT + 12, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[13]}, - {TELEPORT_EFFECT + 13, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[14]}, - {TELEPORT_EFFECT + 14, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[15]}, - {TELEPORT_EFFECT + 15, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[16]}, - {TELEPORT_EFFECT + 16, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[17]}, - {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, nullptr, &s_TeleportEffect2[18]}, - {TELEPORT_EFFECT + 17, SF_QUICK_CALL, &AF(DoTeleRipper), &s_TeleportEffect2[19]}, - {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, &AF(DoSuicide), &s_TeleportEffect2[19]}, + {TELEPORT_EFFECT + 0, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[1]}, + {TELEPORT_EFFECT + 1, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[2]}, + {TELEPORT_EFFECT + 2, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[3]}, + {TELEPORT_EFFECT + 3, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[4]}, + {TELEPORT_EFFECT + 4, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[5]}, + {TELEPORT_EFFECT + 5, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[6]}, + {TELEPORT_EFFECT + 6, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[7]}, + {TELEPORT_EFFECT + 7, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[8]}, + {TELEPORT_EFFECT + 8, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[9]}, + {TELEPORT_EFFECT + 9, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[10]}, + {TELEPORT_EFFECT + 10, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[11]}, + {TELEPORT_EFFECT + 11, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[12]}, + {TELEPORT_EFFECT + 12, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[13]}, + {TELEPORT_EFFECT + 13, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[14]}, + {TELEPORT_EFFECT + 14, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[15]}, + {TELEPORT_EFFECT + 15, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[16]}, + {TELEPORT_EFFECT + 16, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[17]}, + {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, NullAnimator, &s_TeleportEffect2[18]}, + {TELEPORT_EFFECT + 17, SF_QUICK_CALL, DoTeleRipper, &s_TeleportEffect2[19]}, + {TELEPORT_EFFECT + 17, TELEPORT_EFFECT_RATE, DoSuicide, &s_TeleportEffect2[19]}, }; +ANIMATOR DoElectro; #define ELECTRO_SNAKE 2073 #define ELECTRO_PLAYER (ELECTRO) #define ELECTRO_ENEMY (ELECTRO + 1) @@ -1354,18 +1412,18 @@ STATE s_TeleportEffect2[] = STATE s_Electro[] = { - {ELECTRO + 0, 12, &AF(DoElectro), &s_Electro[1]}, - {ELECTRO + 1, 12, &AF(DoElectro), &s_Electro[2]}, - {ELECTRO + 2, 12, &AF(DoElectro), &s_Electro[3]}, - {ELECTRO + 3, 12, &AF(DoElectro), &s_Electro[0]} + {ELECTRO + 0, 12, DoElectro, &s_Electro[1]}, + {ELECTRO + 1, 12, DoElectro, &s_Electro[2]}, + {ELECTRO + 2, 12, DoElectro, &s_Electro[3]}, + {ELECTRO + 3, 12, DoElectro, &s_Electro[0]} }; STATE s_ElectroShrap[] = { - {ELECTRO + 0, 12, &AF(DoShrapDamage), &s_ElectroShrap[1]}, - {ELECTRO + 1, 12, &AF(DoShrapDamage), &s_ElectroShrap[2]}, - {ELECTRO + 2, 12, &AF(DoShrapDamage), &s_ElectroShrap[3]}, - {ELECTRO + 3, 12, &AF(DoShrapDamage), &s_ElectroShrap[0]} + {ELECTRO + 0, 12, DoShrapDamage, &s_ElectroShrap[1]}, + {ELECTRO + 1, 12, DoShrapDamage, &s_ElectroShrap[2]}, + {ELECTRO + 2, 12, DoShrapDamage, &s_ElectroShrap[3]}, + {ELECTRO + 3, 12, DoShrapDamage, &s_ElectroShrap[0]} }; ////////////////////// @@ -1378,93 +1436,121 @@ STATE s_ElectroShrap[] = #define GRENADE_EXP_RATE 6 #if 0 +STATE s_GrenadeExp[] = +{ + {GRENADE_EXP + 0, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[1]}, + {GRENADE_EXP + 1, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[2]}, + {GRENADE_EXP + 2, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[3]}, + {GRENADE_EXP + 3, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[4]}, + {GRENADE_EXP + 4, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[5]}, + {GRENADE_EXP + 5, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[6]}, + {GRENADE_EXP + 6, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[7]}, + {GRENADE_EXP + 7, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[8]}, + {GRENADE_EXP + 8, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[9]}, + {GRENADE_EXP + 9, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[10]}, + {GRENADE_EXP + 10, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[11]}, + {GRENADE_EXP + 11, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[12]}, + {GRENADE_EXP + 12, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[13]}, + {GRENADE_EXP + 13, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[14]}, + {GRENADE_EXP + 14, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[15]}, + {GRENADE_EXP + 15, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[16]}, + {GRENADE_EXP + 16, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[17]}, + {GRENADE_EXP + 17, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[18]}, + {GRENADE_EXP + 18, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[19]}, + {GRENADE_EXP + 19, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[20]}, + {GRENADE_EXP + 20, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[21]}, + {GRENADE_EXP + 21, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[22]}, + {GRENADE_EXP + 21, 100, DoSuicide, &s_GrenadeExp[22]} +}; #else STATE s_GrenadeSmallExp[] = { - {GRENADE_EXP + 0, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[1]}, - {GRENADE_EXP + 1, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[2]}, - {GRENADE_EXP + 2, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[3]}, - {GRENADE_EXP + 3, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[4]}, - {GRENADE_EXP + 4, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[5]}, - {GRENADE_EXP + 5, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[6]}, - {GRENADE_EXP + 6, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[7]}, - {GRENADE_EXP + 7, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[8]}, - {GRENADE_EXP + 8, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[9]}, - {GRENADE_EXP + 9, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[10]}, - {GRENADE_EXP + 10, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[11]}, - {GRENADE_EXP + 11, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[12]}, - {GRENADE_EXP + 12, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[13]}, - {GRENADE_EXP + 13, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[14]}, - {GRENADE_EXP + 14, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[15]}, - {GRENADE_EXP + 15, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[16]}, - {GRENADE_EXP + 16, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[17]}, - {GRENADE_EXP + 17, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[18]}, - {GRENADE_EXP + 18, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[19]}, - {GRENADE_EXP + 19, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[20]}, - {GRENADE_EXP + 20, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[21]}, - {GRENADE_EXP + 21, GRENADE_EXP_RATE, nullptr, &s_GrenadeSmallExp[22]}, - {GRENADE_EXP + 21, 100, &AF(DoSuicide), &s_GrenadeSmallExp[22]} + {GRENADE_EXP + 0, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[1]}, + {GRENADE_EXP + 1, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[2]}, + {GRENADE_EXP + 2, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[3]}, + {GRENADE_EXP + 3, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[4]}, + {GRENADE_EXP + 4, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[5]}, + {GRENADE_EXP + 5, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[6]}, + {GRENADE_EXP + 6, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[7]}, + {GRENADE_EXP + 7, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[8]}, + {GRENADE_EXP + 8, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[9]}, + {GRENADE_EXP + 9, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[10]}, + {GRENADE_EXP + 10, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[11]}, + {GRENADE_EXP + 11, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[12]}, + {GRENADE_EXP + 12, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[13]}, + {GRENADE_EXP + 13, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[14]}, + {GRENADE_EXP + 14, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[15]}, + {GRENADE_EXP + 15, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[16]}, + {GRENADE_EXP + 16, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[17]}, + {GRENADE_EXP + 17, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[18]}, + {GRENADE_EXP + 18, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[19]}, + {GRENADE_EXP + 19, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[20]}, + {GRENADE_EXP + 20, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[21]}, + {GRENADE_EXP + 21, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeSmallExp[22]}, + {GRENADE_EXP + 21, 100, DoSuicide, &s_GrenadeSmallExp[22]} }; +ANIMATOR SpawnGrenadeSmallExp; STATE s_GrenadeExp[] = { - {GRENADE_EXP + 0, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[1]}, - {GRENADE_EXP + 1, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[2]}, - {GRENADE_EXP + 2, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[3]}, - {GRENADE_EXP + 3, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[4]}, - {GRENADE_EXP + 4, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[5]}, - {GRENADE_EXP + 5, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[6]}, - {GRENADE_EXP + 6, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[7]}, - {GRENADE_EXP + 6, SF_QUICK_CALL, &AF(SpawnGrenadeSmallExp), &s_GrenadeExp[8]}, - {GRENADE_EXP + 7, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[9]}, - {GRENADE_EXP + 8, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[10]}, - {GRENADE_EXP + 9, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[11]}, - {GRENADE_EXP + 10, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[12]}, - {GRENADE_EXP + 11, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[13]}, - {GRENADE_EXP + 12, SF_QUICK_CALL, &AF(SpawnGrenadeSmallExp), &s_GrenadeExp[14]}, - {GRENADE_EXP + 12, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[15]}, - {GRENADE_EXP + 13, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[16]}, - {GRENADE_EXP + 14, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[17]}, - {GRENADE_EXP + 15, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[18]}, - {GRENADE_EXP + 16, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[19]}, - {GRENADE_EXP + 17, SF_QUICK_CALL, &AF(SpawnGrenadeSmallExp), &s_GrenadeExp[20]}, - {GRENADE_EXP + 17, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[21]}, - {GRENADE_EXP + 18, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[22]}, - {GRENADE_EXP + 19, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[23]}, - {GRENADE_EXP + 20, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[24]}, - {GRENADE_EXP + 21, GRENADE_EXP_RATE, nullptr, &s_GrenadeExp[25]}, - {GRENADE_EXP + 21, 100, &AF(DoSuicide), &s_GrenadeExp[25]} + {GRENADE_EXP + 0, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[1]}, + {GRENADE_EXP + 1, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[2]}, + {GRENADE_EXP + 2, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[3]}, + {GRENADE_EXP + 3, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[4]}, + {GRENADE_EXP + 4, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[5]}, + {GRENADE_EXP + 5, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[6]}, + {GRENADE_EXP + 6, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[7]}, + {GRENADE_EXP + 6, SF_QUICK_CALL, SpawnGrenadeSmallExp, &s_GrenadeExp[8]}, + {GRENADE_EXP + 7, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[9]}, + {GRENADE_EXP + 8, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[10]}, + {GRENADE_EXP + 9, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[11]}, + {GRENADE_EXP + 10, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[12]}, + {GRENADE_EXP + 11, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[13]}, + {GRENADE_EXP + 12, SF_QUICK_CALL, SpawnGrenadeSmallExp, &s_GrenadeExp[14]}, + {GRENADE_EXP + 12, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[15]}, + {GRENADE_EXP + 13, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[16]}, + {GRENADE_EXP + 14, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[17]}, + {GRENADE_EXP + 15, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[18]}, + {GRENADE_EXP + 16, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[19]}, + {GRENADE_EXP + 17, SF_QUICK_CALL, SpawnGrenadeSmallExp, &s_GrenadeExp[20]}, + {GRENADE_EXP + 17, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[21]}, + {GRENADE_EXP + 18, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[22]}, + {GRENADE_EXP + 19, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[23]}, + {GRENADE_EXP + 20, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[24]}, + {GRENADE_EXP + 21, GRENADE_EXP_RATE, NullAnimator, &s_GrenadeExp[25]}, + {GRENADE_EXP + 21, 100, DoSuicide, &s_GrenadeExp[25]} }; #endif #define MINE_EXP GRENADE_EXP+1 +ANIMATOR DoMineExp, DoMineExpMine; STATE s_MineExp[] = { - {GRENADE_EXP + 0, GRENADE_EXP_RATE, nullptr, &s_MineExp[1]}, - {GRENADE_EXP + 1, GRENADE_EXP_RATE, nullptr, &s_MineExp[2]}, - {GRENADE_EXP + 2, GRENADE_EXP_RATE, nullptr, &s_MineExp[3]}, - {GRENADE_EXP + 3, 0|SF_QUICK_CALL, &AF(DoMineExp), &s_MineExp[4]}, - {GRENADE_EXP + 3, GRENADE_EXP_RATE, nullptr, &s_MineExp[5]}, - {GRENADE_EXP + 4, GRENADE_EXP_RATE, nullptr, &s_MineExp[6]}, - {GRENADE_EXP + 5, GRENADE_EXP_RATE, nullptr, &s_MineExp[7]}, - {GRENADE_EXP + 6, GRENADE_EXP_RATE, nullptr, &s_MineExp[8]}, - {GRENADE_EXP + 7, GRENADE_EXP_RATE, nullptr, &s_MineExp[9]}, - {GRENADE_EXP + 8, GRENADE_EXP_RATE, nullptr, &s_MineExp[10]}, - {GRENADE_EXP + 9, GRENADE_EXP_RATE, nullptr, &s_MineExp[11]}, - {GRENADE_EXP + 10, GRENADE_EXP_RATE, nullptr, &s_MineExp[12]}, - {GRENADE_EXP + 11, GRENADE_EXP_RATE, nullptr, &s_MineExp[13]}, - {GRENADE_EXP + 12, GRENADE_EXP_RATE, nullptr, &s_MineExp[14]}, - {GRENADE_EXP + 13, GRENADE_EXP_RATE, nullptr, &s_MineExp[15]}, - {GRENADE_EXP + 14, GRENADE_EXP_RATE, nullptr, &s_MineExp[16]}, - {GRENADE_EXP + 15, GRENADE_EXP_RATE, nullptr, &s_MineExp[17]}, - {GRENADE_EXP + 16, GRENADE_EXP_RATE, nullptr, &s_MineExp[18]}, - {GRENADE_EXP + 17, GRENADE_EXP_RATE, nullptr, &s_MineExp[19]}, - {GRENADE_EXP + 17, 0|SF_QUICK_CALL, &AF(DoMineExpMine), &s_MineExp[20]}, - {GRENADE_EXP + 18, GRENADE_EXP_RATE, nullptr, &s_MineExp[21]}, - {GRENADE_EXP + 19, GRENADE_EXP_RATE, nullptr, &s_MineExp[22]}, - {GRENADE_EXP + 20, GRENADE_EXP_RATE, nullptr, &s_MineExp[23]}, - {GRENADE_EXP + 21, GRENADE_EXP_RATE, nullptr, &s_MineExp[24]}, - {GRENADE_EXP + 21, 100, &AF(DoSuicide), &s_MineExp[24]} + {GRENADE_EXP + 0, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[1]}, + {GRENADE_EXP + 1, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[2]}, + {GRENADE_EXP + 2, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[3]}, + {GRENADE_EXP + 3, 0|SF_QUICK_CALL, DoMineExp, &s_MineExp[4]}, + {GRENADE_EXP + 3, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[5]}, + {GRENADE_EXP + 4, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[6]}, + {GRENADE_EXP + 5, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[7]}, + {GRENADE_EXP + 6, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[8]}, + {GRENADE_EXP + 7, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[9]}, + {GRENADE_EXP + 8, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[10]}, + {GRENADE_EXP + 9, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[11]}, + {GRENADE_EXP + 10, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[12]}, + {GRENADE_EXP + 11, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[13]}, + {GRENADE_EXP + 12, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[14]}, + {GRENADE_EXP + 13, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[15]}, + {GRENADE_EXP + 14, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[16]}, + {GRENADE_EXP + 15, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[17]}, + {GRENADE_EXP + 16, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[18]}, + {GRENADE_EXP + 17, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[19]}, + {GRENADE_EXP + 17, 0|SF_QUICK_CALL, DoMineExpMine, &s_MineExp[20]}, + {GRENADE_EXP + 18, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[21]}, + {GRENADE_EXP + 19, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[22]}, + {GRENADE_EXP + 20, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[23]}, + {GRENADE_EXP + 21, GRENADE_EXP_RATE, NullAnimator, &s_MineExp[24]}, + {GRENADE_EXP + 21, 100, DoSuicide, &s_MineExp[24]} }; #define EXP_RATE_W 7 @@ -1478,56 +1564,57 @@ STATE s_MineExp[] = STATE s_BasicExp[] = { - {EXP + 0, EXP_RATE_W, nullptr, &s_BasicExp[1]}, - {EXP + 1, EXP_RATE_W, nullptr, &s_BasicExp[2]}, - {EXP + 2, EXP_RATE_W, nullptr, &s_BasicExp[3]}, - {EXP + 3, EXP_RATE_W, nullptr, &s_BasicExp[4]}, - {EXP + 4, EXP_RATE_W, nullptr, &s_BasicExp[5]}, - {EXP + 5, EXP_RATE_W, nullptr, &s_BasicExp[6]}, - {EXP + 6, EXP_RATE_W, nullptr, &s_BasicExp[7]}, - {EXP + 7, EXP_RATE_W, nullptr, &s_BasicExp[8]}, - {EXP + 8, EXP_RATE_W, nullptr, &s_BasicExp[9]}, - {EXP + 9, EXP_RATE_W, nullptr, &s_BasicExp[10]}, - {EXP + 10, EXP_RATE_W, nullptr, &s_BasicExp[11]}, - {EXP + 11, EXP_RATE_W, nullptr, &s_BasicExp[12]}, - {EXP + 12, EXP_RATE_W, nullptr, &s_BasicExp[13]}, - {EXP + 13, EXP_RATE_W, nullptr, &s_BasicExp[14]}, - {EXP + 14, EXP_RATE_W, nullptr, &s_BasicExp[15]}, - {EXP + 15, EXP_RATE_W, nullptr, &s_BasicExp[16]}, - {EXP + 16, EXP_RATE_W, nullptr, &s_BasicExp[17]}, - {EXP + 17, EXP_RATE_W, nullptr, &s_BasicExp[18]}, - {EXP + 18, EXP_RATE_W, nullptr, &s_BasicExp[19]}, - {EXP + 19, EXP_RATE_W, nullptr, &s_BasicExp[20]}, - {EXP + 20, 100, &AF(DoSuicide), &s_BasicExp[0]} + {EXP + 0, EXP_RATE_W, NullAnimator, &s_BasicExp[1]}, + {EXP + 1, EXP_RATE_W, NullAnimator, &s_BasicExp[2]}, + {EXP + 2, EXP_RATE_W, NullAnimator, &s_BasicExp[3]}, + {EXP + 3, EXP_RATE_W, NullAnimator, &s_BasicExp[4]}, + {EXP + 4, EXP_RATE_W, NullAnimator, &s_BasicExp[5]}, + {EXP + 5, EXP_RATE_W, NullAnimator, &s_BasicExp[6]}, + {EXP + 6, EXP_RATE_W, NullAnimator, &s_BasicExp[7]}, + {EXP + 7, EXP_RATE_W, NullAnimator, &s_BasicExp[8]}, + {EXP + 8, EXP_RATE_W, NullAnimator, &s_BasicExp[9]}, + {EXP + 9, EXP_RATE_W, NullAnimator, &s_BasicExp[10]}, + {EXP + 10, EXP_RATE_W, NullAnimator, &s_BasicExp[11]}, + {EXP + 11, EXP_RATE_W, NullAnimator, &s_BasicExp[12]}, + {EXP + 12, EXP_RATE_W, NullAnimator, &s_BasicExp[13]}, + {EXP + 13, EXP_RATE_W, NullAnimator, &s_BasicExp[14]}, + {EXP + 14, EXP_RATE_W, NullAnimator, &s_BasicExp[15]}, + {EXP + 15, EXP_RATE_W, NullAnimator, &s_BasicExp[16]}, + {EXP + 16, EXP_RATE_W, NullAnimator, &s_BasicExp[17]}, + {EXP + 17, EXP_RATE_W, NullAnimator, &s_BasicExp[18]}, + {EXP + 18, EXP_RATE_W, NullAnimator, &s_BasicExp[19]}, + {EXP + 19, EXP_RATE_W, NullAnimator, &s_BasicExp[20]}, + {EXP + 20, 100, DoSuicide, &s_BasicExp[0]} }; #define MICRO_EXP_RATE 3 +ANIMATOR DoExpDamageTest; STATE s_MicroExp[] = { - {EXP + 0, MICRO_EXP_RATE, nullptr, &s_MicroExp[1]}, - {EXP + 0, SF_QUICK_CALL, &AF(DoExpDamageTest), &s_MicroExp[2]}, - {EXP + 1, MICRO_EXP_RATE, nullptr, &s_MicroExp[3]}, - {EXP + 2, MICRO_EXP_RATE, nullptr, &s_MicroExp[4]}, - {EXP + 3, MICRO_EXP_RATE, nullptr, &s_MicroExp[5]}, - {EXP + 4, MICRO_EXP_RATE, nullptr, &s_MicroExp[6]}, - {EXP + 5, MICRO_EXP_RATE, nullptr, &s_MicroExp[7]}, - {EXP + 6, MICRO_EXP_RATE, nullptr, &s_MicroExp[8]}, - {EXP + 7, MICRO_EXP_RATE, nullptr, &s_MicroExp[9]}, - {EXP + 8, MICRO_EXP_RATE, nullptr, &s_MicroExp[10]}, - {EXP + 9, MICRO_EXP_RATE, nullptr, &s_MicroExp[11]}, - {EXP + 10, MICRO_EXP_RATE, nullptr, &s_MicroExp[12]}, - {EXP + 11, MICRO_EXP_RATE, nullptr, &s_MicroExp[13]}, - {EXP + 12, MICRO_EXP_RATE, nullptr, &s_MicroExp[14]}, - {EXP + 13, MICRO_EXP_RATE, nullptr, &s_MicroExp[15]}, - {EXP + 14, MICRO_EXP_RATE, nullptr, &s_MicroExp[16]}, - {EXP + 15, MICRO_EXP_RATE, nullptr, &s_MicroExp[17]}, - {EXP + 16, MICRO_EXP_RATE, nullptr, &s_MicroExp[18]}, - {EXP + 17, MICRO_EXP_RATE, nullptr, &s_MicroExp[19]}, - {EXP + 18, MICRO_EXP_RATE, nullptr, &s_MicroExp[20]}, - {EXP + 19, MICRO_EXP_RATE, nullptr, &s_MicroExp[21]}, - {EXP + 20, MICRO_EXP_RATE, nullptr, &s_MicroExp[22]}, - {EXP + 20, 100, &AF(DoSuicide), &s_MicroExp[22]} + {EXP + 0, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[1]}, + {EXP + 0, SF_QUICK_CALL, DoExpDamageTest, &s_MicroExp[2]}, + {EXP + 1, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[3]}, + {EXP + 2, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[4]}, + {EXP + 3, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[5]}, + {EXP + 4, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[6]}, + {EXP + 5, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[7]}, + {EXP + 6, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[8]}, + {EXP + 7, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[9]}, + {EXP + 8, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[10]}, + {EXP + 9, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[11]}, + {EXP + 10, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[12]}, + {EXP + 11, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[13]}, + {EXP + 12, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[14]}, + {EXP + 13, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[15]}, + {EXP + 14, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[16]}, + {EXP + 15, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[17]}, + {EXP + 16, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[18]}, + {EXP + 17, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[19]}, + {EXP + 18, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[20]}, + {EXP + 19, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[21]}, + {EXP + 20, MICRO_EXP_RATE, NullAnimator, &s_MicroExp[22]}, + {EXP + 20, 100, DoSuicide, &s_MicroExp[22]} }; @@ -1535,134 +1622,135 @@ STATE s_MicroExp[] = STATE s_BigGunFlame[] = { // first 3 frames - {EXP + 0, BIG_GUN_FLAME_RATE, nullptr, &s_BigGunFlame[1]}, - {EXP + 1, BIG_GUN_FLAME_RATE, nullptr, &s_BigGunFlame[2]}, - {EXP + 2, BIG_GUN_FLAME_RATE, nullptr, &s_BigGunFlame[3]}, + {EXP + 0, BIG_GUN_FLAME_RATE, NullAnimator, &s_BigGunFlame[1]}, + {EXP + 1, BIG_GUN_FLAME_RATE, NullAnimator, &s_BigGunFlame[2]}, + {EXP + 2, BIG_GUN_FLAME_RATE, NullAnimator, &s_BigGunFlame[3]}, // last 4 frames frames - {EXP + 17, BIG_GUN_FLAME_RATE, nullptr, &s_BigGunFlame[4]}, - {EXP + 18, BIG_GUN_FLAME_RATE, nullptr, &s_BigGunFlame[5]}, - {EXP + 19, BIG_GUN_FLAME_RATE, nullptr, &s_BigGunFlame[6]}, - {EXP + 20, BIG_GUN_FLAME_RATE, nullptr, &s_BigGunFlame[7]}, - {EXP + 20, 100, &AF(DoSuicide), &s_BigGunFlame[0]} + {EXP + 17, BIG_GUN_FLAME_RATE, NullAnimator, &s_BigGunFlame[4]}, + {EXP + 18, BIG_GUN_FLAME_RATE, NullAnimator, &s_BigGunFlame[5]}, + {EXP + 19, BIG_GUN_FLAME_RATE, NullAnimator, &s_BigGunFlame[6]}, + {EXP + 20, BIG_GUN_FLAME_RATE, NullAnimator, &s_BigGunFlame[7]}, + {EXP + 20, 100, DoSuicide, &s_BigGunFlame[0]} }; STATE s_BoltExp[] = { - {EXP + 0, EXP_RATE_W, nullptr, &s_BoltExp[1]}, - {EXP + 0, SF_QUICK_CALL, nullptr, &s_BoltExp[2]}, - {EXP + 0, SF_QUICK_CALL, &AF(SpawnShrapX), &s_BoltExp[3]}, - {EXP + 1, EXP_RATE_W, nullptr, &s_BoltExp[4]}, - {EXP + 2, EXP_RATE_W, nullptr, &s_BoltExp[5]}, - {EXP + 3, EXP_RATE_W, nullptr, &s_BoltExp[6]}, - {EXP + 4, EXP_RATE_W, nullptr, &s_BoltExp[7]}, - {EXP + 5, EXP_RATE_W, nullptr, &s_BoltExp[8]}, - {EXP + 6, EXP_RATE_W, nullptr, &s_BoltExp[9]}, - {EXP + 7, EXP_RATE_W, nullptr, &s_BoltExp[10]}, - {EXP + 7, SF_QUICK_CALL, &AF(SpawnShrapX), &s_BoltExp[11]}, - {EXP + 8, EXP_RATE_W, nullptr, &s_BoltExp[12]}, - {EXP + 9, EXP_RATE_W, nullptr, &s_BoltExp[13]}, - {EXP + 10, EXP_RATE_W, nullptr, &s_BoltExp[14]}, - {EXP + 11, EXP_RATE_W, nullptr, &s_BoltExp[15]}, - {EXP + 12, EXP_RATE_W, nullptr, &s_BoltExp[16]}, - {EXP + 13, EXP_RATE_W, nullptr, &s_BoltExp[17]}, - {EXP + 14, EXP_RATE_W, nullptr, &s_BoltExp[18]}, - {EXP + 15, EXP_RATE_W, nullptr, &s_BoltExp[19]}, - {EXP + 16, EXP_RATE_W, nullptr, &s_BoltExp[20]}, - {EXP + 17, EXP_RATE_W, nullptr, &s_BoltExp[21]}, - {EXP + 18, EXP_RATE_W, nullptr, &s_BoltExp[22]}, - {EXP + 19, EXP_RATE_W, nullptr, &s_BoltExp[23]}, - {EXP + 20, EXP_RATE_W, nullptr, &s_BoltExp[24]}, - {EXP + 20, 100, &AF(DoSuicide), &s_BoltExp[0]} + {EXP + 0, EXP_RATE_W, NullAnimator, &s_BoltExp[1]}, + {EXP + 0, SF_QUICK_CALL, NullAnimator, &s_BoltExp[2]}, + {EXP + 0, SF_QUICK_CALL, SpawnShrapX, &s_BoltExp[3]}, + {EXP + 1, EXP_RATE_W, NullAnimator, &s_BoltExp[4]}, + {EXP + 2, EXP_RATE_W, NullAnimator, &s_BoltExp[5]}, + {EXP + 3, EXP_RATE_W, NullAnimator, &s_BoltExp[6]}, + {EXP + 4, EXP_RATE_W, NullAnimator, &s_BoltExp[7]}, + {EXP + 5, EXP_RATE_W, NullAnimator, &s_BoltExp[8]}, + {EXP + 6, EXP_RATE_W, NullAnimator, &s_BoltExp[9]}, + {EXP + 7, EXP_RATE_W, NullAnimator, &s_BoltExp[10]}, + {EXP + 7, SF_QUICK_CALL, SpawnShrapX, &s_BoltExp[11]}, + {EXP + 8, EXP_RATE_W, NullAnimator, &s_BoltExp[12]}, + {EXP + 9, EXP_RATE_W, NullAnimator, &s_BoltExp[13]}, + {EXP + 10, EXP_RATE_W, NullAnimator, &s_BoltExp[14]}, + {EXP + 11, EXP_RATE_W, NullAnimator, &s_BoltExp[15]}, + {EXP + 12, EXP_RATE_W, NullAnimator, &s_BoltExp[16]}, + {EXP + 13, EXP_RATE_W, NullAnimator, &s_BoltExp[17]}, + {EXP + 14, EXP_RATE_W, NullAnimator, &s_BoltExp[18]}, + {EXP + 15, EXP_RATE_W, NullAnimator, &s_BoltExp[19]}, + {EXP + 16, EXP_RATE_W, NullAnimator, &s_BoltExp[20]}, + {EXP + 17, EXP_RATE_W, NullAnimator, &s_BoltExp[21]}, + {EXP + 18, EXP_RATE_W, NullAnimator, &s_BoltExp[22]}, + {EXP + 19, EXP_RATE_W, NullAnimator, &s_BoltExp[23]}, + {EXP + 20, EXP_RATE_W, NullAnimator, &s_BoltExp[24]}, + {EXP + 20, 100, DoSuicide, &s_BoltExp[0]} }; STATE s_TankShellExp[] = { - {EXP + 0, EXP_RATE_W, nullptr, &s_TankShellExp[1]}, - {EXP + 0, SF_QUICK_CALL, nullptr, &s_TankShellExp[2]}, - {EXP + 0, SF_QUICK_CALL, &AF(SpawnShrapX), &s_TankShellExp[3]}, - {EXP + 1, EXP_RATE_W, nullptr, &s_TankShellExp[4]}, - {EXP + 2, EXP_RATE_W, nullptr, &s_TankShellExp[5]}, - {EXP + 3, EXP_RATE_W, nullptr, &s_TankShellExp[6]}, - {EXP + 4, EXP_RATE_W, nullptr, &s_TankShellExp[7]}, - {EXP + 5, EXP_RATE_W, nullptr, &s_TankShellExp[8]}, - {EXP + 6, EXP_RATE_W, nullptr, &s_TankShellExp[9]}, - {EXP + 7, EXP_RATE_W, nullptr, &s_TankShellExp[10]}, - {EXP + 7, SF_QUICK_CALL, &AF(SpawnShrapX), &s_TankShellExp[11]}, - {EXP + 8, EXP_RATE_W, nullptr, &s_TankShellExp[12]}, - {EXP + 9, EXP_RATE_W, nullptr, &s_TankShellExp[13]}, - {EXP + 10, EXP_RATE_W, nullptr, &s_TankShellExp[14]}, - {EXP + 11, EXP_RATE_W, nullptr, &s_TankShellExp[15]}, - {EXP + 12, EXP_RATE_W, nullptr, &s_TankShellExp[16]}, - {EXP + 13, EXP_RATE_W, nullptr, &s_TankShellExp[17]}, - {EXP + 14, EXP_RATE_W, nullptr, &s_TankShellExp[18]}, - {EXP + 15, EXP_RATE_W, nullptr, &s_TankShellExp[19]}, - {EXP + 16, EXP_RATE_W, nullptr, &s_TankShellExp[20]}, - {EXP + 17, EXP_RATE_W, nullptr, &s_TankShellExp[21]}, - {EXP + 18, EXP_RATE_W, nullptr, &s_TankShellExp[22]}, - {EXP + 19, EXP_RATE_W, nullptr, &s_TankShellExp[23]}, - {EXP + 20, EXP_RATE_W, nullptr, &s_TankShellExp[24]}, - {EXP + 20, 100, &AF(DoSuicide), &s_TankShellExp[0]} + {EXP + 0, EXP_RATE_W, NullAnimator, &s_TankShellExp[1]}, + {EXP + 0, SF_QUICK_CALL, NullAnimator, &s_TankShellExp[2]}, + {EXP + 0, SF_QUICK_CALL, SpawnShrapX, &s_TankShellExp[3]}, + {EXP + 1, EXP_RATE_W, NullAnimator, &s_TankShellExp[4]}, + {EXP + 2, EXP_RATE_W, NullAnimator, &s_TankShellExp[5]}, + {EXP + 3, EXP_RATE_W, NullAnimator, &s_TankShellExp[6]}, + {EXP + 4, EXP_RATE_W, NullAnimator, &s_TankShellExp[7]}, + {EXP + 5, EXP_RATE_W, NullAnimator, &s_TankShellExp[8]}, + {EXP + 6, EXP_RATE_W, NullAnimator, &s_TankShellExp[9]}, + {EXP + 7, EXP_RATE_W, NullAnimator, &s_TankShellExp[10]}, + {EXP + 7, SF_QUICK_CALL, SpawnShrapX, &s_TankShellExp[11]}, + {EXP + 8, EXP_RATE_W, NullAnimator, &s_TankShellExp[12]}, + {EXP + 9, EXP_RATE_W, NullAnimator, &s_TankShellExp[13]}, + {EXP + 10, EXP_RATE_W, NullAnimator, &s_TankShellExp[14]}, + {EXP + 11, EXP_RATE_W, NullAnimator, &s_TankShellExp[15]}, + {EXP + 12, EXP_RATE_W, NullAnimator, &s_TankShellExp[16]}, + {EXP + 13, EXP_RATE_W, NullAnimator, &s_TankShellExp[17]}, + {EXP + 14, EXP_RATE_W, NullAnimator, &s_TankShellExp[18]}, + {EXP + 15, EXP_RATE_W, NullAnimator, &s_TankShellExp[19]}, + {EXP + 16, EXP_RATE_W, NullAnimator, &s_TankShellExp[20]}, + {EXP + 17, EXP_RATE_W, NullAnimator, &s_TankShellExp[21]}, + {EXP + 18, EXP_RATE_W, NullAnimator, &s_TankShellExp[22]}, + {EXP + 19, EXP_RATE_W, NullAnimator, &s_TankShellExp[23]}, + {EXP + 20, EXP_RATE_W, NullAnimator, &s_TankShellExp[24]}, + {EXP + 20, 100, DoSuicide, &s_TankShellExp[0]} }; #define TRACER_EXP_RATE 4 STATE s_TracerExp[] = { - {EXP + 0, TRACER_EXP_RATE, nullptr, &s_TracerExp[1]}, - {EXP + 0, SF_QUICK_CALL, nullptr, &s_TracerExp[2]}, - {EXP + 0, SF_QUICK_CALL, nullptr, &s_TracerExp[3]}, - {EXP + 1, TRACER_EXP_RATE, nullptr, &s_TracerExp[4]}, - {EXP + 2, TRACER_EXP_RATE, nullptr, &s_TracerExp[5]}, - {EXP + 3, TRACER_EXP_RATE, nullptr, &s_TracerExp[6]}, - {EXP + 4, TRACER_EXP_RATE, nullptr, &s_TracerExp[7]}, - {EXP + 5, TRACER_EXP_RATE, nullptr, &s_TracerExp[8]}, - {EXP + 6, TRACER_EXP_RATE, nullptr, &s_TracerExp[9]}, - {EXP + 7, TRACER_EXP_RATE, nullptr, &s_TracerExp[10]}, - {EXP + 7, SF_QUICK_CALL, nullptr, &s_TracerExp[11]}, - {EXP + 8, TRACER_EXP_RATE, nullptr, &s_TracerExp[12]}, - {EXP + 9, TRACER_EXP_RATE, nullptr, &s_TracerExp[13]}, - {EXP + 10, TRACER_EXP_RATE, nullptr, &s_TracerExp[14]}, - {EXP + 11, TRACER_EXP_RATE, nullptr, &s_TracerExp[15]}, - {EXP + 12, TRACER_EXP_RATE, nullptr, &s_TracerExp[16]}, - {EXP + 13, TRACER_EXP_RATE, nullptr, &s_TracerExp[17]}, - {EXP + 14, TRACER_EXP_RATE, nullptr, &s_TracerExp[18]}, - {EXP + 15, TRACER_EXP_RATE, nullptr, &s_TracerExp[19]}, - {EXP + 16, TRACER_EXP_RATE, nullptr, &s_TracerExp[20]}, - {EXP + 17, TRACER_EXP_RATE, nullptr, &s_TracerExp[21]}, - {EXP + 18, TRACER_EXP_RATE, nullptr, &s_TracerExp[22]}, - {EXP + 19, TRACER_EXP_RATE, nullptr, &s_TracerExp[23]}, - {EXP + 20, TRACER_EXP_RATE, nullptr, &s_TracerExp[24]}, - {EXP + 20, 100, &AF(DoSuicide), &s_TracerExp[0]} + {EXP + 0, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[1]}, + {EXP + 0, SF_QUICK_CALL, NullAnimator, &s_TracerExp[2]}, + {EXP + 0, SF_QUICK_CALL, NullAnimator, &s_TracerExp[3]}, + {EXP + 1, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[4]}, + {EXP + 2, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[5]}, + {EXP + 3, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[6]}, + {EXP + 4, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[7]}, + {EXP + 5, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[8]}, + {EXP + 6, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[9]}, + {EXP + 7, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[10]}, + {EXP + 7, SF_QUICK_CALL, NullAnimator, &s_TracerExp[11]}, + {EXP + 8, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[12]}, + {EXP + 9, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[13]}, + {EXP + 10, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[14]}, + {EXP + 11, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[15]}, + {EXP + 12, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[16]}, + {EXP + 13, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[17]}, + {EXP + 14, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[18]}, + {EXP + 15, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[19]}, + {EXP + 16, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[20]}, + {EXP + 17, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[21]}, + {EXP + 18, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[22]}, + {EXP + 19, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[23]}, + {EXP + 20, TRACER_EXP_RATE, NullAnimator, &s_TracerExp[24]}, + {EXP + 20, 100, DoSuicide, &s_TracerExp[0]} }; #define EXP_RATE_W 7 +ANIMATOR DoSectorExp; STATE s_SectorExp[] = { - {EXP + 0, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[1]}, - {EXP + 0, SF_QUICK_CALL, &AF(SpawnShrapX), &s_SectorExp[2]}, - {EXP + 0, SF_QUICK_CALL, &AF(DoSectorExp), &s_SectorExp[3]}, - {EXP + 1, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[4]}, - {EXP + 2, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[5]}, - {EXP + 3, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[6]}, - {EXP + 4, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[7]}, - {EXP + 5, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[8]}, - {EXP + 6, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[9]}, - {EXP + 7, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[10]}, - {EXP + 7, SF_QUICK_CALL, &AF(DoSectorExp), &s_SectorExp[11]}, - {EXP + 8, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[12]}, - {EXP + 9, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[13]}, - {EXP + 10, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[14]}, - {EXP + 11, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[15]}, - {EXP + 12, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[16]}, - {EXP + 13, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[17]}, - {EXP + 14, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[18]}, - {EXP + 15, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[19]}, - {EXP + 16, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[20]}, - {EXP + 17, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[21]}, - {EXP + 18, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[22]}, - {EXP + 19, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[23]}, - {EXP + 20, EXP_RATE_W, &AF(DoSectorExp), &s_SectorExp[24]}, - {EXP + 20, 100, &AF(DoSuicide), &s_SectorExp[0]} + {EXP + 0, EXP_RATE_W, DoSectorExp, &s_SectorExp[1]}, + {EXP + 0, SF_QUICK_CALL, SpawnShrapX, &s_SectorExp[2]}, + {EXP + 0, SF_QUICK_CALL, DoSectorExp, &s_SectorExp[3]}, + {EXP + 1, EXP_RATE_W, DoSectorExp, &s_SectorExp[4]}, + {EXP + 2, EXP_RATE_W, DoSectorExp, &s_SectorExp[5]}, + {EXP + 3, EXP_RATE_W, DoSectorExp, &s_SectorExp[6]}, + {EXP + 4, EXP_RATE_W, DoSectorExp, &s_SectorExp[7]}, + {EXP + 5, EXP_RATE_W, DoSectorExp, &s_SectorExp[8]}, + {EXP + 6, EXP_RATE_W, DoSectorExp, &s_SectorExp[9]}, + {EXP + 7, EXP_RATE_W, DoSectorExp, &s_SectorExp[10]}, + {EXP + 7, SF_QUICK_CALL, DoSectorExp, &s_SectorExp[11]}, + {EXP + 8, EXP_RATE_W, DoSectorExp, &s_SectorExp[12]}, + {EXP + 9, EXP_RATE_W, DoSectorExp, &s_SectorExp[13]}, + {EXP + 10, EXP_RATE_W, DoSectorExp, &s_SectorExp[14]}, + {EXP + 11, EXP_RATE_W, DoSectorExp, &s_SectorExp[15]}, + {EXP + 12, EXP_RATE_W, DoSectorExp, &s_SectorExp[16]}, + {EXP + 13, EXP_RATE_W, DoSectorExp, &s_SectorExp[17]}, + {EXP + 14, EXP_RATE_W, DoSectorExp, &s_SectorExp[18]}, + {EXP + 15, EXP_RATE_W, DoSectorExp, &s_SectorExp[19]}, + {EXP + 16, EXP_RATE_W, DoSectorExp, &s_SectorExp[20]}, + {EXP + 17, EXP_RATE_W, DoSectorExp, &s_SectorExp[21]}, + {EXP + 18, EXP_RATE_W, DoSectorExp, &s_SectorExp[22]}, + {EXP + 19, EXP_RATE_W, DoSectorExp, &s_SectorExp[23]}, + {EXP + 20, EXP_RATE_W, DoSectorExp, &s_SectorExp[24]}, + {EXP + 20, 100, DoSuicide, &s_SectorExp[0]} }; @@ -1670,12 +1758,12 @@ STATE s_SectorExp[] = #define FIREBALL_DISS_RATE 8 STATE s_FireballExp[] = { - {FIREBALL_DISS + 0, FIREBALL_DISS_RATE, nullptr, &s_FireballExp[1]}, - {FIREBALL_DISS + 1, FIREBALL_DISS_RATE, nullptr, &s_FireballExp[2]}, - {FIREBALL_DISS + 2, FIREBALL_DISS_RATE, nullptr, &s_FireballExp[3]}, - {FIREBALL_DISS + 3, FIREBALL_DISS_RATE, nullptr, &s_FireballExp[4]}, - {FIREBALL_DISS + 4, FIREBALL_DISS_RATE, nullptr, &s_FireballExp[5]}, - {FIREBALL_DISS + 4, 100, &AF(DoSuicide), &s_FireballExp[0]} + {FIREBALL_DISS + 0, FIREBALL_DISS_RATE, NullAnimator, &s_FireballExp[1]}, + {FIREBALL_DISS + 1, FIREBALL_DISS_RATE, NullAnimator, &s_FireballExp[2]}, + {FIREBALL_DISS + 2, FIREBALL_DISS_RATE, NullAnimator, &s_FireballExp[3]}, + {FIREBALL_DISS + 3, FIREBALL_DISS_RATE, NullAnimator, &s_FireballExp[4]}, + {FIREBALL_DISS + 4, FIREBALL_DISS_RATE, NullAnimator, &s_FireballExp[5]}, + {FIREBALL_DISS + 4, 100, DoSuicide, &s_FireballExp[0]} }; #define NAP_EXP (3072) @@ -1683,70 +1771,72 @@ STATE s_FireballExp[] = STATE s_NapExp[] = { - {NAP_EXP + 0, NAP_EXP_RATE, nullptr, &s_NapExp[1]}, - {NAP_EXP + 0, 0 | SF_QUICK_CALL, &AF(DoDamageTest), &s_NapExp[2]}, - {NAP_EXP + 1, NAP_EXP_RATE, nullptr, &s_NapExp[3]}, - {NAP_EXP + 2, NAP_EXP_RATE, nullptr, &s_NapExp[4]}, - {NAP_EXP + 3, NAP_EXP_RATE, nullptr, &s_NapExp[5]}, - {NAP_EXP + 4, NAP_EXP_RATE, nullptr, &s_NapExp[6]}, - {NAP_EXP + 5, NAP_EXP_RATE, nullptr, &s_NapExp[7]}, - {NAP_EXP + 6, NAP_EXP_RATE, nullptr, &s_NapExp[8]}, - {NAP_EXP + 7, NAP_EXP_RATE, nullptr, &s_NapExp[9]}, - {NAP_EXP + 8, NAP_EXP_RATE, nullptr, &s_NapExp[10]}, - {NAP_EXP + 9, NAP_EXP_RATE, nullptr, &s_NapExp[11]}, - {NAP_EXP + 10, NAP_EXP_RATE, nullptr, &s_NapExp[12]}, - {NAP_EXP + 11, NAP_EXP_RATE, nullptr, &s_NapExp[13]}, - {NAP_EXP + 12, NAP_EXP_RATE, nullptr, &s_NapExp[14]}, - {NAP_EXP + 13, NAP_EXP_RATE, nullptr, &s_NapExp[15]}, - {NAP_EXP + 14, NAP_EXP_RATE, nullptr, &s_NapExp[16]}, - {NAP_EXP + 15, NAP_EXP_RATE-2, nullptr, &s_NapExp[17]}, - {NAP_EXP + 16, NAP_EXP_RATE-2, nullptr, &s_NapExp[18]}, - {NAP_EXP + 17, NAP_EXP_RATE-2, nullptr, &s_NapExp[19]}, - {NAP_EXP + 18, NAP_EXP_RATE-2, nullptr, &s_NapExp[20]}, - {NAP_EXP + 19, NAP_EXP_RATE-2, nullptr, &s_NapExp[21]}, - {NAP_EXP + 20, NAP_EXP_RATE-2, nullptr, &s_NapExp[22]}, - {NAP_EXP + 21, NAP_EXP_RATE-2, nullptr, &s_NapExp[23]}, - {NAP_EXP + 21, NAP_EXP_RATE-2, &AF(DoSuicide), &s_NapExp[23]} + {NAP_EXP + 0, NAP_EXP_RATE, NullAnimator, &s_NapExp[1]}, + {NAP_EXP + 0, 0 | SF_QUICK_CALL, DoDamageTest, &s_NapExp[2]}, + {NAP_EXP + 1, NAP_EXP_RATE, NullAnimator, &s_NapExp[3]}, + {NAP_EXP + 2, NAP_EXP_RATE, NullAnimator, &s_NapExp[4]}, + {NAP_EXP + 3, NAP_EXP_RATE, NullAnimator, &s_NapExp[5]}, + {NAP_EXP + 4, NAP_EXP_RATE, NullAnimator, &s_NapExp[6]}, + {NAP_EXP + 5, NAP_EXP_RATE, NullAnimator, &s_NapExp[7]}, + {NAP_EXP + 6, NAP_EXP_RATE, NullAnimator, &s_NapExp[8]}, + {NAP_EXP + 7, NAP_EXP_RATE, NullAnimator, &s_NapExp[9]}, + {NAP_EXP + 8, NAP_EXP_RATE, NullAnimator, &s_NapExp[10]}, + {NAP_EXP + 9, NAP_EXP_RATE, NullAnimator, &s_NapExp[11]}, + {NAP_EXP + 10, NAP_EXP_RATE, NullAnimator, &s_NapExp[12]}, + {NAP_EXP + 11, NAP_EXP_RATE, NullAnimator, &s_NapExp[13]}, + {NAP_EXP + 12, NAP_EXP_RATE, NullAnimator, &s_NapExp[14]}, + {NAP_EXP + 13, NAP_EXP_RATE, NullAnimator, &s_NapExp[15]}, + {NAP_EXP + 14, NAP_EXP_RATE, NullAnimator, &s_NapExp[16]}, + {NAP_EXP + 15, NAP_EXP_RATE-2, NullAnimator, &s_NapExp[17]}, + {NAP_EXP + 16, NAP_EXP_RATE-2, NullAnimator, &s_NapExp[18]}, + {NAP_EXP + 17, NAP_EXP_RATE-2, NullAnimator, &s_NapExp[19]}, + {NAP_EXP + 18, NAP_EXP_RATE-2, NullAnimator, &s_NapExp[20]}, + {NAP_EXP + 19, NAP_EXP_RATE-2, NullAnimator, &s_NapExp[21]}, + {NAP_EXP + 20, NAP_EXP_RATE-2, NullAnimator, &s_NapExp[22]}, + {NAP_EXP + 21, NAP_EXP_RATE-2, NullAnimator, &s_NapExp[23]}, + {NAP_EXP + 21, NAP_EXP_RATE-2, DoSuicide, &s_NapExp[23]} }; +ANIMATOR DoFireballFlames; #define FLAME_RATE 6 STATE s_FireballFlames[] = { - {FIREBALL_FLAMES + 0, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[1]}, - {FIREBALL_FLAMES + 1, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[2]}, - {FIREBALL_FLAMES + 2, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[3]}, - {FIREBALL_FLAMES + 3, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[4]}, - {FIREBALL_FLAMES + 4, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[5]}, - {FIREBALL_FLAMES + 5, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[6]}, - {FIREBALL_FLAMES + 6, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[7]}, - {FIREBALL_FLAMES + 7, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[8]}, - {FIREBALL_FLAMES + 8, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[9]}, - {FIREBALL_FLAMES + 9, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[10]}, - {FIREBALL_FLAMES +10, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[11]}, - {FIREBALL_FLAMES +11, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[12]}, - {FIREBALL_FLAMES +12, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[13]}, - {FIREBALL_FLAMES +13, FLAME_RATE, &AF(DoFireballFlames), &s_FireballFlames[0]}, + {FIREBALL_FLAMES + 0, FLAME_RATE, DoFireballFlames, &s_FireballFlames[1]}, + {FIREBALL_FLAMES + 1, FLAME_RATE, DoFireballFlames, &s_FireballFlames[2]}, + {FIREBALL_FLAMES + 2, FLAME_RATE, DoFireballFlames, &s_FireballFlames[3]}, + {FIREBALL_FLAMES + 3, FLAME_RATE, DoFireballFlames, &s_FireballFlames[4]}, + {FIREBALL_FLAMES + 4, FLAME_RATE, DoFireballFlames, &s_FireballFlames[5]}, + {FIREBALL_FLAMES + 5, FLAME_RATE, DoFireballFlames, &s_FireballFlames[6]}, + {FIREBALL_FLAMES + 6, FLAME_RATE, DoFireballFlames, &s_FireballFlames[7]}, + {FIREBALL_FLAMES + 7, FLAME_RATE, DoFireballFlames, &s_FireballFlames[8]}, + {FIREBALL_FLAMES + 8, FLAME_RATE, DoFireballFlames, &s_FireballFlames[9]}, + {FIREBALL_FLAMES + 9, FLAME_RATE, DoFireballFlames, &s_FireballFlames[10]}, + {FIREBALL_FLAMES +10, FLAME_RATE, DoFireballFlames, &s_FireballFlames[11]}, + {FIREBALL_FLAMES +11, FLAME_RATE, DoFireballFlames, &s_FireballFlames[12]}, + {FIREBALL_FLAMES +12, FLAME_RATE, DoFireballFlames, &s_FireballFlames[13]}, + {FIREBALL_FLAMES +13, FLAME_RATE, DoFireballFlames, &s_FireballFlames[0]}, }; +ANIMATOR DoBreakFlames; #define FLAME_RATE 6 STATE s_BreakFlames[] = { - {FIREBALL_FLAMES + 0, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[1]}, - {FIREBALL_FLAMES + 1, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[2]}, - {FIREBALL_FLAMES + 2, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[3]}, - {FIREBALL_FLAMES + 3, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[4]}, - {FIREBALL_FLAMES + 4, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[5]}, - {FIREBALL_FLAMES + 5, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[6]}, - {FIREBALL_FLAMES + 6, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[7]}, - {FIREBALL_FLAMES + 7, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[8]}, - {FIREBALL_FLAMES + 8, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[9]}, - {FIREBALL_FLAMES + 9, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[10]}, - {FIREBALL_FLAMES +10, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[11]}, - {FIREBALL_FLAMES +11, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[12]}, - {FIREBALL_FLAMES +12, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[13]}, - {FIREBALL_FLAMES +13, FLAME_RATE, &AF(DoBreakFlames), &s_BreakFlames[0]}, + {FIREBALL_FLAMES + 0, FLAME_RATE, DoBreakFlames, &s_BreakFlames[1]}, + {FIREBALL_FLAMES + 1, FLAME_RATE, DoBreakFlames, &s_BreakFlames[2]}, + {FIREBALL_FLAMES + 2, FLAME_RATE, DoBreakFlames, &s_BreakFlames[3]}, + {FIREBALL_FLAMES + 3, FLAME_RATE, DoBreakFlames, &s_BreakFlames[4]}, + {FIREBALL_FLAMES + 4, FLAME_RATE, DoBreakFlames, &s_BreakFlames[5]}, + {FIREBALL_FLAMES + 5, FLAME_RATE, DoBreakFlames, &s_BreakFlames[6]}, + {FIREBALL_FLAMES + 6, FLAME_RATE, DoBreakFlames, &s_BreakFlames[7]}, + {FIREBALL_FLAMES + 7, FLAME_RATE, DoBreakFlames, &s_BreakFlames[8]}, + {FIREBALL_FLAMES + 8, FLAME_RATE, DoBreakFlames, &s_BreakFlames[9]}, + {FIREBALL_FLAMES + 9, FLAME_RATE, DoBreakFlames, &s_BreakFlames[10]}, + {FIREBALL_FLAMES +10, FLAME_RATE, DoBreakFlames, &s_BreakFlames[11]}, + {FIREBALL_FLAMES +11, FLAME_RATE, DoBreakFlames, &s_BreakFlames[12]}, + {FIREBALL_FLAMES +12, FLAME_RATE, DoBreakFlames, &s_BreakFlames[13]}, + {FIREBALL_FLAMES +13, FLAME_RATE, DoBreakFlames, &s_BreakFlames[0]}, }; ////////////////////// @@ -1755,62 +1845,165 @@ STATE s_BreakFlames[] = // ////////////////////// +#if 1 +ANIMATOR DoFireball; #define FIREBALL_RATE 8 #define GORO_FIREBALL FIREBALL+1 STATE s_Fireball[] = { - {FIREBALL + 0, 12, &AF(DoFireball), &s_Fireball[1]}, - {FIREBALL + 1, 12, &AF(DoFireball), &s_Fireball[2]}, - {FIREBALL + 2, 12, &AF(DoFireball), &s_Fireball[3]}, - {FIREBALL + 3, 12, &AF(DoFireball), &s_Fireball[0]} + {FIREBALL + 0, 12, DoFireball, &s_Fireball[1]}, + {FIREBALL + 1, 12, DoFireball, &s_Fireball[2]}, + {FIREBALL + 2, 12, DoFireball, &s_Fireball[3]}, + {FIREBALL + 3, 12, DoFireball, &s_Fireball[0]} +}; + +#else +#define GORO_FIREBALL FIREBALL_R0 +#define FIREBALL_RATE 6 +ANIMATOR DoFireball; + +STATE s_Fireball[5][4] = +{ + { + {FIREBALL_R0 + 0, FIREBALL_RATE, DoFireball, &s_Fireball[0][1]}, + {FIREBALL_R0 + 1, FIREBALL_RATE, DoFireball, &s_Fireball[0][2]}, + {FIREBALL_R0 + 2, FIREBALL_RATE, DoFireball, &s_Fireball[0][3]}, + {FIREBALL_R0 + 3, FIREBALL_RATE, DoFireball, &s_Fireball[0][0]}, + }, + { + {FIREBALL_R1 + 0, FIREBALL_RATE, DoFireball, &s_Fireball[1][1]}, + {FIREBALL_R1 + 1, FIREBALL_RATE, DoFireball, &s_Fireball[1][2]}, + {FIREBALL_R1 + 2, FIREBALL_RATE, DoFireball, &s_Fireball[1][3]}, + {FIREBALL_R1 + 3, FIREBALL_RATE, DoFireball, &s_Fireball[1][0]}, + }, + { + {FIREBALL_R2 + 0, FIREBALL_RATE, DoFireball, &s_Fireball[2][1]}, + {FIREBALL_R2 + 1, FIREBALL_RATE, DoFireball, &s_Fireball[2][2]}, + {FIREBALL_R2 + 2, FIREBALL_RATE, DoFireball, &s_Fireball[2][3]}, + {FIREBALL_R2 + 3, FIREBALL_RATE, DoFireball, &s_Fireball[2][0]}, + }, + { + {FIREBALL_R3 + 0, FIREBALL_RATE, DoFireball, &s_Fireball[3][1]}, + {FIREBALL_R3 + 1, FIREBALL_RATE, DoFireball, &s_Fireball[3][2]}, + {FIREBALL_R3 + 2, FIREBALL_RATE, DoFireball, &s_Fireball[3][3]}, + {FIREBALL_R3 + 3, FIREBALL_RATE, DoFireball, &s_Fireball[3][0]}, + }, + { + {FIREBALL_R4 + 0, FIREBALL_RATE, DoFireball, &s_Fireball[4][1]}, + {FIREBALL_R4 + 1, FIREBALL_RATE, DoFireball, &s_Fireball[4][2]}, + {FIREBALL_R4 + 2, FIREBALL_RATE, DoFireball, &s_Fireball[4][3]}, + {FIREBALL_R4 + 3, FIREBALL_RATE, DoFireball, &s_Fireball[4][0]}, + } +}; + +STATE* sg_Fireball[] = +{ + s_Fireball[0], + s_Fireball[1], + s_Fireball[2], + s_Fireball[3], + s_Fireball[4] +}; +#endif + +#if 0 +ANIMATOR DoRing; + +STATE s_Ring[5][4] = +{ + { + {FIREBALL_R0 + 0, FIREBALL_RATE, DoRing, &s_Ring[0][1]}, + {FIREBALL_R0 + 1, FIREBALL_RATE, DoRing, &s_Ring[0][2]}, + {FIREBALL_R0 + 2, FIREBALL_RATE, DoRing, &s_Ring[0][3]}, + {FIREBALL_R0 + 3, FIREBALL_RATE, DoRing, &s_Ring[0][0]}, + }, + { + {FIREBALL_R1 + 0, FIREBALL_RATE, DoRing, &s_Ring[1][1]}, + {FIREBALL_R1 + 1, FIREBALL_RATE, DoRing, &s_Ring[1][2]}, + {FIREBALL_R1 + 2, FIREBALL_RATE, DoRing, &s_Ring[1][3]}, + {FIREBALL_R1 + 3, FIREBALL_RATE, DoRing, &s_Ring[1][0]}, + }, + { + {FIREBALL_R2 + 0, FIREBALL_RATE, DoRing, &s_Ring[2][1]}, + {FIREBALL_R2 + 1, FIREBALL_RATE, DoRing, &s_Ring[2][2]}, + {FIREBALL_R2 + 2, FIREBALL_RATE, DoRing, &s_Ring[2][3]}, + {FIREBALL_R2 + 3, FIREBALL_RATE, DoRing, &s_Ring[2][0]}, + }, + { + {FIREBALL_R3 + 0, FIREBALL_RATE, DoRing, &s_Ring[3][1]}, + {FIREBALL_R3 + 1, FIREBALL_RATE, DoRing, &s_Ring[3][2]}, + {FIREBALL_R3 + 2, FIREBALL_RATE, DoRing, &s_Ring[3][3]}, + {FIREBALL_R3 + 3, FIREBALL_RATE, DoRing, &s_Ring[3][0]}, + }, + { + {FIREBALL_R4 + 0, FIREBALL_RATE, DoRing, &s_Ring[4][1]}, + {FIREBALL_R4 + 1, FIREBALL_RATE, DoRing, &s_Ring[4][2]}, + {FIREBALL_R4 + 2, FIREBALL_RATE, DoRing, &s_Ring[4][3]}, + {FIREBALL_R4 + 3, FIREBALL_RATE, DoRing, &s_Ring[4][0]}, + } }; +STATE* sg_Ring[] = +{ + s_Ring[0], + s_Ring[1], + s_Ring[2], + s_Ring[3], + s_Ring[4] +}; +#else +ANIMATOR DoRing; STATE s_Ring[] = { - {FIREBALL + 0, 12, &AF(DoRing), &s_Ring[1]}, - {FIREBALL + 1, 12, &AF(DoRing), &s_Ring[2]}, - {FIREBALL + 2, 12, &AF(DoRing), &s_Ring[3]}, - {FIREBALL + 3, 12, &AF(DoRing), &s_Ring[0]} + {FIREBALL + 0, 12, DoRing, &s_Ring[1]}, + {FIREBALL + 1, 12, DoRing, &s_Ring[2]}, + {FIREBALL + 2, 12, DoRing, &s_Ring[3]}, + {FIREBALL + 3, 12, DoRing, &s_Ring[0]} }; +#endif STATE s_Ring2[] = { - {2031 + 0, 12, &AF(DoRing), &s_Ring2[1]}, - {2031 + 1, 12, &AF(DoRing), &s_Ring2[2]}, - {2031 + 2, 12, &AF(DoRing), &s_Ring2[3]}, - {2031 + 3, 12, &AF(DoRing), &s_Ring2[0]} + {2031 + 0, 12, DoRing, &s_Ring2[1]}, + {2031 + 1, 12, DoRing, &s_Ring2[2]}, + {2031 + 2, 12, DoRing, &s_Ring2[3]}, + {2031 + 3, 12, DoRing, &s_Ring2[0]} }; +ANIMATOR DoNapalm; + STATE s_Napalm[] = { - {FIREBALL + 0, 12, &AF(DoNapalm), &s_Napalm[1]}, - {FIREBALL + 1, 12, &AF(DoNapalm), &s_Napalm[2]}, - {FIREBALL + 2, 12, &AF(DoNapalm), &s_Napalm[3]}, - {FIREBALL + 3, 12, &AF(DoNapalm), &s_Napalm[0]} + {FIREBALL + 0, 12, DoNapalm, &s_Napalm[1]}, + {FIREBALL + 1, 12, DoNapalm, &s_Napalm[2]}, + {FIREBALL + 2, 12, DoNapalm, &s_Napalm[3]}, + {FIREBALL + 3, 12, DoNapalm, &s_Napalm[0]} }; +ANIMATOR DoBloodWorm; + #if 1 #define BLOOD_WORM 2106 STATE s_BloodWorm[] = { - {BLOOD_WORM + 0, 12, &AF(DoBloodWorm), &s_BloodWorm[1]}, - {BLOOD_WORM + 1, 12, &AF(DoBloodWorm), &s_BloodWorm[2]}, - {BLOOD_WORM + 2, 12, &AF(DoBloodWorm), &s_BloodWorm[3]}, - {BLOOD_WORM + 3, 12, &AF(DoBloodWorm), &s_BloodWorm[4]}, - {BLOOD_WORM + 2, 12, &AF(DoBloodWorm), &s_BloodWorm[5]}, - {BLOOD_WORM + 1, 12, &AF(DoBloodWorm), &s_BloodWorm[0]} + {BLOOD_WORM + 0, 12, DoBloodWorm, &s_BloodWorm[1]}, + {BLOOD_WORM + 1, 12, DoBloodWorm, &s_BloodWorm[2]}, + {BLOOD_WORM + 2, 12, DoBloodWorm, &s_BloodWorm[3]}, + {BLOOD_WORM + 3, 12, DoBloodWorm, &s_BloodWorm[4]}, + {BLOOD_WORM + 2, 12, DoBloodWorm, &s_BloodWorm[5]}, + {BLOOD_WORM + 1, 12, DoBloodWorm, &s_BloodWorm[0]} }; #else #define BLOOD_WORM FIREBALL+5 STATE s_BloodWorm[] = { - {FIREBALL + 0, 12, &AF(DoBloodWorm), &s_BloodWorm[1]}, - {FIREBALL + 1, 12, &AF(DoBloodWorm), &s_BloodWorm[2]}, - {FIREBALL + 2, 12, &AF(DoBloodWorm), &s_BloodWorm[3]}, - {FIREBALL + 3, 12, &AF(DoBloodWorm), &s_BloodWorm[0]} + {FIREBALL + 0, 12, DoBloodWorm, &s_BloodWorm[1]}, + {FIREBALL + 1, 12, DoBloodWorm, &s_BloodWorm[2]}, + {FIREBALL + 2, 12, DoBloodWorm, &s_BloodWorm[3]}, + {FIREBALL + 3, 12, DoBloodWorm, &s_BloodWorm[0]} }; #endif @@ -1820,38 +2013,73 @@ STATE s_BloodWorm[] = STATE s_PlasmaExp[] = { - {BLOOD_WORM + 0, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[1]}, - {BLOOD_WORM + 1, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[2]}, - {BLOOD_WORM + 2, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[3]}, - {BLOOD_WORM + 3, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[4]}, - {BLOOD_WORM + 2, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[5]}, - {BLOOD_WORM + 1, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[6]}, - {BLOOD_WORM + 0, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[7]}, - {BLOOD_WORM + 1, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[8]}, - {BLOOD_WORM + 2, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[9]}, - {BLOOD_WORM + 3, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[10]}, - {BLOOD_WORM + 2, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[11]}, - {BLOOD_WORM + 1, PLASMA_EXP_RATE, nullptr, &s_PlasmaExp[12]}, - {BLOOD_WORM + 0, PLASMA_EXP_RATE, &AF(DoSuicide), &s_PlasmaExp[12]}, + {BLOOD_WORM + 0, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[1]}, + {BLOOD_WORM + 1, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[2]}, + {BLOOD_WORM + 2, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[3]}, + {BLOOD_WORM + 3, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[4]}, + {BLOOD_WORM + 2, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[5]}, + {BLOOD_WORM + 1, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[6]}, + {BLOOD_WORM + 0, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[7]}, + {BLOOD_WORM + 1, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[8]}, + {BLOOD_WORM + 2, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[9]}, + {BLOOD_WORM + 3, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[10]}, + {BLOOD_WORM + 2, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[11]}, + {BLOOD_WORM + 1, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[12]}, + {BLOOD_WORM + 0, PLASMA_EXP_RATE, DoSuicide, &s_PlasmaExp[12]}, }; +#else +#define PLASMA_EXP (NAP_EXP+1) +#define PLASMA_EXP_RATE 4 + +STATE s_PlasmaExp[] = +{ + {PLASMA_EXP + 0, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[1]}, + {PLASMA_EXP + 0, 0 | SF_QUICK_CALL, DoDamageTest, &s_PlasmaExp[2]}, + {PLASMA_EXP + 1, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[3]}, + {PLASMA_EXP + 2, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[4]}, + {PLASMA_EXP + 3, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[5]}, + {PLASMA_EXP + 4, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[6]}, + {PLASMA_EXP + 5, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[7]}, + {PLASMA_EXP + 6, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[8]}, + {PLASMA_EXP + 7, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[9]}, + {PLASMA_EXP + 8, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[10]}, + {PLASMA_EXP + 9, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[11]}, + {PLASMA_EXP + 10, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[12]}, + {PLASMA_EXP + 11, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[13]}, + {PLASMA_EXP + 9, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[14]}, + {PLASMA_EXP + 8, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[15]}, + {PLASMA_EXP + 7, PLASMA_EXP_RATE, NullAnimator, &s_PlasmaExp[16]}, + {PLASMA_EXP + 6, PLASMA_EXP_RATE-2, NullAnimator, &s_PlasmaExp[17]}, + {PLASMA_EXP + 5, PLASMA_EXP_RATE-2, NullAnimator, &s_PlasmaExp[18]}, + {PLASMA_EXP + 4, PLASMA_EXP_RATE-2, NullAnimator, &s_PlasmaExp[19]}, + {PLASMA_EXP + 3, PLASMA_EXP_RATE-2, NullAnimator, &s_PlasmaExp[20]}, + {PLASMA_EXP + 2, PLASMA_EXP_RATE-2, NullAnimator, &s_PlasmaExp[21]}, + {PLASMA_EXP + 1, PLASMA_EXP_RATE-2, NullAnimator, &s_PlasmaExp[22]}, + {PLASMA_EXP + 1, PLASMA_EXP_RATE-2, NullAnimator, &s_PlasmaExp[23]}, + {PLASMA_EXP + 1, PLASMA_EXP_RATE-2, DoSuicide, &s_PlasmaExp[23]} +}; #endif +ANIMATOR DoMirv; + STATE s_Mirv[] = { - {FIREBALL + 0, 12, &AF(DoMirv), &s_Mirv[1]}, - {FIREBALL + 1, 12, &AF(DoMirv), &s_Mirv[2]}, - {FIREBALL + 2, 12, &AF(DoMirv), &s_Mirv[3]}, - {FIREBALL + 3, 12, &AF(DoMirv), &s_Mirv[0]} + {FIREBALL + 0, 12, DoMirv, &s_Mirv[1]}, + {FIREBALL + 1, 12, DoMirv, &s_Mirv[2]}, + {FIREBALL + 2, 12, DoMirv, &s_Mirv[3]}, + {FIREBALL + 3, 12, DoMirv, &s_Mirv[0]} }; +ANIMATOR DoMirvMissile; + STATE s_MirvMissile[] = { - {FIREBALL + 0, 12, &AF(DoMirvMissile), &s_MirvMissile[1]}, - {FIREBALL + 1, 12, &AF(DoMirvMissile), &s_MirvMissile[2]}, - {FIREBALL + 2, 12, &AF(DoMirvMissile), &s_MirvMissile[3]}, - {FIREBALL + 3, 12, &AF(DoMirvMissile), &s_MirvMissile[0]} + {FIREBALL + 0, 12, DoMirvMissile, &s_MirvMissile[1]}, + {FIREBALL + 1, 12, DoMirvMissile, &s_MirvMissile[2]}, + {FIREBALL + 2, 12, DoMirvMissile, &s_MirvMissile[3]}, + {FIREBALL + 3, 12, DoMirvMissile, &s_MirvMissile[0]} }; //#define Vomit1 1740 @@ -1861,20 +2089,21 @@ STATE s_MirvMissile[] = //#define VomitSplash 1742 #define VomitSplash 1711 #define Vomit_RATE 16 +ANIMATOR DoVomit,DoVomitSplash; STATE s_Vomit1[] = { - {Vomit1 + 0, Vomit_RATE, &AF(DoVomit), &s_Vomit1[0]} + {Vomit1 + 0, Vomit_RATE, DoVomit, &s_Vomit1[0]} }; STATE s_Vomit2[] = { - {Vomit2 + 0, Vomit_RATE, &AF(DoVomit), &s_Vomit2[0]} + {Vomit2 + 0, Vomit_RATE, DoVomit, &s_Vomit2[0]} }; STATE s_VomitSplash[] = { - {VomitSplash + 0, Vomit_RATE, &AF(DoVomitSplash), &s_VomitSplash[0]} + {VomitSplash + 0, Vomit_RATE, DoVomitSplash, &s_VomitSplash[0]} }; #define GORE_Head 1670 @@ -1882,18 +2111,18 @@ STATE s_VomitSplash[] = STATE s_GoreHead[] = { - {GORE_Head + 0, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[1]}, - {GORE_Head + 1, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[2]}, - {GORE_Head + 2, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[3]}, - {GORE_Head + 3, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[4]}, - {GORE_Head + 4, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[5]}, - {GORE_Head + 5, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[6]}, - {GORE_Head + 6, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[7]}, - {GORE_Head + 7, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[8]}, - {GORE_Head + 8, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[9]}, - {GORE_Head + 9, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[10]}, - {GORE_Head + 10, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[11]}, - {GORE_Head + 11, GORE_Head_RATE, &AF(DoShrapJumpFall), &s_GoreHead[0]}, + {GORE_Head + 0, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[1]}, + {GORE_Head + 1, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[2]}, + {GORE_Head + 2, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[3]}, + {GORE_Head + 3, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[4]}, + {GORE_Head + 4, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[5]}, + {GORE_Head + 5, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[6]}, + {GORE_Head + 6, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[7]}, + {GORE_Head + 7, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[8]}, + {GORE_Head + 8, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[9]}, + {GORE_Head + 9, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[10]}, + {GORE_Head + 10, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[11]}, + {GORE_Head + 11, GORE_Head_RATE, DoShrapJumpFall, &s_GoreHead[0]}, }; #define GORE_Leg 1689 @@ -1901,9 +2130,9 @@ STATE s_GoreHead[] = STATE s_GoreLeg[] = { - {GORE_Leg + 0, GORE_Leg_RATE, &AF(DoShrapJumpFall), &s_GoreLeg[1]}, - {GORE_Leg + 1, GORE_Leg_RATE, &AF(DoShrapJumpFall), &s_GoreLeg[2]}, - {GORE_Leg + 2, GORE_Leg_RATE, &AF(DoShrapJumpFall), &s_GoreLeg[0]}, + {GORE_Leg + 0, GORE_Leg_RATE, DoShrapJumpFall, &s_GoreLeg[1]}, + {GORE_Leg + 1, GORE_Leg_RATE, DoShrapJumpFall, &s_GoreLeg[2]}, + {GORE_Leg + 2, GORE_Leg_RATE, DoShrapJumpFall, &s_GoreLeg[0]}, }; #define GORE_Eye 1692 @@ -1911,10 +2140,10 @@ STATE s_GoreLeg[] = STATE s_GoreEye[] = { - {GORE_Eye + 0, GORE_Eye_RATE, &AF(DoShrapJumpFall), &s_GoreEye[1]}, - {GORE_Eye + 1, GORE_Eye_RATE, &AF(DoShrapJumpFall), &s_GoreEye[2]}, - {GORE_Eye + 2, GORE_Eye_RATE, &AF(DoShrapJumpFall), &s_GoreEye[3]}, - {GORE_Eye + 3, GORE_Eye_RATE, &AF(DoShrapJumpFall), &s_GoreEye[0]}, + {GORE_Eye + 0, GORE_Eye_RATE, DoShrapJumpFall, &s_GoreEye[1]}, + {GORE_Eye + 1, GORE_Eye_RATE, DoShrapJumpFall, &s_GoreEye[2]}, + {GORE_Eye + 2, GORE_Eye_RATE, DoShrapJumpFall, &s_GoreEye[3]}, + {GORE_Eye + 3, GORE_Eye_RATE, DoShrapJumpFall, &s_GoreEye[0]}, }; #define GORE_Torso 1696 @@ -1922,14 +2151,14 @@ STATE s_GoreEye[] = STATE s_GoreTorso[] = { - {GORE_Torso + 0, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[1]}, - {GORE_Torso + 1, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[2]}, - {GORE_Torso + 2, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[3]}, - {GORE_Torso + 3, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[4]}, - {GORE_Torso + 4, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[5]}, - {GORE_Torso + 5, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[6]}, - {GORE_Torso + 6, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[7]}, - {GORE_Torso + 7, GORE_Torso_RATE, &AF(DoShrapJumpFall), &s_GoreTorso[0]}, + {GORE_Torso + 0, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[1]}, + {GORE_Torso + 1, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[2]}, + {GORE_Torso + 2, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[3]}, + {GORE_Torso + 3, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[4]}, + {GORE_Torso + 4, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[5]}, + {GORE_Torso + 5, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[6]}, + {GORE_Torso + 6, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[7]}, + {GORE_Torso + 7, GORE_Torso_RATE, DoShrapJumpFall, &s_GoreTorso[0]}, }; @@ -1938,18 +2167,18 @@ STATE s_GoreTorso[] = STATE s_GoreArm[] = { - {GORE_Arm + 0, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[1]}, - {GORE_Arm + 1, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[2]}, - {GORE_Arm + 2, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[3]}, - {GORE_Arm + 3, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[4]}, - {GORE_Arm + 4, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[5]}, - {GORE_Arm + 5, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[6]}, - {GORE_Arm + 6, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[7]}, - {GORE_Arm + 7, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[8]}, - {GORE_Arm + 8, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[9]}, - {GORE_Arm + 9, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[10]}, - {GORE_Arm + 10, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[11]}, - {GORE_Arm + 11, GORE_Arm_RATE, &AF(DoShrapJumpFall), &s_GoreArm[0]}, + {GORE_Arm + 0, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[1]}, + {GORE_Arm + 1, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[2]}, + {GORE_Arm + 2, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[3]}, + {GORE_Arm + 3, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[4]}, + {GORE_Arm + 4, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[5]}, + {GORE_Arm + 5, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[6]}, + {GORE_Arm + 6, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[7]}, + {GORE_Arm + 7, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[8]}, + {GORE_Arm + 8, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[9]}, + {GORE_Arm + 9, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[10]}, + {GORE_Arm + 10, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[11]}, + {GORE_Arm + 11, GORE_Arm_RATE, DoShrapJumpFall, &s_GoreArm[0]}, }; #define GORE_Lung 903 @@ -1957,18 +2186,18 @@ STATE s_GoreArm[] = STATE s_GoreLung[] = { - {GORE_Lung + 0, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[1]}, - {GORE_Lung + 1, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[2]}, - {GORE_Lung + 2, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[3]}, - {GORE_Lung + 3, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[4]}, - {GORE_Lung + 4, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[5]}, - {GORE_Lung + 5, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[6]}, - {GORE_Lung + 6, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[7]}, - {GORE_Lung + 7, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[8]}, - {GORE_Lung + 8, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[9]}, - {GORE_Lung + 9, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[10]}, - {GORE_Lung + 10, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[11]}, - {GORE_Lung + 11, GORE_Lung_RATE, &AF(DoShrapJumpFall), &s_GoreLung[0]}, + {GORE_Lung + 0, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[1]}, + {GORE_Lung + 1, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[2]}, + {GORE_Lung + 2, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[3]}, + {GORE_Lung + 3, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[4]}, + {GORE_Lung + 4, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[5]}, + {GORE_Lung + 5, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[6]}, + {GORE_Lung + 6, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[7]}, + {GORE_Lung + 7, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[8]}, + {GORE_Lung + 8, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[9]}, + {GORE_Lung + 9, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[10]}, + {GORE_Lung + 10, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[11]}, + {GORE_Lung + 11, GORE_Lung_RATE, DoShrapJumpFall, &s_GoreLung[0]}, }; #define GORE_Liver 918 @@ -1976,18 +2205,18 @@ STATE s_GoreLung[] = STATE s_GoreLiver[] = { - {GORE_Liver + 0, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[1]}, - {GORE_Liver + 1, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[2]}, - {GORE_Liver + 2, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[3]}, - {GORE_Liver + 3, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[4]}, - {GORE_Liver + 4, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[5]}, - {GORE_Liver + 5, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[6]}, - {GORE_Liver + 6, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[7]}, - {GORE_Liver + 7, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[8]}, - {GORE_Liver + 8, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[9]}, - {GORE_Liver + 9, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[10]}, - {GORE_Liver + 10, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[11]}, - {GORE_Liver + 11, GORE_Liver_RATE, &AF(DoShrapJumpFall), &s_GoreLiver[0]}, + {GORE_Liver + 0, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[1]}, + {GORE_Liver + 1, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[2]}, + {GORE_Liver + 2, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[3]}, + {GORE_Liver + 3, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[4]}, + {GORE_Liver + 4, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[5]}, + {GORE_Liver + 5, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[6]}, + {GORE_Liver + 6, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[7]}, + {GORE_Liver + 7, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[8]}, + {GORE_Liver + 8, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[9]}, + {GORE_Liver + 9, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[10]}, + {GORE_Liver + 10, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[11]}, + {GORE_Liver + 11, GORE_Liver_RATE, DoShrapJumpFall, &s_GoreLiver[0]}, }; #define GORE_SkullCap 933 @@ -1995,18 +2224,18 @@ STATE s_GoreLiver[] = STATE s_GoreSkullCap[] = { - {GORE_SkullCap + 0, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[1]}, - {GORE_SkullCap + 1, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[2]}, - {GORE_SkullCap + 2, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[3]}, - {GORE_SkullCap + 3, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[4]}, - {GORE_SkullCap + 4, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[5]}, - {GORE_SkullCap + 5, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[6]}, - {GORE_SkullCap + 6, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[7]}, - {GORE_SkullCap + 7, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[8]}, - {GORE_SkullCap + 8, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[9]}, - {GORE_SkullCap + 9, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[10]}, - {GORE_SkullCap + 10, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[11]}, - {GORE_SkullCap + 11, GORE_SkullCap_RATE, &AF(DoShrapJumpFall), &s_GoreSkullCap[0]}, + {GORE_SkullCap + 0, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[1]}, + {GORE_SkullCap + 1, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[2]}, + {GORE_SkullCap + 2, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[3]}, + {GORE_SkullCap + 3, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[4]}, + {GORE_SkullCap + 4, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[5]}, + {GORE_SkullCap + 5, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[6]}, + {GORE_SkullCap + 6, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[7]}, + {GORE_SkullCap + 7, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[8]}, + {GORE_SkullCap + 8, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[9]}, + {GORE_SkullCap + 9, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[10]}, + {GORE_SkullCap + 10, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[11]}, + {GORE_SkullCap + 11, GORE_SkullCap_RATE, DoShrapJumpFall, &s_GoreSkullCap[0]}, }; @@ -2015,10 +2244,10 @@ STATE s_GoreSkullCap[] = STATE s_GoreChunkS[] = { - {GORE_ChunkS + 0, GORE_ChunkS_RATE, &AF(DoShrapJumpFall), &s_GoreChunkS[1]}, - {GORE_ChunkS + 1, GORE_ChunkS_RATE, &AF(DoShrapJumpFall), &s_GoreChunkS[2]}, - {GORE_ChunkS + 2, GORE_ChunkS_RATE, &AF(DoShrapJumpFall), &s_GoreChunkS[3]}, - {GORE_ChunkS + 3, GORE_ChunkS_RATE, &AF(DoShrapJumpFall), &s_GoreChunkS[0]}, + {GORE_ChunkS + 0, GORE_ChunkS_RATE, DoShrapJumpFall, &s_GoreChunkS[1]}, + {GORE_ChunkS + 1, GORE_ChunkS_RATE, DoShrapJumpFall, &s_GoreChunkS[2]}, + {GORE_ChunkS + 2, GORE_ChunkS_RATE, DoShrapJumpFall, &s_GoreChunkS[3]}, + {GORE_ChunkS + 3, GORE_ChunkS_RATE, DoShrapJumpFall, &s_GoreChunkS[0]}, }; #define GORE_Drip 1562 //2430 @@ -2026,18 +2255,18 @@ STATE s_GoreChunkS[] = STATE s_GoreDrip[] = { - {GORE_Drip + 0, GORE_Drip_RATE, &AF(DoShrapJumpFall), &s_GoreDrip[1]}, - {GORE_Drip + 1, GORE_Drip_RATE, &AF(DoShrapJumpFall), &s_GoreDrip[2]}, - {GORE_Drip + 2, GORE_Drip_RATE, &AF(DoShrapJumpFall), &s_GoreDrip[3]}, - {GORE_Drip + 3, GORE_Drip_RATE, &AF(DoShrapJumpFall), &s_GoreDrip[0]}, + {GORE_Drip + 0, GORE_Drip_RATE, DoShrapJumpFall, &s_GoreDrip[1]}, + {GORE_Drip + 1, GORE_Drip_RATE, DoShrapJumpFall, &s_GoreDrip[2]}, + {GORE_Drip + 2, GORE_Drip_RATE, DoShrapJumpFall, &s_GoreDrip[3]}, + {GORE_Drip + 3, GORE_Drip_RATE, DoShrapJumpFall, &s_GoreDrip[0]}, }; STATE s_FastGoreDrip[] = { - {GORE_Drip + 0, GORE_Drip_RATE, &AF(DoFastShrapJumpFall), &s_FastGoreDrip[1]}, - {GORE_Drip + 1, GORE_Drip_RATE, &AF(DoFastShrapJumpFall), &s_FastGoreDrip[2]}, - {GORE_Drip + 2, GORE_Drip_RATE, &AF(DoFastShrapJumpFall), &s_FastGoreDrip[3]}, - {GORE_Drip + 3, GORE_Drip_RATE, &AF(DoFastShrapJumpFall), &s_FastGoreDrip[0]}, + {GORE_Drip + 0, GORE_Drip_RATE, DoFastShrapJumpFall, &s_FastGoreDrip[1]}, + {GORE_Drip + 1, GORE_Drip_RATE, DoFastShrapJumpFall, &s_FastGoreDrip[2]}, + {GORE_Drip + 2, GORE_Drip_RATE, DoFastShrapJumpFall, &s_FastGoreDrip[3]}, + {GORE_Drip + 3, GORE_Drip_RATE, DoFastShrapJumpFall, &s_FastGoreDrip[0]}, }; /////////////////////////////////////////////// @@ -2051,90 +2280,92 @@ STATE s_FastGoreDrip[] = STATE s_GoreFlame[] = { - {GORE_Flame + 0, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[1]}, - {GORE_Flame + 1, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[2]}, - {GORE_Flame + 2, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[3]}, - {GORE_Flame + 3, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[4]}, - {GORE_Flame + 4, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[5]}, - {GORE_Flame + 5, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[6]}, - {GORE_Flame + 6, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[7]}, - {GORE_Flame + 7, GORE_Flame_RATE, &AF(DoFastShrapJumpFall), &s_GoreFlame[0]}, + {GORE_Flame + 0, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[1]}, + {GORE_Flame + 1, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[2]}, + {GORE_Flame + 2, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[3]}, + {GORE_Flame + 3, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[4]}, + {GORE_Flame + 4, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[5]}, + {GORE_Flame + 5, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[6]}, + {GORE_Flame + 6, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[7]}, + {GORE_Flame + 7, GORE_Flame_RATE, DoFastShrapJumpFall, &s_GoreFlame[0]}, }; +ANIMATOR DoTracerShrap; STATE s_TracerShrap[] = { - {GORE_Flame + 0, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[1]}, - {GORE_Flame + 1, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[2]}, - {GORE_Flame + 2, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[3]}, - {GORE_Flame + 3, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[4]}, - {GORE_Flame + 4, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[5]}, - {GORE_Flame + 5, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[6]}, - {GORE_Flame + 6, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[7]}, - {GORE_Flame + 7, GORE_Flame_RATE, &AF(DoTracerShrap), &s_TracerShrap[0]}, + {GORE_Flame + 0, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[1]}, + {GORE_Flame + 1, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[2]}, + {GORE_Flame + 2, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[3]}, + {GORE_Flame + 3, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[4]}, + {GORE_Flame + 4, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[5]}, + {GORE_Flame + 5, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[6]}, + {GORE_Flame + 6, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[7]}, + {GORE_Flame + 7, GORE_Flame_RATE, DoTracerShrap, &s_TracerShrap[0]}, }; #define UZI_SHELL 2152 #define UZISHELL_RATE 8 +//ANIMATOR DoShellShrap; STATE s_UziShellShrap[] = { - {UZI_SHELL + 0, UZISHELL_RATE, &AF(DoShrapJumpFall), &s_UziShellShrap[1]}, - {UZI_SHELL + 1, UZISHELL_RATE, &AF(DoShrapJumpFall), &s_UziShellShrap[2]}, - {UZI_SHELL + 2, UZISHELL_RATE, &AF(DoShrapJumpFall), &s_UziShellShrap[3]}, - {UZI_SHELL + 3, UZISHELL_RATE, &AF(DoShrapJumpFall), &s_UziShellShrap[4]}, - {UZI_SHELL + 4, UZISHELL_RATE, &AF(DoShrapJumpFall), &s_UziShellShrap[5]}, - {UZI_SHELL + 5, UZISHELL_RATE, &AF(DoShrapJumpFall), &s_UziShellShrap[0]}, + {UZI_SHELL + 0, UZISHELL_RATE, DoShrapJumpFall, &s_UziShellShrap[1]}, + {UZI_SHELL + 1, UZISHELL_RATE, DoShrapJumpFall, &s_UziShellShrap[2]}, + {UZI_SHELL + 2, UZISHELL_RATE, DoShrapJumpFall, &s_UziShellShrap[3]}, + {UZI_SHELL + 3, UZISHELL_RATE, DoShrapJumpFall, &s_UziShellShrap[4]}, + {UZI_SHELL + 4, UZISHELL_RATE, DoShrapJumpFall, &s_UziShellShrap[5]}, + {UZI_SHELL + 5, UZISHELL_RATE, DoShrapJumpFall, &s_UziShellShrap[0]}, }; STATE s_UziShellShrapStill1[] = { - {UZI_SHELL + 0, UZISHELL_RATE, nullptr, &s_UziShellShrapStill1[0]} + {UZI_SHELL + 0, UZISHELL_RATE, NullAnimator, &s_UziShellShrapStill1[0]} }; STATE s_UziShellShrapStill2[] = { - {UZI_SHELL + 1, UZISHELL_RATE, nullptr, &s_UziShellShrapStill2[0]} + {UZI_SHELL + 1, UZISHELL_RATE, NullAnimator, &s_UziShellShrapStill2[0]} }; STATE s_UziShellShrapStill3[] = { - {UZI_SHELL + 2, UZISHELL_RATE, nullptr, &s_UziShellShrapStill3[0]} + {UZI_SHELL + 2, UZISHELL_RATE, NullAnimator, &s_UziShellShrapStill3[0]} }; STATE s_UziShellShrapStill4[] = { - {UZI_SHELL + 3, UZISHELL_RATE, nullptr, &s_UziShellShrapStill4[0]} + {UZI_SHELL + 3, UZISHELL_RATE, NullAnimator, &s_UziShellShrapStill4[0]} }; STATE s_UziShellShrapStill5[] = { - {UZI_SHELL + 4, UZISHELL_RATE, nullptr, &s_UziShellShrapStill5[0]} + {UZI_SHELL + 4, UZISHELL_RATE, NullAnimator, &s_UziShellShrapStill5[0]} }; STATE s_UziShellShrapStill6[] = { - {UZI_SHELL + 5, UZISHELL_RATE, nullptr, &s_UziShellShrapStill6[0]} + {UZI_SHELL + 5, UZISHELL_RATE, NullAnimator, &s_UziShellShrapStill6[0]} }; #define SHOT_SHELL 2180 #define SHOTSHELL_RATE 8 STATE s_ShotgunShellShrap[] = { - {SHOT_SHELL + 0, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[1]}, - {SHOT_SHELL + 1, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[2]}, - {SHOT_SHELL + 2, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[3]}, - {SHOT_SHELL + 3, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[4]}, - {SHOT_SHELL + 4, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[5]}, - {SHOT_SHELL + 5, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[6]}, - {SHOT_SHELL + 6, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[7]}, - {SHOT_SHELL + 7, SHOTSHELL_RATE, &AF(DoShrapJumpFall), &s_ShotgunShellShrap[0]}, + {SHOT_SHELL + 0, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[1]}, + {SHOT_SHELL + 1, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[2]}, + {SHOT_SHELL + 2, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[3]}, + {SHOT_SHELL + 3, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[4]}, + {SHOT_SHELL + 4, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[5]}, + {SHOT_SHELL + 5, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[6]}, + {SHOT_SHELL + 6, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[7]}, + {SHOT_SHELL + 7, SHOTSHELL_RATE, DoShrapJumpFall, &s_ShotgunShellShrap[0]}, }; STATE s_ShotgunShellShrapStill1[] = { - {SHOT_SHELL + 1, SHOTSHELL_RATE, nullptr, &s_ShotgunShellShrapStill1[0]} + {SHOT_SHELL + 1, SHOTSHELL_RATE, NullAnimator, &s_ShotgunShellShrapStill1[0]} }; STATE s_ShotgunShellShrapStill2[] = { - {SHOT_SHELL + 3, SHOTSHELL_RATE, nullptr, &s_ShotgunShellShrapStill2[0]} + {SHOT_SHELL + 3, SHOTSHELL_RATE, NullAnimator, &s_ShotgunShellShrapStill2[0]} }; STATE s_ShotgunShellShrapStill3[] = { - {SHOT_SHELL + 7, SHOTSHELL_RATE, nullptr, &s_ShotgunShellShrapStill3[0]} + {SHOT_SHELL + 7, SHOTSHELL_RATE, NullAnimator, &s_ShotgunShellShrapStill3[0]} }; #define GORE_FlameChunkA 839 @@ -2142,10 +2373,10 @@ STATE s_ShotgunShellShrapStill3[] = STATE s_GoreFlameChunkA[] = { - {GORE_FlameChunkA + 0, GORE_FlameChunkA_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkA[1]}, - {GORE_FlameChunkA + 1, GORE_FlameChunkA_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkA[2]}, - {GORE_FlameChunkA + 2, GORE_FlameChunkA_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkA[3]}, - {GORE_FlameChunkA + 3, GORE_FlameChunkA_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkA[0]}, + {GORE_FlameChunkA + 0, GORE_FlameChunkA_RATE, DoShrapJumpFall, &s_GoreFlameChunkA[1]}, + {GORE_FlameChunkA + 1, GORE_FlameChunkA_RATE, DoShrapJumpFall, &s_GoreFlameChunkA[2]}, + {GORE_FlameChunkA + 2, GORE_FlameChunkA_RATE, DoShrapJumpFall, &s_GoreFlameChunkA[3]}, + {GORE_FlameChunkA + 3, GORE_FlameChunkA_RATE, DoShrapJumpFall, &s_GoreFlameChunkA[0]}, }; #define GORE_FlameChunkB 843 @@ -2153,10 +2384,10 @@ STATE s_GoreFlameChunkA[] = STATE s_GoreFlameChunkB[] = { - {GORE_FlameChunkB + 0, GORE_FlameChunkB_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkB[1]}, - {GORE_FlameChunkB + 1, GORE_FlameChunkB_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkB[2]}, - {GORE_FlameChunkB + 2, GORE_FlameChunkB_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkB[3]}, - {GORE_FlameChunkB + 3, GORE_FlameChunkB_RATE, &AF(DoShrapJumpFall), &s_GoreFlameChunkB[0]}, + {GORE_FlameChunkB + 0, GORE_FlameChunkB_RATE, DoShrapJumpFall, &s_GoreFlameChunkB[1]}, + {GORE_FlameChunkB + 1, GORE_FlameChunkB_RATE, DoShrapJumpFall, &s_GoreFlameChunkB[2]}, + {GORE_FlameChunkB + 2, GORE_FlameChunkB_RATE, DoShrapJumpFall, &s_GoreFlameChunkB[3]}, + {GORE_FlameChunkB + 3, GORE_FlameChunkB_RATE, DoShrapJumpFall, &s_GoreFlameChunkB[0]}, }; ///////////////////////////////////////////////////////////////////// @@ -2170,10 +2401,10 @@ STATE s_GoreFlameChunkB[] = STATE s_CoinShrap[] = { - {COIN_SHRAP + 0, CoinShrap_RATE, &AF(DoShrapJumpFall), &s_CoinShrap[1]}, - {COIN_SHRAP + 1, CoinShrap_RATE, &AF(DoShrapJumpFall), &s_CoinShrap[2]}, - {COIN_SHRAP + 2, CoinShrap_RATE, &AF(DoShrapJumpFall), &s_CoinShrap[3]}, - {COIN_SHRAP + 3, CoinShrap_RATE, &AF(DoShrapJumpFall), &s_CoinShrap[0]}, + {COIN_SHRAP + 0, CoinShrap_RATE, DoShrapJumpFall, &s_CoinShrap[1]}, + {COIN_SHRAP + 1, CoinShrap_RATE, DoShrapJumpFall, &s_CoinShrap[2]}, + {COIN_SHRAP + 2, CoinShrap_RATE, DoShrapJumpFall, &s_CoinShrap[3]}, + {COIN_SHRAP + 3, CoinShrap_RATE, DoShrapJumpFall, &s_CoinShrap[0]}, }; #define MARBEL 5096 @@ -2181,7 +2412,7 @@ STATE s_CoinShrap[] = STATE s_Marbel[] = { - {MARBEL, Marbel_RATE, &AF(DoShrapJumpFall), &s_Marbel[0]}, + {MARBEL, Marbel_RATE, DoShrapJumpFall, &s_Marbel[0]}, }; // @@ -2193,14 +2424,14 @@ STATE s_Marbel[] = STATE s_GlassShrapA[] = { - {GLASS_SHRAP_A + 0, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[1]}, - {GLASS_SHRAP_A + 1, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[2]}, - {GLASS_SHRAP_A + 2, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[3]}, - {GLASS_SHRAP_A + 3, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[4]}, - {GLASS_SHRAP_A + 4, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[5]}, - {GLASS_SHRAP_A + 5, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[6]}, - {GLASS_SHRAP_A + 6, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[7]}, - {GLASS_SHRAP_A + 7, GlassShrapA_RATE, &AF(DoShrapJumpFall), &s_GlassShrapA[0]}, + {GLASS_SHRAP_A + 0, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[1]}, + {GLASS_SHRAP_A + 1, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[2]}, + {GLASS_SHRAP_A + 2, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[3]}, + {GLASS_SHRAP_A + 3, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[4]}, + {GLASS_SHRAP_A + 4, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[5]}, + {GLASS_SHRAP_A + 5, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[6]}, + {GLASS_SHRAP_A + 6, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[7]}, + {GLASS_SHRAP_A + 7, GlassShrapA_RATE, DoShrapJumpFall, &s_GlassShrapA[0]}, }; #define GLASS_SHRAP_B 3872 @@ -2208,14 +2439,14 @@ STATE s_GlassShrapA[] = STATE s_GlassShrapB[] = { - {GLASS_SHRAP_B + 0, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[1]}, - {GLASS_SHRAP_B + 1, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[2]}, - {GLASS_SHRAP_B + 2, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[3]}, - {GLASS_SHRAP_B + 3, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[4]}, - {GLASS_SHRAP_B + 4, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[5]}, - {GLASS_SHRAP_B + 5, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[6]}, - {GLASS_SHRAP_B + 6, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[7]}, - {GLASS_SHRAP_B + 7, GlassShrapB_RATE, &AF(DoShrapJumpFall), &s_GlassShrapB[0]}, + {GLASS_SHRAP_B + 0, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[1]}, + {GLASS_SHRAP_B + 1, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[2]}, + {GLASS_SHRAP_B + 2, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[3]}, + {GLASS_SHRAP_B + 3, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[4]}, + {GLASS_SHRAP_B + 4, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[5]}, + {GLASS_SHRAP_B + 5, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[6]}, + {GLASS_SHRAP_B + 6, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[7]}, + {GLASS_SHRAP_B + 7, GlassShrapB_RATE, DoShrapJumpFall, &s_GlassShrapB[0]}, }; #define GLASS_SHRAP_C 3880 @@ -2223,14 +2454,14 @@ STATE s_GlassShrapB[] = STATE s_GlassShrapC[] = { - {GLASS_SHRAP_C + 0, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[1]}, - {GLASS_SHRAP_C + 1, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[2]}, - {GLASS_SHRAP_C + 2, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[3]}, - {GLASS_SHRAP_C + 3, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[4]}, - {GLASS_SHRAP_C + 4, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[5]}, - {GLASS_SHRAP_C + 5, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[6]}, - {GLASS_SHRAP_C + 6, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[7]}, - {GLASS_SHRAP_C + 7, GlassShrapC_RATE, &AF(DoShrapJumpFall), &s_GlassShrapC[0]}, + {GLASS_SHRAP_C + 0, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[1]}, + {GLASS_SHRAP_C + 1, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[2]}, + {GLASS_SHRAP_C + 2, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[3]}, + {GLASS_SHRAP_C + 3, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[4]}, + {GLASS_SHRAP_C + 4, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[5]}, + {GLASS_SHRAP_C + 5, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[6]}, + {GLASS_SHRAP_C + 6, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[7]}, + {GLASS_SHRAP_C + 7, GlassShrapC_RATE, DoShrapJumpFall, &s_GlassShrapC[0]}, }; // @@ -2242,14 +2473,14 @@ STATE s_GlassShrapC[] = STATE s_WoodShrapA[] = { - {WOOD_SHRAP_A + 0, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[1]}, - {WOOD_SHRAP_A + 1, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[2]}, - {WOOD_SHRAP_A + 2, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[3]}, - {WOOD_SHRAP_A + 3, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[4]}, - {WOOD_SHRAP_A + 4, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[5]}, - {WOOD_SHRAP_A + 5, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[6]}, - {WOOD_SHRAP_A + 6, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[7]}, - {WOOD_SHRAP_A + 7, WoodShrapA_RATE, &AF(DoShrapJumpFall), &s_WoodShrapA[0]}, + {WOOD_SHRAP_A + 0, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[1]}, + {WOOD_SHRAP_A + 1, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[2]}, + {WOOD_SHRAP_A + 2, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[3]}, + {WOOD_SHRAP_A + 3, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[4]}, + {WOOD_SHRAP_A + 4, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[5]}, + {WOOD_SHRAP_A + 5, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[6]}, + {WOOD_SHRAP_A + 6, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[7]}, + {WOOD_SHRAP_A + 7, WoodShrapA_RATE, DoShrapJumpFall, &s_WoodShrapA[0]}, }; #define WOOD_SHRAP_B 3932 @@ -2257,14 +2488,14 @@ STATE s_WoodShrapA[] = STATE s_WoodShrapB[] = { - {WOOD_SHRAP_B + 0, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[1]}, - {WOOD_SHRAP_B + 1, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[2]}, - {WOOD_SHRAP_B + 2, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[3]}, - {WOOD_SHRAP_B + 3, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[4]}, - {WOOD_SHRAP_B + 4, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[5]}, - {WOOD_SHRAP_B + 5, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[6]}, - {WOOD_SHRAP_B + 6, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[7]}, - {WOOD_SHRAP_B + 7, WoodShrapB_RATE, &AF(DoShrapJumpFall), &s_WoodShrapB[0]}, + {WOOD_SHRAP_B + 0, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[1]}, + {WOOD_SHRAP_B + 1, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[2]}, + {WOOD_SHRAP_B + 2, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[3]}, + {WOOD_SHRAP_B + 3, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[4]}, + {WOOD_SHRAP_B + 4, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[5]}, + {WOOD_SHRAP_B + 5, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[6]}, + {WOOD_SHRAP_B + 6, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[7]}, + {WOOD_SHRAP_B + 7, WoodShrapB_RATE, DoShrapJumpFall, &s_WoodShrapB[0]}, }; #define WOOD_SHRAP_C 3941 @@ -2272,14 +2503,14 @@ STATE s_WoodShrapB[] = STATE s_WoodShrapC[] = { - {WOOD_SHRAP_C + 0, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[1]}, - {WOOD_SHRAP_C + 1, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[2]}, - {WOOD_SHRAP_C + 2, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[3]}, - {WOOD_SHRAP_C + 3, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[4]}, - {WOOD_SHRAP_C + 4, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[5]}, - {WOOD_SHRAP_C + 5, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[6]}, - {WOOD_SHRAP_C + 6, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[7]}, - {WOOD_SHRAP_C + 7, WoodShrapC_RATE, &AF(DoShrapJumpFall), &s_WoodShrapC[0]}, + {WOOD_SHRAP_C + 0, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[1]}, + {WOOD_SHRAP_C + 1, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[2]}, + {WOOD_SHRAP_C + 2, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[3]}, + {WOOD_SHRAP_C + 3, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[4]}, + {WOOD_SHRAP_C + 4, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[5]}, + {WOOD_SHRAP_C + 5, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[6]}, + {WOOD_SHRAP_C + 6, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[7]}, + {WOOD_SHRAP_C + 7, WoodShrapC_RATE, DoShrapJumpFall, &s_WoodShrapC[0]}, }; // @@ -2291,14 +2522,14 @@ STATE s_WoodShrapC[] = STATE s_StoneShrapA[] = { - {STONE_SHRAP_A + 0, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[1]}, - {STONE_SHRAP_A + 1, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[2]}, - {STONE_SHRAP_A + 2, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[3]}, - {STONE_SHRAP_A + 3, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[4]}, - {STONE_SHRAP_A + 4, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[5]}, - {STONE_SHRAP_A + 5, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[6]}, - {STONE_SHRAP_A + 6, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[7]}, - {STONE_SHRAP_A + 7, StoneShrapA_RATE, &AF(DoShrapJumpFall), &s_StoneShrapA[0]}, + {STONE_SHRAP_A + 0, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[1]}, + {STONE_SHRAP_A + 1, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[2]}, + {STONE_SHRAP_A + 2, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[3]}, + {STONE_SHRAP_A + 3, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[4]}, + {STONE_SHRAP_A + 4, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[5]}, + {STONE_SHRAP_A + 5, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[6]}, + {STONE_SHRAP_A + 6, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[7]}, + {STONE_SHRAP_A + 7, StoneShrapA_RATE, DoShrapJumpFall, &s_StoneShrapA[0]}, }; #define STONE_SHRAP_B 3848 @@ -2306,14 +2537,14 @@ STATE s_StoneShrapA[] = STATE s_StoneShrapB[] = { - {STONE_SHRAP_B + 0, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[1]}, - {STONE_SHRAP_B + 1, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[2]}, - {STONE_SHRAP_B + 2, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[3]}, - {STONE_SHRAP_B + 3, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[4]}, - {STONE_SHRAP_B + 4, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[5]}, - {STONE_SHRAP_B + 5, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[6]}, - {STONE_SHRAP_B + 6, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[7]}, - {STONE_SHRAP_B + 7, StoneShrapB_RATE, &AF(DoShrapJumpFall), &s_StoneShrapB[0]}, + {STONE_SHRAP_B + 0, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[1]}, + {STONE_SHRAP_B + 1, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[2]}, + {STONE_SHRAP_B + 2, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[3]}, + {STONE_SHRAP_B + 3, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[4]}, + {STONE_SHRAP_B + 4, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[5]}, + {STONE_SHRAP_B + 5, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[6]}, + {STONE_SHRAP_B + 6, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[7]}, + {STONE_SHRAP_B + 7, StoneShrapB_RATE, DoShrapJumpFall, &s_StoneShrapB[0]}, }; #define STONE_SHRAP_C 3856 @@ -2321,14 +2552,14 @@ STATE s_StoneShrapB[] = STATE s_StoneShrapC[] = { - {STONE_SHRAP_C + 0, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[1]}, - {STONE_SHRAP_C + 1, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[2]}, - {STONE_SHRAP_C + 2, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[3]}, - {STONE_SHRAP_C + 3, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[4]}, - {STONE_SHRAP_C + 4, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[5]}, - {STONE_SHRAP_C + 5, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[6]}, - {STONE_SHRAP_C + 6, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[7]}, - {STONE_SHRAP_C + 7, StoneShrapC_RATE, &AF(DoShrapJumpFall), &s_StoneShrapC[0]}, + {STONE_SHRAP_C + 0, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[1]}, + {STONE_SHRAP_C + 1, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[2]}, + {STONE_SHRAP_C + 2, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[3]}, + {STONE_SHRAP_C + 3, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[4]}, + {STONE_SHRAP_C + 4, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[5]}, + {STONE_SHRAP_C + 5, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[6]}, + {STONE_SHRAP_C + 6, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[7]}, + {STONE_SHRAP_C + 7, StoneShrapC_RATE, DoShrapJumpFall, &s_StoneShrapC[0]}, }; // @@ -2340,14 +2571,14 @@ STATE s_StoneShrapC[] = STATE s_MetalShrapA[] = { - {METAL_SHRAP_A + 0, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[1]}, - {METAL_SHRAP_A + 1, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[2]}, - {METAL_SHRAP_A + 2, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[3]}, - {METAL_SHRAP_A + 3, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[4]}, - {METAL_SHRAP_A + 4, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[5]}, - {METAL_SHRAP_A + 5, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[6]}, - {METAL_SHRAP_A + 6, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[7]}, - {METAL_SHRAP_A + 7, MetalShrapA_RATE, &AF(DoShrapJumpFall), &s_MetalShrapA[0]}, + {METAL_SHRAP_A + 0, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[1]}, + {METAL_SHRAP_A + 1, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[2]}, + {METAL_SHRAP_A + 2, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[3]}, + {METAL_SHRAP_A + 3, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[4]}, + {METAL_SHRAP_A + 4, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[5]}, + {METAL_SHRAP_A + 5, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[6]}, + {METAL_SHRAP_A + 6, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[7]}, + {METAL_SHRAP_A + 7, MetalShrapA_RATE, DoShrapJumpFall, &s_MetalShrapA[0]}, }; #define METAL_SHRAP_B 3896 @@ -2355,14 +2586,14 @@ STATE s_MetalShrapA[] = STATE s_MetalShrapB[] = { - {METAL_SHRAP_B + 0, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[1]}, - {METAL_SHRAP_B + 1, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[2]}, - {METAL_SHRAP_B + 2, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[3]}, - {METAL_SHRAP_B + 3, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[4]}, - {METAL_SHRAP_B + 4, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[5]}, - {METAL_SHRAP_B + 5, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[6]}, - {METAL_SHRAP_B + 6, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[7]}, - {METAL_SHRAP_B + 7, MetalShrapB_RATE, &AF(DoShrapJumpFall), &s_MetalShrapB[0]}, + {METAL_SHRAP_B + 0, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[1]}, + {METAL_SHRAP_B + 1, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[2]}, + {METAL_SHRAP_B + 2, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[3]}, + {METAL_SHRAP_B + 3, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[4]}, + {METAL_SHRAP_B + 4, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[5]}, + {METAL_SHRAP_B + 5, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[6]}, + {METAL_SHRAP_B + 6, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[7]}, + {METAL_SHRAP_B + 7, MetalShrapB_RATE, DoShrapJumpFall, &s_MetalShrapB[0]}, }; #define METAL_SHRAP_C 3904 @@ -2370,14 +2601,14 @@ STATE s_MetalShrapB[] = STATE s_MetalShrapC[] = { - {METAL_SHRAP_C + 0, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[1]}, - {METAL_SHRAP_C + 1, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[2]}, - {METAL_SHRAP_C + 2, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[3]}, - {METAL_SHRAP_C + 3, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[4]}, - {METAL_SHRAP_C + 4, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[5]}, - {METAL_SHRAP_C + 5, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[6]}, - {METAL_SHRAP_C + 6, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[7]}, - {METAL_SHRAP_C + 7, MetalShrapC_RATE, &AF(DoShrapJumpFall), &s_MetalShrapC[0]}, + {METAL_SHRAP_C + 0, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[1]}, + {METAL_SHRAP_C + 1, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[2]}, + {METAL_SHRAP_C + 2, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[3]}, + {METAL_SHRAP_C + 3, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[4]}, + {METAL_SHRAP_C + 4, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[5]}, + {METAL_SHRAP_C + 5, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[6]}, + {METAL_SHRAP_C + 6, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[7]}, + {METAL_SHRAP_C + 7, MetalShrapC_RATE, DoShrapJumpFall, &s_MetalShrapC[0]}, }; // @@ -2389,10 +2620,10 @@ STATE s_MetalShrapC[] = STATE s_PaperShrapA[] = { - {PAPER_SHRAP_A + 0, PaperShrapA_RATE, &AF(DoShrapJumpFall), &s_PaperShrapA[1]}, - {PAPER_SHRAP_A + 1, PaperShrapA_RATE, &AF(DoShrapJumpFall), &s_PaperShrapA[2]}, - {PAPER_SHRAP_A + 2, PaperShrapA_RATE, &AF(DoShrapJumpFall), &s_PaperShrapA[3]}, - {PAPER_SHRAP_A + 3, PaperShrapA_RATE, &AF(DoShrapJumpFall), &s_PaperShrapA[0]}, + {PAPER_SHRAP_A + 0, PaperShrapA_RATE, DoShrapJumpFall, &s_PaperShrapA[1]}, + {PAPER_SHRAP_A + 1, PaperShrapA_RATE, DoShrapJumpFall, &s_PaperShrapA[2]}, + {PAPER_SHRAP_A + 2, PaperShrapA_RATE, DoShrapJumpFall, &s_PaperShrapA[3]}, + {PAPER_SHRAP_A + 3, PaperShrapA_RATE, DoShrapJumpFall, &s_PaperShrapA[0]}, }; #define PAPER_SHRAP_B 3932 @@ -2400,10 +2631,10 @@ STATE s_PaperShrapA[] = STATE s_PaperShrapB[] = { - {PAPER_SHRAP_B + 0, PaperShrapB_RATE, &AF(DoShrapJumpFall), &s_PaperShrapB[1]}, - {PAPER_SHRAP_B + 1, PaperShrapB_RATE, &AF(DoShrapJumpFall), &s_PaperShrapB[2]}, - {PAPER_SHRAP_B + 2, PaperShrapB_RATE, &AF(DoShrapJumpFall), &s_PaperShrapB[3]}, - {PAPER_SHRAP_B + 3, PaperShrapB_RATE, &AF(DoShrapJumpFall), &s_PaperShrapB[0]}, + {PAPER_SHRAP_B + 0, PaperShrapB_RATE, DoShrapJumpFall, &s_PaperShrapB[1]}, + {PAPER_SHRAP_B + 1, PaperShrapB_RATE, DoShrapJumpFall, &s_PaperShrapB[2]}, + {PAPER_SHRAP_B + 2, PaperShrapB_RATE, DoShrapJumpFall, &s_PaperShrapB[3]}, + {PAPER_SHRAP_B + 3, PaperShrapB_RATE, DoShrapJumpFall, &s_PaperShrapB[0]}, }; #define PAPER_SHRAP_C 3941 @@ -2411,10 +2642,10 @@ STATE s_PaperShrapB[] = STATE s_PaperShrapC[] = { - {PAPER_SHRAP_C + 0, PaperShrapC_RATE, &AF(DoShrapJumpFall), &s_PaperShrapC[1]}, - {PAPER_SHRAP_C + 1, PaperShrapC_RATE, &AF(DoShrapJumpFall), &s_PaperShrapC[2]}, - {PAPER_SHRAP_C + 2, PaperShrapC_RATE, &AF(DoShrapJumpFall), &s_PaperShrapC[3]}, - {PAPER_SHRAP_C + 3, PaperShrapC_RATE, &AF(DoShrapJumpFall), &s_PaperShrapC[0]}, + {PAPER_SHRAP_C + 0, PaperShrapC_RATE, DoShrapJumpFall, &s_PaperShrapC[1]}, + {PAPER_SHRAP_C + 1, PaperShrapC_RATE, DoShrapJumpFall, &s_PaperShrapC[2]}, + {PAPER_SHRAP_C + 2, PaperShrapC_RATE, DoShrapJumpFall, &s_PaperShrapC[3]}, + {PAPER_SHRAP_C + 3, PaperShrapC_RATE, DoShrapJumpFall, &s_PaperShrapC[0]}, }; bool MissileHitMatch(DSWActor* weapActor, int WeaponNum, DSWActor* hitActor) @@ -2923,6 +3154,14 @@ int SpawnShrap(DSWActor* parentActor, DSWActor* secondaryActor, int means, BREAK }; #define WALL_FLOOR_SHRAP 4097 + ANIMATOR DoShrapWallFloor; +#if 0 + static SHRAP SectorExpShrap[] = + { + {nullptr, WALL_FLOOR_SHRAP, 1, Z_BOT, 550, 800, 200, 400, true, 512}, + {nullptr,0,0,0,0,0,0,0,0,0}, + }; +#endif double hZ[3]; DAngle dangl = nullAngle; @@ -3314,7 +3553,7 @@ int SpawnShrap(DSWActor* parentActor, DSWActor* secondaryActor, int means, BREAK { extern STATE* sg_PlayerHeadHurl[]; - if (parentActor->user.__legacyState.Rot == sg_PlayerHeadHurl) + if (parentActor->user.Rot == sg_PlayerHeadHurl) { p = PlayerHeadHurl1; } @@ -4473,7 +4712,7 @@ int SetSuicide(DSWActor* actor) if (actor->hasU()) { actor->user.Flags |= (SPR_SUICIDE); - actor->user.__legacyState.RotNum = 0; + actor->user.RotNum = 0; } ChangeState(actor, s_Suicide); return 0; @@ -4569,7 +4808,7 @@ int ActorChooseDeath(DSWActor* actor, DSWActor* weapActor) UpdateSinglePlayKills(actor); - if (actor->user.__legacyState.Attrib) + if (actor->user.Attrib) PlaySpriteSound(actor,attr_die,v3df_follow); switch (actor->user.ID) @@ -4857,7 +5096,7 @@ int ActorHealth(DSWActor* actor, short amt) } } - if (actor->user.__legacyState.Attrib && RANDOM_P2(1024) > 850) + if (actor->user.Attrib && RANDOM_P2(1024) > 850) PlaySpriteSound(actor,attr_pain,v3df_follow|v3df_dontpan); // keep track of the last damage @@ -4865,7 +5104,7 @@ int ActorHealth(DSWActor* actor, short amt) actor->user.LastDamage = -amt; // Do alternate Death2 if it exists - if (actor->user.__legacyState.ActorActionSet && actor->user.__legacyState.ActorActionSet->Death2) // JBF: added null check + if (actor->user.ActorActionSet && actor->user.ActorActionSet->Death2) // JBF: added null check { #define DEATH2_HEALTH_VALUE 15 @@ -4959,7 +5198,7 @@ int SopCheckKill(SECTOR_OBJECT* sop) killed = TestKillSectorObject(sop); if (!killed) { - VehicleSetSmoke(sop, AF(SpawnVehicleSmoke)); + VehicleSetSmoke(sop, SpawnVehicleSmoke); sop->flags |= (SOBJ_BROKEN); } } @@ -4993,11 +5232,11 @@ int ActorPain(DSWActor* actor) if (!(actor->user.Flags & (SPR_JUMPING | SPR_FALLING))) { - if (actor->user.__legacyState.ActorActionSet && actor->user.__legacyState.ActorActionSet->Pain) + if (actor->user.ActorActionSet && actor->user.ActorActionSet->Pain) { ActorLeaveTrack(actor); actor->user.WaitTics = 60; - actor->setStateGroup(NAME_Pain); + NewStateGroup(actor, actor->user.ActorActionSet->Pain); return true; } } @@ -5015,10 +5254,10 @@ int ActorPainPlasma(DSWActor* actor) { if (!(actor->user.Flags & (SPR_JUMPING | SPR_FALLING | SPR_ELECTRO_TOLERANT))) { - if (actor->user.__legacyState.ActorActionSet && actor->user.__legacyState.ActorActionSet->Pain) + if (actor->user.ActorActionSet && actor->user.ActorActionSet->Pain) { actor->user.WaitTics = PLASMA_FOUNTAIN_TIME; - actor->setStateGroup(NAME_Pain); + NewStateGroup(actor, actor->user.ActorActionSet->Pain); return true; } else @@ -5408,7 +5647,7 @@ int DoDamage(DSWActor* actor, DSWActor* weapActor) if ((weapActor->user.Flags & SPR_SUICIDE)) return 0; - if (actor->user.__legacyState.Attrib && RANDOM_P2(1024) > 850) + if (actor->user.Attrib && RANDOM_P2(1024) > 850) PlaySpriteSound(actor,attr_pain,v3df_follow); if (actor->user.Flags & (SPR_DEAD)) @@ -9200,7 +9439,7 @@ int DoRail(DSWActor* actor) actorNew->vel.X += RandomRangeF(140 / 16.) - RandomRangeF(140 / 16.); actorNew->vel.Z += RandomRangeF(140 / 256.) - RandomRangeF(140 / 256.); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, sg_RailPuff); actorNew->spr.shade = -40; @@ -9361,7 +9600,7 @@ int SpawnExtraMicroMini(DSWActor* actor) actorNew->spr.shade = actor->spr.shade; actorNew->copy_clipdist(actor); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_MicroMini[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; actorNew->user.Radius = actor->user.Radius; @@ -11103,9 +11342,9 @@ int DoMirv(DSWActor* actor) auto actorNew = SpawnActor(STAT_MISSILE, MIRV_METEOR, &sg_MirvMeteor[0][0], actor->sector(), actor->spr.pos, actor->spr.Angles.Yaw + angs[i], 50); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_MirvMeteor[0]); - actorNew->user.__legacyState.StateEnd = s_MirvMeteorExp; + actorNew->user.StateEnd = s_MirvMeteorExp; SetOwner(actor, actorNew); actorNew->spr.shade = -40; @@ -11143,7 +11382,7 @@ int DoMirv(DSWActor* actor) // //--------------------------------------------------------------------------- -bool MissileSetPos(DSWActor* actor, VMFunction* DoWeapon, int dist) +bool MissileSetPos(DSWActor* actor, ANIMATOR* DoWeapon, int dist) { bool retval = false; @@ -11160,7 +11399,7 @@ bool MissileSetPos(DSWActor* actor, VMFunction* DoWeapon, int dist) UpdateChange(actor); actor->user.Flags |= (SPR_SET_POS_DONT_KILL); - if (actor->callFunction(DoWeapon)) + if ((*DoWeapon)(actor)) retval = true; actor->user.Flags &= ~(SPR_SET_POS_DONT_KILL); @@ -11181,7 +11420,7 @@ bool MissileSetPos(DSWActor* actor, VMFunction* DoWeapon, int dist) // //--------------------------------------------------------------------------- -bool TestMissileSetPos(DSWActor* actor, VMFunction* DoWeapon, int dist, double zvel) +bool TestMissileSetPos(DSWActor* actor, ANIMATOR* DoWeapon, int dist, double zvel) { bool retval = false; @@ -11199,7 +11438,7 @@ bool TestMissileSetPos(DSWActor* actor, VMFunction* DoWeapon, int dist, double z actor->user.change.Z = zvel; actor->user.Flags |= (SPR_SET_POS_DONT_KILL); - if (actor->callFunction(DoWeapon)) + if ((*DoWeapon)(actor)) retval = true; actor->user.Flags &= ~(SPR_SET_POS_DONT_KILL); @@ -11383,7 +11622,7 @@ int DoSerpRing(DSWActor* actor) auto own = GetOwner(actor); // if Owner does not exist or he's dead on the floor // kill off all of his skull children - if (own == nullptr || own->user.__legacyState.RotNum < 5) + if (own == nullptr || own->user.RotNum < 5) { UpdateSinglePlayKills(actor); DoSkullBeginDeath(actor); @@ -11538,7 +11777,7 @@ int InitLavaThrow(DSWActor* actor) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoLavaBoulder), 1200); + MissileSetPos(actorNew, DoLavaBoulder, 1200); // find the distance to the target (player) SetZVelFromTarget(actorNew, actor, true); @@ -11667,8 +11906,8 @@ int InitSerpRing(DSWActor* actor) actorNew->user.TargetDist = SERP_RING_DIST; actorNew->user.Counter2 = 0; - actorNew->user.__legacyState.StateEnd = s_SkullExplode; - actorNew->user.__legacyState.Rot = sg_SkullRing; + actorNew->user.StateEnd = s_SkullExplode; + actorNew->user.Rot = sg_SkullRing; // defaults do change the statnum EnemyDefaults(actorNew, nullptr, nullptr); @@ -11752,7 +11991,7 @@ void InitSpellNapalm(DSWPlayer* pp) UpdateChange(actor); - if (MissileSetPos(actor, AF(DoNapalm), mp[i].dist_out)) + if (MissileSetPos(actor, DoNapalm, mp[i].dist_out)) { plActor->clipdist = oclipdist; KillActor(actor); @@ -11830,7 +12069,7 @@ int InitEnemyNapalm(DSWActor* actor) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoNapalm), mp[i].dist_out); + MissileSetPos(actorNew, DoNapalm, mp[i].dist_out); actor->clipdist = oclipdist; @@ -11875,7 +12114,7 @@ int InitSpellMirv(DSWPlayer* pp) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoMirv), 600); + MissileSetPos(actorNew, DoMirv, 600); plActor->clipdist = oclipdist; actorNew->user.Counter = 0; @@ -11911,7 +12150,7 @@ int InitEnemyMirv(DSWActor* actor) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoMirv), 600); + MissileSetPos(actorNew, DoMirv, 600); // find the distance to the target (player) SetZVelFromTarget(actorNew, actor, true); @@ -12341,7 +12580,7 @@ int InitSumoNapalm(DSWActor* actor) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoNapalm), mp[i].dist_out); + MissileSetPos(actorNew, DoNapalm, mp[i].dist_out); actor->clipdist = oclipdist; @@ -12384,10 +12623,10 @@ int InitSumoSkull(DSWActor* actor) actor->user.Flags ^= SPR_BOUNCE; actorNew->user.Flags |= (actor->user.Flags & (SPR_BOUNCE)); - actorNew->user.__legacyState.StateEnd = s_SkullExplode; - actorNew->user.__legacyState.Rot = sg_SkullWait; + actorNew->user.StateEnd = s_SkullExplode; + actorNew->user.Rot = sg_SkullWait; - actorNew->user.__legacyState.Attrib = &SkullAttrib; + actorNew->user.Attrib = &SkullAttrib; DoActorSetSpeed(actor, NORM_SPEED); actorNew->user.Counter = RANDOM_P2(2048); actorNew->user.pos.Z = actorNew->spr.pos.Z; @@ -12749,7 +12988,7 @@ int InitStar(DSWPlayer* pp) // the horizon was tilted. Never figured out why. actorNew->vel.Z = zvel * 0.5; double act2zvel = actorNew->vel.Z; - if (MissileSetPos(actorNew, AF(DoStar), 1000)) + if (MissileSetPos(actorNew, DoStar, 1000)) { KillActor(actorNew); return 0; @@ -12789,7 +13028,7 @@ int InitStar(DSWPlayer* pp) actorNew2->vel.Z = act2zvel; - if (MissileSetPos(actorNew2, AF(DoStar), 1000)) + if (MissileSetPos(actorNew2, DoStar, 1000)) { KillActor(actorNew2); return 0; @@ -12849,7 +13088,7 @@ void InitHeartAttack(DSWPlayer* pp) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoBloodWorm), mp[i].dist_out); + MissileSetPos(actorNew, DoBloodWorm, mp[i].dist_out); plActor->clipdist = oclipdist; actorNew->user.Counter = 0; @@ -13162,25 +13401,25 @@ int InitLaser(DSWPlayer* pp) // the slower the missile travels the less of a zvel it needs // move it 1200 dist in increments - works better - if (MissileSetPos(actorNew, AF(DoLaserStart), 300)) + if (MissileSetPos(actorNew, DoLaserStart, 300)) { actor->clipdist = oclipdist; KillActor(actorNew); return 0; } - if (MissileSetPos(actorNew, AF(DoLaserStart), 300)) + if (MissileSetPos(actorNew, DoLaserStart, 300)) { actor->clipdist = oclipdist; KillActor(actorNew); return 0; } - if (MissileSetPos(actorNew, AF(DoLaserStart), 300)) + if (MissileSetPos(actorNew, DoLaserStart, 300)) { actor->clipdist = oclipdist; KillActor(actorNew); return 0; } - if (MissileSetPos(actorNew, AF(DoLaserStart), 300)) + if (MissileSetPos(actorNew, DoLaserStart, 300)) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -13236,7 +13475,7 @@ int InitRail(DSWPlayer* pp) actorNew->spr.shade = -15; setFreeAimVelocity(actorNew->vel.X, zvel, pp->getPitchWithView(), (HORIZ_MULT + 17) * 0.5); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rail[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; @@ -13259,7 +13498,7 @@ int InitRail(DSWPlayer* pp) if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew)) actorNew->user.Flags |= (SPR_UNDERWATER); - if (TestMissileSetPos(actorNew, AF(DoRailStart), 1200, zvel)) + if (TestMissileSetPos(actorNew, DoRailStart, 1200, zvel)) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -13309,7 +13548,7 @@ int InitZillaRail(DSWActor* actor) actorNew->spr.shade = -15; double zvel = (100 * (HORIZ_MULT+17)) / 256.; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rail[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; @@ -13332,7 +13571,7 @@ int InitZillaRail(DSWActor* actor) if (SpriteInUnderwaterArea(actorNew)) actorNew->user.Flags |= (SPR_UNDERWATER); - if (TestMissileSetPos(actorNew, AF(DoRailStart), 1200, zvel)) + if (TestMissileSetPos(actorNew, DoRailStart, 1200, zvel)) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -13402,7 +13641,7 @@ int InitRocket(DSWPlayer* pp) actorNew->clipdist = 4; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rocket[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; @@ -13440,7 +13679,7 @@ int InitRocket(DSWPlayer* pp) // cancel smoke trail actorNew->user.Counter = 1; - if (TestMissileSetPos(actorNew, AF(DoRocket), 1200, zvel)) + if (TestMissileSetPos(actorNew, DoRocket, 1200, zvel)) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -13509,7 +13748,7 @@ int InitBunnyRocket(DSWPlayer* pp) actorNew->clipdist = 4; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_BunnyRocket[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; @@ -13544,7 +13783,7 @@ int InitBunnyRocket(DSWPlayer* pp) // cancel smoke trail actorNew->user.Counter = 1; - if (TestMissileSetPos(actorNew, AF(DoRocket), 1200, zvel)) + if (TestMissileSetPos(actorNew, DoRocket, 1200, zvel)) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -13613,7 +13852,7 @@ int InitNuke(DSWPlayer* pp) // Set to red palette actorNew->spr.pal = actorNew->user.spal = 19; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rocket[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; @@ -13637,7 +13876,7 @@ int InitNuke(DSWPlayer* pp) // cancel smoke trail actorNew->user.Counter = 1; - if (TestMissileSetPos(actorNew, AF(DoRocket), 1200, zvel)) + if (TestMissileSetPos(actorNew, DoRocket, 1200, zvel)) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -13695,7 +13934,7 @@ int InitEnemyNuke(DSWActor* actor) // Set to red palette actorNew->spr.pal = actorNew->user.spal = 19; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rocket[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; @@ -13714,7 +13953,7 @@ int InitEnemyNuke(DSWActor* actor) // cancel smoke trail actorNew->user.Counter = 1; - if (TestMissileSetPos(actorNew, AF(DoRocket), 1200, zvel)) + if (TestMissileSetPos(actorNew, DoRocket, 1200, zvel)) { KillActor(actorNew); return 0; @@ -13797,7 +14036,7 @@ int InitMicro(DSWPlayer* pp) // randomize zvelocity actorNew->vel.Z += RandomRangeF(8) - 5; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Micro[0]); actorNew->user.WeaponNum = actor->user.WeaponNum; @@ -13825,7 +14064,7 @@ int InitMicro(DSWPlayer* pp) // cancel smoke trail actorNew->user.Counter = 1; - if (MissileSetPos(actorNew, AF(DoMicro), 700)) + if (MissileSetPos(actorNew, DoMicro, 700)) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -14203,9 +14442,9 @@ int InitSerpSpell(DSWActor* actor) actorNew->spr.pos.Z = ActorZOfTop(actor); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_SerpMeteor[0]); - actorNew->user.__legacyState.StateEnd = s_MirvMeteorExp; + actorNew->user.StateEnd = s_MirvMeteorExp; SetOwner(actor, actorNew); actorNew->spr.shade = -40; @@ -14234,7 +14473,7 @@ int InitSerpSpell(DSWActor* actor) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoMirvMissile), 400); + MissileSetPos(actorNew, DoMirvMissile, 400); actor->clipdist = oclipdist; if (actor->user.Flags & (SPR_UNDERWATER)) @@ -14306,9 +14545,9 @@ int InitSerpMonstSpell(DSWActor* actor) actorNew->user.spal = actorNew->spr.pal = 25; // Bright Red actorNew->spr.pos.Z = ActorZOfTop(actor); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_SerpMeteor[0]); - actorNew->user.__legacyState.StateEnd = s_TeleportEffect2; + actorNew->user.StateEnd = s_TeleportEffect2; SetOwner(actor, actorNew); actorNew->spr.shade = -40; @@ -14336,7 +14575,7 @@ int InitSerpMonstSpell(DSWActor* actor) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoMirvMissile), 400); + MissileSetPos(actorNew, DoMirvMissile, 400); actor->clipdist = oclipdist; if (actor->user.Flags & (SPR_UNDERWATER)) @@ -14395,7 +14634,7 @@ int InitEnemyRocket(DSWActor* actor) actorNew->spr.Angles.Yaw = actor->spr.Angles.Yaw; actorNew->clipdist = 4; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rocket[0]); actorNew->user.Radius = 200; actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER); @@ -14408,7 +14647,7 @@ int InitEnemyRocket(DSWActor* actor) actorNew->spr.pal = actorNew->user.spal = 20; // Yellow } - MissileSetPos(actorNew, AF(DoBoltThinMan), 400); + MissileSetPos(actorNew, DoBoltThinMan, 400); // find the distance to the target (player) SetZVelFromTarget(actorNew, actor, true); @@ -14467,7 +14706,7 @@ int InitEnemyRail(DSWActor* actor) actorNew->spr.shade = -15; actorNew->vel.Z = 0; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rail[0]); actorNew->user.Radius = 200; @@ -14481,7 +14720,7 @@ int InitEnemyRail(DSWActor* actor) UpdateChange(actorNew); - if (TestMissileSetPos(actorNew, AF(DoRailStart), 600, actorNew->vel.Z)) + if (TestMissileSetPos(actorNew, DoRailStart, 600, actorNew->vel.Z)) { KillActor(actorNew); return 0; @@ -14533,7 +14772,7 @@ int InitZillaRocket(DSWActor* actor) actorNew->spr.Angles.Yaw = actor->spr.Angles.Yaw; actorNew->clipdist = 4; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rocket[0]); actorNew->user.Radius = 200; actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER); @@ -14556,7 +14795,7 @@ int InitZillaRocket(DSWActor* actor) actorNew->spr.Angles.Yaw -= mp[i].ang; } - MissileSetPos(actorNew, AF(DoBoltThinMan), mp[i].dist_out); + MissileSetPos(actorNew, DoBoltThinMan, mp[i].dist_out); // find the distance to the target (player) SetZVelFromTarget(actorNew, actor, true); @@ -14591,7 +14830,7 @@ int InitEnemyStar(DSWActor* actor) UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoStar), 400); + MissileSetPos(actorNew, DoStar, 400); // find the distance to the target (player) SetZVelFromTarget(actorNew, actor, true); @@ -14624,14 +14863,14 @@ int InitEnemyCrossbow(DSWActor* actor) actorNew->spr.Angles.Yaw = actor->spr.Angles.Yaw; actorNew->clipdist = 4; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_CrossBolt[0]); UpdateChange(actorNew); actorNew->user.Flags |= (SPR_XFLIP_TOGGLE); - MissileSetPos(actorNew, AF(DoStar), 400); + MissileSetPos(actorNew, DoStar, 400); // find the distance to the target (player) SetZVelFromTarget(actorNew, actor, true); @@ -14671,7 +14910,7 @@ int InitSkelSpell(DSWActor* actor) // find the distance to the target (player) SetZVelFromTarget(actorNew, actor, false, ActorSizeZ(actor) * 0.5); UpdateChange(actorNew); - MissileSetPos(actorNew, AF(DoElectro), 400); + MissileSetPos(actorNew, DoElectro, 400); return 0; } @@ -14900,7 +15139,7 @@ void InitBoltTrap(DSWActor* actor) actorNew->vel.Z = 0; actorNew->spr.cstat |= (CSTAT_SPRITE_YCENTER); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rocket[0]); actorNew->user.Radius = 200; @@ -14924,7 +15163,7 @@ void InitSpearTrap(DSWActor* actor) actorNew->spr.shade = -25; actorNew->clipdist = 4; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_CrossBolt[0]); UpdateChange(actorNew); @@ -15000,7 +15239,7 @@ int InitTracerUzi(DSWPlayer* pp) HelpMissileLateral(actorNew, lat_dist[0]); actorNew->spr.Angles.Yaw -= DAngle90; - if (MissileSetPos(actorNew, AF(DoTracerStart), 800)) + if (MissileSetPos(actorNew, DoTracerStart, 800)) { plActor->clipdist = oclipdist; KillActor(actorNew); @@ -15516,7 +15755,7 @@ int InitTurretMicro(DSWActor* actor, DSWPlayer* pp) actorNew->clipdist = 4; - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Micro[0]); actorNew->user.WeaponNum = plActor->user.WeaponNum; @@ -15659,7 +15898,7 @@ int InitTurretRail(DSWActor* actor, DSWPlayer* pp) actorNew->spr.shade = -15; setFreeAimVelocity(actorNew->vel.X, actorNew->vel.Z, pp->getPitchWithView(), HORIZ_MULTF); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Rail[0]); actorNew->user.Radius = 200; @@ -16106,7 +16345,7 @@ int InitTurretMgun(SECTOR_OBJECT* sop) double daz = npos.Z; // if its not operated by a player - if (sop->AnimType == SOType_AutoTurret) + if (sop->Animator) { // only auto aim for Z daang = DAngle90; @@ -16422,7 +16661,7 @@ int InitGrenade(DSWPlayer* pp) actorNew->vel.Z *= 0.75; } - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Grenade[0]); actorNew->user.Flags |= (SPR_XFLIP_TOGGLE); @@ -16453,7 +16692,7 @@ int InitGrenade(DSWPlayer* pp) // don't do smoke for this movement actorNew->user.Flags |= (SPR_BOUNCE); - MissileSetPos(actorNew, AF(DoGrenade), 1000); + MissileSetPos(actorNew, DoGrenade, 1000); actorNew->user.Flags &= ~(SPR_BOUNCE); actor->clipdist = oclipdist; @@ -16493,7 +16732,7 @@ int InitSpriteGrenade(DSWActor* actor) auto actorNew = SpawnActor(STAT_MISSILE, GRENADE, &s_Grenade[0][0], actor->sector(), actor->spr.pos.plusZ(-40), actor->spr.Angles.Yaw, GRENADE_VELOCITY); - actorNew->user.__legacyState.RotNum = 5; + actorNew->user.RotNum = 5; NewStateGroup(actorNew, &sg_Grenade[0]); actorNew->user.Flags |= (SPR_XFLIP_TOGGLE); @@ -16524,7 +16763,7 @@ int InitSpriteGrenade(DSWActor* actor) // don't do smoke for this movement actorNew->user.Flags |= (SPR_BOUNCE); - MissileSetPos(actorNew, AF(DoGrenade), 400); + MissileSetPos(actorNew, DoGrenade, 400); actorNew->user.Flags &= ~(SPR_BOUNCE); return 0; @@ -16571,7 +16810,7 @@ int InitMine(DSWPlayer* pp) if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew)) actorNew->user.Flags |= (SPR_UNDERWATER); - MissileSetPos(actorNew, AF(DoMine), 800); + MissileSetPos(actorNew, DoMine, 800); UpdateChange(actorNew, 0.5); @@ -16620,9 +16859,9 @@ int InitEnemyMine(DSWActor* actor) if (SpriteInUnderwaterArea(actorNew)) actorNew->user.Flags |= (SPR_UNDERWATER); - MissileSetPos(actorNew, AF(DoMine), 300); + MissileSetPos(actorNew, DoMine, 300); actorNew->spr.Angles.Yaw -= DAngle90; - MissileSetPos(actorNew, AF(DoMine), 300); + MissileSetPos(actorNew, DoMine, 300); actorNew->spr.Angles.Yaw += DAngle90; actorNew->user.change. Z = -5000 / 256.; @@ -16707,7 +16946,7 @@ int InitFireball(DSWPlayer* pp) if (pp->Flags & (PF_DIVING) || SpriteInUnderwaterArea(actorNew)) actorNew->user.Flags |= (SPR_UNDERWATER); - if (TestMissileSetPos(actorNew, AF(DoFireball), 1200, zvel * (1375. / 2048.))) + if (TestMissileSetPos(actorNew, DoFireball, 1200, zvel * (1375. / 2048.))) { actor->clipdist = oclipdist; KillActor(actorNew); @@ -16774,7 +17013,7 @@ int InitEnemyFireball(DSWActor* actor) actorNew->user.change.XY() = change; - MissileSetPos(actorNew, AF(DoFireball), 700); + MissileSetPos(actorNew, DoFireball, 700); if (i == 0) { @@ -17609,11 +17848,11 @@ void QueueHole(sectortype* hit_sect, walltype* hit_wall, const DVector3& pos) //--------------------------------------------------------------------------- enum { FLOORBLOOD_RATE = 30 }; - +ANIMATOR DoFloorBlood; STATE s_FloorBlood1[] = { - {FLOORBLOOD1, SF_QUICK_CALL, &AF(DoFloorBlood), &s_FloorBlood1[1]}, - {FLOORBLOOD1, FLOORBLOOD_RATE, nullptr, &s_FloorBlood1[0]}, + {FLOORBLOOD1, SF_QUICK_CALL, DoFloorBlood, &s_FloorBlood1[1]}, + {FLOORBLOOD1, FLOORBLOOD_RATE, NullAnimator, &s_FloorBlood1[0]}, }; //--------------------------------------------------------------------------- @@ -17689,17 +17928,18 @@ enum FOOTPRINT3 = 2492, FOOTPRINT_RATE = 30, }; +ANIMATOR DoFootPrint; STATE s_FootPrint1[] = { - {FOOTPRINT1, FOOTPRINT_RATE, nullptr, &s_FootPrint1[0]}, + {FOOTPRINT1, FOOTPRINT_RATE, NullAnimator, &s_FootPrint1[0]}, }; STATE s_FootPrint2[] = { - {FOOTPRINT2, FOOTPRINT_RATE, nullptr, &s_FootPrint2[0]}, + {FOOTPRINT2, FOOTPRINT_RATE, NullAnimator, &s_FootPrint2[0]}, }; STATE s_FootPrint3[] = { - {FOOTPRINT3, FOOTPRINT_RATE, nullptr, &s_FootPrint3[0]}, + {FOOTPRINT3, FOOTPRINT_RATE, NullAnimator, &s_FootPrint3[0]}, }; //--------------------------------------------------------------------------- @@ -17816,25 +18056,26 @@ enum WALLBLOOD4 = 2503, WALLBLOOD_RATE = 1, }; +ANIMATOR DoWallBlood; STATE s_WallBlood1[] = { - {WALLBLOOD1, SF_QUICK_CALL, &AF(DoWallBlood), &s_WallBlood1[1]}, - {WALLBLOOD1, WALLBLOOD_RATE, nullptr, &s_WallBlood1[0]}, + {WALLBLOOD1, SF_QUICK_CALL, DoWallBlood, &s_WallBlood1[1]}, + {WALLBLOOD1, WALLBLOOD_RATE, NullAnimator, &s_WallBlood1[0]}, }; STATE s_WallBlood2[] = { - {WALLBLOOD2, SF_QUICK_CALL, &AF(DoWallBlood), &s_WallBlood2[1]}, - {WALLBLOOD2, WALLBLOOD_RATE, nullptr, &s_WallBlood2[0]}, + {WALLBLOOD2, SF_QUICK_CALL, DoWallBlood, &s_WallBlood2[1]}, + {WALLBLOOD2, WALLBLOOD_RATE, NullAnimator, &s_WallBlood2[0]}, }; STATE s_WallBlood3[] = { - {WALLBLOOD3, SF_QUICK_CALL, &AF(DoWallBlood), &s_WallBlood3[1]}, - {WALLBLOOD3, WALLBLOOD_RATE, nullptr, &s_WallBlood3[0]}, + {WALLBLOOD3, SF_QUICK_CALL, DoWallBlood, &s_WallBlood3[1]}, + {WALLBLOOD3, WALLBLOOD_RATE, NullAnimator, &s_WallBlood3[0]}, }; STATE s_WallBlood4[] = { - {WALLBLOOD4, SF_QUICK_CALL, &AF(DoWallBlood), &s_WallBlood4[1]}, - {WALLBLOOD4, WALLBLOOD_RATE, nullptr, &s_WallBlood4[0]}, + {WALLBLOOD4, SF_QUICK_CALL, DoWallBlood, &s_WallBlood4[1]}, + {WALLBLOOD4, WALLBLOOD_RATE, NullAnimator, &s_WallBlood4[0]}, }; @@ -18552,6 +18793,133 @@ void QueueLoWangs(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_weapon_code[] = +{ + SAVE_CODE(SpawnShrapX), + SAVE_CODE(DoLavaErupt), + SAVE_CODE(DoVomit), + SAVE_CODE(DoVomitSplash), + SAVE_CODE(DoFastShrapJumpFall), + SAVE_CODE(DoTracerShrap), + SAVE_CODE(DoShrapJumpFall), + SAVE_CODE(DoShrapDamage), + SAVE_CODE(DoUziSmoke), + SAVE_CODE(DoShotgunSmoke), + SAVE_CODE(DoMineSpark), + SAVE_CODE(DoFireballFlames), + SAVE_CODE(DoBreakFlames), + SAVE_CODE(DoActorScale), + SAVE_CODE(DoRipperGrow), + SAVE_CODE(DoDamageTest), + SAVE_CODE(DoStar), + SAVE_CODE(DoCrossBolt), + SAVE_CODE(DoPlasmaDone), + SAVE_CODE(DoPlasmaFountain), + SAVE_CODE(DoPlasma), + SAVE_CODE(DoCoolgFire), + SAVE_CODE(DoEelFire), + SAVE_CODE(DoGrenade), + SAVE_CODE(DoVulcanBoulder), + SAVE_CODE(DoMineStuck), + SAVE_CODE(DoMine), + SAVE_CODE(DoPuff), + SAVE_CODE(DoRailPuff), + SAVE_CODE(DoBoltThinMan), + SAVE_CODE(DoTracer), + SAVE_CODE(DoEMP), + SAVE_CODE(DoEMPBurst), + SAVE_CODE(DoTankShell), + SAVE_CODE(DoTracerStart), + SAVE_CODE(DoLaser), + SAVE_CODE(DoLaserStart), + SAVE_CODE(DoRail), + SAVE_CODE(DoRailStart), + SAVE_CODE(DoRocket), + SAVE_CODE(DoMicroMini), + SAVE_CODE(SpawnExtraMicroMini), + SAVE_CODE(DoMicro), + SAVE_CODE(DoUziBullet), + SAVE_CODE(DoBoltSeeker), + SAVE_CODE(DoBoltShrapnel), + SAVE_CODE(DoBoltFatMan), + SAVE_CODE(DoElectro), + SAVE_CODE(DoLavaBoulder), + SAVE_CODE(DoSpear), + SAVE_CODE(SpawnGrenadeSmallExp), + SAVE_CODE(SpawnGrenadeExp), + SAVE_CODE(SpawnMineExp), + SAVE_CODE(DoSectorExp), + SAVE_CODE(SpawnSectorExp), + SAVE_CODE(SpawnLargeExp), + SAVE_CODE(SpawnMeteorExp), + SAVE_CODE(SpawnLittleExp), + SAVE_CODE(DoFireball), + SAVE_CODE(DoFindGround), + SAVE_CODE(DoFindGroundPoint), + SAVE_CODE(DoNapalm), + SAVE_CODE(DoBloodWorm), + SAVE_CODE(DoMeteor), + SAVE_CODE(DoSerpMeteor), + SAVE_CODE(DoMirvMissile), + SAVE_CODE(DoMirv), + SAVE_CODE(DoRing), + SAVE_CODE(DoSerpRing), + SAVE_CODE(InitLavaFlame), + SAVE_CODE(InitLavaThrow), + SAVE_CODE(InitVulcanBoulder), + SAVE_CODE(InitSerpRing), + SAVE_CODE(InitSerpRing), + SAVE_CODE(InitSpellNapalm), + SAVE_CODE(InitEnemyNapalm), + SAVE_CODE(InitSpellMirv), + SAVE_CODE(InitEnemyMirv), + SAVE_CODE(InitSwordAttack), + SAVE_CODE(InitFistAttack), + SAVE_CODE(InitSumoNapalm), + SAVE_CODE(InitSumoSkull), + SAVE_CODE(InitSumoStompAttack), + SAVE_CODE(InitMiniSumoClap), + SAVE_CODE(InitZillaRail), + SAVE_CODE(InitEnemyNuke), + SAVE_CODE(InitRipperSlash), + SAVE_CODE(InitBunnySlash), + SAVE_CODE(InitSerpSlash), + SAVE_CODE(InitCoolgBash), + SAVE_CODE(InitSkelSlash), + SAVE_CODE(InitGoroChop), + SAVE_CODE(InitHornetSting), + SAVE_CODE(InitSerpSpell), + SAVE_CODE(InitSerpMonstSpell), + SAVE_CODE(DoTeleRipper), + SAVE_CODE(InitEnemyRocket), + SAVE_CODE(InitEnemyRail), + SAVE_CODE(InitZillaRocket), + SAVE_CODE(InitEnemyStar), + SAVE_CODE(InitEnemyCrossbow), + SAVE_CODE(InitSkelSpell), + SAVE_CODE(InitCoolgFire), + SAVE_CODE(InitCoolgDrip), + SAVE_CODE(GenerateDrips), + SAVE_CODE(InitEelFire), + SAVE_CODE(InitFireballTrap), + SAVE_CODE(InitBoltTrap), + SAVE_CODE(InitEnemyCrossbow), + SAVE_CODE(InitSpearTrap), + SAVE_CODE(DoSuicide), + SAVE_CODE(DoDefaultStat), + SAVE_CODE(InitEnemyUzi), + SAVE_CODE(InitSpriteGrenade), + SAVE_CODE(InitEnemyMine), + SAVE_CODE(InitEnemyFireball), + SAVE_CODE(DoVehicleSmoke), + SAVE_CODE(DoWaterSmoke), + SAVE_CODE(SpawnVehicleSmoke), + SAVE_CODE(SpawnSmokePuff), + SAVE_CODE(DoBubble), + SAVE_CODE(DoFloorBlood), + SAVE_CODE(DoWallBlood), + SAVE_CODE(DoItemFly), +}; static saveable_data saveable_weapon_data[] = { @@ -18726,7 +19094,8 @@ static saveable_data saveable_weapon_data[] = saveable_module saveable_weapon = { // code - nullptr, 0, + saveable_weapon_code, + SIZ(saveable_weapon_code), // data saveable_weapon_data, diff --git a/source/games/sw/src/weapon.h b/source/games/sw/src/weapon.h index 851cb852294..7331c0bb1f6 100644 --- a/source/games/sw/src/weapon.h +++ b/source/games/sw/src/weapon.h @@ -97,7 +97,7 @@ void SpawnGrenadeExp(DSWActor*); DSWActor* SpawnSectorExp(DSWActor*); int DoShrapVelocity(DSWActor*); int ShrapKillSprite(DSWActor*); -bool MissileSetPos(DSWActor*,VMFunction* DoWeapon,int dist); +bool MissileSetPos(DSWActor*,ANIMATOR* DoWeapon,int dist); int ActorPain(DSWActor*); int SpawnBreakFlames(DSWActor*); bool PlayerTakeDamage(DSWPlayer* pp, DSWActor* weapActor); diff --git a/source/games/sw/src/zilla.cpp b/source/games/sw/src/zilla.cpp index e1c1cd8e3d6..57083077506 100644 --- a/source/games/sw/src/zilla.cpp +++ b/source/games/sw/src/zilla.cpp @@ -37,51 +37,52 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms BEGIN_SW_NS +ANIMATOR InitZillaCharge; DECISION ZillaBattle[] = { - {100, &AF(InitActorRunAway ) }, - {690, &AF(InitActorMoveCloser) }, - {692, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {100, InitActorRunAway }, + {690, InitActorMoveCloser }, + {692, InitActorAlertNoise }, + {1024, InitActorAttack } }; DECISION ZillaOffense[] = { - {100, &AF(InitActorRunAway ) }, - {690, &AF(InitActorMoveCloser) }, - {692, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorAttack ) } + {100, InitActorRunAway }, + {690, InitActorMoveCloser }, + {692, InitActorAlertNoise }, + {1024, InitActorAttack } }; -DECISIONB ZillaBroadcast[] = +DECISION ZillaBroadcast[] = { - {2, attr_alert }, - {4, attr_ambient }, - {1024, 0 } + {2, InitActorAlertNoise }, + {4, InitActorAmbientNoise }, + {1024, InitActorDecide } }; DECISION ZillaSurprised[] = { - {700, &AF(InitActorMoveCloser) }, - {703, &AF(InitActorSetDecide) }, - {1024, &AF(InitActorDecide ) } + {700, InitActorMoveCloser }, + {703, InitActorAlertNoise }, + {1024, InitActorDecide } }; DECISION ZillaEvasive[] = { - {1024, &AF(InitActorWanderAround) } + {1024, InitActorWanderAround } }; DECISION ZillaLostTarget[] = { - {900, &AF(InitActorFindPlayer ) }, - {1024, &AF(InitActorWanderAround) } + {900, InitActorFindPlayer }, + {1024, InitActorWanderAround } }; DECISION ZillaCloseRange[] = { - {1024, &AF(InitActorAttack) } + {1024, InitActorAttack } }; PERSONALITY ZillaPersonality = @@ -116,47 +117,51 @@ ATTRIBUTE ZillaAttrib = #define ZILLA_RATE 48 +ANIMATOR DoZillaMove,NullZilla,DoStayOnFloor, + DoActorDebris, SpawnZillaExp, DoZillaStomp, + SpawnCoolg; + STATE s_ZillaRun[5][6] = { { - {ZILLA_RUN_R0 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[0][1]}, - {ZILLA_RUN_R0 + 1, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[0][2]}, - {ZILLA_RUN_R0 + 1, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[0][3]}, - {ZILLA_RUN_R0 + 2, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[0][4]}, - {ZILLA_RUN_R0 + 3, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[0][5]}, - {ZILLA_RUN_R0 + 3, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[0][0]} + {ZILLA_RUN_R0 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaRun[0][1]}, + {ZILLA_RUN_R0 + 1, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[0][2]}, + {ZILLA_RUN_R0 + 1, ZILLA_RATE, DoZillaMove, &s_ZillaRun[0][3]}, + {ZILLA_RUN_R0 + 2, ZILLA_RATE, DoZillaMove, &s_ZillaRun[0][4]}, + {ZILLA_RUN_R0 + 3, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[0][5]}, + {ZILLA_RUN_R0 + 3, ZILLA_RATE, DoZillaMove, &s_ZillaRun[0][0]} }, { - {ZILLA_RUN_R1 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[1][1]}, - {ZILLA_RUN_R1 + 1, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[1][2]}, - {ZILLA_RUN_R1 + 1, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[1][3]}, - {ZILLA_RUN_R1 + 2, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[1][4]}, - {ZILLA_RUN_R1 + 3, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[1][5]}, - {ZILLA_RUN_R1 + 3, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[1][0]} + {ZILLA_RUN_R1 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaRun[1][1]}, + {ZILLA_RUN_R1 + 1, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[1][2]}, + {ZILLA_RUN_R1 + 1, ZILLA_RATE, DoZillaMove, &s_ZillaRun[1][3]}, + {ZILLA_RUN_R1 + 2, ZILLA_RATE, DoZillaMove, &s_ZillaRun[1][4]}, + {ZILLA_RUN_R1 + 3, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[1][5]}, + {ZILLA_RUN_R1 + 3, ZILLA_RATE, DoZillaMove, &s_ZillaRun[1][0]} }, { - {ZILLA_RUN_R2 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[2][1]}, - {ZILLA_RUN_R2 + 1, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[2][2]}, - {ZILLA_RUN_R2 + 1, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[2][3]}, - {ZILLA_RUN_R2 + 2, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[2][4]}, - {ZILLA_RUN_R2 + 3, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[2][5]}, - {ZILLA_RUN_R2 + 3, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[2][0]} + {ZILLA_RUN_R2 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaRun[2][1]}, + {ZILLA_RUN_R2 + 1, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[2][2]}, + {ZILLA_RUN_R2 + 1, ZILLA_RATE, DoZillaMove, &s_ZillaRun[2][3]}, + {ZILLA_RUN_R2 + 2, ZILLA_RATE, DoZillaMove, &s_ZillaRun[2][4]}, + {ZILLA_RUN_R2 + 3, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[2][5]}, + {ZILLA_RUN_R2 + 3, ZILLA_RATE, DoZillaMove, &s_ZillaRun[2][0]} }, { - {ZILLA_RUN_R3 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[3][1]}, - {ZILLA_RUN_R3 + 1, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[3][2]}, - {ZILLA_RUN_R3 + 1, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[3][3]}, - {ZILLA_RUN_R3 + 2, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[3][4]}, - {ZILLA_RUN_R3 + 3, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[3][5]}, - {ZILLA_RUN_R3 + 3, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[3][0]} + {ZILLA_RUN_R3 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaRun[3][1]}, + {ZILLA_RUN_R3 + 1, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[3][2]}, + {ZILLA_RUN_R3 + 1, ZILLA_RATE, DoZillaMove, &s_ZillaRun[3][3]}, + {ZILLA_RUN_R3 + 2, ZILLA_RATE, DoZillaMove, &s_ZillaRun[3][4]}, + {ZILLA_RUN_R3 + 3, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[3][5]}, + {ZILLA_RUN_R3 + 3, ZILLA_RATE, DoZillaMove, &s_ZillaRun[3][0]} }, { - {ZILLA_RUN_R4 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[4][1]}, - {ZILLA_RUN_R4 + 1, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[4][2]}, - {ZILLA_RUN_R4 + 1, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[4][3]}, - {ZILLA_RUN_R4 + 2, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[4][4]}, - {ZILLA_RUN_R4 + 3, SF_QUICK_CALL, &AF(DoZillaStomp), &s_ZillaRun[4][5]}, - {ZILLA_RUN_R4 + 3, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaRun[4][0]} + {ZILLA_RUN_R4 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaRun[4][1]}, + {ZILLA_RUN_R4 + 1, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[4][2]}, + {ZILLA_RUN_R4 + 1, ZILLA_RATE, DoZillaMove, &s_ZillaRun[4][3]}, + {ZILLA_RUN_R4 + 2, ZILLA_RATE, DoZillaMove, &s_ZillaRun[4][4]}, + {ZILLA_RUN_R4 + 3, SF_QUICK_CALL, DoZillaStomp, &s_ZillaRun[4][5]}, + {ZILLA_RUN_R4 + 3, ZILLA_RATE, DoZillaMove, &s_ZillaRun[4][0]} } }; @@ -179,19 +184,19 @@ STATE* sg_ZillaRun[] = STATE s_ZillaStand[5][1] = { { - {ZILLA_RUN_R0 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaStand[0][0]} + {ZILLA_RUN_R0 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaStand[0][0]} }, { - {ZILLA_RUN_R1 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaStand[1][0]} + {ZILLA_RUN_R1 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaStand[1][0]} }, { - {ZILLA_RUN_R2 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaStand[2][0]} + {ZILLA_RUN_R2 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaStand[2][0]} }, { - {ZILLA_RUN_R3 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaStand[3][0]} + {ZILLA_RUN_R3 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaStand[3][0]} }, { - {ZILLA_RUN_R4 + 0, ZILLA_RATE, &AF(DoZillaMove), &s_ZillaStand[4][0]} + {ZILLA_RUN_R4 + 0, ZILLA_RATE, DoZillaMove, &s_ZillaStand[4][0]} } }; @@ -215,24 +220,24 @@ STATE* sg_ZillaStand[] = STATE s_ZillaPain[5][2] = { { - {ZILLA_PAIN_R0 + 0, ZILLA_PAIN_RATE, &AF(NullZilla), &s_ZillaPain[0][1]}, - {ZILLA_PAIN_R0 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaPain[0][0]} + {ZILLA_PAIN_R0 + 0, ZILLA_PAIN_RATE, NullZilla, &s_ZillaPain[0][1]}, + {ZILLA_PAIN_R0 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_ZillaPain[0][0]} }, { - {ZILLA_PAIN_R1 + 0, ZILLA_PAIN_RATE, &AF(NullZilla), &s_ZillaPain[1][1]}, - {ZILLA_PAIN_R1 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaPain[1][0]} + {ZILLA_PAIN_R1 + 0, ZILLA_PAIN_RATE, NullZilla, &s_ZillaPain[1][1]}, + {ZILLA_PAIN_R1 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_ZillaPain[1][0]} }, { - {ZILLA_PAIN_R2 + 0, ZILLA_PAIN_RATE, &AF(NullZilla), &s_ZillaPain[2][1]}, - {ZILLA_PAIN_R2 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaPain[2][0]} + {ZILLA_PAIN_R2 + 0, ZILLA_PAIN_RATE, NullZilla, &s_ZillaPain[2][1]}, + {ZILLA_PAIN_R2 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_ZillaPain[2][0]} }, { - {ZILLA_PAIN_R3 + 0, ZILLA_PAIN_RATE, &AF(NullZilla), &s_ZillaPain[3][1]}, - {ZILLA_PAIN_R3 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaPain[3][0]} + {ZILLA_PAIN_R3 + 0, ZILLA_PAIN_RATE, NullZilla, &s_ZillaPain[3][1]}, + {ZILLA_PAIN_R3 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_ZillaPain[3][0]} }, { - {ZILLA_PAIN_R4 + 0, ZILLA_PAIN_RATE, &AF(NullZilla), &s_ZillaPain[4][1]}, - {ZILLA_PAIN_R4 + 0, 0|SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaPain[4][0]} + {ZILLA_PAIN_R4 + 0, ZILLA_PAIN_RATE, NullZilla, &s_ZillaPain[4][1]}, + {ZILLA_PAIN_R4 + 0, 0|SF_QUICK_CALL, InitActorDecide, &s_ZillaPain[4][0]} } }; @@ -252,88 +257,89 @@ STATE* sg_ZillaPain[] = ////////////////////// #define ZILLA_RAIL_RATE 12 +ANIMATOR InitZillaRail; STATE s_ZillaRail[5][14] = { { - {ZILLA_RAIL_R0 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][1]}, - {ZILLA_RAIL_R0 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][2]}, - {ZILLA_RAIL_R0 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][3]}, - {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[0][4]}, - {ZILLA_RAIL_R0 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][5]}, - {ZILLA_RAIL_R0 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][6]}, - {ZILLA_RAIL_R0 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][7]}, - {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[0][8]}, - {ZILLA_RAIL_R0 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][9]}, - {ZILLA_RAIL_R0 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][10]}, - {ZILLA_RAIL_R0 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][11]}, - {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[0][12]}, - {ZILLA_RAIL_R0 + 3, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[0][13]}, - {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRail[0][0]} + {ZILLA_RAIL_R0 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][1]}, + {ZILLA_RAIL_R0 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][2]}, + {ZILLA_RAIL_R0 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][3]}, + {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[0][4]}, + {ZILLA_RAIL_R0 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][5]}, + {ZILLA_RAIL_R0 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][6]}, + {ZILLA_RAIL_R0 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][7]}, + {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[0][8]}, + {ZILLA_RAIL_R0 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][9]}, + {ZILLA_RAIL_R0 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][10]}, + {ZILLA_RAIL_R0 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][11]}, + {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[0][12]}, + {ZILLA_RAIL_R0 + 3, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[0][13]}, + {ZILLA_RAIL_R0 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRail[0][0]} }, { - {ZILLA_RAIL_R1 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][1]}, - {ZILLA_RAIL_R1 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][2]}, - {ZILLA_RAIL_R1 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][3]}, - {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[1][4]}, - {ZILLA_RAIL_R1 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][5]}, - {ZILLA_RAIL_R1 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][6]}, - {ZILLA_RAIL_R1 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][7]}, - {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[1][8]}, - {ZILLA_RAIL_R1 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][9]}, - {ZILLA_RAIL_R1 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][10]}, - {ZILLA_RAIL_R1 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][11]}, - {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[1][12]}, - {ZILLA_RAIL_R1 + 3, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[1][13]}, - {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRail[1][0]} + {ZILLA_RAIL_R1 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][1]}, + {ZILLA_RAIL_R1 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][2]}, + {ZILLA_RAIL_R1 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][3]}, + {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[1][4]}, + {ZILLA_RAIL_R1 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][5]}, + {ZILLA_RAIL_R1 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][6]}, + {ZILLA_RAIL_R1 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][7]}, + {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[1][8]}, + {ZILLA_RAIL_R1 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][9]}, + {ZILLA_RAIL_R1 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][10]}, + {ZILLA_RAIL_R1 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][11]}, + {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[1][12]}, + {ZILLA_RAIL_R1 + 3, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[1][13]}, + {ZILLA_RAIL_R1 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRail[1][0]} }, { - {ZILLA_RAIL_R2 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][1]}, - {ZILLA_RAIL_R2 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][2]}, - {ZILLA_RAIL_R2 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][3]}, - {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[2][4]}, - {ZILLA_RAIL_R2 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][5]}, - {ZILLA_RAIL_R2 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][6]}, - {ZILLA_RAIL_R2 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][7]}, - {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[2][8]}, - {ZILLA_RAIL_R2 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][9]}, - {ZILLA_RAIL_R2 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][10]}, - {ZILLA_RAIL_R2 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][11]}, - {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[2][12]}, - {ZILLA_RAIL_R2 + 3, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[2][13]}, - {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRail[2][0]} + {ZILLA_RAIL_R2 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][1]}, + {ZILLA_RAIL_R2 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][2]}, + {ZILLA_RAIL_R2 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][3]}, + {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[2][4]}, + {ZILLA_RAIL_R2 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][5]}, + {ZILLA_RAIL_R2 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][6]}, + {ZILLA_RAIL_R2 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][7]}, + {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[2][8]}, + {ZILLA_RAIL_R2 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][9]}, + {ZILLA_RAIL_R2 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][10]}, + {ZILLA_RAIL_R2 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][11]}, + {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[2][12]}, + {ZILLA_RAIL_R2 + 3, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[2][13]}, + {ZILLA_RAIL_R2 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRail[2][0]} }, { - {ZILLA_RAIL_R3 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][1]}, - {ZILLA_RAIL_R3 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][2]}, - {ZILLA_RAIL_R3 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][3]}, - {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[3][4]}, - {ZILLA_RAIL_R3 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][5]}, - {ZILLA_RAIL_R3 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][6]}, - {ZILLA_RAIL_R3 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][7]}, - {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[3][8]}, - {ZILLA_RAIL_R3 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][9]}, - {ZILLA_RAIL_R3 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][10]}, - {ZILLA_RAIL_R3 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][11]}, - {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[3][12]}, - {ZILLA_RAIL_R3 + 3, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[3][13]}, - {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRail[3][0]} + {ZILLA_RAIL_R3 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][1]}, + {ZILLA_RAIL_R3 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][2]}, + {ZILLA_RAIL_R3 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][3]}, + {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[3][4]}, + {ZILLA_RAIL_R3 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][5]}, + {ZILLA_RAIL_R3 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][6]}, + {ZILLA_RAIL_R3 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][7]}, + {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[3][8]}, + {ZILLA_RAIL_R3 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][9]}, + {ZILLA_RAIL_R3 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][10]}, + {ZILLA_RAIL_R3 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][11]}, + {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[3][12]}, + {ZILLA_RAIL_R3 + 3, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[3][13]}, + {ZILLA_RAIL_R3 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRail[3][0]} }, { - {ZILLA_RAIL_R4 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][1]}, - {ZILLA_RAIL_R4 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][2]}, - {ZILLA_RAIL_R4 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][3]}, - {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[4][4]}, - {ZILLA_RAIL_R4 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][5]}, - {ZILLA_RAIL_R4 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][6]}, - {ZILLA_RAIL_R4 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][7]}, - {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[4][8]}, - {ZILLA_RAIL_R4 + 0, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][9]}, - {ZILLA_RAIL_R4 + 1, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][10]}, - {ZILLA_RAIL_R4 + 2, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][11]}, - {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, &AF(InitZillaRail), &s_ZillaRail[4][12]}, - {ZILLA_RAIL_R4 + 3, ZILLA_RAIL_RATE, &AF(NullZilla), &s_ZillaRail[4][13]}, - {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRail[4][0]} + {ZILLA_RAIL_R4 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][1]}, + {ZILLA_RAIL_R4 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][2]}, + {ZILLA_RAIL_R4 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][3]}, + {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[4][4]}, + {ZILLA_RAIL_R4 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][5]}, + {ZILLA_RAIL_R4 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][6]}, + {ZILLA_RAIL_R4 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][7]}, + {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[4][8]}, + {ZILLA_RAIL_R4 + 0, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][9]}, + {ZILLA_RAIL_R4 + 1, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][10]}, + {ZILLA_RAIL_R4 + 2, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][11]}, + {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, InitZillaRail, &s_ZillaRail[4][12]}, + {ZILLA_RAIL_R4 + 3, ZILLA_RAIL_RATE, NullZilla, &s_ZillaRail[4][13]}, + {ZILLA_RAIL_R4 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRail[4][0]} } }; @@ -353,53 +359,54 @@ STATE* sg_ZillaRail[] = ////////////////////// #define ZILLA_ROCKET_RATE 12 +ANIMATOR InitZillaRocket; STATE s_ZillaRocket[5][7] = { { - {ZILLA_ROCKET_R0 + 0, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[0][1]}, - {ZILLA_ROCKET_R0 + 1, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[0][2]}, - {ZILLA_ROCKET_R0 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[0][3]}, - {ZILLA_ROCKET_R0 + 2, SF_QUICK_CALL, &AF(InitZillaRocket), &s_ZillaRocket[0][4]}, - {ZILLA_ROCKET_R0 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[0][5]}, - {ZILLA_ROCKET_R0 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRocket[0][6]}, - {ZILLA_ROCKET_R0 + 3, ZILLA_ROCKET_RATE*10, &AF(NullZilla), &s_ZillaRocket[0][5]} + {ZILLA_ROCKET_R0 + 0, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[0][1]}, + {ZILLA_ROCKET_R0 + 1, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[0][2]}, + {ZILLA_ROCKET_R0 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[0][3]}, + {ZILLA_ROCKET_R0 + 2, SF_QUICK_CALL, InitZillaRocket, &s_ZillaRocket[0][4]}, + {ZILLA_ROCKET_R0 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[0][5]}, + {ZILLA_ROCKET_R0 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRocket[0][6]}, + {ZILLA_ROCKET_R0 + 3, ZILLA_ROCKET_RATE*10, NullZilla, &s_ZillaRocket[0][5]} }, { - {ZILLA_ROCKET_R1 + 0, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[1][1]}, - {ZILLA_ROCKET_R1 + 1, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[1][2]}, - {ZILLA_ROCKET_R1 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[1][3]}, - {ZILLA_ROCKET_R1 + 2, SF_QUICK_CALL, &AF(InitZillaRocket), &s_ZillaRocket[1][4]}, - {ZILLA_ROCKET_R1 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[1][5]}, - {ZILLA_ROCKET_R1 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRocket[1][6]}, - {ZILLA_ROCKET_R1 + 3, ZILLA_ROCKET_RATE*10, &AF(NullZilla), &s_ZillaRocket[1][5]} + {ZILLA_ROCKET_R1 + 0, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[1][1]}, + {ZILLA_ROCKET_R1 + 1, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[1][2]}, + {ZILLA_ROCKET_R1 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[1][3]}, + {ZILLA_ROCKET_R1 + 2, SF_QUICK_CALL, InitZillaRocket, &s_ZillaRocket[1][4]}, + {ZILLA_ROCKET_R1 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[1][5]}, + {ZILLA_ROCKET_R1 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRocket[1][6]}, + {ZILLA_ROCKET_R1 + 3, ZILLA_ROCKET_RATE*10, NullZilla, &s_ZillaRocket[1][5]} }, { - {ZILLA_ROCKET_R2 + 0, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[2][1]}, - {ZILLA_ROCKET_R2 + 1, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[2][2]}, - {ZILLA_ROCKET_R2 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[2][3]}, - {ZILLA_ROCKET_R2 + 2, SF_QUICK_CALL, &AF(InitZillaRocket), &s_ZillaRocket[2][4]}, - {ZILLA_ROCKET_R2 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[2][5]}, - {ZILLA_ROCKET_R2 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRocket[2][6]}, - {ZILLA_ROCKET_R2 + 3, ZILLA_ROCKET_RATE*10, &AF(NullZilla), &s_ZillaRocket[2][5]} + {ZILLA_ROCKET_R2 + 0, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[2][1]}, + {ZILLA_ROCKET_R2 + 1, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[2][2]}, + {ZILLA_ROCKET_R2 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[2][3]}, + {ZILLA_ROCKET_R2 + 2, SF_QUICK_CALL, InitZillaRocket, &s_ZillaRocket[2][4]}, + {ZILLA_ROCKET_R2 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[2][5]}, + {ZILLA_ROCKET_R2 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRocket[2][6]}, + {ZILLA_ROCKET_R2 + 3, ZILLA_ROCKET_RATE*10, NullZilla, &s_ZillaRocket[2][5]} }, { - {ZILLA_ROCKET_R3 + 0, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[3][1]}, - {ZILLA_ROCKET_R3 + 1, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[3][2]}, - {ZILLA_ROCKET_R3 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[3][3]}, - {ZILLA_ROCKET_R3 + 2, SF_QUICK_CALL, &AF(InitZillaRocket), &s_ZillaRocket[3][4]}, - {ZILLA_ROCKET_R3 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[3][5]}, - {ZILLA_ROCKET_R3 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRocket[3][6]}, - {ZILLA_ROCKET_R3 + 3, ZILLA_ROCKET_RATE*10, &AF(NullZilla), &s_ZillaRocket[3][5]} + {ZILLA_ROCKET_R3 + 0, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[3][1]}, + {ZILLA_ROCKET_R3 + 1, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[3][2]}, + {ZILLA_ROCKET_R3 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[3][3]}, + {ZILLA_ROCKET_R3 + 2, SF_QUICK_CALL, InitZillaRocket, &s_ZillaRocket[3][4]}, + {ZILLA_ROCKET_R3 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[3][5]}, + {ZILLA_ROCKET_R3 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRocket[3][6]}, + {ZILLA_ROCKET_R3 + 3, ZILLA_ROCKET_RATE*10, NullZilla, &s_ZillaRocket[3][5]} }, { - {ZILLA_ROCKET_R4 + 0, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[4][1]}, - {ZILLA_ROCKET_R4 + 1, ZILLA_ROCKET_RATE, &AF(NullZilla), &s_ZillaRocket[4][2]}, - {ZILLA_ROCKET_R4 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[4][3]}, - {ZILLA_ROCKET_R4 + 2, SF_QUICK_CALL, &AF(InitZillaRocket), &s_ZillaRocket[4][4]}, - {ZILLA_ROCKET_R4 + 2, ZILLA_ROCKET_RATE*4, &AF(NullZilla), &s_ZillaRocket[4][5]}, - {ZILLA_ROCKET_R4 + 3, SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaRocket[4][6]}, - {ZILLA_ROCKET_R4 + 3, ZILLA_ROCKET_RATE*10, &AF(NullZilla), &s_ZillaRocket[4][5]} + {ZILLA_ROCKET_R4 + 0, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[4][1]}, + {ZILLA_ROCKET_R4 + 1, ZILLA_ROCKET_RATE, NullZilla, &s_ZillaRocket[4][2]}, + {ZILLA_ROCKET_R4 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[4][3]}, + {ZILLA_ROCKET_R4 + 2, SF_QUICK_CALL, InitZillaRocket, &s_ZillaRocket[4][4]}, + {ZILLA_ROCKET_R4 + 2, ZILLA_ROCKET_RATE*4, NullZilla, &s_ZillaRocket[4][5]}, + {ZILLA_ROCKET_R4 + 3, SF_QUICK_CALL, InitActorDecide, &s_ZillaRocket[4][6]}, + {ZILLA_ROCKET_R4 + 3, ZILLA_ROCKET_RATE*10, NullZilla, &s_ZillaRocket[4][5]} } }; @@ -419,103 +426,104 @@ STATE* sg_ZillaRocket[] = ////////////////////// #define ZILLA_UZI_RATE 8 +ANIMATOR InitEnemyUzi; STATE s_ZillaUzi[5][17] = { { - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][1]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][2]}, - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][3]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][4]}, - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][5]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][6]}, - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][7]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][8]}, - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][9]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][10]}, - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][11]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][12]}, - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][13]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][14]}, - {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[0][15]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[0][16]}, - {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaUzi[0][16]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][1]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][2]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][3]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][4]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][5]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][6]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][7]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][8]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][9]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][10]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][11]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][12]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][13]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][14]}, + {ZILLA_SHOOT_R0 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[0][15]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[0][16]}, + {ZILLA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZillaUzi[0][16]}, }, { - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][1]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][2]}, - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][3]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][4]}, - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][5]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][6]}, - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][7]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][8]}, - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][9]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][10]}, - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][11]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][12]}, - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][13]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][14]}, - {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[1][15]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[1][16]}, - {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaUzi[1][16]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][1]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][2]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][3]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][4]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][5]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][6]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][7]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][8]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][9]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][10]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][11]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][12]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][13]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][14]}, + {ZILLA_SHOOT_R1 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[1][15]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[1][16]}, + {ZILLA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZillaUzi[1][16]}, }, { - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][1]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][2]}, - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][3]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][4]}, - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][5]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][6]}, - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][7]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][8]}, - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][9]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][10]}, - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][11]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][12]}, - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][13]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][14]}, - {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[2][15]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[2][16]}, - {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaUzi[2][16]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][1]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][2]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][3]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][4]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][5]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][6]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][7]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][8]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][9]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][10]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][11]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][12]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][13]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][14]}, + {ZILLA_SHOOT_R2 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[2][15]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[2][16]}, + {ZILLA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZillaUzi[2][16]}, }, { - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][1]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][2]}, - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][3]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][4]}, - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][5]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][6]}, - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][7]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][8]}, - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][9]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][10]}, - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][11]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][12]}, - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][13]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][14]}, - {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[3][15]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[3][16]}, - {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaUzi[3][16]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][1]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][2]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][3]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][4]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][5]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][6]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][7]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][8]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][9]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][10]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][11]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][12]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][13]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][14]}, + {ZILLA_SHOOT_R3 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[3][15]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[3][16]}, + {ZILLA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZillaUzi[3][16]}, }, { - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][1]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][2]}, - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][3]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][4]}, - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][5]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][6]}, - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][7]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][8]}, - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][9]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][10]}, - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][11]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][12]}, - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][13]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][14]}, - {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, &AF(NullZilla), &s_ZillaUzi[4][15]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZillaUzi[4][16]}, - {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZillaUzi[4][16]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][1]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][2]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][3]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][4]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][5]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][6]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][7]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][8]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][9]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][10]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][11]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][12]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][13]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][14]}, + {ZILLA_SHOOT_R4 + 0, ZILLA_UZI_RATE, NullZilla, &s_ZillaUzi[4][15]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZillaUzi[4][16]}, + {ZILLA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZillaUzi[4][16]}, }, }; @@ -537,18 +545,19 @@ STATE* sg_ZillaUzi[] = ////////////////////// #define ZILLA_DIE_RATE 30 +ANIMATOR DoZillaDeathMelt; STATE s_ZillaDie[] = { - {ZILLA_DIE + 0, ZILLA_DIE_RATE*15, &AF(DoZillaDeathMelt), &s_ZillaDie[1]}, - {ZILLA_DIE + 1, ZILLA_DIE_RATE, &AF(NullZilla), &s_ZillaDie[2]}, - {ZILLA_DIE + 2, ZILLA_DIE_RATE, &AF(NullZilla), &s_ZillaDie[3]}, - {ZILLA_DIE + 3, ZILLA_DIE_RATE, &AF(NullZilla), &s_ZillaDie[4]}, - {ZILLA_DIE + 4, ZILLA_DIE_RATE, &AF(NullZilla), &s_ZillaDie[5]}, - {ZILLA_DIE + 5, ZILLA_DIE_RATE, &AF(NullZilla), &s_ZillaDie[6]}, - {ZILLA_DIE + 6, ZILLA_DIE_RATE, &AF(NullZilla), &s_ZillaDie[7]}, - {ZILLA_DIE + 7, ZILLA_DIE_RATE*3, &AF(NullZilla), &s_ZillaDie[8]}, - {ZILLA_DEAD, ZILLA_DIE_RATE, &AF(DoActorDebris), &s_ZillaDie[8]} + {ZILLA_DIE + 0, ZILLA_DIE_RATE*15, DoZillaDeathMelt, &s_ZillaDie[1]}, + {ZILLA_DIE + 1, ZILLA_DIE_RATE, NullZilla, &s_ZillaDie[2]}, + {ZILLA_DIE + 2, ZILLA_DIE_RATE, NullZilla, &s_ZillaDie[3]}, + {ZILLA_DIE + 3, ZILLA_DIE_RATE, NullZilla, &s_ZillaDie[4]}, + {ZILLA_DIE + 4, ZILLA_DIE_RATE, NullZilla, &s_ZillaDie[5]}, + {ZILLA_DIE + 5, ZILLA_DIE_RATE, NullZilla, &s_ZillaDie[6]}, + {ZILLA_DIE + 6, ZILLA_DIE_RATE, NullZilla, &s_ZillaDie[7]}, + {ZILLA_DIE + 7, ZILLA_DIE_RATE*3, NullZilla, &s_ZillaDie[8]}, + {ZILLA_DEAD, ZILLA_DIE_RATE, DoActorDebris, &s_ZillaDie[8]} }; STATE* sg_ZillaDie[] = @@ -558,7 +567,7 @@ STATE* sg_ZillaDie[] = STATE s_ZillaDead[] = { - {ZILLA_DEAD, ZILLA_DIE_RATE, &AF(DoActorDebris), &s_ZillaDead[0]}, + {ZILLA_DEAD, ZILLA_DIE_RATE, DoActorDebris, &s_ZillaDead[0]}, }; STATE* sg_ZillaDead[] = @@ -602,6 +611,8 @@ ACTOR_ACTION_SET ZillaActionSet = int SetupZilla(DSWActor* actor) { + ANIMATOR DoActorDecide; + if (!(actor->spr.cstat & CSTAT_SPRITE_RESTORE)) { SpawnUser(actor, ZILLA_RUN_R0, s_ZillaRun[0]); @@ -612,10 +623,10 @@ int SetupZilla(DSWActor* actor) if (Skill == 1) actor->user.Health = 4000; ChangeState(actor,s_ZillaRun[0]); - actor->user.__legacyState.Attrib = &ZillaAttrib; + actor->user.Attrib = &ZillaAttrib; DoActorSetSpeed(actor, NORM_SPEED); - actor->user.__legacyState.StateEnd = s_ZillaDie; - actor->user.__legacyState.Rot = sg_ZillaRun; + actor->user.StateEnd = s_ZillaDie; + actor->user.Rot = sg_ZillaRun; EnemyDefaults(actor, &ZillaActionSet, &ZillaPersonality); @@ -673,7 +684,7 @@ int DoZillaMove(DSWActor* actor) if (actor->user.track >= 0) ActorFollowTrack(actor, ACTORMOVETICS); else - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); KeepActorOnFloor(actor); @@ -740,8 +751,24 @@ int DoZillaDeathMelt(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_zilla_code[] = +{ + SAVE_CODE(NullZilla), + SAVE_CODE(DoZillaMove), + SAVE_CODE(DoZillaStomp), + SAVE_CODE(DoZillaDeathMelt), +}; + static saveable_data saveable_zilla_data[] = { + SAVE_DATA(ZillaBattle), + SAVE_DATA(ZillaOffense), + SAVE_DATA(ZillaBroadcast), + SAVE_DATA(ZillaSurprised), + SAVE_DATA(ZillaEvasive), + SAVE_DATA(ZillaLostTarget), + SAVE_DATA(ZillaCloseRange), + SAVE_DATA(ZillaPersonality), SAVE_DATA(ZillaAttrib), @@ -769,7 +796,8 @@ static saveable_data saveable_zilla_data[] = saveable_module saveable_zilla = { // code - nullptr, 0, + saveable_zilla_code, + SIZ(saveable_zilla_code), // data saveable_zilla_data, diff --git a/source/games/sw/src/zombie.cpp b/source/games/sw/src/zombie.cpp index 1269df0906f..ceeca1f89dd 100644 --- a/source/games/sw/src/zombie.cpp +++ b/source/games/sw/src/zombie.cpp @@ -44,44 +44,44 @@ BEGIN_SW_NS DECISION ZombieBattle[] = { - {399, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorAttack)} + {399, InitActorMoveCloser}, + {1024, InitActorAttack} }; DECISION ZombieOffense[] = { - {399, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorAttack)} + {399, InitActorMoveCloser}, + {1024, InitActorAttack} }; -DECISIONB ZombieBroadcast[] = +DECISION ZombieBroadcast[] = { - {6, attr_ambient}, - {1024, 0} + {6, InitActorAmbientNoise}, + {1024, InitActorDecide} }; DECISION ZombieSurprised[] = { - {701, &AF(InitActorMoveCloser)}, - {1024, &AF(InitActorDecide)} + {701, InitActorMoveCloser}, + {1024, InitActorDecide} }; DECISION ZombieEvasive[] = { - {400, &AF(InitActorDuck)}, + {400, InitActorDuck}, {1024, nullptr} }; DECISION ZombieLostTarget[] = { - {900, &AF(InitActorFindPlayer)}, - {1024, &AF(InitActorWanderAround)} + {900, InitActorFindPlayer}, + {1024, InitActorWanderAround} }; DECISION ZombieCloseRange[] = { - {800, &AF(InitActorAttack ) }, - {1024, &AF(InitActorReposition) } + {800, InitActorAttack }, + {1024, InitActorReposition } }; PERSONALITY ZombiePersonality = @@ -116,38 +116,39 @@ ATTRIBUTE ZombieAttrib = ////////////////////// #define ZOMBIE_RATE 32 +ANIMATOR DoZombieMove, NullZombie; STATE s_ZombieRun[5][4] = { { - {PLAYER_NINJA_RUN_R0 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[0][1]}, - {PLAYER_NINJA_RUN_R0 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[0][2]}, - {PLAYER_NINJA_RUN_R0 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[0][3]}, - {PLAYER_NINJA_RUN_R0 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[0][0]}, + {PLAYER_NINJA_RUN_R0 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[0][1]}, + {PLAYER_NINJA_RUN_R0 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[0][2]}, + {PLAYER_NINJA_RUN_R0 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[0][3]}, + {PLAYER_NINJA_RUN_R0 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[0][0]}, }, { - {PLAYER_NINJA_RUN_R1 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[1][1]}, - {PLAYER_NINJA_RUN_R1 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[1][2]}, - {PLAYER_NINJA_RUN_R1 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[1][3]}, - {PLAYER_NINJA_RUN_R1 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[1][0]}, + {PLAYER_NINJA_RUN_R1 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[1][1]}, + {PLAYER_NINJA_RUN_R1 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[1][2]}, + {PLAYER_NINJA_RUN_R1 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[1][3]}, + {PLAYER_NINJA_RUN_R1 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[1][0]}, }, { - {PLAYER_NINJA_RUN_R2 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[2][1]}, - {PLAYER_NINJA_RUN_R2 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[2][2]}, - {PLAYER_NINJA_RUN_R2 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[2][3]}, - {PLAYER_NINJA_RUN_R2 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[2][0]}, + {PLAYER_NINJA_RUN_R2 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[2][1]}, + {PLAYER_NINJA_RUN_R2 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[2][2]}, + {PLAYER_NINJA_RUN_R2 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[2][3]}, + {PLAYER_NINJA_RUN_R2 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[2][0]}, }, { - {PLAYER_NINJA_RUN_R3 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[3][1]}, - {PLAYER_NINJA_RUN_R3 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[3][2]}, - {PLAYER_NINJA_RUN_R3 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[3][3]}, - {PLAYER_NINJA_RUN_R3 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[3][0]}, + {PLAYER_NINJA_RUN_R3 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[3][1]}, + {PLAYER_NINJA_RUN_R3 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[3][2]}, + {PLAYER_NINJA_RUN_R3 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[3][3]}, + {PLAYER_NINJA_RUN_R3 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[3][0]}, }, { - {PLAYER_NINJA_RUN_R4 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[4][1]}, - {PLAYER_NINJA_RUN_R4 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[4][2]}, - {PLAYER_NINJA_RUN_R4 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[4][3]}, - {PLAYER_NINJA_RUN_R4 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, &AF(DoZombieMove), &s_ZombieRun[4][0]}, + {PLAYER_NINJA_RUN_R4 + 0, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[4][1]}, + {PLAYER_NINJA_RUN_R4 + 1, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[4][2]}, + {PLAYER_NINJA_RUN_R4 + 2, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[4][3]}, + {PLAYER_NINJA_RUN_R4 + 3, ZOMBIE_RATE | SF_TIC_ADJUST, DoZombieMove, &s_ZombieRun[4][0]}, }, }; @@ -171,19 +172,19 @@ STATE* sg_ZombieRun[] = STATE s_ZombieStand[5][1] = { { - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_STAND_RATE, &AF(NullZombie), &s_ZombieStand[0][0]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_STAND_RATE, NullZombie, &s_ZombieStand[0][0]}, }, { - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_STAND_RATE, &AF(NullZombie), &s_ZombieStand[1][0]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_STAND_RATE, NullZombie, &s_ZombieStand[1][0]}, }, { - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_STAND_RATE, &AF(NullZombie), &s_ZombieStand[2][0]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_STAND_RATE, NullZombie, &s_ZombieStand[2][0]}, }, { - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_STAND_RATE, &AF(NullZombie), &s_ZombieStand[3][0]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_STAND_RATE, NullZombie, &s_ZombieStand[3][0]}, }, { - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_STAND_RATE, &AF(NullZombie), &s_ZombieStand[4][0]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_STAND_RATE, NullZombie, &s_ZombieStand[4][0]}, }, }; @@ -203,28 +204,29 @@ STATE* sg_ZombieStand[] = ////////////////////// #define ZOMBIE_PAIN_RATE 15 +ANIMATOR DoZombiePain; STATE s_ZombiePain[5][2] = { { - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[0][1]}, - {PLAYER_NINJA_STAND_R0 + 1, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[0][1]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[0][1]}, + {PLAYER_NINJA_STAND_R0 + 1, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[0][1]}, }, { - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[1][1]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[1][1]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[1][1]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[1][1]}, }, { - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[2][1]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[2][1]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[2][1]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[2][1]}, }, { - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[3][1]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[3][1]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[3][1]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[3][1]}, }, { - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[4][1]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_PAIN_RATE, &AF(DoZombiePain), &s_ZombiePain[4][1]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[4][1]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_PAIN_RATE, DoZombiePain, &s_ZombiePain[4][1]}, }, }; @@ -244,48 +246,49 @@ STATE* sg_ZombiePain[] = ////////////////////// #define ZOMBIE_NUKE_RATE 18 +ANIMATOR InitEnemyNuke; STATE s_ZombieNuke[5][6] = { { - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[0][1]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE, &AF(NullZombie), &s_ZombieNuke[0][2]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyNuke), &s_ZombieNuke[0][3]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[0][4]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieNuke[0][5]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE, &AF(DoZombieMove), &s_ZombieNuke[0][5]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[0][1]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE, NullZombie, &s_ZombieNuke[0][2]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyNuke, &s_ZombieNuke[0][3]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[0][4]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieNuke[0][5]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_NUKE_RATE, DoZombieMove, &s_ZombieNuke[0][5]}, }, { - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[1][1]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE, &AF(NullZombie), &s_ZombieNuke[1][2]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyNuke), &s_ZombieNuke[1][3]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[1][4]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieNuke[1][5]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE, &AF(DoZombieMove), &s_ZombieNuke[1][5]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[1][1]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE, NullZombie, &s_ZombieNuke[1][2]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyNuke, &s_ZombieNuke[1][3]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[1][4]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieNuke[1][5]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_NUKE_RATE, DoZombieMove, &s_ZombieNuke[1][5]}, }, { - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[2][1]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, &AF(NullZombie), &s_ZombieNuke[2][2]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyNuke), &s_ZombieNuke[2][3]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[2][4]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieNuke[2][5]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, &AF(DoZombieMove), &s_ZombieNuke[2][5]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[2][1]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, NullZombie, &s_ZombieNuke[2][2]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyNuke, &s_ZombieNuke[2][3]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[2][4]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieNuke[2][5]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, DoZombieMove, &s_ZombieNuke[2][5]}, }, { - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[3][1]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, &AF(NullZombie), &s_ZombieNuke[3][2]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyNuke), &s_ZombieNuke[3][3]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[3][4]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieNuke[3][5]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, &AF(DoZombieMove), &s_ZombieNuke[3][5]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[3][1]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, NullZombie, &s_ZombieNuke[3][2]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyNuke, &s_ZombieNuke[3][3]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[3][4]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieNuke[3][5]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, DoZombieMove, &s_ZombieNuke[3][5]}, }, { - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[4][1]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, &AF(NullZombie), &s_ZombieNuke[4][2]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyNuke), &s_ZombieNuke[4][3]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, &AF(NullZombie), &s_ZombieNuke[4][4]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieNuke[4][5]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, &AF(DoZombieMove), &s_ZombieNuke[4][5]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[4][1]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, NullZombie, &s_ZombieNuke[4][2]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyNuke, &s_ZombieNuke[4][3]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE * 2, NullZombie, &s_ZombieNuke[4][4]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieNuke[4][5]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_NUKE_RATE, DoZombieMove, &s_ZombieNuke[4][5]}, }, }; @@ -306,43 +309,44 @@ STATE* sg_ZombieNuke[] = ////////////////////// #define ZOMBIE_ROCKET_RATE 14 +ANIMATOR InitEnemyRocket; STATE s_ZombieRocket[5][5] = { { - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieRocket[0][1]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_ZombieRocket[0][2]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieRocket[0][3]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRocket[0][4]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieRocket[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieRocket[0][1]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_ZombieRocket[0][2]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieRocket[0][3]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRocket[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieRocket[0][4]}, }, { - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieRocket[1][1]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_ZombieRocket[1][2]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieRocket[1][3]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRocket[1][4]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieRocket[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieRocket[1][1]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_ZombieRocket[1][2]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieRocket[1][3]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRocket[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieRocket[1][4]}, }, { - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieRocket[2][1]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_ZombieRocket[2][2]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieRocket[2][3]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRocket[2][4]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieRocket[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieRocket[2][1]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_ZombieRocket[2][2]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieRocket[2][3]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRocket[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieRocket[2][4]}, }, { - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieRocket[3][1]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_ZombieRocket[3][2]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieRocket[3][3]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRocket[3][4]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieRocket[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieRocket[3][1]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_ZombieRocket[3][2]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieRocket[3][3]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRocket[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieRocket[3][4]}, }, { - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieRocket[4][1]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRocket), &s_ZombieRocket[4][2]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieRocket[4][3]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRocket[4][4]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieRocket[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieRocket[4][1]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyRocket, &s_ZombieRocket[4][2]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieRocket[4][3]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRocket[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieRocket[4][4]}, }, }; @@ -363,43 +367,44 @@ STATE* sg_ZombieRocket[] = ////////////////////// #define ZOMBIE_RAIL_RATE 14 +ANIMATOR InitEnemyRail; STATE s_ZombieRail[5][5] = { { - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_RAIL_RATE * 2, &AF(NullZombie), &s_ZombieRail[0][1]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRail), &s_ZombieRail[0][2]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_RAIL_RATE, &AF(NullZombie), &s_ZombieRail[0][3]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRail[0][4]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_RAIL_RATE, &AF(DoZombieMove), &s_ZombieRail[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_RAIL_RATE * 2, NullZombie, &s_ZombieRail[0][1]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyRail, &s_ZombieRail[0][2]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_RAIL_RATE, NullZombie, &s_ZombieRail[0][3]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRail[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_RAIL_RATE, DoZombieMove, &s_ZombieRail[0][4]}, }, { - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_RAIL_RATE * 2, &AF(NullZombie), &s_ZombieRail[1][1]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRail), &s_ZombieRail[1][2]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_RAIL_RATE, &AF(NullZombie), &s_ZombieRail[1][3]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRail[1][4]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_RAIL_RATE, &AF(DoZombieMove), &s_ZombieRail[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_RAIL_RATE * 2, NullZombie, &s_ZombieRail[1][1]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyRail, &s_ZombieRail[1][2]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_RAIL_RATE, NullZombie, &s_ZombieRail[1][3]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRail[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_RAIL_RATE, DoZombieMove, &s_ZombieRail[1][4]}, }, { - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_RAIL_RATE * 2, &AF(NullZombie), &s_ZombieRail[2][1]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRail), &s_ZombieRail[2][2]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_RAIL_RATE, &AF(NullZombie), &s_ZombieRail[2][3]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRail[2][4]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_RAIL_RATE, &AF(DoZombieMove), &s_ZombieRail[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_RAIL_RATE * 2, NullZombie, &s_ZombieRail[2][1]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyRail, &s_ZombieRail[2][2]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_RAIL_RATE, NullZombie, &s_ZombieRail[2][3]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRail[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_RAIL_RATE, DoZombieMove, &s_ZombieRail[2][4]}, }, { - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_RAIL_RATE * 2, &AF(NullZombie), &s_ZombieRail[3][1]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRail), &s_ZombieRail[3][2]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_RAIL_RATE, &AF(NullZombie), &s_ZombieRail[3][3]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRail[3][4]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_RAIL_RATE, &AF(DoZombieMove), &s_ZombieRail[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_RAIL_RATE * 2, NullZombie, &s_ZombieRail[3][1]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyRail, &s_ZombieRail[3][2]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_RAIL_RATE, NullZombie, &s_ZombieRail[3][3]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRail[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_RAIL_RATE, DoZombieMove, &s_ZombieRail[3][4]}, }, { - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_RAIL_RATE * 2, &AF(NullZombie), &s_ZombieRail[4][1]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyRail), &s_ZombieRail[4][2]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_RAIL_RATE, &AF(NullZombie), &s_ZombieRail[4][3]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieRail[4][4]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_RAIL_RATE, &AF(DoZombieMove), &s_ZombieRail[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_RAIL_RATE * 2, NullZombie, &s_ZombieRail[4][1]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyRail, &s_ZombieRail[4][2]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_RAIL_RATE, NullZombie, &s_ZombieRail[4][3]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieRail[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_RAIL_RATE, DoZombieMove, &s_ZombieRail[4][4]}, }, }; @@ -420,43 +425,44 @@ STATE* sg_ZombieRail[] = ////////////////////// #define ZOMBIE_ROCKET_RATE 14 +ANIMATOR InitSpriteGrenade; STATE s_ZombieGrenade[5][5] = { { - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieGrenade[0][1]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_ZombieGrenade[0][2]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieGrenade[0][3]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieGrenade[0][4]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieGrenade[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieGrenade[0][1]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_ZombieGrenade[0][2]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieGrenade[0][3]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieGrenade[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieGrenade[0][4]}, }, { - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieGrenade[1][1]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_ZombieGrenade[1][2]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieGrenade[1][3]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieGrenade[1][4]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieGrenade[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieGrenade[1][1]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_ZombieGrenade[1][2]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieGrenade[1][3]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieGrenade[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieGrenade[1][4]}, }, { - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieGrenade[2][1]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_ZombieGrenade[2][2]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieGrenade[2][3]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieGrenade[2][4]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieGrenade[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieGrenade[2][1]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_ZombieGrenade[2][2]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieGrenade[2][3]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieGrenade[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieGrenade[2][4]}, }, { - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieGrenade[3][1]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_ZombieGrenade[3][2]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieGrenade[3][3]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieGrenade[3][4]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieGrenade[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieGrenade[3][1]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_ZombieGrenade[3][2]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieGrenade[3][3]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieGrenade[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieGrenade[3][4]}, }, { - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE * 2, &AF(NullZombie), &s_ZombieGrenade[4][1]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitSpriteGrenade), &s_ZombieGrenade[4][2]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, &AF(NullZombie), &s_ZombieGrenade[4][3]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieGrenade[4][4]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, &AF(DoZombieMove), &s_ZombieGrenade[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE * 2, NullZombie, &s_ZombieGrenade[4][1]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitSpriteGrenade, &s_ZombieGrenade[4][2]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, NullZombie, &s_ZombieGrenade[4][3]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieGrenade[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_ROCKET_RATE, DoZombieMove, &s_ZombieGrenade[4][4]}, }, }; @@ -478,43 +484,44 @@ STATE* sg_ZombieGrenade[] = ////////////////////// #define ZOMBIE_FLASHBOMB_RATE 14 +ANIMATOR InitFlashBomb; STATE s_ZombieFlashBomb[5][5] = { { - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_FLASHBOMB_RATE * 2, &AF(NullZombie), &s_ZombieFlashBomb[0][1]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_ZombieFlashBomb[0][2]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(NullZombie), &s_ZombieFlashBomb[0][3]}, - {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieFlashBomb[0][4]}, - {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(DoZombieMove), &s_ZombieFlashBomb[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_FLASHBOMB_RATE * 2, NullZombie, &s_ZombieFlashBomb[0][1]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_ZombieFlashBomb[0][2]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_FLASHBOMB_RATE, NullZombie, &s_ZombieFlashBomb[0][3]}, + {PLAYER_NINJA_STAND_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieFlashBomb[0][4]}, + {PLAYER_NINJA_STAND_R0 + 0, ZOMBIE_FLASHBOMB_RATE, DoZombieMove, &s_ZombieFlashBomb[0][4]}, }, { - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_FLASHBOMB_RATE * 2, &AF(NullZombie), &s_ZombieFlashBomb[1][1]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_ZombieFlashBomb[1][2]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(NullZombie), &s_ZombieFlashBomb[1][3]}, - {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieFlashBomb[1][4]}, - {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(DoZombieMove), &s_ZombieFlashBomb[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_FLASHBOMB_RATE * 2, NullZombie, &s_ZombieFlashBomb[1][1]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_ZombieFlashBomb[1][2]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_FLASHBOMB_RATE, NullZombie, &s_ZombieFlashBomb[1][3]}, + {PLAYER_NINJA_STAND_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieFlashBomb[1][4]}, + {PLAYER_NINJA_STAND_R1 + 0, ZOMBIE_FLASHBOMB_RATE, DoZombieMove, &s_ZombieFlashBomb[1][4]}, }, { - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_FLASHBOMB_RATE * 2, &AF(NullZombie), &s_ZombieFlashBomb[2][1]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_ZombieFlashBomb[2][2]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(NullZombie), &s_ZombieFlashBomb[2][3]}, - {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieFlashBomb[2][4]}, - {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(DoZombieMove), &s_ZombieFlashBomb[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_FLASHBOMB_RATE * 2, NullZombie, &s_ZombieFlashBomb[2][1]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_ZombieFlashBomb[2][2]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_FLASHBOMB_RATE, NullZombie, &s_ZombieFlashBomb[2][3]}, + {PLAYER_NINJA_STAND_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieFlashBomb[2][4]}, + {PLAYER_NINJA_STAND_R2 + 0, ZOMBIE_FLASHBOMB_RATE, DoZombieMove, &s_ZombieFlashBomb[2][4]}, }, { - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_FLASHBOMB_RATE * 2, &AF(NullZombie), &s_ZombieFlashBomb[3][1]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_ZombieFlashBomb[3][2]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(NullZombie), &s_ZombieFlashBomb[3][3]}, - {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieFlashBomb[3][4]}, - {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(DoZombieMove), &s_ZombieFlashBomb[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_FLASHBOMB_RATE * 2, NullZombie, &s_ZombieFlashBomb[3][1]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_ZombieFlashBomb[3][2]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_FLASHBOMB_RATE, NullZombie, &s_ZombieFlashBomb[3][3]}, + {PLAYER_NINJA_STAND_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieFlashBomb[3][4]}, + {PLAYER_NINJA_STAND_R3 + 0, ZOMBIE_FLASHBOMB_RATE, DoZombieMove, &s_ZombieFlashBomb[3][4]}, }, { - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_FLASHBOMB_RATE * 2, &AF(NullZombie), &s_ZombieFlashBomb[4][1]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitFlashBomb), &s_ZombieFlashBomb[4][2]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(NullZombie), &s_ZombieFlashBomb[4][3]}, - {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieFlashBomb[4][4]}, - {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_FLASHBOMB_RATE, &AF(DoZombieMove), &s_ZombieFlashBomb[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_FLASHBOMB_RATE * 2, NullZombie, &s_ZombieFlashBomb[4][1]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitFlashBomb, &s_ZombieFlashBomb[4][2]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_FLASHBOMB_RATE, NullZombie, &s_ZombieFlashBomb[4][3]}, + {PLAYER_NINJA_STAND_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieFlashBomb[4][4]}, + {PLAYER_NINJA_STAND_R4 + 0, ZOMBIE_FLASHBOMB_RATE, DoZombieMove, &s_ZombieFlashBomb[4][4]}, }, }; @@ -535,103 +542,104 @@ STATE* sg_ZombieFlashBomb[] = ////////////////////// #define ZOMBIE_UZI_RATE 8 +ANIMATOR InitEnemyUzi,CheckFire; STATE s_ZombieUzi[5][17] = { { - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][1]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_ZombieUzi[0][2]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][3]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[0][4]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][5]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[0][6]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][7]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[0][8]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][9]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[0][10]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][11]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[0][12]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][13]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[0][14]}, - {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[0][15]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[0][16]}, - {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieUzi[0][16]}, - }, - { - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][1]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_ZombieUzi[1][2]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][3]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[1][4]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][5]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[1][6]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][7]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[1][8]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][9]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[1][10]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][11]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[1][12]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][13]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[1][14]}, - {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[1][15]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[1][16]}, - {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieUzi[1][16]}, - }, - { - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][1]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_ZombieUzi[2][2]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][3]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[2][4]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][5]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[2][6]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][7]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[2][8]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][9]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[2][10]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][11]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[2][12]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][13]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[2][14]}, - {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[2][15]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[2][16]}, - {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieUzi[2][16]}, - }, - { - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][1]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_ZombieUzi[3][2]}, - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][3]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[3][4]}, - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][5]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[3][6]}, - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][7]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[3][8]}, - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][9]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[3][10]}, - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][11]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[3][12]}, - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][13]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[3][14]}, - {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[3][15]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[3][16]}, - {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieUzi[3][16]}, - }, - { - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][1]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(CheckFire), &s_ZombieUzi[4][2]}, - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][3]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[4][4]}, - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][5]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[4][6]}, - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][7]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[4][8]}, - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][9]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[4][10]}, - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][11]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[4][12]}, - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][13]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[4][14]}, - {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, &AF(NullZombie), &s_ZombieUzi[4][15]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitEnemyUzi), &s_ZombieUzi[4][16]}, - {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, &AF(InitActorDecide), &s_ZombieUzi[4][16]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][1]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_ZombieUzi[0][2]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][3]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[0][4]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][5]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[0][6]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][7]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[0][8]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][9]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[0][10]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][11]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[0][12]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][13]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[0][14]}, + {PLAYER_NINJA_SHOOT_R0 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[0][15]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[0][16]}, + {PLAYER_NINJA_SHOOT_R0 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieUzi[0][16]}, + }, + { + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][1]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_ZombieUzi[1][2]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][3]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[1][4]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][5]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[1][6]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][7]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[1][8]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][9]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[1][10]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][11]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[1][12]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][13]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[1][14]}, + {PLAYER_NINJA_SHOOT_R1 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[1][15]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[1][16]}, + {PLAYER_NINJA_SHOOT_R1 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieUzi[1][16]}, + }, + { + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][1]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_ZombieUzi[2][2]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][3]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[2][4]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][5]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[2][6]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][7]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[2][8]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][9]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[2][10]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][11]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[2][12]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][13]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[2][14]}, + {PLAYER_NINJA_SHOOT_R2 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[2][15]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[2][16]}, + {PLAYER_NINJA_SHOOT_R2 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieUzi[2][16]}, + }, + { + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][1]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_ZombieUzi[3][2]}, + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][3]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[3][4]}, + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][5]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[3][6]}, + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][7]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[3][8]}, + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][9]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[3][10]}, + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][11]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[3][12]}, + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][13]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[3][14]}, + {PLAYER_NINJA_SHOOT_R3 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[3][15]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[3][16]}, + {PLAYER_NINJA_SHOOT_R3 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieUzi[3][16]}, + }, + { + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][1]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, CheckFire, &s_ZombieUzi[4][2]}, + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][3]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[4][4]}, + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][5]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[4][6]}, + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][7]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[4][8]}, + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][9]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[4][10]}, + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][11]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[4][12]}, + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][13]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[4][14]}, + {PLAYER_NINJA_SHOOT_R4 + 0, ZOMBIE_UZI_RATE, NullZombie, &s_ZombieUzi[4][15]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitEnemyUzi, &s_ZombieUzi[4][16]}, + {PLAYER_NINJA_SHOOT_R4 + 0, 0 | SF_QUICK_CALL, InitActorDecide, &s_ZombieUzi[4][16]}, }, }; @@ -656,19 +664,19 @@ STATE* sg_ZombieUzi[] = STATE s_ZombieFall[5][1] = { { - {PLAYER_NINJA_JUMP_R0 + 3, ZOMBIE_FALL_RATE, &AF(DoZombieMove), &s_ZombieFall[0][0]}, + {PLAYER_NINJA_JUMP_R0 + 3, ZOMBIE_FALL_RATE, DoZombieMove, &s_ZombieFall[0][0]}, }, { - {PLAYER_NINJA_JUMP_R1 + 3, ZOMBIE_FALL_RATE, &AF(DoZombieMove), &s_ZombieFall[1][0]}, + {PLAYER_NINJA_JUMP_R1 + 3, ZOMBIE_FALL_RATE, DoZombieMove, &s_ZombieFall[1][0]}, }, { - {PLAYER_NINJA_JUMP_R2 + 3, ZOMBIE_FALL_RATE, &AF(DoZombieMove), &s_ZombieFall[2][0]}, + {PLAYER_NINJA_JUMP_R2 + 3, ZOMBIE_FALL_RATE, DoZombieMove, &s_ZombieFall[2][0]}, }, { - {PLAYER_NINJA_JUMP_R3 + 3, ZOMBIE_FALL_RATE, &AF(DoZombieMove), &s_ZombieFall[3][0]}, + {PLAYER_NINJA_JUMP_R3 + 3, ZOMBIE_FALL_RATE, DoZombieMove, &s_ZombieFall[3][0]}, }, { - {PLAYER_NINJA_JUMP_R4 + 3, ZOMBIE_FALL_RATE, &AF(DoZombieMove), &s_ZombieFall[4][0]}, + {PLAYER_NINJA_JUMP_R4 + 3, ZOMBIE_FALL_RATE, DoZombieMove, &s_ZombieFall[4][0]}, } }; @@ -747,13 +755,14 @@ ACTOR_ACTION_SET ZombieActionSet = int SetupZombie(DSWActor* actor) { + ANIMATOR DoActorDecide; actor->user.Health = 100; - actor->user.__legacyState.StateEnd = &s_ZombiePain[0][0]; - actor->user.__legacyState.Rot = sg_ZombieRun; + actor->user.StateEnd = &s_ZombiePain[0][0]; + actor->user.Rot = sg_ZombieRun; actor->spr.scale = DVector2(PLAYER_NINJA_XREPEAT, PLAYER_NINJA_YREPEAT); - actor->user.__legacyState.Attrib = &ZombieAttrib; + actor->user.Attrib = &ZombieAttrib; EnemyDefaults(actor, &ZombieActionSet, &ZombiePersonality); ChangeState(actor, s_ZombieRun[0]); @@ -894,7 +903,7 @@ int DoZombieMove(DSWActor* actor) ActorFollowTrack(actor, ACTORMOVETICS); else { - actor->callAction(); + (*actor->user.ActorActionFunc)(actor); } // stay on floor unless doing certain things @@ -973,8 +982,23 @@ int DoZombiePain(DSWActor* actor) #include "saveable.h" +static saveable_code saveable_zombie_code[] = +{ + SAVE_CODE(DoZombieMove), + SAVE_CODE(NullZombie), + SAVE_CODE(DoZombiePain), +}; + static saveable_data saveable_zombie_data[] = { + SAVE_DATA(ZombieBattle), + SAVE_DATA(ZombieOffense), + SAVE_DATA(ZombieBroadcast), + SAVE_DATA(ZombieSurprised), + SAVE_DATA(ZombieEvasive), + SAVE_DATA(ZombieLostTarget), + SAVE_DATA(ZombieCloseRange), + SAVE_DATA(ZombiePersonality), SAVE_DATA(ZombieAttrib), @@ -1006,7 +1030,8 @@ static saveable_data saveable_zombie_data[] = saveable_module saveable_zombie = { // code - nullptr, 0, + saveable_zombie_code, + SIZ(saveable_zombie_code), // data saveable_zombie_data, diff --git a/wadsrc/static/zscript/games/duke/dukeactor.zs b/wadsrc/static/zscript/games/duke/dukeactor.zs index 47ca5413341..3202ce9c106 100644 --- a/wadsrc/static/zscript/games/duke/dukeactor.zs +++ b/wadsrc/static/zscript/games/duke/dukeactor.zs @@ -362,6 +362,7 @@ class DukeActor : CoreActor native virtual native void Tick(); + virtual void BeginPlay() {} virtual void StaticSetup() {} virtual void onHit(DukeActor hitter) { checkhitdefault(hitter); } virtual void onHurt(DukePlayer p) {} diff --git a/wadsrc/static/zscript/games/sw/swactor.zs b/wadsrc/static/zscript/games/sw/swactor.zs index d7807ec3115..49a1f34c33d 100644 --- a/wadsrc/static/zscript/games/sw/swactor.zs +++ b/wadsrc/static/zscript/games/sw/swactor.zs @@ -1,317 +1,3 @@ class SWActor : CoreActor native { - const MAX_SPEED = 4; - const MAX_ACTOR_CLOSE_ATTACK = 2; - const MAX_ACTOR_ATTACK = 6; - - meta int16 CloseAttackPercent[MAX_ACTOR_CLOSE_ATTACK]; - meta int16 AttackPercent[MAX_ACTOR_ATTACK]; - - meta int16 Speeds[MAX_SPEED]; - meta int8 TicAdjust[MAX_SPEED]; - meta int8 MaxWeapons; - meta Sound AmbientSound; - meta Sound AlertSound; - meta Sound AttackSound; - meta Sound PainSound; - meta Sound DieSound; - meta Sound ExtraSound1; - meta Sound ExtraSound2; - meta Sound ExtraSound3; - meta Sound ExtraSound4; - meta Sound ExtraSound5; - meta Sound ExtraSound6; - - // all ANIMATORs. - native int DoBunnyMove(); - native int DoBunnyGrowUp(); - native int DoBunnyEat(); - native int DoBunnyScrew(); - native int NullBunny(); - native int InitBunnySlash(); - native int DoBunnyStandKill(); - native int DoBunnyPain(); - native int DoBunnyMoveJump(); - native int DoBunnyBeginJumpAttack(); - native int BunnySpew(); - - native int DoCoolgMove(); - native int NullCoolg(); - native int InitCoolgBash(); - native int InitCoolgFire(); - native int DoCoolgPain(); - native int DoCoolgDeath(); - native int DoCoolgBirth(); - - native int DoCoolieMove(); - native int CooliePain(); - native int NullCoolie(); - native int SpawnCoolieExp(); - native int DoCoolieWaitBirth(); - native int SpawnCoolg(); - - native int DoEelMove(); - native int InitEelFire(); - native int NullEel(); - native int DoEelDeath(); - - native int NullGirlNinja(); - native int DoGirlNinjaMove(); - native int DoGirlNinjaPain(); - native int DoGirlNinjaSpecial(); - - native int InitEnemyMine(); - native int InitEnemyCrossbow(); - - native int DoGoroMove(); - native int NullGoro(); - native int InitGoroChop(); - native int DoGoroPain(); - native int InitEnemyFireball(); - - native int DoHornetMove(); - native int DoHornetDeath(); - - native int BloodSprayFall(); - native int DoSuicide(); - native int DoRadiationCloud(); - native int DoChemBomb(); - native int DoCaltrops(); - native int DoCaltropsStick(); - native int DoCarryFlag(); - native int DoCarryFlagNoDet(); - native int DoFlag(); - native int DoPhosphorus(); - native int DoBloodSpray(); - native int DoWallBloodDrip(); - - native int DoLavaMove(); - native int NullLava(); - native int InitLavaThrow(); - native int InitLavaFlame(); - - native int DoActorDeathMove(); - native int QueueFloorBlood(); - native int DoActorDebris(); - native int InitActorDecide(); - - native int DoToiletGirl(); - native int ToiletGirlPain(); - native int ToiletGirlUzi(); - native int InitEnemyUzi(); - native int DoWashGirl(); - native int WashGirlUzi(); - native int DoTrashCan(); - native int TrashCanPain(); - native int PachinkoLightOperate(); - native int Pachinko1Operate(); - native int PachinkoCheckWin(); - native int DoCarGirl(); - native int CarGirlPain(); - native int CarGirlUzi(); - native int DoMechanicGirl(); - native int MechanicGirlPain(); - native int MechanicGirlDrill(); - native int DoSailorGirl(); - native int SailorGirlPain(); - native int SailorGirlThrow(); - native int DoPruneGirl(); - native int PruneGirlPain(); - native int WashGirlPain(); - - native int DoNinjaMove(); - native int NullNinja(); - native int DoNinjaCeiling(); - native int DoNinjaPain(); - native int InitEnemyStar(); - native int InitEnemyMirv(); - native int InitEnemyNapalm(); - native int InitEnemyRocket(); - native int InitSpriteGrenade(); - native int InitFlashBomb(); - native int CheckFire(); - native int DoNinjaSpecial(); - native int DoNinjaGrabThroat(); - native int DoNinjaHariKari(); - - native int DoRipperMove(); - native int NullRipper(); - native int InitRipperSlash(); - native int DoRipperStandHeart(); - native int DoRipperHang(); - native int DoRipperPain(); - native int DoRipperMoveJump(); - native int DoRipperBeginJumpAttack(); - native int DoRipperHangJF(); - - native int DoRipper2Move(); - native int NullRipper2(); - native int DoRipper2Hang(); - native int DoRipper2Pain(); - native int DoRipper2MoveJump(); - native int DoRipper2BeginJumpAttack(); - native int DoRipper2HangJF(); - native int DoRipper2StandHeart(); - native int ChestRipper2(); - - native int DoSerpMove(); - native int NullSerp(); - native int InitSerpSlash(); - native int InitSerpRing(); - native int InitSerpSpell(); - native int InitSerpMonstSpell(); - native int DoDeathSpecial(); - - native int DoSkelMove(); - native int NullSkel(); - native int InitSkelSlash(); - native int InitSkelSpell(); - native int DoSkelPain(); - native int DoSkelInitTeleport(); - native int DoSkelTeleport(); - native int DoSkelTermTeleport(); - - native int DoSkullWait(); - native int DoSerpRing(); - native int DoSkullJump(); - native int DoDamageTest(); - native int DoSkullSpawnShrap(); - native int DoBettyWait(); - native int DoBettyJump(); - - native int DoSumoMove(); - native int NullSumo(); - native int InitSumoFart(); - native int InitSumoClap(); - native int InitSumoStomp(); - native int DoSumoDeathMelt(); - - native int DoDefaultStat(); - native int DoPuff(); - native int DoRailPuff(); - native int DoTracer(); - native int DoEMP(); - native int DoEMPBurst(); - native int DoFastShrapJumpFall(); - - native int DoTankShell(); - native int DoVehicleSmoke(); - native int DoWaterSmoke(); - native int DoUziSmoke(); - native int DoShotgunSmoke(); - native int DoUziBullet(); - native int DoBubble(); - native int DoCrossBolt(); - native int DoStar(); - native int DoLavaBoulder(); - native int DoShrapDamage(); - native int DoVulcanBoulder(); - native int DoGrenade(); - native int DoMineStuck(); - native int DoMine(); - native int DoMineSpark(); - native int DoMeteor(); - native int DoMirvMissile(); - native int DoSerpMeteor(); - native int DoSpear(); - native int DoRocket(); - native int DoRail(); - native int DoLaser(); - native int DoMicro(); - native int DoMicroMini(); - native int DoBoltThinMan(); - native int DoBoltSeeker(); - native int DoBoltFatMan(); - native int DoBoltShrapnel(); - native int DoCoolgFire(); - native int DoCoolgDrip(); - native int DoPlasma(); - native int DoShrapJumpFall(); - - native int DoTracerShrap(); - native int DoVomitSplash(); - native int DoVomit(); - native int DoMirv(); - native int DoBloodWorm(); - native int DoNapalm(); - native int DoRing(); - native int DoFireball(); - native int DoBreakFlames(); - native int DoFireballFlames(); - native int DoSectorExp(); - native int SpawnShrapX(); - native int DoExpDamageTest(); - native int DoMineExpMine(); - native int DoMineExp(); - native int SpawnGrenadeSmallExp(); - native int DoElectro(); - native int DoTeleRipper(); - native int DoPlasmaDone(); - native int DoPlasmaFountain(); - native int DoFootPrints(); - native int DoPlayerSpriteReset(); - - native int DoFloorBlood(); - native int DoWallBlood(); - - native int DoGet(); - native int DoCoin(); - native int DoFireFly(); - - native int DoZillaMove(); - native int DoZillaStomp(); - native int NullZilla(); - native int InitZillaRail(); - native int InitZillaRocket(); - native int DoZillaDeathMelt(); - - native int DoZombieMove(); - native int NullZombie(); - native int DoZombiePain(); - native int InitEnemyNuke(); - native int InitEnemyRail(); - - native int InitActorRunAway(); - native int InitActorAttack(); - native int InitActorDuck(); - native int InitActorEvade(); - native int InitActorFindPlayer(); - native int InitActorMoveCloser(); - native int InitActorReposition(); - native int InitActorWanderAround(); - native int InitCoolgCircle(); - native int InitCoolieCharge(); - native int InitHornetCircle(); - native int InitHornetSting(); - native int InitRipper2Charge(); - native int InitRipper2Hang(); - native int InitRipperHang(); - native int InitActorRunToward(); - native int InitActorSetDecide(); - native int DoActorDecide(); - native int DoActorMoveJump(); - native int DoActorDuck(); - native int NinjaJumpActionFunc(); - native int DoActorMoveCloser(); - native int DoActorAttack(); - native int DoActorReposition(); - native int DoCoolgCircle(); - native int DoHornetCircle(); - native int GenerateDrips(); - native int DoSpawnSpot(); - native int DoGrating(); - native int DoVator(); - native int DoVatorAuto(); - native int DoRotator(); - native int DoActorPause(); - native int DoSlidor(); - native int DoSpike(); - native int DoSpikeAuto(); - native int DoLavaErupt(); - native int SpawnVehicleSmoke(); - native int DoLaserStart(); - native int DoTracerStart(); - native int DoRailStart(); - native int DoGenerateSewerDebris(); - }