@@ -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// ------------------------------------------------------------------------------------------------
19182020Bool 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
0 commit comments