Skip to content

Game logic

Combat

When units attack, how hits and damage are worked out for normal attacks and spells, how shots fly, and what each boss casts.

Normal attacks

  • gap = distance between the two centres minus both radii. A unit starts a swing when the gap is under its reach and keeps it while it stays under reach + 22 px. With reach 0 it never attacks (Isaac, the mages and the story characters); when chasing it stops 4 px away.
  • It waits its time between attacks, then plays its attack animation; the hit or the shot comes out at its strike tick, and when the animation ends it waits again.
  • Melee hits when a random number from 0 to 100, plus accuracy, minus the target’s evasion, reaches 100.
  • A shot hits when a random number from 0 to 99 is under accuracy minus evasion. When evasion is higher, the game reads the difference as a very large number, so the shot always hits.
  • Damage = half the attack − a quarter of the target’s defense, rounded down; 0 or less does no damage.
  • An attack with an element does ×½ to a unit of the same element and ×1.5 to one of the opposite element. Shots do ×1.5 to flying units.
  • Finally ×(128 + r) / 128, with r random from −10 to 10 (about ±8 %).

Sight

  • Every 10 ticks each unit looks for enemies less than 200 px away.
  • It chases one while it is nearer than its own sight radius. Missions often change that radius: most set it to 150 or 50 px.

Spell damage

  • The power at cast comes from the spell, the caster’s magic, the drawing quality and the element level (see Spells).
  • Against a unit of the spell’s element the spell heals it slightly (1/16 of the power, whatever its magic defense); against the opposite element it does ×1.5; against the other four, or a unit with no element, normal damage. No unit is immune to an element’s damage.
  • The element also changes the chance of the spell’s status: ×½ on a unit of the spell’s element, ×1.5 on one of the opposite element. No status leaves out a unit for its element: a fire creature can be burned, but burn is fire damage and each tick heals it; poison, which is dark, heals dark creatures.
  • Then × (100 − magic defense) / 100; magic defense is at most 99.
  • Then ×(128 + r) / 128, with r random from −10 to 10.
  • A unit with more weaknesses than shields for that element takes ×2; with more shields, ×½.
  • Healing spells add their power as it is: no element, defense or randomness.

Opposite elements

  • Fire ↔ Water
  • Wind ↔ Earth
  • Dark ↔ Light

Shots

  • A shot flies straight at where the target’s centre was when it was fired, without following it, up to reach + 22 px.
  • It hits the first opposing unit within 4 px plus that unit’s radius, and does not go through. High obstacles stop it; water and pits do not.
  • If it misses, it bounces back and fades out in 31 ticks.
TypeUnitsSpeedOn a hit
1Cherubim, Seraphim90 px/sstays stuck 1.67 s
2Harpia, Elpia, Phoenix60 px/sstays stuck 1.67 s
3Purple Cap, Red Cap60 px/sdisappears
4Gnome, Rune Gnome75 px/sdisappears
5 · FireSalamander, Runemander, Flare Dragon75 px/sdisappears
6 · WindGale Dragon75 px/sdisappears
7 · WaterHydro Dragon75 px/sdisappears
8 · EarthEarth Dragon75 px/sdisappears
9 · DarkShadow Drgn.75 px/sdisappears
10 · LightShine Dragon, Multipul75 px/sdisappears

Camera

The view is the bottom screen, 256 × 192 px. Its position is its top-left corner on the map, from 0 to the map’s size minus the view.

  • It follows nobody: it does not move by itself when Isaac walks, and it does not follow spells, targets or captured creatures. It moves at a constant speed, with no smoothing or dead zone.
  • When a battle starts, it centres Isaac on the screen.
  • World bounds: there is nothing outside the map, so the camera stops on each axis at the map’s edge and keeps moving on the other one. Nothing in the game lifts these limits.
  • The D-pad scrolls it 7 px per frame, or 4.9 px per axis on a diagonal (A, Y, B and X with the left-handed option). It stays where the player leaves it; it does not scroll while a spell is prepared or chanted.
  • When the player holds L to chant and Isaac is outside x 20–236, y 20–172 of the screen, the chant waits while the view moves toward him at 10 px per frame, until he is in the centre; with less than 10 px to go it jumps there. It stops early at a map edge.
  • Missions move it in a straight line to a point at speed / 4 px per frame; they almost always use 6 px per frame. It does not go back to Isaac by itself.
  • Big Drop shakes it ±2 px · 30 frames. The earthquake shake in the code is used by no spell.
  • Units more than 40 px outside the view are not drawn.
  • The top screen shows the minimap. While the player draws a spell, it shows the rune list instead: one column per element and one row per rune level, with Isaac’s MP; once the chant gives a spell, that spell’s number, name and description. It goes back to the minimap when the chant ends.

