Boss Balancing Pass

Another balancing pass to the bosses in TWM2.
This commit is contained in:
Robert Fritzen 2017-06-30 22:52:31 -05:00
parent 17e5696299
commit e8f761555c
10 changed files with 86 additions and 70 deletions

View file

@ -89,7 +89,7 @@ PLEASE NOTE: For the Legacy (Pre-GitHub Versions) Changelogs, please see LEGACY
* Adjusted the daily challenge script to point to the correct link, effectively re-enabling the system
* Addressed the bug preventing weapon challenge progress from recording
* Flipped the /help public and /help additional roles, now using /help will provide the list of accessors
* Removed all aspects of daily exp recording as we are no longer capping progression in the mod
* Removed all remaining EXP capping codes as the cap was removed in 3.9
* Re-did the Challenge Menus in the F2 Menu
* Renamed Weapon Challenges to just Challenges
* From this menu, players now select General Tasks or Weapon Challenges
@ -100,7 +100,7 @@ PLEASE NOTE: For the Legacy (Pre-GitHub Versions) Changelogs, please see LEGACY
* TWM2 Challenge System Changes
* Depricated the Blacklist Challenges, and replaced it with Wargames challenges, which are focused on PvP tasks across all modes.
* Let's see who can complete some of those "tough" ones :)
* Completed the Zombie Slaying Challenges, allowing players to earn some nice healthy batches of EXP for slaying zombies
* "Finally" completed the Zombie Slaying Challenges category, zombie hunters rejoice for bonus EXP!
* Added boss challenges for the bosses that did not have any:
* Shade Lord
* Ghost of Fire
@ -111,24 +111,52 @@ PLEASE NOTE: For the Legacy (Pre-GitHub Versions) Changelogs, please see LEGACY
* Addressed the bug preventing the four Vardison challenges for specific difficulty completions from actually completing
* Internally, Redid the entire challenge system to automate most of it, allowing for eally easy deployment of future challenges
* Added in some cool new features for these as well for things such as hidden challenges, and embedded additional requirements
* Added in the necessary hooks to enable officer ranks 10 - 15
* Have fun!
* Re-did the Officer Promotion windows to preview the rewards upcoming at that level
* All menus are now generated via script instead of hardcoded, making fixing issues with the system much easier
* Enabled officer ranks 10 - 15
* Re-did the Officer Promotion windows to preview the rewards upcoming at that officer level
* Added in the capability to "reset" your entire TWM2 progression upon hitting max level of Officer 15 (Max Level)
* I'm currently considering replacing this with a different system, will be decided as a 3.92 feature
* This is a temporary feature that will be replaced in 3.9.2
* Depricated the Store and Money systems, these systems will become progression based unlocks for "higher" officer levels (10 - 15)
* Armor effects will not return
* Armor flags will return in 3.92
* Fixed the bug with Demon Lord zombies not targeting properly
* Fixed a console warning bug caused by zombie objects despawning and then calling a scan method
* Shifter Zombies now have a randomzied element in their teleport method
* Plasma Torpedo Cannon now requires officer level 9 (Phantom)
* Fixed a code bug with Lord Yvex which caused his death pulse to be replaced by nightmare missiles
* Plasma Torpedo Cannon now requires officer level 9 (Was 4)
* Addressed the bug preventing the challenges for reaching officer ranks from completing
* Weapon Balancing Pass
* Grapple Hook
* Slowed down the attacher projectile a bit, lowering the range
* Grapple hook now requires 60% armor energy and consumes this when firing
* There is now a 5 second cooldown when firing to prevent for quick escapes
* Boss Balancing Pass
* Lord Yvex
* Health reduced to 40,000 (Was 50,000)
* Nightmare time reduced to 33% of what it was (NOTE: This change also applies to Lord Vardison)
* Nightmare damage taken is unchanged
* Yvex Healing from Nightmares reduced by 50%
* Lord Rog
* Health reduced to 50,000 (Was 65,000)
* Rog's Blade of Vengeance now only restores 1000HP (Was 2500HP)
* Removed Elite Demons from his spawning pool (These minions are reserved for Lord Vardison)
* Reduced Lord Rog's Meteor Attacks to 1 and 5 meteors respectively (Was 3 and 15)
* Static Discharge Attack
* Lord Rog freeze time increased to 8.5 seconds (Was 7 seconds)
* Inflicted freeze time reduced to 10 seconds (Was 15 seconds)
* Damage per second increased to 0.6 (Was 0.5)
* This equates to a 20% damage reduction when considering the attack duration decrease
* Laser attack now only fires 25 pulses instead of 40
* Ghost of Fire
* Now immune to death by falling under the map
* Sorry TWM1 Vets, but this strategy is no longer going to work ;)
* 1000% armor increase to all fire damage types
* This should hammer home the point to not use fire weapons on the Ghost of Fire
* Mt. Death no longer instantly triggers (No more ear rape)
* There is now a three second delay between his attack trigger and the first pulse
* Added four additional bursts to compensate
* Reduced the amount of cursed flames spawned to 1 and 3 (Was 3 and 5)
* As a reminder folks, you can block these with Flare Grenades ;)
3.8 -> 3.9:
* Progression System Adjustments

