Skip to content

Commit 7bfd7d1

Browse files
authored
Merge pull request #50 from Andreas-W/specialpower_enums
add special power enums
2 parents 60a0f24 + 4540794 commit 7bfd7d1

File tree

4 files changed

+252
-5
lines changed

4 files changed

+252
-5
lines changed

GeneralsMD/Code/GameEngine/Include/Common/ActionManager.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,8 @@ class ActionManager : public SubsystemInterface
106106
Bool canPlayerGarrison( const Player *player, const Object *target, CommandSourceType commandSource );
107107

108108
protected:
109-
109+
//used to assign behaviour types for new special power enums
110+
SpecialPowerType getFallbackBehaviorType(SpecialPowerType type);
110111
};
111112

112113
// EXTERNALS //////////////////////////////////////////////////////////////////////////////////////

GeneralsMD/Code/GameEngine/Include/Common/SpecialPowerType.h

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,9 @@ enum SpecialPowerType CPP_11(: Int)
130130
SPECIAL_BATTLESHIP_BOMBARDMENT,
131131

132132
//new constants by OFS
133+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
134+
// NEW CONSTANTS NEED A BEHAVIORTYPE DEFINED IN THE SPECIALPOWER OR return one in getFallbackBehaviorType in ActionManager.cpp
135+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
133136
SPECIAL_ION_CANNON,
134137
SPECIAL_CLUSTER_MISSILE,
135138
SPECIAL_SUNSTORM_MISSILE,
@@ -138,11 +141,83 @@ enum SpecialPowerType CPP_11(: Int)
138141
SPECIAL_CHEMICAL_MISSILE,
139142
SPECIAL_CHRONOSPHERE,
140143

144+
AIRF_SPECIAL_HOLO_PLANES,
145+
AIRF_SPECIAL_PARADROP_AMERICA,
146+
AIRF_SPECIAL_HELICOPTER_AMBUSH,
147+
AIRF_SPECIAL_SPY_SATELLITE,
148+
AIRF_SPECIAL_CIA_INTELLIGENCE,
149+
AIRF_SPECIAL_SUPERSONIC_AIRSTRIKE,
150+
AIRF_SPECIAL_HEAVY_AIRSTRIKE,
151+
152+
SOCOM_SPECIAL_SUPPLY_DROP,
153+
SOCOM_SPECIAL_TANK_PARADROP,
154+
SOCOM_SPECIAL_COASTAL_BOMBARDEMENT,
155+
SOCOM_SPECIAL_AIR_DEPLOY_MARKER,
156+
157+
TANK_SPECIAL_CLUSTER_MINES,
158+
TANK_SPECIAL_TANK_PARADROP,
159+
TANK_SPECIAL_REPAIR_VEHICLES,
160+
TANK_SPECIAL_EMP_PULSE,
161+
TANK_SPECIAL_FRENZY,
162+
TANK_SPECIAL_PARADROP,
163+
TANK_SPECIAL_SPY_SATELLITE,
164+
TANK_SPECIAL_ARTILLERY_BARRAGE,
165+
TANK_SPECIAL_NAPALM_BOMB,
166+
TANK_SPECIAL_CHINA_CARPET_BOMB,
167+
168+
NUKE_SPECIAL_CASH_HACK,
169+
NUKE_SPECIAL_REPAIR_VEHICLES,
170+
NUKE_SPECIAL_FRENZY,
171+
NUKE_SPECIAL_SPY_SATELLITE,
172+
NUKE_SPECIAL_ARTILLERY_BARRAGE,
173+
NUKE_SPECIAL_NEUTRON_BOMB,
174+
NUKE_SPECIAL_NUCLEAR_AIRSTRIKE,
175+
NUKE_SPECIAL_CHINA_CARPET_BOMB,
176+
NUKE_SPECIAL_BALLISTIC_MISSILE,
177+
178+
SECW_SPECIAL_EMP_HACK,
179+
SECW_SPECIAL_HUNTER_SEEKER,
180+
SECW_SPECIAL_SPY_SATELLITE,
181+
SECW_SPECIAL_DRONE_GUNSHIP,
182+
SECW_SPECIAL_SYSTEM_HACK,
183+
184+
DEMO_SPECIAL_AMBUSH,
185+
DEMO_SPECIAL_REPAIR_VEHICLES,
186+
DEMO_SPECIAL_RADAR_VAN_SCAN,
187+
DEMO_SPECIAL_SNEAK_ATTACK,
188+
DEMO_SPECIAL_GPS_SCRAMBLER,
189+
DEMO_SPECIAL_FRENZY,
190+
DEMO_SPECIAL_ANTHRAX_BOMB,
191+
DEMO_SPECIAL_SUICIDE_PLANE,
192+
DEMO_SPECIAL_CARPET_BOMB,
193+
DEMO_SPECIAL_ARTILLERY_BARRAGE,
194+
195+
CHEM_SPECIAL_AMBUSH,
196+
CHEM_SPECIAL_REPAIR_VEHICLES,
197+
CHEM_SPECIAL_RADAR_VAN_SCAN,
198+
CHEM_SPECIAL_SNEAK_ATTACK,
199+
CHEM_SPECIAL_VIRUS,
200+
CHEM_SPECIAL_GPS_SCRAMBLER,
201+
CHEM_SPECIAL_FRENZY,
202+
CHEM_SPECIAL_ANTHRAX_BOMB,
203+
CHEM_SPECIAL_CARPET_BOMB,
204+
CHEM_SPECIAL_AIRSTRIKE,
205+
206+
FORT_SPECIAL_REPAIR_VEHICLES,
207+
FORT_SPECIAL_GPS_SCRAMBLER,
208+
FORT_SPECIAL_FRENZY,
209+
FORT_SPECIAL_AIRSTRIKE,
210+
FORT_SPECIAL_CARPET_BOMB,
211+
FORT_SPECIAL_ARTILLERY_BARRAGE,
141212

