Giter VIP home page Giter VIP logo

megameklab's Introduction

INTRODUCTION

MegaMek is a Java version of BattleTech that you can play with your friends over the internet. All rules from Total Warfare are implemented. Rules from Tactical Operations and Strategic Operations are constantly in the works, and many of those rules and weapons are already implemented.

Players can create their own units, maps, and scenarios for use with MegaMek. MegaMek supports all unit types, from infantry, battlemechs, and vehicles, to aerospace fighters, dropships, and warships. Ground battles as well as space battles can be played.

If you would like information about how to play the game, see the "PLAYING THE GAME" section, below. If you're having trouble getting MegaMek started, see the next section, "RUNNING MEGAMEK".

For complete game rules, consult the Classic BattleTech rule books published by Catalyst Game Labs. These books include Total Warfare, Tactical Operations, and Strategic Operations.

RUNNING MEGAMEK

Java programs run in their own environment, called a Virtual Machine or VM for short. These Java VMs are available on most systems from a variety of sources. Most modern systems have one installed by default.

Windows users: To start MegaMek, run the MegaMek.exe file. If this fails to start MegaMek, see the "INSTALLING OR UPDATING YOUR JAVA RUNTIME" section, below.

Other graphical OSes: Many other graphical OSes, such as MacOS and OSX, will allow you to double-click the .jar file to run it. If this does not work, try running MegaMek from the command line.

Running MegaMek from the command line: To do this using Sun Java, or most other implementations, navigate to the directory containing the .jar file and run:

java -jar MegaMek.jar

If none of the above options work for you, see the "INSTALLING OR UPDATING YOUR JAVA RUNTIME" section, below.

If you have a VM, but it does not support .jar files, then use your favorite extraction program to decompress "MegaMek.jar", "collections.jar", "TinyXML.jar", and "Ostermiller.jar" into a new "classes" folder (create the "classes" folder in your main "megamek" folder). Once these steps have been done (you only need to do the above steps once), you will need to set the classpath to the classes folder and the current folder and run "MegaMek.class". For example, using Sun Java, run:

java -cp .;classes megamek/MegaMek

Note that in some cases, the semicolon may need to be escaped: java -cp .\;classes megamek/MegaMek

INSTALLING OR UPDATING YOUR JAVA RUNTIME

If your system did not come with a Java VM, or you need to update your Java VM, here are some links.

OpenJDK (Windows, Linux, Mac): Open source version of Java. Recommended install for MekHQ, with the current version listed on our wiki. Used by most major Linux distributions. http://openjdk.java.net/install/.

Oracle Java (Linux, Solaris, Windows): This is the largely legacy Java implementation after Oracle open sourced the code base. http://www.oracle.com/technetwork/java/javase/downloads/index.html

Mac OSX: See this support article on the apple support website for instructions: https://support.apple.com/en-us/HT204036. Note: For advanced users, it is recommended you install java via homebrew. See this stack overflow article for more instructions.

GCJ/Gnu classpath (Linux): Of interest to experienced developers, there may be some compatibility problems. http://gcc.gnu.org/java/. Note: GCJ support was removed in GCC 7.

Microsoft VM (Windows): Microsoft no longer makes their VM available for separate download. This version of MegaMek uses features not supported by the Microsoft JVM.

IBM VM: MegaMek seems to react badly to this VM - it is not recommended.

CONNECTING

MegaMek is a network game. One player hosts a game and the rest of the players connect. The connecting players can connect from anywhere with a TCP/IP connection to the host, including the same computer (see hotseat, below.)

To host a game, press the "Host a New Game..." button in the main menu. Fill in your name and click "Okay". The password field allows you to specify a password for certain server commands (Type /help in the chat line to get a list of server commands.) If you don't specify a password, anybody is allowed to reset the server or kick players, so be careful.

Once the lobby screen comes up, other players can connect and the game can begin. The other players will need to know the IP address of the host computer. There are several ways to determine your IP address. If you are on Windows 9x/ME, you can use the Run command on the start menu and enter winipcfg. On Windows 2000/NT/XP/Vista/7/8/10, you will need to open a command prompt and type ipconfig. As a last resort, there are some web pages, such as www.whatismyip.com that will try to detect your IP address, but if your internet service uses a proxy or firewall, these pages cannot accurately detect it.

To connect to a game, press the connect button on the main menu and fill in your player name and the host's IP address.

To play in a hotseat fashion, you can run the host and any number of other players on the same computer. First, launch and host a game. Then, launch another copy of the game for each connecting player, and in the "Server Address" field of the connect dialog, type localhost. Each player will need to switch to his/her copy of the game to play their turn.

To start a dedicated server, use the -dedicated command line switch. A dedicated server just runs the server, in the console, without a "host" player in the game. People, including yourself, can join it like a game with a host. The dedicated server reads the password and port options from the clientsettings.xml file, or uses the default (no password and port 2346.) If you want the dedicated server to load a saved game, supply the filename at the end of -dedicated args, like this: -dedicated savedgame.sav or -dedicated -port 2346 savedgame.sav. To stop the server, you will need to tell the Java machine to halt execution, which is CTRL + C on most platforms.

PLAYING THE GAME

Pre-game Lobby:

Here you can chat, specify what units you wish to use, select map settings, declare starting positions, and change your player's color. When everybody has at least one unit, you may all hit "ready" to start the game. Most changes to the game parameters will cancel your ready status, so you should wait for everybody to finish choosing their units and positions. Note: If you wish to use custom unit designs, please see the section below entitled "CUSTOM UNITS".

You can enter the map selector by clicking on the "Select Map" tab at the top of the lobby. You can change the dimensions of the map boards (in hexes) or the dimensions of the whole map (in boards). All maps are loaded off the server. Most of the map boards that MegaMek comes with are 16x17.

Below the map size inputs is a not-to-scale representation of how the boards are laid out relative to each other. The middle column lists the current maps and the rightmost column lists the available maps. To change a current map, select it in the middle column, select the map you want in the right column, and press the "<<" button between the two columns. You may also select a map by clicking on its number in the map layout grid. When you select a map, (other than [SURPRISE] or [RANDOM]) you have the choice or rotating it 180 degrees (North becomes South, East becomes West, and vice versa) by clicking on the "Rotate Board" checkbox; the fact that the map is rotated will be shown in the middle column.

[SURPRISE] means that the Server will pick a random map and not tell you what it has picked until the game starts.

[RANDOM] means that the Server will pick a map as soon as you hit "Okay".

[GENERATED] means that the server will create random terrain for you to play on. You need to use the "generated map settings" button to select what kind of terrain you want.

There is a set of settings with drop down list of choices. For most settings, you can pick "none", "low", "medium" or "high". Except for cities, where you pick a type of city instead.

Theme - leave blank for the default theme, or enter a theme supported by your tileset. grass, jungle, lunar, mars, snow, and volcano are supported by the standard tileset

Elevation - how hilly you want the map

Cliffs - chance of 2+ level elevation changes, if you have enough elevation already

Woods - higher settings have more and larger tree patches and more heavy woods

Roughs - higher settings have more and larger rough patches

Lakes - works the same as woods, but deep water instead of heavy woods Swamps/Pavement/Ice/Rubble/Fortified all work like roughs. Fortified hexes are described in the MaxTech rulebook.

River - chance to have a river running across the map

Road - chance to have a single road running across the map

Craters - chance for craters, also the size and number. Good for a "moonscape" map

City: HUB - roads wander out from the centre with plenty of twists and turns. A common pattern for older european cities.

GRID - vertical and horizontal roads divide the city into rectangular blocks. A pattern common in newer cities, especially in north america and asia.

METRO - a grid with roads forming a diagonal X from the centre as well.

Water and swamp will affect the city plan, as the builders will have to make bridges to cross it or just give up and stop the road at the edge. Mountain tops (4+ height) are expensive to build on, so they will only build in the valleys. Other terrain will just be bulldozed in the name of progress, though you may find a few hexes left between buildings.

There is also an "advanced" button, which lets you fine-tune the map to your liking. See the "advanced map settings" section near the end of this file

Initiative Report:

Each player's initiative rolls and the corresponding turn order will be shown here.

Movement Phase:

The buttons at the bottom of the screen let you change between different modes of movement, switch to another unit, or commit to your current path. You do not have to move the first selected unit first.

Left-click on the map to specify a hex to move to. A path should appear on the board, showing your unit's path to the target hex. The numbers in the center represent how many movement points you will have to use to reach each hex. Cyan indicates walking, yellow running, and red jump movement. Dark grey sections of the path indicate where you have exceeded your movement capacity, or other illegal moves. You can drag the mouse to see movement options for several different hexes. Please note that you can change the colors used to display the movement points by editing clientsettings.xml; you may specify a color in RGB notation (e.g. 255 255 255 for white) or with any of the following text values: black, blue, cyan, darkgray, gray, green, lightgray, magenta, orange, pink, red, white, or yellow.

Units can also be moved by using "waypoints." By clicking each hex between the unit's current location and destination, you can delineate the exact path to be taken.

Holding the Shift key while clicking on the map allows you to change the unit's facing without moving. Since you automatically change facing while moving, this is best done at the end of any movement.

To move backwards, click the "Back Up" button before clicking a hex in the arc behind the unit. To jump, click the "Jump" button before the destination hex. Facing changes during jumps are free.

Prone units can change facing without getting up at the normal cost. To get up, click the "Get Up" button, then the desired destination hex and/or facing. Facing changes performed immediately after getting up are free. To get up and back up, click "Get Up," then "Back Up," then the destination hex and/or facing. You cannot get up and jump in the same turn.

Charging and death from above attacks are also declared during the movement phase. Click the "Charge" or "D.F.A." button and then click on the mech you wish to target. If the attack is valid, it will be sent to the server immediately (but resolve during the physical attack phase.) If the program is not using the path you want for your attack, you may plot a path near the target using the appropriate type of movement and then use the charge or dfa button to complete the attack.

If a vehicle or Mek that has sufficient empty space starts a turn in the same hex as a friendly infantry unit, it can Load the unit as its first move of the turn. A vehicle or Mek that is already carrying an infantry unit can unload the unit as its last movement of the turn.

If an Anti-Mek infantry platoon or Battle Armor squad has succeeded in mounting a Mek with a Swarm attack, the Mek can attempt to dislodge the squad during the movement phase in one of three ways: 1) jumping (requires a Pilot Skill Roll, with a +4 modifier), 2) walking into (and perhaps through) a Level 2 or deeper water hex, or 3) ending its turn in a hex that is on fire (this will not work against Battle Armor squads). Swarming infantry automatically die if they are dislodged into a Level 1 or deeper water hex. Infantry dislodged in the Movement Phase can not move or fire for the rest of the turn. Swarming units can not move off of their target Mek until they use the Stop Swarm action in the Weapons Fire Phase.

VTOLs and VTOL BA use the "go up" and "go down" buttons to change elevation (flight level).

Movement around structures (buildings/bridges) is a little more complicated, because of the different floors a unit can occupy. The "climb mode" button sets your current preference. "Go thru" means you prefer to go under bridges or through the walls of buildings, if there is a choice. "Climb up" means you prefer to climb on top of structures when possible. You can change mode multiple times during your movement, for example a stormcrow prime could use "climb up" to go over a heavy building to save MP, then change to "go thru" to pass a light building that won't support its weight.

Infantry can move up and down inside buildings using the stairs. This is accomplished by using the "go up" and "go down" buttons. Also, infantry that jump into a building can use the "go up" and "go down" buttons to choose which floor to jump through the window of. Click the building hex you want to jump into first, and the game will pick the highest floor you can reach (or the roof). Then use the "go down" button to select a lower floor if you want to.

The Esc key clears all current movement.

Movement Report:

If any units needed piloting skill rolls during their movement, a report showing the results of these rolls will be shown.

Weapons Fire Phase:

If you need to check the range and line of sight (LoS) between two hexes, there are two tools available for you to use; the LoS tool and the ruler tool. To use the LoS tool, hold CTRL and click on the two hexes you want to check. The ruler tool works like the LoS tool, but uses the ALT key instead of the CTRL key. The ruler tool can also be used by middle-clicking the two hexes with a three-button mouse. Both tools will pop up a window that tells you what terrain is intervening and whether one or both hexes has partial cover. The ruler tool also draws the line of sight on the board so that you can see which hexes LoS passes through.

You can switch between 'Mech line of sight and non-'Mech line of sight in the "LoS Setting" panel, located under the "View" menu at the top of the screen. 'Mech line of sight and non-'Mech line of sight differ in that 'Mechs are assumed to be "looking" from one elevation level above that of the hex they are in, whereas infantry and vehicles only take up the elevation level of their hex.

The buttons at the bottom of the screen allow you to fire your weapons, switch to another unit, or commit to your currently declared fire. Again, you do not need to declare fire for your first selected unit first.

To target another unit, click on it on the board. Targeting information for your current weapon should appear in the mech display window. To fire your current weapon at the target, press the "Fire" button at the bottom of the screen. To switch to another weapon, click on its name at the top of the mech display window. Spread your fire among multiple targets by repeating these steps using unassigned weapons. When all desired weapons have been assigned to a target, press the "Done" button at the bottom of the screen.

Note that fire is resolved in the order that it is declared, so if you feel that it is a good idea to fire weapons in a different order than they are listed, go ahead.

Secondary facing changes (torso twists) are accomplished by holding Shift and clicking on the board. Your unit will attempt to change its secondary facing in the direction specified. If you assign a weapon to a target and then attempt a facing change, the weapons fire will be canceled.

You can not switch to another unit after declaring some weapons fire. To switch to another unit, first cancel all current fire by hitting the Esc key. When you hit the fire button for your last available weapon, all declared fire will be committed.

An Anti-Mek trained infantry platoon or Battle Armor squad that is in the same hex as a Mek can conduct a Leg Attack or a Swarm Mek attack. The base to-hit number varies with the number of men in the unit. A Swarm Mek attack against a Mek that is prone and/or immobile gains a -4 modifier to its to-hit roll. A successful Leg Attack may cause critical damage to one of the Meks legs; if no critical is rolled, the leg will take 4 points of damage (which may damage the leg's internal structure, and cause another critical roll). A successful Swarm Mek attack does no damage in the turn it hits, but it means that the unit has attached itself to the Mek, and can begin to cause significant damage on subsequent turns. Starting the turn after the unit starts a Swarming a Mek, all attacks by that unit automatically hit, use a location chart that is more dangerous than normally, and automatically roll for a Thru-Armor Critical. A unit that is Swarming a Mek can also choose to Stop Swarming in any weapons phase. The Leg Attack, Swarm Mek, and Stop Swarm actions are all "solo" actions: the unit can take no other action in the Weapons Fire Phase. Attempts to do so will cancel the "solo" action. Swarming infantry can not be targeted by any attacks other than a "Brush Off" attack (see Physical Attacks Phase).

Weapons Fire Report:

If there were any weapon attacks, the server will resolve them all at the end of the phase in the order they were declared. The results will be shown in a report.

Physical Attacks Phase:

To declare a physical attack, select your target on the board and click the button corresponding to the attack you want to make. If a physical attack type is unavailable (or isn't programmed yet) the button will be greyed out.

Units ineligible to make physical attacks due to being out of range, having made weapons attacks, or for any other reason, will be skipped. If all units are ineligible, the entire phase will be skipped.

Prone Meks that are in the same hex as a vehicle can punch the vehicle, if they have both arms. Prone Meks that are in a Clear or Pavement hex as an infantry platoon or Battle Armor squad can "thrash" at the unit if they have at least one arm or leg. Be warned, that "thrashing" causes a Pilot Skill Roll that, if failed, causes the Mek to suffer damage as if it has fallen 1 level.

Meks that are not prone that have been Swarmed by an infantry platoon or Battle Armor squad can attempt to "Brush Off" the squad with either or both arms. Any "Brush Off" attack that fails to hit the infantry will inflict punch damage on the Mek. Any successful "Brush Off" attack ends a Swarm Mek attack.

End of Turn Report:

If there were any physical attacks, the results will be shown. The results of the Heat and End phases will be shown.

After this phase, it's time for initiative again! Hurrah!

CUSTOM UNITS

All units (mechs, vehicles, infantry, etc.) are located in the data/mechfiles directory. They may be individual files or zipped up into archives (".zip"), and you may also create subdirectories if you like.

We recommend creating a folder called Customs in the data/mechfiles directory. Then using this folder to store all custom units.

As of 0.49.13 We've removed the unsupported and unofficial folders. Over the years the unsupported units dropped to only a couple. The unofficial folder is available from https://github.com/MegaMek/megamek-extras part of our repository.

Over the years the number of custom mech builders that support MegaMek has shrunk. For best compatibility we recommend using MegaMekLab. Any issues from the use of other programs should be directed to their developers for support.

Note of file types MegaMek uses two file types for units. Files with the extension MTF are mechs, and all other unit types are BLK files. Both our editable with a quality text editor, but we recommend not hand editing files as it can break the programs.

ADVANCED MAP SETTINGS

Tip: Use the basic settings, then select advanced, and the boxes will be filled in with the values from the basic settings.

Board Size - set the size of the map sheet generated. When using generated maps, it is better to generate one large play area than to try and combine multiple mapsheets.

Theme - leave blank, or enter a theme supported by the tileset. grass, lunar, mars, snow are themes supported by the standard tileset.

Elevation settings:

Amount of elevation - changes the "roughness" of the map, a low number will have less elevation changes than a high number Elevation range: height difference between the lowest and highest hex on the map. Level 0 is set to the most common height.

Probability of inverting - % chance to make a sinkhole instead of a mountain.

Algorithm - 0 generates rolling hills, 1 generates spiky terrain, 2 combines both generators. 0 is likely to have less LOS blocking terrain.

Cliffs - % chance to change a steep slope into a cliff. For example, if a group of level 1 hexes have level 0 and level 2 hexes adjacent, they will all be moved to level 0, giving a cliff for mechs to hide behind. The effect is quite subtle unless you have quite a high elevation range to begin with.

Patch terrain settings (woods, roughs, swamps, lakes, pavements, rubble, fortified, ice):

Each of these work the same way, but place a different type of terrain.

Number of XXX - the number of patches which would be present on a 16x17 map. scales up if you have a bigger map.

XXX size in hexes - the size of each patch of terrain

Probability for heavy woods/deep water - % chance to place instead of light.

River/road settings - Probability is a % chance to have one on the map. If a road crosses water, you'll get a bridge.

Crater settings:

Probability for craters: - % chance that craters are present Number of craters: as for number of woods, the number that would be present on a 16x17 map, scaled up for larger maps.

Crater radius - size range for each crater.

Special effects settings:

Each probability is a % chance. FX modifier changes the amount of effect each one has. Values should be small, e.g -3 to +3

Fires - woods hexes will be set on fire or already burned down to rough at the start of the game. + modifier increases number of burned down hexes, - modifier increases number of unscathed woods.

Frozen water - water hexes are ice-covered. +modifier decreases the water depth, so for example with a modifier of 1, shallow water hexes are frozen solid and deep water hexes are converted to ice covered shallow water.

Flooded map: - hexes with negative elevations are converted to water hexes, while level 0 hexes are converted to swamps. Ideal for hovercraft and naval units. modifier changes the "sea level"

Drought - water hexes are dried up, to shallower water, swamp or rough. Modifier changes the severity of the drought.

Special effects can be combined - e.g. flood + drought = rocky shore, flood + frozen + high modifier = glacier

City Settings:

City type is the same as for the basic settings.

City Blocks (0-) [16 default] - higher numbers mean more roads on the map. Scales with map size.

CF min/max (1-150) [10-100 default] - CF range for generated buildings. The CF determines the building type from the table in BMR.

Floors min/max (1-50) [1-6 default] - height range for generated buildings

Density (1-100) [75 default] - % chance of a building in each hex where a building is possible. Also chance to try and build multi-hex buildings.

DIFFERENCES BETWEEN THE BOARD GAME AND MEGAMEK

Although MegaMek tries to be faithful to the original board game rules, in some cases, due to technical or design limitations, this is not possible. These differences are not considered "bugs." If you spot any more discrepancies, please contact the author (see "CONTACT" below.)

  • If the line of fire lies along the edge of two hexes, in the board game, the defender chooses which hex to use. Instead, MegaMek chooses the hex that most favors the defender.

  • When punching, you automatically punch with both arms, if possible. This means you can not punch two different targets in the same round.

  • When kicking, you automatically use the leg with the better chance to hit.

  • There are several situations, notably death from above, where a unit is displaced out of a hex, and that unit's owner may pick the hex to move to. MegaMek currently picks the hex for you, choosing high elevations over low ones, to avoid falling damage.

CONTACT & FURTHER INFORMATION

For more information, and to get the latest version of MegaMek, visit the website at: http://www.megamek.org

For more information about the BattleTech board game, visit it's website at: http://bg.battletech.com/

To submit a bug report, suggestion, or feature request please visit https://github.com/MegaMek/megamek/issues

To discuss all things MegaMek, please visit our Discord https://discord.gg/megamek

COPYRIGHT & LICENSE INFORMATION

MegaMek - Copyright (C) 2002 Ben Mazur ([email protected])

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

MechWarrior, BattleMech, ‘Mech and AeroTech are registered trademarks of The Topps Company, Inc. Original BattleTech material Copyright by Catalyst Game Labs All Rights Reserved. Used without permission.

megameklab's People

Contributors

aarongullickson avatar akjosch avatar arlith avatar beerockxs avatar binaryspica avatar bloodwolf333 avatar carefullilcassie avatar dericpage avatar dylan-m avatar hammergs avatar honeyskull avatar illianicbt avatar mhjacks avatar nderwin avatar neoancient avatar nickaragua avatar pakfront avatar pavelbraginskiy avatar pheonixstorm avatar pmjdebruijn avatar pokefan548 avatar redbatz avatar rjhancock avatar sixlettervariables avatar sjuliez avatar sleet01 avatar taharqa avatar vizax avatar wildj79 avatar windchild292 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

megameklab's Issues

Glitch with assigning Gauss to Omni's in the arms

I suspect part of the issue is probably in MegaMek. But there is a way to trick MML into allowing you to but a Gauss rifle in the arm with hands and Lower Arm Actuators which per pg 58 of TM isn't allowed.

Steps to recreate

1)Start MML and set up a Clan OmniMech
2)Head to the equipment tab and buy Gauss Rifle
3)In the Assign Crit Tab put the Gauss into the arm. Notice the Hand and LAA are removed.
4)Right click on the empty slot below the Upper Arm Actuator and select add hand
5)Tada - Hand and LAA back in place.

There should be some type of block that prevents that action.

1.53 : Mixtech does not allow you to select mixtech armor

If you have a vehicle set to mix tech IS, you will not be able to select any clan armor (after clicking clan standard for example, MML just selects IS standard instead). If you have it set to mix tech clan, you cannot select any clan armor (same thing happens, MML just forces you to use the clan version instead).
megameklablog.txt

Please add Adjusted BV

When printing from .mul file with MML to add pilots to the printed sheets, could the unit's Adjusted BV be added to the sheet next to the Base BV?

Array out of Bounds Exception when printing Warship

Tried to test print a warship. Getting a ArrayIndexOutOfBoundsException: 6

Using the Print-Other Unit-Aegis Heavy Cruiser (2582)

Get the following error:

java.lang.ArrayIndexOutOfBoundsException: 6
	at megameklab.com.util.ImageHelperAero.getLocationAbbrs(ImageHelperAero.java:45)
	at megameklab.com.util.ImageHelperAero.printAeroWeaponsNEquipment(ImageHelperAero.java:236)
	at megameklab.com.ui.Aero.Printing.PrintAero.printWeaponsNEquipment(PrintAero.java:284)
	at megameklab.com.ui.Aero.Printing.PrintAero.printImage(PrintAero.java:84)
	at megameklab.com.ui.Aero.Printing.PrintAero.print(PrintAero.java:68)
	at sun.print.RasterPrinterJob.printPage(Unknown Source)
	at sun.print.RasterPrinterJob.print(Unknown Source)
	at megameklab.com.ui.Aero.Printing.PrintAero.print(PrintAero.java:309)
	at megameklab.com.util.UnitPrintManager.printAllUnits(UnitPrintManager.java:270)
	at megameklab.com.util.UnitPrintManager.printEntity(UnitPrintManager.java:89)
	at megameklab.com.util.UnitPrintManager.printSelectedUnit(UnitPrintManager.java:415)
	at megameklab.com.util.UnitPrintManager$2.actionPerformed(UnitPrintManager.java:359)
	```

[Linux] Cache Not Working

While using MML in Ubuntu, the Cache Option (ctrl+u) can not find the "mechfiles" file and when manually searching (crtl+f) MML always starts back at the root.

Both of these work fine in Windows.

Can't print Masakari MC-J in either 0.1.59 or 0.41.24

The following NPE is reported the megameklab log:

java.lang.NullPointerException
at megameklab.com.ui.Mek.Printing.PrintMech.printImage(PrintMech.java:182)
at megameklab.com.ui.Mek.Printing.PrintMech.print(PrintMech.java:93)
at sun.print.RasterPrinterJob.printPage(RasterPrinterJob.java:2106)
at sun.print.RasterPrinterJob.print(RasterPrinterJob.java:1488)
at megameklab.com.ui.Mek.Printing.PrintMech.print(PrintMech.java:612)
at megameklab.com.util.UnitPrintManager.printAllUnits(UnitPrintManager.java:223)
at megameklab.com.util.UnitPrintManager.printEntity(UnitPrintManager.java:87)
at megameklab.com.util.MenuBarCreator.jMenuPrintCurrentUnit(MenuBarCreator.java:1019)
at megameklab.com.util.MenuBarCreator.access$1600(MenuBarCreator.java:66)
at megameklab.com.util.MenuBarCreator$27.actionPerformed(MenuBarCreator.java:428)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)

I should add that I'm running MML on Fedora 24, if that matters. I have been able to print units before.

Unable to choose Naval motive types for Combat Vehicles

While updating unit sources in MML I noticed that the Monitor naval vessel was showing Hover as its motive type inside the lab. The blk file correctly shows that it is a ship. Looking in the code though there is no reference to a Naval motive type.

Vehicle/tabs/StructureTab.java line 115

Can't print Superheavy 'mechs

Printing requires having the right SVG images for the armor pips. We don't have images for enough armor pips for super heavy 'mechs, so they can't be printed.

Assigning certain anti-personnel weapons to Battle Armor fails to register

Several anti-personal weapons - for example the Grenade Launcher (Auto) - can be assigned to BattleArmor. Unfortunately, you cannot drag the weapon onto an arm (showing 0 crits), and when you attempt to auto-assign, the weapon does not mount properly and shows it's listing in the "Body," and isn't usable.

This seems to occur in both Clan and IS BattleArmor.

Steps to Repro:

  1. Setup a new battle armor
  2. Add a Grenade Launcher (Auto) to the weapons list
  3. Attempt to assign the grenade launcher; note it cannot be dragged
  4. Autofill the crits and notice it appears in the body, but does not register.

Pilot name printing on RSs

Note: I noticed this while in MHQ, but since it is a MML issue, i posted here.
I was playing around with MHQ last night testing out how to use the campaign. I printed my record sheets (from MHQ) to PDF and noticed the pilot names were misaligned to the sheet.

I've since looked at mml.com.ui.mek.printing and found the xy coords (PrintMech.java, line 237, for bipedal), and that prompted me to check the quad and tri mechs.

Results

If it is ok, I'd like to adjust the xy coords and then add in the same code to have it populate on the quad.

Wrong damage for Enhanced ER PPC

Using version 0.1.51

When trying to use the enhanced ER PPC on an aerospace fighter the table in the equipment tab shows damage as only 10 points should be 12.

Damage shows correctly for Mechs and Vehicles

Engine Criticals not set correctly in Super Heavy Mixed tech units

Brought up on Facebook. Steps to recreate.

  1. Open MML
  2. Set Tech to Mixed IS
  3. Set Tech Level to Experimental/Unofficial
  4. Set the mech weight to anything over 100
  5. Flip to the Assign Crit tab and notice the engine critical aren't refreshed correctly.

image

and

image

If you select Compact engine then back to Standard things refresh correctly.

TSM availability for Clan or Mixed Clan Chassis after 3135.

There is some cause to allow TSM equipment on Clan or Mixed Clan chassis after 3135 (Dark Age) as evidenced by the Jade Hawk made by the Jade Falcons. http://www.sarna.net/wiki/Jade_Hawk That's a confirmed example. (TRO: 3145 Mercenaries)

There is also an editor's note in the TechManual that the Ice Hellions have used TSM-type equipment as well. (TM,p.240)

I request that TSM be allowed on Advanced level Mixed Clan or Clan Chassis for Dark Age designs, particularly after 3135.

  • @easy on the Slack

Jump Jet issue with modular armor

Version 0.1.58
Made a 55 ton 5/8/5
Added modular armor and jump was listed a 2 and only one showed in assign crits tab.
Altering the number of jump jets seems to reset the one jump jet from any assigned critical slot back to the hopper waiting to be assigned.
Trying to remove the jet from the movement arrows does not work and to remove the jet it must be assigned to a critical slot and right clicked for delete item.

Also trying to set the type of Jump Jet to anything other than standard or mechanical booster does not work.

The rules for it are in TO pg 280-281, and mention there is errata for it on Pg 17 of June 2016 Errata release.

Large shield messing with jump jets

Attaching a zip.
Mjölnr HMR-MJR.zip.zip

Lab 1.58 so if this got fixed in a new release let me know.

So seems that impact resistant armor makes the jets go crazy a bit.
I used cargo as place holders for the 4 jets I was trying to use.

Adding jets seems to cause issues, and switching to improved doesn't seem to work.

Trying to work around it by setting things to normal and adding 4 jets appears to work, BUT...
When adding the 4 jets in the assign criticals tab when you add a jet it makes a bunch more jets adding tonnage and slots, and you can't fix it by turning the number down from the first tab.

Mixed tech units display ALL armor types

When checking on another bug I noticed the armor drop down listed all armor types for a clan mech, not just those specified for mechs. For this particular unit it was also showing armor types that hadn't been invented yet as well. There are no errors in the log.

mixedtech

Clan LRM & SRM ammo issues.

Clan LRMs & SRMs, when setting the Tech Level to Clan only, are missing ammo types while having improper ammo types. Some of the ammo types that should be Standard Rules can only be found when setting the rules level to Advanced or higher.

Per Interstellar Operations pp. 61 - 62

Clans have access to:

--LRMs--
Standard
Anti-Radiation
Artemis IV
Artemis V
Flare
Follow-the-Leader
Fragmentation
Heat-Seeking
Incendiary
Narc
Smoke
Swarm
Thunder

--SRMs--
Standard
Anti-Radiation
Artemis IV
Artemis V
Harpoon
Heat-Seeking
Inferno
Narc
Smoke
Tear Gas

First Screen Shot
Year = 3145
Tech Level = Clan
Rules Level = Standard
image

Second Screen Shot
Year = 3145
Tech Level = Clan
Rules Level = Advanced
image

Third Screen Shot
Year = 3145
Tech Level = Clan
Rules Level = Experimental
image

IO Screen Shots
image
image
image

Superheavy critical space

It seems that crit slots for superheavy mechs are still not computed properly. The critical slots required by the engine, armor and possibly cockpit components should be halved (in the rules it says it applies to everything except actuators and internal structure). Right now in Megameklab it works only for heat sinks and equipment you add from the equipment panel.

[Request] Select Sprite to use from file

Can we get an addition to MML lab where you can open a dialog window and select the sprite for your unit from the existing units, and it adds it to the mechset.txt local?

It would be much easier to have a small gui for this than continuously adding things to the localmechset manually.

0.1.56 Equipment Tab Display & Exceptions In Log

(latest release) Im not sure if this is the same issue everyone else has been reporting, mine never froze on me just have been noticing that the equipment tab screen will not draw correctly and will only draw the various buttons when you mouse over where they should be:

mm0

Can still go into the other three tabs which work correctly. And according to the log I guess it still has to do with the xstream.

Exception in thread "Mech Cache Loader" java.lang.NoClassDefFoundError: com/thoughtworks/xstream/converters/Converter
Caused by: java.lang.ClassNotFoundException: com.thoughtworks.xstream.converters.Converter
megameklablog.txt

ProtoType Jump Jets Missing from Dropdown

When building a mech with prototype Jump jets they are missing from the Jump Jet drop down menu.

Steps to duplicate

  1. Set MML to build a unofficial Tech Level
  2. Set year to between 2464-2471 (Prototypes should be available during this time)
  3. Add Jump Jet Move
  4. Check Drop down menu and notice only Standard and Improved available

Incidentally Improved shouldn't be available during this time.

Super heavies shouldn't be allowed to use certain equipment.

From a Facebook Conversation on Super Heavy Construction. Currently MML allows Super Heavy mechs to be built with the following systems:

Updated list broken down by Tab:
[Structure/Armor Tab] Only IS allowed
Chassis Section
-Structure drop down-
Clan Standard
Clan Endo Steel
Clan Endo Composite
Clan Industrial

-Engine Type drop down- Following not allowed
Fission see comments
Fuel Cell see comments
Clan Fuel Cell see comments

-Enhancements drop down- Following not allowed
MASC
TSM

Movement Section Following not allowed
No Jump Jets or Jump Boosters of any type.
No Underwater Movement Units

[Equipment Tab] Following not allowed
Other Equipment
AES
Modular Armor
Partial Wing
Supercharger
Super-Cooled Myomer

[Assign Criticals Tab] Following not allowed
Armored Components

Per IO pg 162 these systems are not allowed.

UMU for Mechs

At this time UMU are missing in MML and have to be added manually to MTF files.

Things not showing on printed papaer

When I print my mech, the following things do not show up:
-Gunnery and Piloting Skill (I cant fill them out either way)
-Weapon Heat
-Dissipation
-Cluster hits
-Attack modifiers
-Hit Location
-the armor dots for external armor

Adding MP also adds heatsinks up to max free

Whether modifying a mech or creating a new one, if you add MP to the point that the engine can hold more than 10 free MML will auto add heatsinks up to the maximum the engine can hold without the player's input.

Create a new mech or modify a premade, reduce HS to 10 and increase MP till the engine can hold more than 10 or at least increase the # the engine can hold over the stock config and it will auto add heatsinks up to the max free.

BA LB-X crit space bug

BA LB-X has 0 crit space instead of 2, though the weight is correct and it still can be assigned to a location (in which it does not take any crit space).

1.53 : MML allows you to use invalid ammo

For example if you are makig a mixtech unit, you can set it to use IS Tandem charge SRM ammo with clan SRM launchers. Megamek won't allow this however and will force the unit to use normal SRM ammo (although it still uses the half ammo per ton penalty of TC ammo).

MML shouldnt be displaying invalid ammo options if megamek won't allow it.

megameklablog.txt

Right-click > Left/Right Torso > Add to Left/Right Torso for targeting computer makes it use only one crit slot

Version: 0.43.1

How to reproduce the issue;

  1. Use the 'Mech unit type.
  2. Add a targeting computer.
  3. Add enough weapons so that the targeting computer requires at least two critical slots.
  4. Go to the Assign Criticals tab.
  5. Right click on the targeting computer in the Unallocated Equipment pane and choose "right torso > Add to right torso" or "left torso > Add to left torso" (either one). The targeting computer gets added, but it uses only one critical slot.

This issue only occurs with the side torsos.

Feedback on MML vs SSW - Only here for safe keeping.

Received some feedback on MML vs SSW on the forums. Placing it here so it doesn't get lost. Just for reference.

- SSW takes up less screenspace.

- SSW has more options for loading 'Mechs, the Select Mech dialog is clunky in MML.

- I love the extra programs that come with SSW, like Battletech Force Balancer. I use this extensively when planning my monthly games. The sorting, searching, and previewing features are especially easy to use.

- Lack of shade and color in MML makes it visually difficult for my eyes to track, especially in the 'Assign Criticals' tab.

- SSW allows me to add a picture of the Mech, and a logo, and Pilot info, which makes it easier for newer players to figure out what 'Mech is what on the field and what their skills are.

  • Gave up trying to figure out how to add Experimental Equipment like Null Sig/Void Sig etc. Stuff that is on the basic setup tab on SSW. Or stuff that should be easy to find, like Artemis IV and CASE. I have to load a 'Mech in MML from an appropriate year or source/era before I get access to tech that I should be able to see just by switching the Tech Level drop-down box.

New Omni mechs and Engine Free Heat Sinks

When I create a new Omni mech, the number of free engine heat sinks do not match what I think they should be. For instance, if I create a normal 75 Ton mech with 4/6/0 speed, it shows that there are 12 free engine heat sinks. As soon as I click the omni check box, the number of engine free heat sinks drops to 10. It does not appear to matter if it is a clan or IS omni mech.

Aero recordsheet not printing

As discussed in PR #8, Aero record sheets are not printing. Hopefully this is an issue isolated to me, and I'm doing something wrong, but don't know yet.

Steps to reproduce:

  • Open MML
  • File | Switch unit type | choose Aero
  • [optional] fill in as much data as you want
  • File | Print |Current Unit

Expected outcome: A print of the record sheet

Actual outcome: MML and printer just sits and does nothing. (I've let it sit for up to 15 minutes)

Stepping through the code in debug mode, I see it hangup as in the below screenshot.
debug clip

CASE II Year availability bug

On the equipment tab, CASE II says it's available in 3064 but won't show up unless the unit's year is set to 3081 or later. Currently on MML 0.1.54 because 0.1.55 is too bugged to show the equipment tab.

Several Issue with the Mac Version

MLL is not working well on my Mac. I have a with the Java6SE and the JRE8 installed. The few times things have outright crashed it's been while running Java8.

Here is a quick rundown

  • App version won't launch / generate a log file.
  • The raw Jar versions won't launch via a command line.
  • When launching the raw Jar file via finder is locks up when loading a cache (http://imgur.com/a/hIlyi)
  • When launching the Jar file from within the app package is crashes when you try to print (JRE8 error)

Launching the App with the Open -n command

LSOpenURLsWithRole() failed with error -10810 for the file /Users/Geg/Documents/Battletech/MegaMek/megameklab-0.1.57-mac/MegaMekLab.app.

When trying to load the Jar with Java6:

Exception in thread "main" java.lang.UnsupportedClassVersionError: megameklab/com/MegaMekLab : Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(ClassLoader.java:637)
at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Friday:Commands Geg$

When Trying to Load the raw Jar from the command line (JRE8):

Unable to redirect output
Memory Allocated [3817865]
java.io.FileNotFoundException: ./data/fonts/Eurosti.TTF (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at megameklab.com.util.UnitUtil.loadFonts(UnitUtil.java:1640)
at megameklab.com.ui.MegaMekLabMainUI.(MegaMekLabMainUI.java:50)
at megameklab.com.ui.Mek.MainUI.(MainUI.java:65)
at megameklab.com.MegaMekLab.main(MegaMekLab.java:139)
./data/fonts/Eurosti.TTF not loaded. Using Arial font.
java.io.FileNotFoundException: ./data/fonts/Eurostib.TTF (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.(FileInputStream.java:138)
at megameklab.com.util.UnitUtil.loadFonts(UnitUtil.java:1652)
at megameklab.com.ui.MegaMekLabMainUI.(MegaMekLabMainUI.java:50)
at megameklab.com.ui.Mek.MainUI.(MainUI.java:65)
at megameklab.com.MegaMekLab.main(MegaMekLab.java:139)
./data/fonts/Eurostib.TTF not loaded. Using Arial font.

Gyro switching and validation

Switching a Standard to XL Gyro with equipment in the CT slot(s) does not produce an error, but simply removes the gyro. The design validates even without the gyro present.

bug

Bug Report on Random Occurences

NOTE: This is being copied from a BT.com thread on SSW. (http://bg.battletech.com/forums/index.php?topic=32391.msg1309407#new)

I've submitted a bug report on it before. Many versions ago. It's difficult to provide and create screen shots for, or even reproduce. Basically, if you're creating infantry, certain equipment either appears or doesn't appear. If you restart the program and try again, it may be there. It may not.

If you do something like changing eras or tech levels on a 'Mech, there are times when equipment disappears, but the unavailable tonnage is still assigned to that weapon/equipment. i.e.: 70 ton 'Mech. Buy a Guardian ECM (1.5t). Delete the ECM. 1.5t is still missing from the total, but the item has been deleted.

This happens at complete random and usually happens after the unit has had equipment placed or moved multiple times. But it's difficult to reproduce consistently. I'll post another bug report on it.

EDIT: I will try to post specific instances of this in the thread replies when I get home.

Dropships fail to print in 0.1.58 with conversion exception

I get this error attempting to print Union (3056), Leopard (3056) and Overlord dropships with 0.1.58 on Windows. I am able to print them with 0.1.50 on Windows:

java.util.IllegalFormatConversionException: f != java.lang.Integer
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at megamek.common.ASFBay.getUnusedString(ASFBay.java:142)
at megameklab.com.util.ImageHelperDropShip.getBayString(ImageHelperDropShip.java:1065)
at megameklab.com.util.ImageHelperDropShip.printDropShipCargo(ImageHelperDropShip.java:96)
at megameklab.com.util.ImageHelperDropShip.printDropshipWeaponsNEquipment(ImageHelperDropShip.java:1060)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.printWeaponsNEquipment(PrintSpheroid.java:344)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.printImage(PrintSpheroid.java:86)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.print(PrintSpheroid.java:68)
at sun.print.RasterPrinterJob.printPage(Unknown Source)
at sun.print.RasterPrinterJob.print(Unknown Source)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.print(PrintSpheroid.java:370)
at megameklab.com.util.UnitPrintManager.printAllUnits(UnitPrintManager.java:285)
at megameklab.com.util.UnitPrintManager.printEntity(UnitPrintManager.java:87)
at megameklab.com.util.UnitPrintManager.printSelectedUnit(UnitPrintManager.java:404)
at megameklab.com.util.UnitPrintManager$2.actionPerformed(UnitPrintManager.java:348)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.util.IllegalFormatConversionException: f != java.lang.Integer
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at megamek.common.ASFBay.getUnusedString(ASFBay.java:142)
at megameklab.com.util.ImageHelperDropShip.getBayString(ImageHelperDropShip.java:1065)
at megameklab.com.util.ImageHelperDropShip.printDropShipCargo(ImageHelperDropShip.java:96)
at megameklab.com.util.ImageHelperDropShip.printDropshipWeaponsNEquipment(ImageHelperDropShip.java:1060)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.printWeaponsNEquipment(PrintAerodyne.java:344)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.printImage(PrintAerodyne.java:86)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.print(PrintAerodyne.java:68)
at sun.print.RasterPrinterJob.printPage(Unknown Source)
at sun.print.RasterPrinterJob.print(Unknown Source)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.print(PrintAerodyne.java:369)
at megameklab.com.util.UnitPrintManager.printAllUnits(UnitPrintManager.java:280)
at megameklab.com.util.UnitPrintManager.printEntity(UnitPrintManager.java:87)
at megameklab.com.util.UnitPrintManager.printSelectedUnit(UnitPrintManager.java:404)
at megameklab.com.util.UnitPrintManager$2.actionPerformed(UnitPrintManager.java:348)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.util.IllegalFormatConversionException: f != java.lang.Integer
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at megamek.common.ASFBay.getUnusedString(ASFBay.java:142)
at megameklab.com.util.ImageHelperDropShip.getBayString(ImageHelperDropShip.java:1065)
at megameklab.com.util.ImageHelperDropShip.printDropShipCargo(ImageHelperDropShip.java:96)
at megameklab.com.util.ImageHelperDropShip.printDropshipWeaponsNEquipment(ImageHelperDropShip.java:1060)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.printWeaponsNEquipment(PrintAerodyne.java:344)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.printImage(PrintAerodyne.java:86)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.print(PrintAerodyne.java:68)
at sun.print.RasterPrinterJob.printPage(Unknown Source)
at sun.print.RasterPrinterJob.print(Unknown Source)
at megameklab.com.ui.Dropship.Printing.PrintAerodyne.print(PrintAerodyne.java:369)
at megameklab.com.util.UnitPrintManager.printAllUnits(UnitPrintManager.java:280)
at megameklab.com.ui.dialog.UnitPrintQueueDialog.actionPerformed(UnitPrintQueueDialog.java:152)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.WaitDispatchSupport$2.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(Unknown Source)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at megameklab.com.ui.dialog.UnitPrintQueueDialog.(UnitPrintQueueDialog.java:141)
at megameklab.com.util.UnitPrintManager$1.actionPerformed(UnitPrintManager.java:336)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.util.IllegalFormatConversionException: f != java.lang.Integer
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printFloat(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at megamek.common.ASFBay.getUnusedString(ASFBay.java:142)
at megameklab.com.util.ImageHelperDropShip.getBayString(ImageHelperDropShip.java:1065)
at megameklab.com.util.ImageHelperDropShip.printDropShipCargo(ImageHelperDropShip.java:96)
at megameklab.com.util.ImageHelperDropShip.printDropshipWeaponsNEquipment(ImageHelperDropShip.java:1060)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.printWeaponsNEquipment(PrintSpheroid.java:344)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.printImage(PrintSpheroid.java:86)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.print(PrintSpheroid.java:68)
at sun.print.RasterPrinterJob.printPage(Unknown Source)
at sun.print.RasterPrinterJob.print(Unknown Source)
at megameklab.com.ui.Dropship.Printing.PrintSpheroid.print(PrintSpheroid.java:370)
at megameklab.com.util.UnitPrintManager.printAllUnits(UnitPrintManager.java:285)
at megameklab.com.ui.dialog.UnitPrintQueueDialog.actionPerformed(UnitPrintQueueDialog.java:152)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.WaitDispatchSupport$2.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.awt.WaitDispatchSupport$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.awt.WaitDispatchSupport.enter(Unknown Source)
at java.awt.Dialog.show(Unknown Source)
at java.awt.Component.show(Unknown Source)
at java.awt.Component.setVisible(Unknown Source)
at java.awt.Window.setVisible(Unknown Source)
at java.awt.Dialog.setVisible(Unknown Source)
at megameklab.com.ui.dialog.UnitPrintQueueDialog.(UnitPrintQueueDialog.java:141)
at megameklab.com.util.UnitPrintManager$1.actionPerformed(UnitPrintManager.java:336)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.AbstractButton.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Drop-down list error when creating infantry

Version: 0.43.1

When creating an infantry platoon, selecting 'Mechanized (Wheeled)' as a motive type sets the motive type to 'foot'. All the attributes of the platoon appear correct for a mechanized platoon, so it just appears to be a glitch with the drop-down list.

Industrial TSM priced incorrectly

Minor issue: The price of Industrial TSM is priced incorrectly as normal Myomer. It's proper value is 12,000 cbills x unit tonnage (Page 277 - Tech Manual).

Steps to repro:

  1. Set a 100 'mech to Industrial Frame
  2. Set Industrial TSM
  3. Break down the cost
  4. Notice the price rated for the myomer is 200,000
  5. Notice the correct price is 1,200,000

Things not showing on printed papaer

When I print my mech, the following things do not show up:
-Gunnery and Piloting Skill (I cant fill them out either way)
-Weapon Heat
-Dissipation
-Cluster hits
-Attack modifiers
-Hit Location
-the armor dots for external armor

Primary/Secondary weapon selection doesn't function

This is a long standing joint issue between Megamek and Megameklab, but thought I'd bug it. When you assign weapons to infantry, the last gun you assign is what is used by the unit; you cannot select between the weapons. Likewise you cannot tag in Megameklab which weapon should be the primary.

It seems as if one of two fixes should be considered: Allowing infantry in Megamek to toggle between weapons, or for Megameklab to have a tick box to pick the sole weapon for the unit. I was unsure which project to bug it under as a result.

Steps to re-produce:

  1. Create an infantry unit
  2. Give them a support weapon such an SRM
  3. Give them a new primary weapon such as an auto pistol
  4. Save the unit
  5. Note the unit can only use the auto pistol on board, and does not even show the SRM.

Cannot change gyro type with mixed clan tech

MegaMekLab version: 0.1.58

You cannot change the gyro type if you set the tech to "mixed clan". This occurs with any 'Mech, even new 'Mechs.

To reproduce:

  1. Open MegaMekLab.
  2. Change the tech to "Mixed Clan".
  3. Try to change the gyro type to anything other than "Standard". Nothing happens.

I attached the log for completeness, but I don't think you need it for this bug.

megameklablog.zip

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.