Skip to content

Commit 287621d

Browse files
committed
Merge branch 'main' of https://github.com/Andreas-W/GeneralsGameCode_Modding into misc_updates3
2 parents ae315b4 + e5a7b69 commit 287621d

File tree

6 files changed

+326
-28
lines changed

6 files changed

+326
-28
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: 88 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,95 @@ 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_SUPERSONIC_AIRSTRIKE,
148+
AIRF_SPECIAL_HEAVY_AIRSTRIKE,
149+
150+
SOCOM_SPECIAL_SUPPLY_DROP,
151+
SOCOM_SPECIAL_TANK_PARADROP,
152+
SOCOM_SPECIAL_COASTAL_BOMBARDEMENT,
153+
SOCOM_SPECIAL_AIR_DEPLOY_MARKER,
154+
155+
TANK_SPECIAL_CLUSTER_MINES,
156+
TANK_SPECIAL_TANK_PARADROP,
157+
TANK_SPECIAL_REPAIR_VEHICLES,
158+
TANK_SPECIAL_EMP_PULSE,
159+
TANK_SPECIAL_FRENZY,
160+
TANK_SPECIAL_PARADROP,
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_ARTILLERY_BARRAGE,
169+
NUKE_SPECIAL_NEUTRON_BOMB,
170+
NUKE_SPECIAL_NUCLEAR_AIRSTRIKE,
171+
NUKE_SPECIAL_CHINA_CARPET_BOMB,
172+
NUKE_SPECIAL_BALLISTIC_MISSILE,
173+
174+
CHINA_SPECIAL_SPY_SATELLITE,
175+
176+
SECW_SPECIAL_EMP_HACK,
177+
SECW_SPECIAL_HUNTER_SEEKER,
178+
SECW_SPECIAL_SPY_SATELLITE,
179+
SECW_SPECIAL_DRONE_GUNSHIP,
180+
SECW_SPECIAL_SYSTEM_HACK,
181+
182+
DEMO_SPECIAL_AMBUSH,
183+
DEMO_SPECIAL_REPAIR_VEHICLES,
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_SNEAK_ATTACK,
195+
CHEM_SPECIAL_VIRUS,
196+
CHEM_SPECIAL_GPS_SCRAMBLER,
197+
CHEM_SPECIAL_FRENZY,
198+
CHEM_SPECIAL_ANTHRAX_BOMB,
199+
CHEM_SPECIAL_CARPET_BOMB,
200+
CHEM_SPECIAL_AIRSTRIKE,
201+
202+
FORT_SPECIAL_REPAIR_VEHICLES,
203+
FORT_SPECIAL_GPS_SCRAMBLER,
204+
FORT_SPECIAL_FRENZY,
205+
FORT_SPECIAL_AIRSTRIKE,
206+
FORT_SPECIAL_CARPET_BOMB,
207+
FORT_SPECIAL_ARTILLERY_BARRAGE,
208+
209+
LAZR_SPECIAL_NANO_SWARM,
210+
LAZR_SPECIAL_AMBUSH,
211+
LAZR_SPECIAL_SPY_SATELLITE,
212+
LAZR_SPECIAL_DAISY_CUTTER,
213+
LAZR_SPECIAL_SPECTRE_GUNSHIP,
214+
LAZR_SPECIAL_AIRSTRIKE,
215+
LAZR_SPECIAL_ORBITAL_STRIKE,
216+
217+
SUPW_SPECIAL_FORCEFIELD,
218+
SUPW_SPECIAL_PARADROP_AMERICA,
219+
SUPW_SPECIAL_TANK_PARADROP,
220+
SUPW_SPECIAL_AIRSTRIKE,
221+
SUPW_SPECIAL_CRYOBOMB,
222+
SUPW_SPECIAL_SPECTRE_GUNSHIP,
223+
SUPW_SPECIAL_ORBITAL_STRIKE,
141224

142225
SPECIALPOWER_COUNT,
226+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
227+
// NEW CONSTANTS NEED A BEHAVIORTYPE DEFINED IN THE SPECIALPOWER OR return one in getFallbackBehaviorType in ActionManager.cpp
228+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
143229
// don't forget to add new strings to SpecialPowerMaskType::s_bitNameList[]
144-
};
230+
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
145231