Backdrops

Each map layer moves with the view. The backdrop layer (NORM) moves at a fraction of it, read from the map: behind the map (sky, sea, lava) or in front of it. Reading the code did not confirm whether it repeats at its edge.

MapSpeedWhere
Map 00875 %behind the map
Map 01175 %behind the map
Map 01378.13 %behind the map
Map 01475 %behind the map
Map 01684.38 %not shown: the map has an animated layer
Map 02578.13 %behind the map
Map 02678.13 %behind the map
Map 02778.13 %behind the map
Map 02878.13 %behind the map
Map 03475 %behind the map
Map 03578.13 %behind the map
Map 0369.38 %behind the map
Map 040100 %behind the map
Map 04278.13 %behind the map
Map 04478.13 %behind the map
Map 30578.13 %behind the map
Map 30778.13 %behind the map
Map 90375 %behind the map

Damage numbers

When a unit’s HP changes, the game draws the change over it with its own 8 × 8 px digits: pink-red for damage, green for healing, on any side.

  • It shows how much HP changed, with no sign and up to 9999: the damage worked out, even if the unit had less HP left. A change of 0 or a miss shows nothing. From 1000 on, the game loses a 0 in the hundreds: 1050 shows 150.
  • The colour depends only on whether HP went down or up: damage to Isaac or an ally looks the same as damage to an enemy. The digits are the same in every language.
  • Its centre is the unit’s feet plus the unit’s radius downward, and it follows the unit. The digits are 6 px apart, so their white outlines overlap.
  • It does not rise, bounce or fade: it stays 40 frames (0.67 s) and disappears at once. If the hit kills the unit, it stays until the unit vanishes.
  • Each unit has one number: if its HP changes again before it goes, the new value replaces it and the time starts over. Damage plays SE_UNIT_DAMAGE.
347
347 damage on a Misty Mush, as the game draws it, at 4×. It plays every 2 s.
0123456789
Damage · #de1852
0123456789
Healing · #18bd73

Chant screen

While Isaac draws a spell, a grey layer dims the field, the magic circle opens over it, each stroke is a glowing ribbon and the top screen lists the runes. Read from the game’s code.

Magic circle
Magic circle
  • Fire
  • Wind
  • Water
  • Earth
  • Dark
  • Light
Stroke texture and colour per element
Rune list with the 18 runes
Rune list with the 18 runes

Mana crystals (MP pillars)

Blue, red or dark crystals that stand on the field in many battles. Each one belongs to a side, and it changes hands when units stand next to it long enough.

Yours: blue
The enemy’s: red
Nobody’s: dark
Isaac, 24 px away, takes a crystal of nobody: the green part of the bar shrinks 1/12 px a tick, and over 150 the crystal turns blue; the bar then fades in 1 second.Taking the crystal…The site draws this bar from the game’s rules: the game draws it with plain rectangles, not with a picture.
  • Each crystal is solid, 10 px in radius: it stops walking and flying units and shots. It has no HP: it only changes hands.
  • Isaac and his creatures take a crystal by standing within 40 px of it: its gauge rises 1 per tick for each of them. A crystal of nobody changes hands over 150 (2.5 s with one unit), a held one over 300 (5 s). With nobody taking it, the gauge drops 1 per tick.
  • Nobody can take it while a unit of its owner is within 70 px of it, and a crystal of nobody stays put while units of two sides are that close.
  • The kinds of unit that cannot take crystals, listed below, do not count.
  • In the story, enemies never take or defend crystals: the enemy crystals at the start of a battle stay the enemy’s until Isaac’s side takes them.
  • Its owner’s units within 70 px heal 30 HP every 1.67 s, while they are hurt.
  • Each crystal you hold adds 1 MP to Isaac’s regeneration every 0.5 s (2 MP a second), on top of his own. After a chant, his MP starts coming back 0.5 s sooner for each crystal, down to 0.5 s.
  • In the missions “Purify the Mana Crystals!” you win when every crystal is yours.

Cannot take crystals

Wyvern, Jetvern, Green Shog, Harpia, Elpia, Gale Hound, Acrobat, Blue Shog, Hydra, Hydro Hound, Brown Shog, Earth Hound, Salamander, Runemander, Red Shog, Flare Hound, Phoenix, Dagon, Bat, Com-Bat, Black Shog, Shadow Hound, Yellow Shog, Talos, Gigant, Shine Hound, Divider, Multipul

Story maps with crystals

How many crystals each one has at the start, by owner. Open a map to see where they stand.