View file

@ -374,8 +374,9 @@ datablock PlayerData(GhostFireArmor) : MediumPlayerDamageProfile
maxGrenades = 1; // Max number of different grenades the player can have
maxMines = 1; // Max number of different mines the player can have
damageScale[$DamageType::plasma] = 0.05;
damageScale[$DamageType::Burn] = 0.05;
damageScale[$DamageType::plasma] = 0.001;
damageScale[$DamageType::Burn] = 0.001;
damageScale[$DamageType::Fire] = 0.001;
damageScale[$DamageType::Bullet] = 0.10; //I deny you shrike n0bs
// Inventory restrictions
@ -461,9 +462,13 @@ function GOFPerformMove(%ghost,%closestClient,%closestDistance) {
%ghost.TargetCL = %closestClient;
%ghost.DistToTarg = %closestDistance;
%zposition = %ghost.getPosition();
%Zzaxis = getword(%zposition,2);
if(%Zzaxis < $zombie::falldieheight) {
%ghost.scriptkill($DamageType::Suicide);
%z = getWord(%zposition, 2);
if(%z < -300) {
%ghost.startFade(400, 0, true);
%ghost.startFade(1000, 0, false);
%ghost.setPosition(vectorAdd(vectoradd(%closestclient.player.getPosition(), "0 0 20"), TWM2Lib_MainControl("getRandomPosition", 25 TAB 1)));
%ghost.setVelocity("0 0 0");
MessageAll('msgBossAlertAttack', "\c4"@$TWM2::BossName["GoF"]@": My ghostly powers allow me to laugh aside your hopes of me falling to my death...");
}
%pos = %ghost.getworldboxcenter();
%closestClient = %closestClient.Player;
@ -757,8 +762,6 @@ function GOFDoRandomAttacks(%g) {
case 6:
if(isObject(%target.player)) {
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 1);
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 1500);
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 3000);
messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Clensic Flames Will Persue You "@getTaggedString(%target.name)@"!");
}
else {
@ -769,8 +772,6 @@ function GOFDoRandomAttacks(%g) {
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 1);
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 1500);
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 3000);
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 4500);
GOFAttack_FUNC("LaunchSeekfire", %g SPC %target.player SPC 6000);
messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": "@getTaggedString(%target.name)@", I present to you the gift, of cursed flames...");
}
else {
@ -817,10 +818,14 @@ function GOFDoRandomAttacks(%g) {
case 13 or 14 or 15:
if(isObject(%target.player)) {
%store = %target.player.getPosition();
GOFAttack_FUNC("Ultracano", %g SPC %store);
//GOFAttack_FUNC("Ultracano", %g SPC %store);
schedule(3000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store);
schedule(6000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store);
schedule(9000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store);
schedule(12000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store);
schedule(15000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store);
schedule(16000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store);
schedule(17000, 0, GOFAttack_FUNC, "Ultracano", %g SPC %store);
messageall('TheFireMsg',"\c4"@$TWM2::BossName["GoF"]@": Rise Mt. Death... Cleanse "@getTaggedString(%target.name)@"!");
}
else {

View file

@ -100,7 +100,7 @@ datablock SeekerProjectileData(LordRogStiloutte) {
datablock PlayerData(LordRogZombieArmor) : LightMaleHumanArmor {
boundingBox = "1.63 1.63 2.6";
maxDamage = 650.0;
maxDamage = 500.0;
minImpactSpeed = 35;
shapeFile = "bioderm_heavy.dts";
@ -342,7 +342,7 @@ function LordRogAttack_FUNC(%att, %args) {
}
schedule(30000, 0, LordRogAttack_FUNC, "ZombieSummon", %z);
//--------------------
%type = getRandomZombieType("1 2 3 5 9 12 13 15 17"); //omit 4 in place of 17: Demon -> Elite Demon
%type = getRandomZombieType("1 2 3 4 5 9 12 13 15");
messageall('RogMsg',"\c4"@$TWM2::ZombieName[8]@": Attack my target!");
for(%i = 0; %i < 5; %i++) {
%pos = vectoradd(%z.getPosition(), TWM2Lib_MainControl("getRandomPosition", 10 TAB 1));
@ -359,7 +359,7 @@ function LordRogAttack_FUNC(%att, %args) {
return;
}
%type = getRandomZombieType("1 2 3 5 9 12 13 15 17");
%type = getRandomZombieType("1 2 3 4 5 9 12 13 15");
MessageAll('MessageAll', "\c4"@$TWM2::ZombieName[8]@": Additional Reinforcements!!! NOW!");
%typeCaller = %type SPC %type SPC %type SPC %type;
%callPos = vectorAdd(%z.getPosition(), "2000 0 400");
@ -415,7 +415,7 @@ function LordRogAttack_FUNC(%att, %args) {
return;
}
%z.laserStormSount++;
if(%z.laserStormSount < 40) {
if(%z.laserStormSount < 25) {
%vec = vectorsub(%t.getworldboxcenter(), %z.getMuzzlePoint(6));
%vec = vectoradd(%vec, vectorscale(%t.getvelocity(), vectorlen(%vec)/100));
%p = new LinearFlareProjectile() {
@ -438,8 +438,6 @@ function LordRogAttack_FUNC(%att, %args) {
%fpos = vectoradd(%t.getposition(), TWM2Lib_MainControl("getRandomPosition", 50 TAB 0));
%pos2 = vectoradd(%fpos, "0 0 700");
schedule(500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(1000, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(1500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
case "MeteorOblivion":
%t = getWord(%args, 0);
@ -450,16 +448,6 @@ function LordRogAttack_FUNC(%att, %args) {
schedule(1500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(2000, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(2500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(3000, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(3500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(4000, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(4500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(5000, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(5500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(6000, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(6500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(7000, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
schedule(7500, 0, spawnprojectile, JTLMeteorStormFireball, GrenadeProjectile, %pos2, "0 0 -10");
case "StaticDischarge":
%z = getWord(%args, 0);
@ -467,7 +455,7 @@ function LordRogAttack_FUNC(%att, %args) {
return;
}
%z.setMoveState(true);
%z.schedule(7000, setMoveState, false);
%z.schedule(8500, setMoveState, false);
%TargetSearchMask = $TypeMasks::PlayerObjectType;
%c = createEmitter(%z.getPosition(), FlashLEmitter, "1 0 0"); //Rotate it
%c.schedule(1000, delete);
@ -484,7 +472,7 @@ function LordRogAttack_FUNC(%att, %args) {
if(!isobject(%obj) || %obj.getState() $= "dead") {
return;
}
if(%obj.staticTicks > 15) {
if(%obj.staticTicks > 10) {
%obj.setMoveState(false);
return;
}
@ -492,7 +480,7 @@ function LordRogAttack_FUNC(%att, %args) {
%c.schedule(1000, delete);
%obj.setMoveState(true);
%obj.staticTicks++;
%obj.damage(0, %obj.getPosition(), 0.05, $DamageType::Zombie);
%obj.damage(0, %obj.getPosition(), 0.6, $DamageType::Zombie);
schedule(1000, 0, LordRogAttack_FUNC, "SCDLoop", %obj);
}
}

View file

@ -402,7 +402,7 @@ datablock SeekerProjectileData(YvexZombieMakerMissile) {
datablock PlayerData(YvexZombieArmor) : LightMaleHumanArmor {
boundingBox = "1.63 1.63 2.6";
maxDamage = 500.0;
maxDamage = 400.0;
minImpactSpeed = 35;
shapeFile = "medium_male.dts";
@ -698,7 +698,7 @@ function YvexAttack_FUNC(%att, %args) {
%vec = vectorsub(%target.getworldboxcenter(),%zombie.getMuzzlePoint(0));
%vec = vectoradd(%vec, vectorscale(%target.getvelocity(),vectorlen(%vec)/100));
%p = new LinearFlareProjectile() {
dataBlock = YvexSniperShot;
dataBlock = KillerPulse;
initialDirection = %vec;
initialPosition = %zombie.getMuzzlePoint(0);
sourceObject = %zombie;
@ -846,7 +846,7 @@ function Yvexnightmareloop(%zombie,%viewer) {
%viewer.player.setMoveState(false);
return;
}
if(%viewer.nightmareticks > 30) {
if(%viewer.nightmareticks > 10) {
%viewer.player.setMoveState(false);
%viewer.nightmareticks = 0;
%viewer.nightmared = 0;
@ -859,14 +859,14 @@ function Yvexnightmareloop(%zombie,%viewer) {
%viewer.player.setMoveState(true);
%viewer.nightmared = 1;
%viewer.player.setActionThread(%emote,true);
%viewer.player.setWhiteout(1.8);
%viewer.player.setDamageFlash(1.5);
%viewer.player.setWhiteout(0.8);
%viewer.player.setDamageFlash(0.5);
%zombie.playShieldEffect("1 1 1");
serverPlay3D(NightmareScreamSound, %viewer.player.position);
schedule(500,0,"Yvexnightmareloop",%zombie, %viewer);
%viewer.player.damage(0, %viewer.player.position, 0.01, $DamageType::Zombie);
%zombie.setDamageLevel(%zombie.getDamageLevel() - 0.1);
%viewer.player.damage(0, %viewer.player.position, 0.03, $DamageType::Zombie);
%zombie.setDamageLevel(%zombie.getDamageLevel() - 0.15);
BottomPrint(%viewer,"You are locked in "@$TWM2::ZombieName[7]@"'s Nightmare.",5,1);
schedule(1, 0, "messageclient", %viewer, 'MsgClient', "~wvoice/fem1/avo.deathcry_02.wav");

View file

@ -49,6 +49,9 @@ function CreateMissileSat(%client, %unlim, %rem) {
team = %client.team;
};
MissionCleanUp.add(%sat);
%sat.TurretObject.setAutoFire(false);
%sat.getDataBlock().isMountable(%sat, false);
%sat.getDataBlock().schedule(6500, "isMountable", %sat, true);
setTargetSensorGroup(%sat.getTarget(), %client.team);
%sat.GoPoint = 1;
@ -62,13 +65,13 @@ function CreateMissileSat(%client, %unlim, %rem) {
%sat.canLaucnhStrike = 1;
%sat.isUnlimitedSat = %unlim;
MessageClient(%client, 'msgSatcom', "\c3UAMS: Satellite Moving to Position, Standby....");
MessageClient(%client, 'msgSatcom', "\c3Command: Your UAMS is entering the area, standby for control signal...");
if(!%unlim) {
%client.player.setPosition(VectorAdd(%x SPC %y SPC 0,$Prison::JailPos));
%client.setControlObject(%sat.turretObject);
%client.schedule(499, setControlObject, %sat.turretObject);
//Phantom: For some reason, the game will freeze turrets immediately after creation
%client.setControlObject(%sat.turretObject);
commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%sat.turretObject,%client.player));
MissileSatControlLoop(%client, %sat);
}
else {
@ -173,6 +176,7 @@ function MissileSatControlLoop(%client, %sat) {
%sat.schedule(1000, "Delete");
return;
}
%sat.turretObject.clientControl = %client;
//%client.setControlObject(%sat.turretObject);
schedule(100, 0, "MissileSatControlLoop", %client, %sat);
}

View file

@ -51,8 +51,6 @@ function StartAC130(%client, %unmanned, %unlim) {
};
MissionCleanUp.add(%obj);
%obj.TurretObject.barrel = "Chain";
%obj.TurretObject.schedule(2000, SetFrozenState, false);
%obj.TurretObject.schedule(2000, SetMoveState, false);
%obj.isHarbinsWrathShip = 1;
%obj.isUltrAlly = 1; // ah what the heck, you should get 1000 XP for blowing one of these
@ -69,14 +67,15 @@ function StartAC130(%client, %unmanned, %unlim) {
if(!%unlim) {
schedule($TWM2::GunshipControlTime*1000, 0, "EndGunship", %obj, %client);
if(!%unmanned) {
%obj.TurretObject.setAutoFire(false);
%obj.isKillstreakVehicle = 1;
//%client.schedule(1000, "setControlObject", %obj.turretObject);
//commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%obj.turretObject,%client.player));
%client.setControlObject(%obj.turretObject);
commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%obj.turretObject,%client.player));
%obj.turretObject.clientControl = %client;
%client.gunshipControlLoop = schedule(1000, 0, "GunshipControlLoop", %client, %obj);
messageClient(%client, 'msgControls', "\c3GUNSHIP: Press the [Mine] key to toggle weapons");
%client.player.lastTransformStuff = %client.player.getTransform();
//%client.player.setPosition(VectorAdd(%x SPC %y SPC 0,$Prison::JailPos));
%client.player.getDataBlock().onCollision(%client.player, %obj, 1);
%client.player.setPosition(VectorAdd(%x SPC %y SPC 0,$Prison::JailPos));
%client.inKillstreak = 1;
}
@ -108,8 +107,6 @@ function StartHarbingersWrath(%client, %unmanned, %unlim) {
};
MissionCleanUp.add(%obj);
%obj.TurretObject.barrel = "Chain";
%obj.TurretObject.schedule(2000, SetFrozenState, false);
%obj.TurretObject.schedule(2000, SetMoveState, false);
%obj.isHarbinsWrathShip = 1;
%obj.isUltrAlly = 1; // ah what the heck, you should get 1000 XP for blowing one of these
@ -126,14 +123,15 @@ function StartHarbingersWrath(%client, %unmanned, %unlim) {
if(!%unlim) {
schedule($TWM2::GunshipControlTime*1000, 0, "EndGunship", %obj, %client);
if(!%unmanned) {
%obj.TurretObject.setAutoFire(false);
%obj.isKillstreakVehicle = 1;
//%client.schedule(1000, "setControlObject", %obj.turretObject);
//commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%obj.turretObject,%client.player));
%client.setControlObject(%obj.turretObject);
commandToClient(%client, 'ControlObjectResponse', true, getControlObjectType(%obj.turretObject,%client.player));
%obj.turretObject.clientControl = %client;
%client.gunshipControlLoop = schedule(1000, 0, "GunshipControlLoop", %client, %obj);
messageClient(%client, 'msgControls', "\c3GUNSHIP: Press the [Mine] key to toggle weapons");
%client.player.lastTransformStuff = %client.player.getTransform();
//%client.player.setPosition(VectorAdd(%x SPC %y SPC 0,$Prison::JailPos));
%client.player.getDataBlock().onCollision(%client.player, %obj, 1);
%client.player.setPosition(VectorAdd(%x SPC %y SPC 0,$Prison::JailPos));
%client.inKillstreak = 1;
}
@ -174,7 +172,6 @@ function EndGunship(%obj, %client) {
return;
}
//3.7 Dismount from gunship
%client.player.unmount();
%client.inKillstreak = 0;
Cancel(%obj.ScanLoop);

View file

@ -3046,7 +3046,7 @@ function Armor::onCollision(%this,%obj,%col,%forceVehicleNode)
return;
}
%obj.scriptkill($DamageType::Admin);
%col.setDamageLevel(%col.getDamageLevel() - 25.0);
%col.setDamageLevel(%col.getDamageLevel() - 10.0);
%col.setVelocity("0 0 0");
if(!%obj.iszombie) {
ServerPlay3d(BOVHitSound, %obj.getPosition());

View file

@ -428,19 +428,13 @@ function UAVVehicle::onAdd(%this, %obj) {
%obj.turretObject = %turret;
%turret.team = %obj.team;
%turret.base = %obj;
%turret.mountImage(MissileSatelliteBarrel,3);
%turret.mountImage(MissileSatelliteBarrel,0);
setTargetSensorGroup(%turret.getTarget(),%obj.team);
%turret.setInventory(MissileLauncherAmmo, 9999, true);
%turret.setAutoFire(false);
%turret.mountImage(AIAimingTurretBarrel,0);
%turret.setCloaked(true);
%obj.setCloaked(true);
setTargetSensorGroup(%turret.getTarget(), %turret.team);
setTargetNeverVisMask(%turret.getTarget(), 0xffffffff);
}
function UAVVehicle::deleteAllMounted(%data, %obj) {

View file

@ -245,7 +245,7 @@ datablock TurretData(AC130GunshipTurret) : TurretDamageProfile
catagory = "Turrets";
shapeFile = "turret_belly_base.dts";
preload = true;
canControl = true;
canControl = false;
cmdCategory = "Tactical";
cmdIcon = CMDFlyingBomberIcon;
cmdMiniIconName = "commander/MiniIcons/com_bomber_grey";

View file

@ -311,7 +311,7 @@ datablock TurretData(HarbingerGunshipTurret) : TurretDamageProfile
catagory = "Turrets";
shapeFile = "turret_belly_base.dts";
preload = true;
canControl = true;
canControl = false;
cmdCategory = "Tactical";
cmdIcon = CMDFlyingBomberIcon;
cmdMiniIconName = "commander/MiniIcons/com_bomber_grey";