Fix memory leaks in debugconsole & CrowdControl (#6383)
This commit is contained in:
@@ -110,8 +110,8 @@ static bool ActorSpawnHandler(std::shared_ptr<Ship::Console> Console, const std:
|
|||||||
|
|
||||||
static bool KillPlayerHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>&,
|
static bool KillPlayerHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>&,
|
||||||
std::string* output) {
|
std::string* output) {
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::SetPlayerHealth();
|
GameInteractionEffect::SetPlayerHealth effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = 0;
|
effect.parameters[0] = 0;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
INFO_MESSAGE("[SOH] You've met with a terrible fate, haven't you?");
|
INFO_MESSAGE("[SOH] You've met with a terrible fate, haven't you?");
|
||||||
@@ -142,8 +142,8 @@ static bool SetPlayerHealthHandler(std::shared_ptr<Ship::Console> Console, const
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::SetPlayerHealth();
|
GameInteractionEffect::SetPlayerHealth effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = health;
|
effect.parameters[0] = health;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
INFO_MESSAGE("[SOH] Player health updated to %d", health);
|
INFO_MESSAGE("[SOH] Player health updated to %d", health);
|
||||||
@@ -159,7 +159,6 @@ static bool LoadSceneHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
gSaveContext.respawnFlag = 0;
|
gSaveContext.respawnFlag = 0;
|
||||||
gSaveContext.seqId = 0xFF;
|
gSaveContext.seqId = 0xFF;
|
||||||
gSaveContext.gameMode = GAMEMODE_NORMAL;
|
gSaveContext.gameMode = GAMEMODE_NORMAL;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,9 +256,9 @@ static bool AddAmmoHandler(std::shared_ptr<Ship::Console> Console, const std::ve
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::AddOrTakeAmmo();
|
GameInteractionEffect::AddOrTakeAmmo effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = amount;
|
effect.parameters[0] = amount;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[1] = it->second;
|
effect.parameters[1] = it->second;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -298,9 +297,9 @@ static bool TakeAmmoHandler(std::shared_ptr<Ship::Console> Console, const std::v
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::AddOrTakeAmmo();
|
GameInteractionEffect::AddOrTakeAmmo effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = -amount;
|
effect.parameters[0] = -amount;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[1] = it->second;
|
effect.parameters[1] = it->second;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -354,7 +353,6 @@ static bool BottleHandler(std::shared_ptr<Ship::Console> Console, const std::vec
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// I dont think you can do OOB with just this
|
|
||||||
gSaveContext.inventory.items[0x11 + slot] = it->second;
|
gSaveContext.inventory.items[0x11 + slot] = it->second;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -612,7 +610,7 @@ static bool InvisibleHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::InvisibleLink();
|
GameInteractionEffect::InvisibleLink effect;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -639,8 +637,8 @@ static bool GiantLinkHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::ModifyLinkSize();
|
GameInteractionEffect::ModifyLinkSize effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = GI_LINK_SIZE_GIANT;
|
effect.parameters[0] = GI_LINK_SIZE_GIANT;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -667,8 +665,8 @@ static bool MinishLinkHandler(std::shared_ptr<Ship::Console> Console, const std:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::ModifyLinkSize();
|
GameInteractionEffect::ModifyLinkSize effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = GI_LINK_SIZE_MINISH;
|
effect.parameters[0] = GI_LINK_SIZE_MINISH;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -700,8 +698,8 @@ static bool AddHeartContainerHandler(std::shared_ptr<Ship::Console> Console, con
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyHeartContainers();
|
GameInteractionEffect::ModifyHeartContainers effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = hearts;
|
effect.parameters[0] = hearts;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
INFO_MESSAGE("[SOH] Added %d heart containers", hearts);
|
INFO_MESSAGE("[SOH] Added %d heart containers", hearts);
|
||||||
@@ -732,8 +730,8 @@ static bool RemoveHeartContainerHandler(std::shared_ptr<Ship::Console> Console,
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyHeartContainers();
|
GameInteractionEffect::ModifyHeartContainers effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = -hearts;
|
effect.parameters[0] = -hearts;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
INFO_MESSAGE("[SOH] Removed %d heart containers", hearts);
|
INFO_MESSAGE("[SOH] Removed %d heart containers", hearts);
|
||||||
@@ -751,10 +749,10 @@ static bool GravityHandler(std::shared_ptr<Ship::Console> Console, const std::ve
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyGravity();
|
GameInteractionEffect::ModifyGravity effect;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] =
|
effect.parameters[0] =
|
||||||
Ship::Math::clamp(std::stoi(args[1], nullptr, 10), GI_GRAVITY_LEVEL_LIGHT, GI_GRAVITY_LEVEL_HEAVY);
|
Ship::Math::clamp(std::stoi(args[1], nullptr, 10), GI_GRAVITY_LEVEL_LIGHT, GI_GRAVITY_LEVEL_HEAVY);
|
||||||
} catch (std::invalid_argument const& ex) {
|
} catch (std::invalid_argument const& ex) {
|
||||||
ERROR_MESSAGE("[SOH] Gravity value must be a number.");
|
ERROR_MESSAGE("[SOH] Gravity value must be a number.");
|
||||||
@@ -786,7 +784,7 @@ static bool NoUIHandler(std::shared_ptr<Ship::Console> Console, const std::vecto
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::NoUI();
|
GameInteractionEffect::NoUI effect;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
|
|
||||||
@@ -801,7 +799,7 @@ static bool NoUIHandler(std::shared_ptr<Ship::Console> Console, const std::vecto
|
|||||||
|
|
||||||
static bool FreezeHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
static bool FreezeHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
||||||
std::string* output) {
|
std::string* output) {
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::FreezePlayer();
|
GameInteractionEffect::FreezePlayer effect;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -819,10 +817,10 @@ static bool DefenseModifierHandler(std::shared_ptr<Ship::Console> Console, const
|
|||||||
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyDefenseModifier();
|
GameInteractionEffect::ModifyDefenseModifier effect;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = std::stoi(args[1], nullptr, 10);
|
effect.parameters[0] = std::stoi(args[1], nullptr, 10);
|
||||||
} catch (std::invalid_argument const& ex) {
|
} catch (std::invalid_argument const& ex) {
|
||||||
ERROR_MESSAGE("[SOH] Defense modifier value must be a number.");
|
ERROR_MESSAGE("[SOH] Defense modifier value must be a number.");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -830,8 +828,7 @@ static bool DefenseModifierHandler(std::shared_ptr<Ship::Console> Console, const
|
|||||||
|
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
INFO_MESSAGE("[SOH] Defense modifier set to %d",
|
INFO_MESSAGE("[SOH] Defense modifier set to %d", effect.parameters[0]);
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0]);
|
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
INFO_MESSAGE("[SOH] Command failed: Could not set defense modifier.");
|
INFO_MESSAGE("[SOH] Command failed: Could not set defense modifier.");
|
||||||
@@ -845,7 +842,7 @@ static bool DamageHandler(std::shared_ptr<Ship::Console> Console, const std::vec
|
|||||||
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyHealth();
|
GameInteractionEffect::ModifyHealth effect;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int value = std::stoi(args[1], nullptr, 10);
|
int value = std::stoi(args[1], nullptr, 10);
|
||||||
@@ -854,7 +851,7 @@ static bool DamageHandler(std::shared_ptr<Ship::Console> Console, const std::vec
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = -value;
|
effect.parameters[0] = -value;
|
||||||
} catch (std::invalid_argument const& ex) {
|
} catch (std::invalid_argument const& ex) {
|
||||||
ERROR_MESSAGE("[SOH] Damage value must be a number.");
|
ERROR_MESSAGE("[SOH] Damage value must be a number.");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -876,7 +873,7 @@ static bool HealHandler(std::shared_ptr<Ship::Console> Console, const std::vecto
|
|||||||
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyHealth();
|
GameInteractionEffect::ModifyHealth effect;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int value = std::stoi(args[1], nullptr, 10);
|
int value = std::stoi(args[1], nullptr, 10);
|
||||||
@@ -885,7 +882,7 @@ static bool HealHandler(std::shared_ptr<Ship::Console> Console, const std::vecto
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = value;
|
effect.parameters[0] = value;
|
||||||
} catch (std::invalid_argument const& ex) {
|
} catch (std::invalid_argument const& ex) {
|
||||||
ERROR_MESSAGE("[SOH] Damage value must be a number.");
|
ERROR_MESSAGE("[SOH] Damage value must be a number.");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -903,7 +900,7 @@ static bool HealHandler(std::shared_ptr<Ship::Console> Console, const std::vecto
|
|||||||
|
|
||||||
static bool FillMagicHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
static bool FillMagicHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
||||||
std::string* output) {
|
std::string* output) {
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::FillMagic();
|
GameInteractionEffect::FillMagic effect;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -917,7 +914,7 @@ static bool FillMagicHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
|
|
||||||
static bool EmptyMagicHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
static bool EmptyMagicHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
||||||
std::string* output) {
|
std::string* output) {
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::EmptyMagic();
|
GameInteractionEffect::EmptyMagic effect;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -944,7 +941,7 @@ static bool NoZHandler(std::shared_ptr<Ship::Console> Console, const std::vector
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::DisableZTargeting();
|
GameInteractionEffect::DisableZTargeting effect;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
|
|
||||||
@@ -972,7 +969,7 @@ static bool OneHitKOHandler(std::shared_ptr<Ship::Console> Console, const std::v
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::OneHitKO();
|
GameInteractionEffect::OneHitKO effect;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
|
|
||||||
@@ -1000,7 +997,7 @@ static bool PacifistHandler(std::shared_ptr<Ship::Console> Console, const std::v
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::PacifistMode();
|
GameInteractionEffect::PacifistMode effect;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
|
|
||||||
@@ -1028,8 +1025,8 @@ static bool PaperLinkHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::ModifyLinkSize();
|
GameInteractionEffect::ModifyLinkSize effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = GI_LINK_SIZE_PAPER;
|
effect.parameters[0] = GI_LINK_SIZE_PAPER;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
|
|
||||||
@@ -1057,7 +1054,7 @@ static bool RainstormHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::WeatherRainstorm();
|
GameInteractionEffect::WeatherRainstorm effect;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
|
|
||||||
@@ -1085,7 +1082,7 @@ static bool ReverseControlsHandler(std::shared_ptr<Ship::Console> Console, const
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
RemovableGameInteractionEffect* effect = new GameInteractionEffect::ReverseControls();
|
GameInteractionEffect::ReverseControls effect;
|
||||||
GameInteractionEffectQueryResult result =
|
GameInteractionEffectQueryResult result =
|
||||||
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
state ? GameInteractor::ApplyEffect(effect) : GameInteractor::RemoveEffect(effect);
|
||||||
|
|
||||||
@@ -1105,10 +1102,10 @@ static bool UpdateRupeesHandler(std::shared_ptr<Ship::Console> Console, const st
|
|||||||
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyRupees();
|
GameInteractionEffect::ModifyRupees effect;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = std::stoi(args[1], nullptr, 10);
|
effect.parameters[0] = std::stoi(args[1], nullptr, 10);
|
||||||
} catch (std::invalid_argument const& ex) {
|
} catch (std::invalid_argument const& ex) {
|
||||||
ERROR_MESSAGE("[SOH] Rupee value must be a number.");
|
ERROR_MESSAGE("[SOH] Rupee value must be a number.");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1130,10 +1127,10 @@ static bool SpeedModifierHandler(std::shared_ptr<Ship::Console> Console, const s
|
|||||||
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ModifyMovementSpeedMultiplier();
|
GameInteractionEffect::ModifyMovementSpeedMultiplier effect;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = std::stoi(args[1], nullptr, 10);
|
effect.parameters[0] = std::stoi(args[1], nullptr, 10);
|
||||||
} catch (std::invalid_argument const& ex) {
|
} catch (std::invalid_argument const& ex) {
|
||||||
ERROR_MESSAGE("[SOH] Speed modifier value must be a number.");
|
ERROR_MESSAGE("[SOH] Speed modifier value must be a number.");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1168,8 +1165,8 @@ static bool BootsHandler(std::shared_ptr<Ship::Console> Console, const std::vect
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ForceEquipBoots();
|
GameInteractionEffect::ForceEquipBoots effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = it->second;
|
effect.parameters[0] = it->second;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -1200,8 +1197,8 @@ static bool GiveShieldHandler(std::shared_ptr<Ship::Console> Console, const std:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::GiveOrTakeShield();
|
GameInteractionEffect::GiveOrTakeShield effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = it->second;
|
effect.parameters[0] = it->second;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -1226,8 +1223,8 @@ static bool TakeShieldHandler(std::shared_ptr<Ship::Console> Console, const std:
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::GiveOrTakeShield();
|
GameInteractionEffect::GiveOrTakeShield effect;
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = it->second * -1;
|
effect.parameters[0] = it->second * -1;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -1245,7 +1242,7 @@ static bool KnockbackHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
ERROR_MESSAGE("[SOH] Unexpected arguments passed");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::KnockbackPlayer();
|
GameInteractionEffect::KnockbackPlayer effect;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
int value = std::stoi(args[1], nullptr, 10);
|
int value = std::stoi(args[1], nullptr, 10);
|
||||||
@@ -1254,7 +1251,7 @@ static bool KnockbackHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect)->parameters[0] = value;
|
effect.parameters[0] = value;
|
||||||
} catch (std::invalid_argument const& ex) {
|
} catch (std::invalid_argument const& ex) {
|
||||||
ERROR_MESSAGE("[SOH] Knockback value must be a number.");
|
ERROR_MESSAGE("[SOH] Knockback value must be a number.");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -1272,7 +1269,7 @@ static bool KnockbackHandler(std::shared_ptr<Ship::Console> Console, const std::
|
|||||||
|
|
||||||
static bool ElectrocuteHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
static bool ElectrocuteHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
||||||
std::string* output) {
|
std::string* output) {
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::ElectrocutePlayer();
|
GameInteractionEffect::ElectrocutePlayer effect;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
@@ -1286,7 +1283,7 @@ static bool ElectrocuteHandler(std::shared_ptr<Ship::Console> Console, const std
|
|||||||
|
|
||||||
static bool BurnHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
static bool BurnHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args,
|
||||||
std::string* output) {
|
std::string* output) {
|
||||||
GameInteractionEffectBase* effect = new GameInteractionEffect::BurnPlayer();
|
GameInteractionEffect::BurnPlayer effect;
|
||||||
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
GameInteractionEffectQueryResult result = GameInteractor::ApplyEffect(effect);
|
||||||
|
|
||||||
if (result == GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
|
|||||||
@@ -38,11 +38,9 @@ GameInteractionEffectQueryResult RemovableGameInteractionEffect::CanBeRemoved()
|
|||||||
|
|
||||||
GameInteractionEffectQueryResult RemovableGameInteractionEffect::Remove() {
|
GameInteractionEffectQueryResult RemovableGameInteractionEffect::Remove() {
|
||||||
GameInteractionEffectQueryResult result = CanBeRemoved();
|
GameInteractionEffectQueryResult result = CanBeRemoved();
|
||||||
if (result != GameInteractionEffectQueryResult::Possible) {
|
if (result == GameInteractionEffectQueryResult::Possible) {
|
||||||
return result;
|
_Remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
_Remove();
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,16 +21,16 @@ extern PlayState* gPlayState;
|
|||||||
|
|
||||||
// MARK: - Effects
|
// MARK: - Effects
|
||||||
|
|
||||||
GameInteractionEffectQueryResult GameInteractor::CanApplyEffect(GameInteractionEffectBase* effect) {
|
GameInteractionEffectQueryResult GameInteractor::CanApplyEffect(GameInteractionEffectBase& effect) {
|
||||||
return effect->CanBeApplied();
|
return effect.CanBeApplied();
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectQueryResult GameInteractor::ApplyEffect(GameInteractionEffectBase* effect) {
|
GameInteractionEffectQueryResult GameInteractor::ApplyEffect(GameInteractionEffectBase& effect) {
|
||||||
return effect->Apply();
|
return effect.Apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
GameInteractionEffectQueryResult GameInteractor::RemoveEffect(RemovableGameInteractionEffect* effect) {
|
GameInteractionEffectQueryResult GameInteractor::RemoveEffect(RemovableGameInteractionEffect& effect) {
|
||||||
return effect->Remove();
|
return effect.Remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Helpers
|
// MARK: - Helpers
|
||||||
|
|||||||
@@ -220,9 +220,9 @@ class GameInteractor {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Effects
|
// Effects
|
||||||
static GameInteractionEffectQueryResult CanApplyEffect(GameInteractionEffectBase* effect);
|
static GameInteractionEffectQueryResult CanApplyEffect(GameInteractionEffectBase& effect);
|
||||||
static GameInteractionEffectQueryResult ApplyEffect(GameInteractionEffectBase* effect);
|
static GameInteractionEffectQueryResult ApplyEffect(GameInteractionEffectBase& effect);
|
||||||
static GameInteractionEffectQueryResult RemoveEffect(RemovableGameInteractionEffect* effect);
|
static GameInteractionEffectQueryResult RemoveEffect(RemovableGameInteractionEffect& effect);
|
||||||
|
|
||||||
// Game Hooks
|
// Game Hooks
|
||||||
HOOK_ID nextHookId = 1;
|
HOOK_ID nextHookId = 1;
|
||||||
|
|||||||
@@ -83,7 +83,8 @@ void CrowdControl::ProcessActiveEffects() {
|
|||||||
if (effect->timeRemaining <= 0) {
|
if (effect->timeRemaining <= 0) {
|
||||||
it = activeEffects.erase(std::remove(activeEffects.begin(), activeEffects.end(), effect),
|
it = activeEffects.erase(std::remove(activeEffects.begin(), activeEffects.end(), effect),
|
||||||
activeEffects.end());
|
activeEffects.end());
|
||||||
GameInteractor::RemoveEffect(dynamic_cast<RemovableGameInteractionEffect*>(effect->giEffect));
|
GameInteractor::RemoveEffect(
|
||||||
|
*dynamic_cast<RemovableGameInteractionEffect*>(effect->giEffect.get()));
|
||||||
delete effect;
|
delete effect;
|
||||||
} else {
|
} else {
|
||||||
// If we have a success after previously being paused, tell CC to resume timer.
|
// If we have a success after previously being paused, tell CC to resume timer.
|
||||||
@@ -140,7 +141,7 @@ CrowdControl::EffectResult CrowdControl::ExecuteEffect(Effect* effect) {
|
|||||||
giResult =
|
giResult =
|
||||||
GameInteractor::RawAction::SpawnActor(effect->spawnParams[0], effect->spawnParams[1], effect->viewerName);
|
GameInteractor::RawAction::SpawnActor(effect->spawnParams[0], effect->spawnParams[1], effect->viewerName);
|
||||||
} else {
|
} else {
|
||||||
giResult = GameInteractor::ApplyEffect(effect->giEffect);
|
giResult = GameInteractor::ApplyEffect(*effect->giEffect.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
return TranslateGiEnum(giResult);
|
return TranslateGiEnum(giResult);
|
||||||
@@ -149,7 +150,7 @@ CrowdControl::EffectResult CrowdControl::ExecuteEffect(Effect* effect) {
|
|||||||
/// Checks if effect can be applied -- should not be used to check for spawn enemy effects.
|
/// Checks if effect can be applied -- should not be used to check for spawn enemy effects.
|
||||||
CrowdControl::EffectResult CrowdControl::CanApplyEffect(Effect* effect) {
|
CrowdControl::EffectResult CrowdControl::CanApplyEffect(Effect* effect) {
|
||||||
assert(effect->category != kEffectCatSpawnEnemy || effect->category != kEffectCatSpawnActor);
|
assert(effect->category != kEffectCatSpawnEnemy || effect->category != kEffectCatSpawnActor);
|
||||||
GameInteractionEffectQueryResult giResult = GameInteractor::CanApplyEffect(effect->giEffect);
|
GameInteractionEffectQueryResult giResult = GameInteractor::CanApplyEffect(*effect->giEffect.get());
|
||||||
|
|
||||||
return TranslateGiEnum(giResult);
|
return TranslateGiEnum(giResult);
|
||||||
}
|
}
|
||||||
@@ -279,346 +280,382 @@ CrowdControl::Effect* CrowdControl::ParseMessage(nlohmann::json dataReceived) {
|
|||||||
case kEffectTakeHalfDamage:
|
case kEffectTakeHalfDamage:
|
||||||
effect->category = kEffectCatDamageTaken;
|
effect->category = kEffectCatDamageTaken;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyDefenseModifier();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyDefenseModifier>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 2;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 2;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeDoubleDamage:
|
case kEffectTakeDoubleDamage:
|
||||||
effect->category = kEffectCatDamageTaken;
|
effect->category = kEffectCatDamageTaken;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyDefenseModifier();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyDefenseModifier>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = -2;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = -2;
|
||||||
break;
|
break;
|
||||||
case kEffectOneHitKo:
|
case kEffectOneHitKo:
|
||||||
effect->category = kEffectCatDamageTaken;
|
effect->category = kEffectCatDamageTaken;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::OneHitKO();
|
effect->giEffect = std::make_unique<GameInteractionEffect::OneHitKO>();
|
||||||
break;
|
break;
|
||||||
case kEffectInvincibility:
|
case kEffectInvincibility:
|
||||||
effect->category = kEffectCatDamageTaken;
|
effect->category = kEffectCatDamageTaken;
|
||||||
effect->timeRemaining = 15000;
|
effect->timeRemaining = 15000;
|
||||||
effect->giEffect = new GameInteractionEffect::PlayerInvincibility();
|
effect->giEffect = std::make_unique<GameInteractionEffect::PlayerInvincibility>();
|
||||||
break;
|
break;
|
||||||
break;
|
break;
|
||||||
case kEffectIncreaseSpeed:
|
case kEffectIncreaseSpeed:
|
||||||
effect->category = kEffectCatSpeed;
|
effect->category = kEffectCatSpeed;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyMovementSpeedMultiplier();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyMovementSpeedMultiplier>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 2;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 2;
|
||||||
break;
|
break;
|
||||||
case kEffectDecreaseSpeed:
|
case kEffectDecreaseSpeed:
|
||||||
effect->category = kEffectCatSpeed;
|
effect->category = kEffectCatSpeed;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyMovementSpeedMultiplier();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyMovementSpeedMultiplier>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = -2;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = -2;
|
||||||
break;
|
break;
|
||||||
case kEffectLowGravity:
|
case kEffectLowGravity:
|
||||||
effect->category = kEffectCatGravity;
|
effect->category = kEffectCatGravity;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyGravity();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyGravity>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_GRAVITY_LEVEL_LIGHT;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_GRAVITY_LEVEL_LIGHT;
|
||||||
break;
|
break;
|
||||||
case kEffectHighGravity:
|
case kEffectHighGravity:
|
||||||
effect->category = kEffectCatGravity;
|
effect->category = kEffectCatGravity;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyGravity();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyGravity>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_GRAVITY_LEVEL_HEAVY;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_GRAVITY_LEVEL_HEAVY;
|
||||||
break;
|
break;
|
||||||
case kEffectForceIronBoots:
|
case kEffectForceIronBoots:
|
||||||
effect->category = kEffectCatBoots;
|
effect->category = kEffectCatBoots;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ForceEquipBoots();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ForceEquipBoots>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = EQUIP_VALUE_BOOTS_IRON;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
EQUIP_VALUE_BOOTS_IRON;
|
||||||
break;
|
break;
|
||||||
case kEffectForceHoverBoots:
|
case kEffectForceHoverBoots:
|
||||||
effect->category = kEffectCatBoots;
|
effect->category = kEffectCatBoots;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ForceEquipBoots();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ForceEquipBoots>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] =
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
EQUIP_VALUE_BOOTS_HOVER;
|
EQUIP_VALUE_BOOTS_HOVER;
|
||||||
break;
|
break;
|
||||||
case kEffectSlipperyFloor:
|
case kEffectSlipperyFloor:
|
||||||
effect->category = kEffectCatSlipperyFloor;
|
effect->category = kEffectCatSlipperyFloor;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::SlipperyFloor();
|
effect->giEffect = std::make_unique<GameInteractionEffect::SlipperyFloor>();
|
||||||
break;
|
break;
|
||||||
case kEffectNoLedgeGrabs:
|
case kEffectNoLedgeGrabs:
|
||||||
effect->category = kEffectCatNoLedgeGrabs;
|
effect->category = kEffectCatNoLedgeGrabs;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::DisableLedgeGrabs();
|
effect->giEffect = std::make_unique<GameInteractionEffect::DisableLedgeGrabs>();
|
||||||
break;
|
break;
|
||||||
case kEffectRandomWind:
|
case kEffectRandomWind:
|
||||||
effect->category = kEffectCatRandomWind;
|
effect->category = kEffectCatRandomWind;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::RandomWind();
|
effect->giEffect = std::make_unique<GameInteractionEffect::RandomWind>();
|
||||||
break;
|
break;
|
||||||
case kEffectRandomBonks:
|
case kEffectRandomBonks:
|
||||||
effect->category = kEffectCatRandomBonks;
|
effect->category = kEffectCatRandomBonks;
|
||||||
effect->timeRemaining = 60000;
|
effect->timeRemaining = 60000;
|
||||||
effect->giEffect = new GameInteractionEffect::RandomBonks();
|
effect->giEffect = std::make_unique<GameInteractionEffect::RandomBonks>();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Hurt or Heal Link
|
// Hurt or Heal Link
|
||||||
case kEffectEmptyHeart:
|
case kEffectEmptyHeart:
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyHealth();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyHealth>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
receivedParameter * -1;
|
||||||
break;
|
break;
|
||||||
case kEffectFillHeart:
|
case kEffectFillHeart:
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyHealth();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyHealth>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
receivedParameter;
|
||||||
break;
|
break;
|
||||||
case kEffectKnockbackLinkWeak:
|
case kEffectKnockbackLinkWeak:
|
||||||
effect->giEffect = new GameInteractionEffect::KnockbackPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::KnockbackPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 1;
|
||||||
break;
|
break;
|
||||||
case kEffectKnockbackLinkStrong:
|
case kEffectKnockbackLinkStrong:
|
||||||
effect->giEffect = new GameInteractionEffect::KnockbackPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::KnockbackPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 3;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 3;
|
||||||
break;
|
break;
|
||||||
case kEffectKnockbackLinkMega:
|
case kEffectKnockbackLinkMega:
|
||||||
effect->giEffect = new GameInteractionEffect::KnockbackPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::KnockbackPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 6;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 6;
|
||||||
break;
|
break;
|
||||||
case kEffectBurnLink:
|
case kEffectBurnLink:
|
||||||
effect->giEffect = new GameInteractionEffect::BurnPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::BurnPlayer>();
|
||||||
break;
|
break;
|
||||||
case kEffectFreezeLink:
|
case kEffectFreezeLink:
|
||||||
effect->giEffect = new GameInteractionEffect::FreezePlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::FreezePlayer>();
|
||||||
break;
|
break;
|
||||||
case kEffectElectrocuteLink:
|
case kEffectElectrocuteLink:
|
||||||
effect->giEffect = new GameInteractionEffect::ElectrocutePlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ElectrocutePlayer>();
|
||||||
break;
|
break;
|
||||||
case kEffectKillLink:
|
case kEffectKillLink:
|
||||||
effect->giEffect = new GameInteractionEffect::SetPlayerHealth();
|
effect->giEffect = std::make_unique<GameInteractionEffect::SetPlayerHealth>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 0;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Give Items and Consumables
|
// Give Items and Consumables
|
||||||
case kEffectAddHeartContainer:
|
case kEffectAddHeartContainer:
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyHeartContainers();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyHeartContainers>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 1;
|
||||||
break;
|
break;
|
||||||
case kEffectFillMagic:
|
case kEffectFillMagic:
|
||||||
effect->giEffect = new GameInteractionEffect::FillMagic();
|
effect->giEffect = std::make_unique<GameInteractionEffect::FillMagic>();
|
||||||
break;
|
break;
|
||||||
case kEffectAddRupees:
|
case kEffectAddRupees:
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyRupees();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyRupees>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
receivedParameter;
|
||||||
break;
|
break;
|
||||||
case kEffectGiveDekuShield:
|
case kEffectGiveDekuShield:
|
||||||
effect->giEffect = new GameInteractionEffect::GiveOrTakeShield();
|
effect->giEffect = std::make_unique<GameInteractionEffect::GiveOrTakeShield>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = ITEM_SHIELD_DEKU;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = ITEM_SHIELD_DEKU;
|
||||||
break;
|
break;
|
||||||
case kEffectGiveHylianShield:
|
case kEffectGiveHylianShield:
|
||||||
effect->giEffect = new GameInteractionEffect::GiveOrTakeShield();
|
effect->giEffect = std::make_unique<GameInteractionEffect::GiveOrTakeShield>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = ITEM_SHIELD_HYLIAN;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
ITEM_SHIELD_HYLIAN;
|
||||||
break;
|
break;
|
||||||
case kEffectRefillSticks:
|
case kEffectRefillSticks:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_STICK;
|
receivedParameter;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_STICK;
|
||||||
break;
|
break;
|
||||||
case kEffectRefillNuts:
|
case kEffectRefillNuts:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_NUT;
|
receivedParameter;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_NUT;
|
||||||
break;
|
break;
|
||||||
case kEffectRefillBombs:
|
case kEffectRefillBombs:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_BOMB;
|
receivedParameter;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_BOMB;
|
||||||
break;
|
break;
|
||||||
case kEffectRefillSeeds:
|
case kEffectRefillSeeds:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_SLINGSHOT;
|
receivedParameter;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_SLINGSHOT;
|
||||||
break;
|
break;
|
||||||
case kEffectRefillArrows:
|
case kEffectRefillArrows:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_BOW;
|
receivedParameter;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_BOW;
|
||||||
break;
|
break;
|
||||||
case kEffectRefillBombchus:
|
case kEffectRefillBombchus:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_BOMBCHU;
|
receivedParameter;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_BOMBCHU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Take Items and Consumables
|
// Take Items and Consumables
|
||||||
case kEffectRemoveHeartContainer:
|
case kEffectRemoveHeartContainer:
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyHeartContainers();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyHeartContainers>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = -1;
|
||||||
break;
|
break;
|
||||||
case kEffectEmptyMagic:
|
case kEffectEmptyMagic:
|
||||||
effect->giEffect = new GameInteractionEffect::EmptyMagic();
|
effect->giEffect = std::make_unique<GameInteractionEffect::EmptyMagic>();
|
||||||
break;
|
break;
|
||||||
case kEffectRemoveRupees:
|
case kEffectRemoveRupees:
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyRupees();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyRupees>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
receivedParameter * -1;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeDekuShield:
|
case kEffectTakeDekuShield:
|
||||||
effect->giEffect = new GameInteractionEffect::GiveOrTakeShield();
|
effect->giEffect = std::make_unique<GameInteractionEffect::GiveOrTakeShield>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = -ITEM_SHIELD_DEKU;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
-ITEM_SHIELD_DEKU;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeHylianShield:
|
case kEffectTakeHylianShield:
|
||||||
effect->giEffect = new GameInteractionEffect::GiveOrTakeShield();
|
effect->giEffect = std::make_unique<GameInteractionEffect::GiveOrTakeShield>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = -ITEM_SHIELD_HYLIAN;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
-ITEM_SHIELD_HYLIAN;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeSticks:
|
case kEffectTakeSticks:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_STICK;
|
receivedParameter * -1;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_STICK;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeNuts:
|
case kEffectTakeNuts:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_NUT;
|
receivedParameter * -1;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_NUT;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeBombs:
|
case kEffectTakeBombs:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_BOMB;
|
receivedParameter * -1;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_BOMB;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeSeeds:
|
case kEffectTakeSeeds:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_SLINGSHOT;
|
receivedParameter * -1;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_SLINGSHOT;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeArrows:
|
case kEffectTakeArrows:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_BOW;
|
receivedParameter * -1;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_BOW;
|
||||||
break;
|
break;
|
||||||
case kEffectTakeBombchus:
|
case kEffectTakeBombchus:
|
||||||
effect->giEffect = new GameInteractionEffect::AddOrTakeAmmo();
|
effect->giEffect = std::make_unique<GameInteractionEffect::AddOrTakeAmmo>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = receivedParameter * -1;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[1] = ITEM_BOMBCHU;
|
receivedParameter * -1;
|
||||||
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[1] = ITEM_BOMBCHU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Link Size Modifiers
|
// Link Size Modifiers
|
||||||
case kEffectGiantLink:
|
case kEffectGiantLink:
|
||||||
effect->category = kEffectCatLinkSize;
|
effect->category = kEffectCatLinkSize;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyLinkSize();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyLinkSize>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_LINK_SIZE_GIANT;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_LINK_SIZE_GIANT;
|
||||||
break;
|
break;
|
||||||
case kEffectMinishLink:
|
case kEffectMinishLink:
|
||||||
effect->category = kEffectCatLinkSize;
|
effect->category = kEffectCatLinkSize;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyLinkSize();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyLinkSize>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_LINK_SIZE_MINISH;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_LINK_SIZE_MINISH;
|
||||||
break;
|
break;
|
||||||
case kEffectPaperLink:
|
case kEffectPaperLink:
|
||||||
effect->category = kEffectCatLinkSize;
|
effect->category = kEffectCatLinkSize;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyLinkSize();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyLinkSize>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_LINK_SIZE_PAPER;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_LINK_SIZE_PAPER;
|
||||||
break;
|
break;
|
||||||
case kEffectSquishedLink:
|
case kEffectSquishedLink:
|
||||||
effect->category = kEffectCatLinkSize;
|
effect->category = kEffectCatLinkSize;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::ModifyLinkSize();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ModifyLinkSize>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_LINK_SIZE_SQUISHED;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_LINK_SIZE_SQUISHED;
|
||||||
break;
|
break;
|
||||||
case kEffectInvisibleLink:
|
case kEffectInvisibleLink:
|
||||||
effect->category = kEffectCatLinkSize;
|
effect->category = kEffectCatLinkSize;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::InvisibleLink();
|
effect->giEffect = std::make_unique<GameInteractionEffect::InvisibleLink>();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Generic Effects
|
// Generic Effects
|
||||||
case kEffectRandomBombTimer:
|
case kEffectRandomBombTimer:
|
||||||
effect->category = kEffectCatRandomBombFuseTimer;
|
effect->category = kEffectCatRandomBombFuseTimer;
|
||||||
effect->timeRemaining = 60000;
|
effect->timeRemaining = 60000;
|
||||||
effect->giEffect = new GameInteractionEffect::RandomBombFuseTimer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::RandomBombFuseTimer>();
|
||||||
break;
|
break;
|
||||||
case kEffectSetTimeToDawn:
|
case kEffectSetTimeToDawn:
|
||||||
effect->giEffect = new GameInteractionEffect::SetTimeOfDay();
|
effect->giEffect = std::make_unique<GameInteractionEffect::SetTimeOfDay>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TIMEOFDAY_DAWN;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TIMEOFDAY_DAWN;
|
||||||
break;
|
break;
|
||||||
case kEffectSetTimeToDusk:
|
case kEffectSetTimeToDusk:
|
||||||
effect->giEffect = new GameInteractionEffect::SetTimeOfDay();
|
effect->giEffect = std::make_unique<GameInteractionEffect::SetTimeOfDay>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TIMEOFDAY_DUSK;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TIMEOFDAY_DUSK;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Visual Effects
|
// Visual Effects
|
||||||
case kEffectNoUi:
|
case kEffectNoUi:
|
||||||
effect->category = kEffectCatUi;
|
effect->category = kEffectCatUi;
|
||||||
effect->timeRemaining = 60000;
|
effect->timeRemaining = 60000;
|
||||||
effect->giEffect = new GameInteractionEffect::NoUI();
|
effect->giEffect = std::make_unique<GameInteractionEffect::NoUI>();
|
||||||
break;
|
break;
|
||||||
case kEffectRainstorm:
|
case kEffectRainstorm:
|
||||||
effect->category = kEffectCatWeather;
|
effect->category = kEffectCatWeather;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::WeatherRainstorm();
|
effect->giEffect = std::make_unique<GameInteractionEffect::WeatherRainstorm>();
|
||||||
break;
|
break;
|
||||||
case kEffectDebugMode:
|
case kEffectDebugMode:
|
||||||
effect->category = kEffectCatDebugMode;
|
effect->category = kEffectCatDebugMode;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::SetCollisionViewer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::SetCollisionViewer>();
|
||||||
break;
|
break;
|
||||||
case kEffectRandomCosmetics:
|
case kEffectRandomCosmetics:
|
||||||
effect->giEffect = new GameInteractionEffect::RandomizeCosmetics();
|
effect->giEffect = std::make_unique<GameInteractionEffect::RandomizeCosmetics>();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Controls
|
// Controls
|
||||||
case kEffectNoZButton:
|
case kEffectNoZButton:
|
||||||
effect->category = kEffectCatNoZ;
|
effect->category = kEffectCatNoZ;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::DisableZTargeting();
|
effect->giEffect = std::make_unique<GameInteractionEffect::DisableZTargeting>();
|
||||||
break;
|
break;
|
||||||
case kEffectReverseControls:
|
case kEffectReverseControls:
|
||||||
effect->category = kEffectCatReverseControls;
|
effect->category = kEffectCatReverseControls;
|
||||||
effect->timeRemaining = 60000;
|
effect->timeRemaining = 60000;
|
||||||
effect->giEffect = new GameInteractionEffect::ReverseControls();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ReverseControls>();
|
||||||
break;
|
break;
|
||||||
case kEffectPacifistMode:
|
case kEffectPacifistMode:
|
||||||
effect->category = kEffectCatPacifist;
|
effect->category = kEffectCatPacifist;
|
||||||
effect->timeRemaining = 15000;
|
effect->timeRemaining = 15000;
|
||||||
effect->giEffect = new GameInteractionEffect::PacifistMode();
|
effect->giEffect = std::make_unique<GameInteractionEffect::PacifistMode>();
|
||||||
break;
|
break;
|
||||||
case kEffectPressRandomButtons:
|
case kEffectPressRandomButtons:
|
||||||
effect->category = kEffectCatRandomButtons;
|
effect->category = kEffectCatRandomButtons;
|
||||||
effect->timeRemaining = 30000;
|
effect->timeRemaining = 30000;
|
||||||
effect->giEffect = new GameInteractionEffect::PressRandomButton();
|
effect->giEffect = std::make_unique<GameInteractionEffect::PressRandomButton>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = 30;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = 30;
|
||||||
break;
|
break;
|
||||||
case kEffectClearCbuttons:
|
case kEffectClearCbuttons:
|
||||||
effect->giEffect = new GameInteractionEffect::ClearAssignedButtons();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ClearAssignedButtons>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_BUTTONS_CBUTTONS;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_BUTTONS_CBUTTONS;
|
||||||
break;
|
break;
|
||||||
case kEffectClearDpad:
|
case kEffectClearDpad:
|
||||||
effect->giEffect = new GameInteractionEffect::ClearAssignedButtons();
|
effect->giEffect = std::make_unique<GameInteractionEffect::ClearAssignedButtons>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_BUTTONS_DPAD;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] = GI_BUTTONS_DPAD;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// Teleport Player
|
// Teleport Player
|
||||||
case kEffectTpLinksHouse:
|
case kEffectTpLinksHouse:
|
||||||
effect->giEffect = new GameInteractionEffect::TeleportPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::TeleportPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TP_DEST_LINKSHOUSE;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TP_DEST_LINKSHOUSE;
|
||||||
break;
|
break;
|
||||||
case kEffectTpMinuet:
|
case kEffectTpMinuet:
|
||||||
effect->giEffect = new GameInteractionEffect::TeleportPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::TeleportPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TP_DEST_MINUET;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TP_DEST_MINUET;
|
||||||
break;
|
break;
|
||||||
case kEffectTpBolero:
|
case kEffectTpBolero:
|
||||||
effect->giEffect = new GameInteractionEffect::TeleportPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::TeleportPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TP_DEST_BOLERO;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TP_DEST_BOLERO;
|
||||||
break;
|
break;
|
||||||
case kEffectTpSerenade:
|
case kEffectTpSerenade:
|
||||||
effect->giEffect = new GameInteractionEffect::TeleportPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::TeleportPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TP_DEST_SERENADE;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TP_DEST_SERENADE;
|
||||||
break;
|
break;
|
||||||
case kEffectTpRequiem:
|
case kEffectTpRequiem:
|
||||||
effect->giEffect = new GameInteractionEffect::TeleportPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::TeleportPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TP_DEST_REQUIEM;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TP_DEST_REQUIEM;
|
||||||
break;
|
break;
|
||||||
case kEffectTpNocturne:
|
case kEffectTpNocturne:
|
||||||
effect->giEffect = new GameInteractionEffect::TeleportPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::TeleportPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TP_DEST_NOCTURNE;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TP_DEST_NOCTURNE;
|
||||||
break;
|
break;
|
||||||
case kEffectTpPrelude:
|
case kEffectTpPrelude:
|
||||||
effect->giEffect = new GameInteractionEffect::TeleportPlayer();
|
effect->giEffect = std::make_unique<GameInteractionEffect::TeleportPlayer>();
|
||||||
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect)->parameters[0] = GI_TP_DEST_PRELUDE;
|
dynamic_cast<ParameterizedGameInteractionEffect*>(effect->giEffect.get())->parameters[0] =
|
||||||
|
GI_TP_DEST_PRELUDE;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class CrowdControl : public Network {
|
|||||||
uint32_t spawnParams[2];
|
uint32_t spawnParams[2];
|
||||||
uint32_t category = 0;
|
uint32_t category = 0;
|
||||||
long timeRemaining;
|
long timeRemaining;
|
||||||
GameInteractionEffectBase* giEffect;
|
std::unique_ptr<GameInteractionEffectBase> giEffect;
|
||||||
std::string viewerName;
|
std::string viewerName;
|
||||||
|
|
||||||
// Metadata used while executing (only for timed effects)
|
// Metadata used while executing (only for timed effects)
|
||||||
|
|||||||
Reference in New Issue
Block a user