MapBattlesYours: blueThe enemy’s: redNobody’s: dark
Map 0014—8—
Map 0025—138
Map 0032—2—
Map 0042—6—
Map 0054—16—
Map 0062—11
Map 0075—1610
Map 0081——1
Map 0093174
Map 0113—72
Map 0133—101
Map 0143—11—
Map 0154116—
Map 01652153
Map 01751146
Map 0187528—
Map 0193—11—
Map 0204—612
Map 0224—17—
Map 0233—93
Map 0246—311
Map 0254—191
Map 0264—163
Map 0274—162
Map 02861261
Map 0293—10—
Map 0304—311
Map 0313—13—
Map 0324—18—
Map 0334—19—
Map 0343—11—
Map 0354—151
Map 0364—131
Map 0372—8—
Map 0381——3
Map 0403—111
Map 0413—132
Map 0422—62
Map 0432—8—
Map 0442—6—
Map 0452—8—
Map 0462—10—
Map 3011——3
Map 3021——4
Map 3031——5
Map 3041——6
Map 3051——5
Map 3061——6
Map 3071——5

Aiming a spell

After the chant, the game waits for the player to aim. Each targeting mode shows its icon in a corner of the screen; spells cast in a direction, like Fireball, add an arrow under Isaac. Read from the game’s code.

  • The arrow’s ring sits on Isaac’s feet and the picture turns around it: the tip is 36 px ahead and the handle 15 px behind, so it comes out from under him.
  • Before the stylus touches the screen it points up. Once it touches, anywhere, it points at the stylus every frame, at any angle and without stretching; Isaac turns to face it in four directions.
  • Lifting the stylus fires toward the last point touched, and the arrow and the icon go away. Pressing the chant button before touching cancels; after touching it can no longer be cancelled.
  • The mode’s icon sits in the bottom-left corner (bottom-right with the left-handed option) and jumps to the opposite top corner while the arrow points into its corner.
  • Circle spells shade the field outside their reach: the touch must land inside it, and dragging sets the radius, from 5 px up to the spell’s radius.
Move the pointer or your finger over the field: the arrow follows it as on the DS. −90°

Icon of each mode

  • Circle
  • Line
  • Fixed circle
  • Direction
  • Unit
  • Instant
  • Point

HP bar

Every unit on the field carries its HP bar over its head, all the time: it does not wait for a hit or a selection.

Misty MushE
  • Your side, full HP
  • An enemy at three quarters of its HP
  • An ally or neutral character at half
  • An enemy just hit from full to half: the lost part shows in pink
  • Your unit just healed from a quarter to three quarters: the healed part shows in green

The site draws these bars from the game’s rules, at 6×: the game draws them with plain rectangles, not with a picture.

Enemy marker

Every enemy carries a small letter just left of its HP bar: it marks the side. Isaac, his squads and allies carry none.

  • “E” with the game in English, French or Spanish; “F” (Feind) in German. 8 × 8 px, not animated.
  • It goes 5 px left of the HP bar’s frame, one row under its top edge.
  • It shows the whole time the enemy is on the field, without blinking: also while the unit blinks as it appears (its first 64 ticks) and during the puff when it dies.
  • An enemy with the hidden status loses it when it finishes fading out.
EF
The letter in each language, at 4×. The HP bar drawing above shows it next to a Misty Mush’s bar.

Bosses that cast

Only each battle’s boss casts spells, when its mission tells it to; there is no range check. It uses its own MP (its MP stat), pays each rune at the highest cost (element rank 0) and its power is the spell’s plus its magic, with no drawing quality or rank. With no MP left it cannot cast.

Each unit

Reach and swing are gaps between the two bodies; times in seconds.

