Fusion modding · UNITS / AVIA / LAND/DOM / ANIMAT / EXPLOSIONS
FrançaisGlobal rules (misc\misc)
lang/MISC/MISC, which the game reads as misc\misc, holds the rules shared by all units: minimum damage and remaining damage per hit kind, score stars, colors of neutral soldiers, reinforcement waits. The game reads it when a mission loads, after the name lists (lang2/hitsnames for the hit kinds) and before misc\engine.
Each rule is one key value... line. A dash in the first column disables the line (see the syntax). The unit sheets (properties) supply the armor and damage values that these rules interpret.
Copies of the file
Several archives carry their own MISC/MISC. Change every copy that applies.
| Copy | Content |
|---|---|
lang/MISC/MISC (lang.aps) | The game: all the rules. |
MISC/MISC of winter_unit, sud_unit, wuste_unit, wuste_unit_s1 | Copies per terrain. They repeat the shot rules of lang, but have their own SoldClr and tanksonarmorprotection (mine 200 and mine_at 100 instead of 3 and 1). |
APRM WW II_Edit/<environment>/misc/MISC | The editor: 11 identical copies, with no shot rule. Their SoldClr for russian and 7 differ from the game. |
Syntax
reinforcement_flagbusy_wait 400
StarScore 1 25001
SoldClr german 163 190 179
shot_damage pierce 6 1200
shot_armor pierce 1 200
shot_delta pierce 150
tanksonarmorprotection pierce 3 3 3 3 3 3
- Unknown key: the game reports an
Error in "desc\misc\misc" keyand reads the rest of the file. - Unknown hit kind: the game reports
Invalid HitID. The value applies to no kind. - Absent key: the engine default applies, given in the tables below.
- The hit kinds are those of
lang2/hitsnames:abjective,air,explosive,fire,machine,mine,pierce,transpierce,mine_at,piat,sniper,none. - The
shot_ricochetandshot_calibrerules (AF engine) are described in Engine settings.
Damage and armor per hit kind
Three lines per hit kind define how a shot of damage D goes through an armor A.
| Key | Values | Purpose |
|---|---|---|
shot_armor <kind> <a0> <a1> | two armors | X values of the two points of the line. |
shot_damage <kind> <d0> <d1> | two damages | Y values: the damage that matches a0 and a1. |
shot_delta <kind> <delta> | one integer | Divisor of the remaining damage. Default 1. |
The game computes, in integers, a slope (d1 - d0) / (a1 - a0) and an intercept (d0 × a1 - a0 × d1) / (a1 - a0). The divisions round toward zero. A shot penetrates when D is higher than slope × sheet armor + intercept. This threshold is called T.
A shot that penetrates does min(D, (D − T) × D / delta) damage. A shot that does not penetrate does 0. A kind with a shot_calibre rule uses its own formula (see Engine settings).
Fusion values:
| Kind | shot_armor | shot_damage | shot_delta | Slope | Intercept |
|---|---|---|---|---|---|
piat | 1 200 | 4 1200 | 1 | 6 | −2 |
pierce | 1 200 | 6 1200 | 150 | 6 | 0 |
explosive | 2 181 | 3 2999 | 500 | 16 | −30 |
mine | 1 181 | 5 924 | 250 | 5 | 0 |
transpierce | 1 200 | 6 1200 | 50 | 6 | 0 |
machine | 1 10 | 1 10 | 20 | 1 | 0 |
sniper | 1 10 | 1 10 | 16 | 1 | 0 |
fire | 1 181 | 7 2500 | 500 | 13 | −6 |
air | 1 10 | 1 10 | 2 | 1 | 0 |
abjective | 1 10 | 1 10 | 20 | 1 | 0 |
mine_at | 50 181 | 40 1024 | 1000 | 7 | −335 |
Example: pierce has the threshold 6 × armor. A shell of 120 damage against an armor of 15 (threshold 90) penetrates and does min(120, 30 × 120 / 150) = 24 damage. For pierce and transpierce, the Fusion shot_calibre rule replaces this last calculation.
A kind with no shot_armor or shot_damage line has the points (0, 0) and (1, 0): the slope and the intercept are 0, so the threshold T is 0 and every shot penetrates. A shot_armor, shot_damage or shot_delta line with too few values makes the game write to few params.
Protection per hit kind (tanksonarmorprotection)
tanksonarmorprotection pierce 3 3 3 3 3 3
tanksonarmorprotection abjective 10 10 10 10 10 10
One line per hit kind, then six numbers: three pairs, one for each armor face. For each number, the game keeps 256 − n (limited to 0..256). For the first pair, it draws a random value between the two limits, multiplies it by an amount and divides by 256. With two equal numbers the result is constant: 3 gives 253/256, that is 98.8 %.
Values in lang: abjective 10; fire, mine, piat, pierce, transpierce 3; explosive 2; machine, mine_at, sniper 1. The terrain archives give 200 to mine and 100 to mine_at. The behavior of the second and third pairs is not confirmed.
Score stars (StarScore)
StarScore <star> <score> gives the score to reach for each of the 10 stars. The game counts the thresholds that the player’s score reaches or exceeds: this number, from 0 to 10, is the number of stars saved in the player’s results. Under the threshold of star 1, the player has no star. With no line, the threshold is 0.
| Star | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
|---|---|---|---|---|---|---|---|---|---|---|
| Score | 25001 | 60001 | 100001 | 150001 | 200001 | 250001 | 275001 | 300001 | 375001 | 400001 |
The editor copies define the same ten thresholds. The loader also accepts winscore <score> and loosescore <score> (absent from Fusion, default 0).
Colors of neutral soldiers (SoldClr)
SoldClr <nation> <red> <green> <blue> tints the palette of the neutral soldier (SOLD.PL) for one nation. For each gray or nearly gray color of the palette, the game multiplies the gray level by value / 250 on each channel: 250 leaves the gray unchanged, a larger value makes it lighter (a channel stops at 255). Other colors do not change. The unit key camouflage selects the nation of a soldier.
- Nation by name:
german,japanese,british,american,russian. - Nation by number:
SoldClr <n> ...withnfrom 1 to 11 for the extra palettes. - Nation with no line: the palette stays that of
SOLD.PL. A number outside 1 to 11 is a key error.
| Nation | Red | Green | Blue |
|---|---|---|---|
russian | 192 | 140 | 86 |
german | 163 | 190 | 179 |
british | 190 | 150 | 50 |
american | 200 | 180 | 60 |
japanese | 275 | 275 | 200 |
1 | 188 | 188 | 188 |
2 | 350 | 350 | 350 |
3 | 200 | 200 | 200 |
4 | 150 | 150 | 275 |
5 | 150 | 150 | 275 |
6 | 400 | 400 | 300 |
7 | 222 | 138 | 72 |
8 | 210 | 200 | 166 |
9 | 150 | 150 | 150 |
10 | 152 | 172 | 111 |
11 | 144 | 188 | 136 |
The terrain archives have their own values. For example, winter_unit gives 400 400 300 to russian, and wuste_unit gives 209 209 12.
Waits and animations
| Key | Purpose | Fusion value | Default |
|---|---|---|---|
reinforcement_flagbusy_wait | Wait, in turns, of a reinforcement whose spot is taken. A turn lasts 40 ms at normal speed: 400 turns make 16 s. | 400 | 0 |
hell_maxgointime | Maximum entry time (helicopter, from the name). | 250 | 2147483647 |
hell_maxpickuptime | Maximum pick-up time (helicopter, from the name). | 250 | 2147483647 |
onturretanitime | Animation time tied to the turret. | 8 | −1 |
onarmoranitime | Animation time tied to the armor. | 10 | −1 |
shipboomtype | Name of the explosion of a destroyed ship (none: no explosion). The name must exist in the explosion or ground types. | ship_rad | none |
Only reinforcement_flagbusy_wait has a confirmed effect: when the game finds no spot for the reinforcement, it copies this value into the reinforcement’s wait counter. No read of hell_maxgointime or hell_maxpickuptime was found in the original DLL outside the loader. Their effect is not confirmed. The same applies to the detail of onturretanitime and onarmoranitime.
The loader also accepts AI waits: ai_soldwait…, ai_tankwait…, ai_katyawait…, ai_planewaittozonemove and ai_trainwaitrndmove. Each takes two values, minimum and maximum, in turns. It accepts ai_katyaminfireunits and ai_domwaitunload (one value). These lines are absent from Fusion.
Checking a change
- Change the copy in
lang/MISC/MISCand, if the rule exists there, in the terrain archives. - Keep the CRLF line ends and ASCII.
- Build the archive again (
lang.aps, and each terrain archive you changed). - Start a mission: the game reports any unknown key or hit kind.
- In multiplayer, all the players must have the same files.