232+
};
146233
// Definition of these names is located in SpecialPower.cpp
147234

148235
#endif /* __SPECIALPOWERTYPE_H__ */

GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,7 +403,7 @@ class CommandButton : public Overridable
403403
/** Command sets are collections of configurable command buttons. They are used in the
404404
* command context sensitive window in the battle user interface */
405405
//-------------------------------------------------------------------------------------------------
406-
enum { MAX_COMMANDS_PER_SET = 18 }; // user interface max is 14 (but internally it's 18 for script only buttons!)
406+
enum { MAX_COMMANDS_PER_SET = 32 }; // user interface max is 14 (but internally it's 18 for script only buttons!)
407407
enum { MAX_RIGHT_HUD_UPGRADE_CAMEOS = 5};
408408
enum {
409409
MAX_PURCHASE_SCIENCE_RANK_1 = 4,
@@ -412,7 +412,7 @@ enum {
412412
};
413413
enum { MAX_STRUCTURE_INVENTORY_BUTTONS = 10 }; // there are this many physical buttons in "inventory" windows for structures
414414
enum { MAX_BUILD_QUEUE_BUTTONS = 9 };// physical button count for the build queue
415-
enum { MAX_SPECIAL_POWER_SHORTCUTS = 11};
415+
enum { MAX_SPECIAL_POWER_SHORTCUTS = 32};
416416
class CommandSet : public Overridable
417417
{
418418

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

Lines changed: 112 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,115 @@ 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+
case SUPW_SPECIAL_PARADROP_AMERICA:
1925+
case SUPW_SPECIAL_TANK_PARADROP:
1926+
return SPECIAL_PARADROP_AMERICA;
1927+
1928+
case SECW_SPECIAL_HUNTER_SEEKER:
1929+
return SPECIAL_CIA_INTELLIGENCE;
1930+
1931+
case CHINA_SPECIAL_SPY_SATELLITE:
1932+
case SECW_SPECIAL_SPY_SATELLITE:
1933+
case LAZR_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+
case LAZR_SPECIAL_DAISY_CUTTER:
1952+
case LAZR_SPECIAL_AIRSTRIKE:
1953+
case SUPW_SPECIAL_AIRSTRIKE:
1954+
return SPECIAL_CARPET_BOMB;
1955+
1956+
case AIRF_SPECIAL_HELICOPTER_AMBUSH:
1957+
case DEMO_SPECIAL_AMBUSH:
1958+
case CHEM_SPECIAL_AMBUSH:
1959+
case LAZR_SPECIAL_AMBUSH:
1960+
return SPECIAL_AMBUSH;
1961+
1962+
case AIRF_SPECIAL_HOLO_PLANES:
1963+
case TANK_SPECIAL_FRENZY:
1964+
case NUKE_SPECIAL_FRENZY:
1965+
case DEMO_SPECIAL_FRENZY:
1966+
case CHEM_SPECIAL_FRENZY:
1967+
case FORT_SPECIAL_FRENZY:
1968+
return SPECIAL_FRENZY;
1969+
1970+
case TANK_SPECIAL_CLUSTER_MINES:
1971+
return SPECIAL_CLUSTER_MINES;
1972+
1973+
case TANK_SPECIAL_REPAIR_VEHICLES:
1974+
case NUKE_SPECIAL_REPAIR_VEHICLES:
1975+
case DEMO_SPECIAL_REPAIR_VEHICLES:
1976+
case CHEM_SPECIAL_REPAIR_VEHICLES:
1977+
case FORT_SPECIAL_REPAIR_VEHICLES:
1978+
case LAZR_SPECIAL_NANO_SWARM:
1979+
case SUPW_SPECIAL_FORCEFIELD:
1980+
return SPECIAL_REPAIR_VEHICLES;
1981+
1982+
case TANK_SPECIAL_EMP_PULSE:
1983+
case NUKE_SPECIAL_NEUTRON_BOMB:
1984+
case SECW_SPECIAL_EMP_HACK:
1985+
return SPECIAL_EMP_PULSE;
1986+
1987+
case TANK_SPECIAL_ARTILLERY_BARRAGE:
1988+
case NUKE_SPECIAL_ARTILLERY_BARRAGE:
1989+
case DEMO_SPECIAL_ARTILLERY_BARRAGE:
1990+
case FORT_SPECIAL_ARTILLERY_BARRAGE:
1991+
case LAZR_SPECIAL_ORBITAL_STRIKE:
1992+
case SUPW_SPECIAL_ORBITAL_STRIKE:
1993+
return SPECIAL_ARTILLERY_BARRAGE;
1994+
1995+
case NUKE_SPECIAL_CASH_HACK:
1996+
return SPECIAL_CASH_HACK;
1997+
1998+
case SECW_SPECIAL_DRONE_GUNSHIP:
1999+
case LAZR_SPECIAL_SPECTRE_GUNSHIP:
2000+
case SUPW_SPECIAL_SPECTRE_GUNSHIP:
2001+
return SPECIAL_SPECTRE_GUNSHIP;
2002+
2003+
case DEMO_SPECIAL_SNEAK_ATTACK:
2004+
case CHEM_SPECIAL_SNEAK_ATTACK:
2005+
return SPECIAL_SNEAK_ATTACK;
2006+
2007+
case DEMO_SPECIAL_GPS_SCRAMBLER:
2008+
case CHEM_SPECIAL_GPS_SCRAMBLER:
2009+
case FORT_SPECIAL_GPS_SCRAMBLER:
2010+
return SPECIAL_GPS_SCRAMBLER;
2011+
2012+
case DEMO_SPECIAL_ANTHRAX_BOMB:
2013+
case CHEM_SPECIAL_ANTHRAX_BOMB:
2014+
return SPECIAL_ANTHRAX_BOMB;
2015+
2016+
case CHEM_SPECIAL_VIRUS:
2017+
case SUPW_SPECIAL_CRYOBOMB:
2018+
return SPECIAL_LEAFLET_DROP;
2019+
2020+
default:
2021+
return SPECIAL_NEUTRON_MISSILE;
2022+
}
2023+
}
2024+
19162025
// ------------------------------------------------------------------------------------------------
19172026
// ------------------------------------------------------------------------------------------------
19182027
Bool ActionManager::canDoSpecialPower( const Object *obj, const SpecialPowerTemplate *spTemplate, CommandSourceType commandSource, UnsignedInt commandOptions, Bool checkSourceRequirements )
@@ -1943,7 +2052,7 @@ Bool ActionManager::canDoSpecialPower( const Object *obj, const SpecialPowerTemp
19432052
if (behaviorType >= SPECIAL_ION_CANNON) { //first custom SP
19442053
behaviorType = spTemplate->getSpecialPowerBehaviorType();
19452054
if (behaviorType == SPECIAL_INVALID) {
1946-
behaviorType = SPECIAL_NEUTRON_MISSILE; // Default to behave like neutron missile, common behavior
2055+
behaviorType = getFallbackBehaviorType(spTemplate->getSpecialPowerType()); // use predefined fallbacks
19472056
}
19482057
}
19492058

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

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,87 @@ 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_SUPERSONIC_AIRSTRIKE",
145+
"AIRF_SPECIAL_HEAVY_AIRSTRIKE",
146+
147+
"SOCOM_SPECIAL_SUPPLY_DROP",
148+
"SOCOM_SPECIAL_TANK_PARADROP",
149+
"SOCOM_SPECIAL_COASTAL_BOMBARDEMENT",
150+
"SOCOM_SPECIAL_AIR_DEPLOY_MARKER",
151+
152+
"TANK_SPECIAL_CLUSTER_MINES",
153+
"TANK_SPECIAL_TANK_PARADROP",
154+
"TANK_SPECIAL_REPAIR_VEHICLES",
155+
"TANK_SPECIAL_EMP_PULSE",
156+
"TANK_SPECIAL_FRENZY",
157+
"TANK_SPECIAL_PARADROP",
158+
"TANK_SPECIAL_ARTILLERY_BARRAGE",
159+
"TANK_SPECIAL_NAPALM_BOMB",
160+
"TANK_SPECIAL_CHINA_CARPET_BOMB",
161+
162+
"NUKE_SPECIAL_CASH_HACK",
163+
"NUKE_SPECIAL_REPAIR_VEHICLES",
164+
"NUKE_SPECIAL_FRENZY",
165+
"NUKE_SPECIAL_ARTILLERY_BARRAGE",
166+
"NUKE_SPECIAL_NEUTRON_BOMB",
167+
"NUKE_SPECIAL_NUCLEAR_AIRSTRIKE",
168+
"NUKE_SPECIAL_CHINA_CARPET_BOMB",
169+
"NUKE_SPECIAL_BALLISTIC_MISSILE",
170+
171+
"CHINA_SPECIAL_SPY_SATELLITE",
172+
173+
"SECW_SPECIAL_EMP_HACK",
174+
"SECW_SPECIAL_HUNTER_SEEKER",
175+
"SECW_SPECIAL_SPY_SATELLITE",
176+
"SECW_SPECIAL_DRONE_GUNSHIP",
177+
"SECW_SPECIAL_SYSTEM_HACK",
178+
179+
"DEMO_SPECIAL_AMBUSH",
180+
"DEMO_SPECIAL_REPAIR_VEHICLES",
181+
"DEMO_SPECIAL_SNEAK_ATTACK",
182+
"DEMO_SPECIAL_GPS_SCRAMBLER",
183+
"DEMO_SPECIAL_FRENZY",
184+
"DEMO_SPECIAL_ANTHRAX_BOMB",
185+
"DEMO_SPECIAL_SUICIDE_PLANE",
186+
"DEMO_SPECIAL_CARPET_BOMB",
187+
"DEMO_SPECIAL_ARTILLERY_BARRAGE",
188+
189+
"CHEM_SPECIAL_AMBUSH",
190+
"CHEM_SPECIAL_REPAIR_VEHICLES",
191+
"CHEM_SPECIAL_SNEAK_ATTACK",
192+
"CHEM_SPECIAL_VIRUS",
193+
"CHEM_SPECIAL_GPS_SCRAMBLER",
194+
"CHEM_SPECIAL_FRENZY",
195+
"CHEM_SPECIAL_ANTHRAX_BOMB",
196+
"CHEM_SPECIAL_CARPET_BOMB",
197+
"CHEM_SPECIAL_AIRSTRIKE",
198+
199+
"FORT_SPECIAL_REPAIR_VEHICLES",
200+
"FORT_SPECIAL_GPS_SCRAMBLER",
201+
"FORT_SPECIAL_FRENZY",
202+
"FORT_SPECIAL_AIRSTRIKE",
203+
"FORT_SPECIAL_CARPET_BOMB",
204+
"FORT_SPECIAL_ARTILLERY_BARRAGE",
205+
206+
"LAZR_SPECIAL_NANO_SWARM",
207+
"LAZR_SPECIAL_AMBUSH",
208+
"LAZR_SPECIAL_SPY_SATELLITE",
209+
"LAZR_SPECIAL_DAISY_CUTTER",
210+
"LAZR_SPECIAL_SPECTRE_GUNSHIP",
211+
"LAZR_SPECIAL_AIRSTRIKE",
212+
"LAZR_SPECIAL_ORBITAL_STRIKE",
213+
214+
"SUPW_SPECIAL_FORCEFIELD",
215+
"SUPW_SPECIAL_PARADROP_AMERICA",
216+
"SUPW_SPECIAL_TANK_PARADROP",
217+
"SUPW_SPECIAL_AIRSTRIKE",
218+
"SUPW_SPECIAL_CRYOBOMB",
219+
"SUPW_SPECIAL_SPECTRE_GUNSHIP",
220+
"SUPW_SPECIAL_ORBITAL_STRIKE",
221+
141222
NULL
142223
};
143224

0 commit comments

Comments
 (0)