UnitAttackReach → keepsBetween attacksHit atShotSightElement
IsaacNever attacks——————
OrkusMelee13 → 35 px1.17 s0.2 s—50 px—
Battle OrkusMelee13 → 35 px1.17 s0.2 s—50 px—
Scout OrkusMelee13 → 35 px0.92 s0.2 s—25 px—
Knight OrkusMelee13 → 35 px0.83 s0.2 s—50 px—
WyvernMelee14 → 36 px1.08 s0.1 s—50 px—
JetvernMelee14 → 36 px1.05 s0.1 s—50 px—
Purple CapRanged50 → 72 px1 s0.22 s60 px/s60 px—
Red CapRanged50 → 72 px1 s0.22 s60 px/s60 px—
Misty MushMelee15 → 37 px1.42 s0.17 s—40 px—
Killer MushMelee15 → 37 px0.92 s0.17 s—40 px—
SilfeedMelee13 → 35 px0.63 s0.1 s—50 pxWind
RunefeedMelee13 → 35 px0.58 s0.1 s—50 pxWind
Green ShogMelee13 → 35 px1.08 s0.27 s—50 px—
HarpiaRanged45 → 67 px0.83 s0.17 s60 px/s80 px—
ElpiaRanged45 → 67 px0.83 s0.17 s60 px/s80 px—
Gale HoundMelee17 → 39 px1 s0.33 s—75 px—
AcrobatMelee14 → 36 px0.98 s0.2 s—68 px—
Gale DragonRanged60 → 82 px1.08 s0.43 s75 px/s60 pxWind
UndineMelee14 → 36 px0.97 s0.1 s—50 pxWater
RunedineMelee14 → 36 px0.87 s0.1 s—50 pxWater
Blue ShogMelee13 → 35 px1.08 s0.27 s—50 px—
Death FishMelee17 → 39 px0.83 s0.2 s—50 px—
Death FangMelee17 → 39 px0.8 s0.2 s—50 px—
HydraMelee18 → 40 px1.17 s0.3 s—50 px—
Hydro HoundMelee17 → 39 px1 s0.33 s—75 px—
Hydro DragonRanged60 → 82 px1.08 s0.43 s75 px/s60 pxWater
GnomeRanged50 → 72 px0.9 s0.08 s75 px/s60 pxEarth
Rune GnomeRanged50 → 72 px0.87 s0.08 s75 px/s60 pxEarth
Mush-MushyMelee15 → 37 px1.42 s0.17 s—40 px—
Brown ShogMelee13 → 35 px1.08 s0.27 s—50 px—
Mud GolemMelee13 → 35 px1 s0.43 s—45 px—
Stone GolemMelee13 → 35 px1.08 s0.43 s—45 px—
Earth HoundMelee17 → 39 px1 s0.33 s—75 px—
Earth DragonRanged60 → 82 px1.08 s0.43 s75 px/s60 pxEarth
SalamanderRanged50 → 72 px1 s0.2 s75 px/s60 pxFire
RunemanderRanged50 → 72 px1 s0.2 s75 px/s60 pxFire
Red ShogMelee13 → 35 px1.08 s0.27 s—50 px—
Flare HoundMelee17 → 39 px1 s0.33 s—75 px—
Ruby GolemMelee13 → 35 px1 s0.43 s—45 px—
PhoenixRanged45 → 67 px0.83 s0.17 s60 px/s80 px—
DagonMelee18 → 40 px1.17 s0.3 s—50 px—
Flare DragonRanged60 → 82 px1.08 s0.43 s75 px/s60 pxFire
BatMelee14 → 36 px1 s0.2 s—50 px—
Com-BatMelee14 → 36 px1 s0.2 s—50 px—
GhostMelee13 → 35 px1 s0.33 s—50 pxDark
WraithMelee13 → 35 px0.97 s0.33 s—50 pxDark
Black ShogMelee13 → 35 px1.08 s0.27 s—50 px—
Dark WalkerMelee20 → 42 px1.5 s0.2 s—50 px—
Shadow HoundMelee17 → 39 px1 s0.33 s—75 px—
Shadow Drgn.Ranged60 → 82 px1.08 s0.43 s75 px/s60 pxDark
CherubimRanged50 → 72 px1.08 s0.23 s90 px/s65 pxLight
SeraphimRanged50 → 72 px0.75 s0.23 s90 px/s65 pxLight
Yellow ShogMelee13 → 35 px1.08 s0.27 s—50 px—
TalosMelee20 → 42 px1.25 s0.43 s—30 px—
GigantMelee20 → 42 px1.17 s0.43 s—30 px—
Shine HoundMelee17 → 39 px1 s0.33 s—75 px—
Day WalkerMelee20 → 42 px1.5 s0.2 s—50 px—
Shine DragonRanged60 → 82 px1.08 s0.43 s75 px/s60 pxLight
DividerMelee22 → 44 px0.83 s0.33 s—80 px—
MultipulRanged50 → 72 px0.92 s0.33 s75 px/s80 px—
BoxdogMelee15 → 37 px1 s0.27 s—110 px—
DogboxMelee15 → 37 px1 s0.27 s—110 px—
VillagerNever attacks——————
Fire MageNever attacks——————
Wind MageNever attacks——————
Water MageNever attacks——————
Earth MageNever attacks——————
Dark MageNever attacks——————
Light MageNever attacks——————
ChristivaNever attacks——————
TristaNever attacks——————
PopokuraNever attacks——————
Geh OlgNever attacks——————
LeonardNever attacks——————
RussellNever attacks——————
SenekaNever attacks——————

1×