142213
SPECIALPOWER_COUNT,
214+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
215+
// NEW CONSTANTS NEED A BEHAVIORTYPE DEFINED IN THE SPECIALPOWER OR return one in getFallbackBehaviorType in ActionManager.cpp
216+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
143217
// don't forget to add new strings to SpecialPowerMaskType::s_bitNameList[]
144-
};
218+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
145219

220+
};
146221
// Definition of these names is located in SpecialPower.cpp
147222

148223
#endif /* __SPECIALPOWERTYPE_H__ */

GeneralsMD/Code/GameEngine/Source/Common/RTS/ActionManager.cpp

Lines changed: 105 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1528,7 +1528,7 @@ Bool ActionManager::canDoSpecialPowerAtLocation( const Object *obj, const Coord3
15281528
if (behaviorType >= SPECIAL_ION_CANNON) { //first custom SP
15291529
behaviorType = spTemplate->getSpecialPowerBehaviorType();
15301530
if (behaviorType == SPECIAL_INVALID) {
1531-
behaviorType = SPECIAL_NEUTRON_MISSILE; // Default to behave like neutron missile, common behavior
1531+
behaviorType = getFallbackBehaviorType(spTemplate->getSpecialPowerType()); // use predefined fallbacks
15321532
}
15331533
}
15341534

@@ -1679,7 +1679,7 @@ Bool ActionManager::canDoSpecialPowerAtObject( const Object *obj, const Object *
16791679
if (behaviorType >= SPECIAL_ION_CANNON) { //first custom SP
16801680
behaviorType = spTemplate->getSpecialPowerBehaviorType();
16811681
if (behaviorType == SPECIAL_INVALID) {
1682-
behaviorType == SPECIAL_NEUTRON_MISSILE; // Default to behave like neutron missile, common behavior
1682+
behaviorType = getFallbackBehaviorType(spTemplate->getSpecialPowerType()); // use predefined fallbacks
16831683
}
16841684
}
16851685

@@ -1913,6 +1913,108 @@ Bool ActionManager::canDoSpecialPowerAtObject( const Object *obj, const Object *
19131913
return false;
19141914
}
19151915

1916+
SpecialPowerType ActionManager::getFallbackBehaviorType(SpecialPowerType type) {
1917+
/*For newly defined special power types a default fallback enum for same behavior can be defined here*/
1918+
switch (type) {
1919+
case AIRF_SPECIAL_PARADROP_AMERICA:
1920+
case SOCOM_SPECIAL_SUPPLY_DROP:
1921+
case SOCOM_SPECIAL_TANK_PARADROP:
1922+
case TANK_SPECIAL_TANK_PARADROP:
1923+
case TANK_SPECIAL_PARADROP:
1924+
return SPECIAL_PARADROP_AMERICA;
1925+
1926+
case AIRF_SPECIAL_CIA_INTELLIGENCE:
1927+
case SECW_SPECIAL_HUNTER_SEEKER:
1928+
return SPECIAL_CIA_INTELLIGENCE;
1929+
1930+
case AIRF_SPECIAL_SPY_SATELLITE:
1931+
case TANK_SPECIAL_SPY_SATELLITE:
1932+
case NUKE_SPECIAL_SPY_SATELLITE:
1933+
case SECW_SPECIAL_SPY_SATELLITE:
1934+
return SPECIAL_SPY_SATELLITE;
1935+
1936+
case AIRF_SPECIAL_SUPERSONIC_AIRSTRIKE:
1937+
case AIRF_SPECIAL_HEAVY_AIRSTRIKE:
1938+
case SOCOM_SPECIAL_COASTAL_BOMBARDEMENT:
1939+
case TANK_SPECIAL_NAPALM_BOMB:
1940+
case TANK_SPECIAL_CHINA_CARPET_BOMB:
1941+
case NUKE_SPECIAL_NUCLEAR_AIRSTRIKE:
1942+
case NUKE_SPECIAL_CHINA_CARPET_BOMB:
1943+
case NUKE_SPECIAL_BALLISTIC_MISSILE:
1944+
case SECW_SPECIAL_SYSTEM_HACK:
1945+
case DEMO_SPECIAL_SUICIDE_PLANE:
1946+
case DEMO_SPECIAL_CARPET_BOMB:
1947+
case CHEM_SPECIAL_CARPET_BOMB:
1948+
case CHEM_SPECIAL_AIRSTRIKE:
1949+
case FORT_SPECIAL_AIRSTRIKE:
1950+
case FORT_SPECIAL_CARPET_BOMB:
1951+
return SPECIAL_CARPET_BOMB;
1952+
1953+
case AIRF_SPECIAL_HELICOPTER_AMBUSH:
1954+
case DEMO_SPECIAL_AMBUSH:
1955+
case CHEM_SPECIAL_AMBUSH:
1956+
return SPECIAL_AMBUSH;
1957+
1958+
case AIRF_SPECIAL_HOLO_PLANES:
1959+
case TANK_SPECIAL_FRENZY:
1960+
case NUKE_SPECIAL_FRENZY:
1961+
case DEMO_SPECIAL_FRENZY:
1962+
case CHEM_SPECIAL_FRENZY:
1963+
case FORT_SPECIAL_FRENZY:
1964+
return SPECIAL_FRENZY;
1965+
1966+
case TANK_SPECIAL_CLUSTER_MINES:
1967+
return SPECIAL_CLUSTER_MINES;
1968+
1969+
case TANK_SPECIAL_REPAIR_VEHICLES:
1970+
case NUKE_SPECIAL_REPAIR_VEHICLES:
1971+
case DEMO_SPECIAL_REPAIR_VEHICLES:
1972+
case CHEM_SPECIAL_REPAIR_VEHICLES:
1973+
case FORT_SPECIAL_REPAIR_VEHICLES:
1974+
return SPECIAL_REPAIR_VEHICLES;
1975+
1976+
case TANK_SPECIAL_EMP_PULSE:
1977+
case NUKE_SPECIAL_NEUTRON_BOMB:
1978+
case SECW_SPECIAL_EMP_HACK:
1979+
return SPECIAL_EMP_PULSE;
1980+
1981+
case TANK_SPECIAL_ARTILLERY_BARRAGE:
1982+
case NUKE_SPECIAL_ARTILLERY_BARRAGE:
1983+
case DEMO_SPECIAL_ARTILLERY_BARRAGE:
1984+
case FORT_SPECIAL_ARTILLERY_BARRAGE:
1985+
return SPECIAL_ARTILLERY_BARRAGE;
1986+
1987+
case NUKE_SPECIAL_CASH_HACK:
1988+
return SPECIAL_CASH_HACK;
1989+
1990+
case SECW_SPECIAL_DRONE_GUNSHIP:
1991+
return SPECIAL_SPECTRE_GUNSHIP;
1992+
1993+
case DEMO_SPECIAL_RADAR_VAN_SCAN:
1994+
case CHEM_SPECIAL_RADAR_VAN_SCAN:
1995+
return SPECIAL_RADAR_VAN_SCAN;
1996+
1997+
case DEMO_SPECIAL_SNEAK_ATTACK:
1998+
case CHEM_SPECIAL_SNEAK_ATTACK:
1999+
return SPECIAL_SNEAK_ATTACK;
2000+
2001+
case DEMO_SPECIAL_GPS_SCRAMBLER:
2002+
case CHEM_SPECIAL_GPS_SCRAMBLER:
2003+
case FORT_SPECIAL_GPS_SCRAMBLER:
2004+
return SPECIAL_GPS_SCRAMBLER;
2005+
2006+
case DEMO_SPECIAL_ANTHRAX_BOMB:
2007+
case CHEM_SPECIAL_ANTHRAX_BOMB:
2008+
return SPECIAL_ANTHRAX_BOMB;
2009+
2010+
case CHEM_SPECIAL_VIRUS:
2011+
return SPECIAL_LEAFLET_DROP;
2012+
2013+
default:
2014+
return SPECIAL_NEUTRON_MISSILE;
2015+
}
2016+
}
2017+
19162018
// ------------------------------------------------------------------------------------------------
19172019
// ------------------------------------------------------------------------------------------------
19182020
Bool ActionManager::canDoSpecialPower( const Object *obj, const SpecialPowerTemplate *spTemplate, CommandSourceType commandSource, UnsignedInt commandOptions, Bool checkSourceRequirements )
@@ -1943,7 +2045,7 @@ Bool ActionManager::canDoSpecialPower( const Object *obj, const SpecialPowerTemp
19432045
if (behaviorType >= SPECIAL_ION_CANNON) { //first custom SP
19442046
behaviorType = spTemplate->getSpecialPowerBehaviorType();
19452047
if (behaviorType == SPECIAL_INVALID) {
1946-
behaviorType = SPECIAL_NEUTRON_MISSILE; // Default to behave like neutron missile, common behavior
2048+
behaviorType = getFallbackBehaviorType(spTemplate->getSpecialPowerType()); // use predefined fallbacks
19472049
}
19482050
}
19492051

GeneralsMD/Code/GameEngine/Source/Common/RTS/SpecialPower.cpp

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,75 @@ const char* SpecialPowerMaskType::s_bitNameList[] =
138138
"SPECIAL_CHEMICAL_MISSILE",
139139
"SPECIAL_CHRONOSPHERE",
140140

141+
"AIRF_SPECIAL_HOLO_PLANES",
142+
"AIRF_SPECIAL_PARADROP_AMERICA",
143+
"AIRF_SPECIAL_HELICOPTER_AMBUSH",
144+
"AIRF_SPECIAL_SPY_SATELLITE",
145+
"AIRF_SPECIAL_CIA_INTELLIGENCE",
146+
"AIRF_SPECIAL_SUPERSONIC_AIRSTRIKE",
147+
"AIRF_SPECIAL_HEAVY_AIRSTRIKE",
148+
149+
"SOCOM_SPECIAL_SUPPLY_DROP",
150+
"SOCOM_SPECIAL_TANK_PARADROP",
151+
"SOCOM_SPECIAL_COASTAL_BOMBARDEMENT",
152+
"SOCOM_SPECIAL_AIR_DEPLOY_MARKER",
153+
154+
"TANK_SPECIAL_CLUSTER_MINES",
155+
"TANK_SPECIAL_TANK_PARADROP",
156+
"TANK_SPECIAL_REPAIR_VEHICLES",
157+
"TANK_SPECIAL_EMP_PULSE",
158+
"TANK_SPECIAL_FRENZY",
159+
"TANK_SPECIAL_PARADROP",
160+
"TANK_SPECIAL_SPY_SATELLITE",
161+
"TANK_SPECIAL_ARTILLERY_BARRAGE",
162+
"TANK_SPECIAL_NAPALM_BOMB",
163+
"TANK_SPECIAL_CHINA_CARPET_BOMB",
164+
165+
"NUKE_SPECIAL_CASH_HACK",
166+
"NUKE_SPECIAL_REPAIR_VEHICLES",
167+
"NUKE_SPECIAL_FRENZY",
168+
"NUKE_SPECIAL_SPY_SATELLITE",
169+
"NUKE_SPECIAL_ARTILLERY_BARRAGE",
170+
"NUKE_SPECIAL_NEUTRON_BOMB",
171+
"NUKE_SPECIAL_NUCLEAR_AIRSTRIKE",
172+
"NUKE_SPECIAL_CHINA_CARPET_BOMB",
173+
"NUKE_SPECIAL_BALLISTIC_MISSILE",
174+
175+
"SECW_SPECIAL_EMP_HACK",
176+
"SECW_SPECIAL_HUNTER_SEEKER",
177+
"SECW_SPECIAL_SPY_SATELLITE",
178+
"SECW_SPECIAL_DRONE_GUNSHIP",
179+
"SECW_SPECIAL_SYSTEM_HACK",
180+
181+
"DEMO_SPECIAL_AMBUSH",
182+
"DEMO_SPECIAL_REPAIR_VEHICLES",
183+
"DEMO_SPECIAL_RADAR_VAN_SCAN",
184+
"DEMO_SPECIAL_SNEAK_ATTACK",
185+
"DEMO_SPECIAL_GPS_SCRAMBLER",
186+
"DEMO_SPECIAL_FRENZY",
187+
"DEMO_SPECIAL_ANTHRAX_BOMB",
188+
"DEMO_SPECIAL_SUICIDE_PLANE",
189+
"DEMO_SPECIAL_CARPET_BOMB",
190+
"DEMO_SPECIAL_ARTILLERY_BARRAGE",
191+
192+
"CHEM_SPECIAL_AMBUSH",
193+
"CHEM_SPECIAL_REPAIR_VEHICLES",
194+
"CHEM_SPECIAL_RADAR_VAN_SCAN",
195+
"CHEM_SPECIAL_SNEAK_ATTACK",
196+
"CHEM_SPECIAL_VIRUS",
197+
"CHEM_SPECIAL_GPS_SCRAMBLER",
198+
"CHEM_SPECIAL_FRENZY",
199+
"CHEM_SPECIAL_ANTHRAX_BOMB",
200+
"CHEM_SPECIAL_CARPET_BOMB",
201+
"CHEM_SPECIAL_AIRSTRIKE",
202+
203+
"FORT_SPECIAL_REPAIR_VEHICLES",
204+
"FORT_SPECIAL_GPS_SCRAMBLER",
205+
"FORT_SPECIAL_FRENZY",
206+
"FORT_SPECIAL_AIRSTRIKE",
207+
"FORT_SPECIAL_CARPET_BOMB",
208+
"FORT_SPECIAL_ARTILLERY_BARRAGE",
209+
141210
NULL
142211
};
143212

0 commit comments

Comments
 (0)