📄 hmpfile.java
字号:
setupCriticals(mech, laCriticals, Mech.LOC_LARM); } compactCriticals(rtCriticals); setupCriticals(mech, rtCriticals, Mech.LOC_RT); compactCriticals(ltCriticals); setupCriticals(mech, ltCriticals, Mech.LOC_LT); compactCriticals(ctCriticals); setupCriticals(mech, ctCriticals, Mech.LOC_CT); setupCriticals(mech, headCriticals, Mech.LOC_HEAD); } private String mutateLBXAmmo(String crit) { if((crit.startsWith("CLLBX") || crit.startsWith("ISLBX")) && crit.endsWith("Ammo")) { lbxCounter ++; if(lbxCounter % 2 == 1) { return crit.substring(0,crit.indexOf("Ammo")) + "CL Ammo"; } } return crit; } private String mutateATMAmmo(String crit) { if(crit.startsWith("CLATM") && crit.endsWith("Ammo")) { atmCounter ++; if(atmCounter % 3 == 2) { return crit.substring(0,crit.indexOf("Ammo")) + "HE Ammo"; } else if(atmCounter % 3 == 0) { return crit.substring(0,crit.indexOf("Ammo")) + "ER Ammo"; } } return crit; } private void setupCriticals(Mech mech, long[] criticals, int location) throws EntityLoadingException { // Use pass-by-value in case we need the original criticals // later (getMtf for example). long[] crits = criticals.clone(); for (int i = 0; i < mech.getNumberOfCriticals(location); i++) { if (mech.getCritical(location, i) == null) { long critical = crits[i]; String criticalName = getCriticalName(critical); if (isFusionEngine(critical)) { mech.setCritical(location, i, new CriticalSlot( CriticalSlot.TYPE_SYSTEM, Mech.SYSTEM_ENGINE)); } else if (isGyro(critical)) { mech.setCritical(location, i, new CriticalSlot( CriticalSlot.TYPE_SYSTEM, Mech.SYSTEM_GYRO)); } else if (isCockpit(critical)) { mech.setCritical(location, i, new CriticalSlot( CriticalSlot.TYPE_SYSTEM, Mech.SYSTEM_COCKPIT)); } else if (isLifeSupport(critical)) { mech .setCritical(location, i, new CriticalSlot( CriticalSlot.TYPE_SYSTEM, Mech.SYSTEM_LIFE_SUPPORT)); } else if (isSensor(critical)) { mech.setCritical(location, i, new CriticalSlot( CriticalSlot.TYPE_SYSTEM, Mech.SYSTEM_SENSORS)); } else if (isJumpJet(critical)) { try { if (jjType == 0) mech.addEquipment(EquipmentType.get("Jump Jet"), location, false); else if (jjType == 1) mech.addEquipment(EquipmentType .get("Improved Jump Jet"), location, false); } catch (LocationFullException ex) { System.err .print("Location was full when adding jump jets to slot #"); System.err.print(i); System.err.print(" of location "); System.err.println(location); ex.printStackTrace(System.err); System.err.println("... aborting entity loading."); throw new EntityLoadingException(ex.getMessage()); } } else if (criticalName != null) { EquipmentType equipment = null; try { equipment = EquipmentType.get(criticalName); if (equipment != null) { boolean rearMounted = equipment instanceof WeaponType && isRearMounted(critical); if (equipment.isSpreadable()) { Mounted m = (Mounted) spreadEquipment .get(equipment); if (m != null) { CriticalSlot criticalSlot = new CriticalSlot( CriticalSlot.TYPE_EQUIPMENT, mech .getEquipmentNum(m), equipment.isHittable()); mech.addCritical(location, criticalSlot); if (criticalName .equalsIgnoreCase("Armored Cowl")) { mech.setCowl(5); // Initialize // armored cowl } } else { m = mech.addEquipment(equipment, location, rearMounted); spreadEquipment.put(equipment, m); } } else if (equipment instanceof WeaponType && equipment .hasFlag(WeaponType.F_SPLITABLE)) { // do we already have this one in this or an // outer location? Mounted m = null; boolean bFound = false; for (int x = 0, n = vSplitWeapons.size(); x < n; x++) { m = (Mounted) vSplitWeapons.elementAt(x); int nLoc = m.getLocation(); if ((nLoc == location || location == Mech .getInnerLocation(nLoc)) && m.getType().equals(equipment)) { bFound = true; break; } } if (bFound) { m.setFoundCrits(m.getFoundCrits() + 1); if (m.getFoundCrits() >= equipment .getCriticals(mech)) { vSplitWeapons.removeElement(m); } // if we're in a new location, set the // weapon as split if (location != m.getLocation()) { m.setSplit(true); } // give the most restrictive location for // arcs int help=m.getLocation(); m.setLocation(Mech.mostRestrictiveLoc( location, help)); if (location!=help) { m.setSecondLocation(Mech.leastRestrictiveLoc( location, help)); } } else { // make a new one m = new Mounted(mech, equipment); m.setFoundCrits(1); vSplitWeapons.addElement(m); } mech.addEquipment(m, location, rearMounted); } else { mech.addEquipment(equipment, location, rearMounted); } } else { if (!criticalName.equals("-Empty-")) { // Can't load this piece of equipment! // Add it to the list so we can show the user. mech.addFailedEquipment(criticalName); // Make the failed equipment an empty slot crits[i] = 0; // Compact criticals again compactCriticals(crits); // Re-parse the same slot, since the compacting // could have moved new equipment to this slot i--; } } } catch (LocationFullException ex) { System.err.print("Location was full when adding "); System.err.print(equipment.getInternalName()); System.err.print(" to slot #"); System.err.print(i); System.err.print(" of location "); System.err.println(location); ex.printStackTrace(System.err); System.err.println("... aborting entity loading."); throw new EntityLoadingException(ex.getMessage()); } } } } } /* BLOCK_END */ private boolean isLowerArmActuator(long critical) { return critical == 0x03; } private static boolean isHandActuator(long critical) { return critical == 0x04; } private static boolean isLowerLegActuator(long critical) { return critical == 0x07; } private static boolean isFootActuator(long critical) { return critical == 0x08; } private static boolean isCockpit(long critical) { return critical == 0x0E; } private static boolean isJumpJet(long critical) { return critical == 0x0B; } private static boolean isLifeSupport(long critical) { return critical == 0x0C; } private static boolean isSensor(long critical) { return critical == 0x0D; } private static boolean isFusionEngine(long critical) { return critical == 0x0F; } private static boolean isGyro(long critical) { return critical == 0x10; } private static boolean isRearMounted(long critical) { return (critical & 0xFFFF0000) != 0; } private static final Hashtable criticals = new Hashtable(); static { // common criticals criticals.put(new Long(0x00), "-Empty-"); criticals.put(new Long(0x01), "Shoulder"); criticals.put(new Long(0x02), "Upper Arm Actuator"); criticals.put(new Long(0x03), "Lower Arm Actuator"); criticals.put(new Long(0x04), "Hand Actuator"); criticals.put(new Long(0x05), "Hip"); criticals.put(new Long(0x06), "Upper Leg Actuator"); criticals.put(new Long(0x07), "Lower Leg Actuator"); criticals.put(new Long(0x08), "Foot Actuator"); criticals.put(new Long(0x09), "Heat Sink"); criticals.put(new Long(0x0B), "Jump Jet"); criticals.put(new Long(0x0C), "Life Support"); criticals.put(new Long(0x0D), "Sensors"); criticals.put(new Long(0x0E), "Cockpit"); criticals.put(new Long(0x0F), "Fusion Engine"); criticals.put(new Long(0x10), "Gyro"); criticals.put(new Long(0x13), "Turret"); criticals.put(new Long(0x14), "Endo Steel"); criticals.put(new Long(0x15), "Ferro-Fibrous"); criticals.put(new Long(0x16), "Triple Strength Myomer"); criticals.put(new Long(0x1a), "Variable Range TargSys"); criticals.put(new Long(0x1b), "Multi-Trac II"); criticals.put(new Long(0x1c), "Reactive Armor"); criticals.put(new Long(0x1d), "Laser-Reflective Armor"); criticals.put(new Long(0x1e), "Jump Booster"); criticals.put(new Long(0x20), "Supercharger"); criticals.put(new Long(0x21), "Light Ferro-Fibrous"); criticals.put(new Long(0x22), "Heavy Ferro-Fibrous"); criticals.put(new Long(0x25), "IS2 Compact Heat Sinks"); criticals.put(new Long(0x26), "CASE II"); criticals.put(new Long(0x27), "Null Signature System"); criticals.put(new Long(0x28), "Coolant Pod"); criticals.put(new Long(0x2B), "Claw (THB)"); criticals.put(new Long(0x2C), "Mace (THB)"); criticals.put(new Long(0x2d), "Armored Cowl"); criticals.put(new Long(0x2e), "Buzzsaw (UB)"); criticals.put(new Long(0xF8), "Combine"); criticals.put(new Long(0xF9), "Lift Hoist"); criticals.put(new Long(0xFA), "Chainsaw"); criticals.put(new Long(0xFC), "CLATM3"); criticals.put(new Long(0xFD), "CLATM6"); criticals.put(new Long(0xFE), "CLATM9"); criticals.put(new Long(0xFF), "CLATM12"); criticals.put(new Long(0x100), "SB Gauss Rifle (UB)"); criticals.put(new Long(0x101), "Caseless AC/2 (THB)"); criticals.put(new Long(0x102), "Caseless AC/5 (THB)"); criticals.put(new Long(0x103), "Caseless AC/10 (THB)"); criticals.put(new Long(0x104), "Caseless AC/20 (THB)");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -