Back to Page
Revision 10 (current)
Edited by Mikewillplays on 9/4/2024 10:58 PM
This page is a hub for all speedrun related knowledge about the Flash game ''Magnet Face''
(TODO) Add table of contents
!!Language
*u/f - Units per frame (speed value)
!!Mechanics
!Walking
Billy's walking speed is capped at 200u/f, you can increase this cap to somewhere between 230 and 240u/f if you stop holding a direction for a frame or two. If you're coming off something at a speed of over 200, don't worry, Billy will maintain his speed
!Jumping
When jumping, Billy will not move horizontally for a frame, he will also not move horizontally for a frame when he eventually lands on some floor.
!Attracting
When pressing the Z key, Billy will create a magnetic shield around him that will attract to any metallic things, such as rails, metallic platforms, boxes and weapons, you can only attract one thing at a time. If you keep attracting while not moving, Billy's magnetic shield will increase at two different levels, the latter of which covers the length of the entire screen. For more information about each individual interaction with objects, check out the objects sections
!Looking up or down
By pressing up or down while in a standstill, Billy will look up or down in the corresponding directions, this increases his field of view, which can be used to load things earlier, speaking of which
!Dying
If you deplete Billy's health bar at the top left corner, he will die and warp to the last checkpoint he passed through.
!Cycles
This game has many cycles, such as moving platforms and enemies, they only load once they're on Billy's field of view. They don't seem to be affected by the system time.
(TODO) Add gifs to this section
!!Objects
!Enemies
There are two types of enemies, which I've nicknamed Slasher and Chopper. The Slasher will stay in place, and attack Billy with a hand swipe if he gets close, their most distinct feature compared to the Chopper is that the Slasher has three eyes, while the Chopper only has one. The Chopper will move between two places, and if they detect Billy, they will start chasing him until a certain point. Some of the things that they both share in common are the fact that they die to three gun hits, they die instantly to spike balls, you can push them (they won't move though) and they only have contact collision in the sides, meaning you can jump through them.
!Ray guns
Scattered throughout the levels, there are these ray guns that you can use, but in a subversive fashion, you can't actually shoot them, you can only attract them in order to throw them at enemies to kill them, and besides that, they have no practical use.
!Rails
There are these metallic rails across the stages that Billy can attract to, and when attracted to, will move Billy through a set path until the end. When you leave a rail, Billy keeps his previous momentum.
!Moving platforms
There are two types of moving platforms, normal and metallic. They are functionally the same, except that the you can attract to the metallic ones, when you do this, Billy will stick to the lower half of the platform.
!Boxes
Metallic boxes will attract to Billy when they get close enough to his magnetic shield, when this happens, they will follow him until he stops attracting or they get far away from each other. When attracting to you, if the box collides with you, depending on the speed of the box, it can either just knock down Billy when it isn't very fast or do that and fly up into the air. If you jump while attracting to a box that was on the ground, the box will be flung horizontally, relative to your position.
!Spike balls
When you touch a spike ball, you take damage. Besides that, they are functionally the same compared to boxes
!Colored pads
The pads open doors that have the corresponding color, they are only triggered by boxes and spike balls.
(TODO) Add gifs to this section
----
!!Tricks and glitches
!Ledge jump
When you run off ledges, you can still jump in the air.
!Corner boosts
By landing close to the corner of a metal box, the box will get pushed slightly backwards and you will get pushed slightly forward, saving a little bit of time.
!Box jump
Boxes don't have any collision on the bottom, meaning you can jump through them, and when you do this, you automatically snap to the top of the box.
!Damage boost
When taking damage, Billy will be moving at 300 units per frame for a while, which is faster than the regular running speed (which is 200). Note that you have to jump as early as possible to avoid slowdown
!Double jump
By jumping the frame you land, Billy will jump in the walking animation, which allows you to jump again in the air.
!Wall-clip
If you're going fast enough (usually about 900 units per frame) you can clip through thin walls pretty easily while also preserving speed. However, on thicker walls, what may happen is that you lose speed or fail to clip altogether.
!!Attraction glitches
!Box clip
When smashing a metal box against yourself close to a wall, you or the box can clip through the wall.
!Attraction jump
Whenever you stop attracting from a rail or metallic platform, you can jump again, this can be used to climb high areas without slowing down.
!Attraction speed
If you remember, Billy carries his momentum after ceasing attraction to a rail or metallic platform, and this applies even if Billy hasn't fully stuck to the platform, meaning you can move at very high, very quickly. There is also a difference between attracting to rails and attracting to platforms, while rails have a speed cap of 580 u/f, platforms have no cap, meaning the only limit is the ability to attract the same platform twice.
!Rail jam
When attracting to rails, on specific positions, Billy will become jammed between two positions, which is useful because it immediately raises your speed to the highest value
!Attraction disassociation
When you're going really fast (due to Attraction Speed), if you start attracting to a rail at the very last frame (or earlier), you will continue moving without attracting to the rail you were trying to attract, you will become ''disassociated''. This can be used for many things, such as increasing or decreasing your height without losing time. However, if you touch a wall, you will start attracting back. This may seem situational, but there are actually many glitches that are possible due to this trick.
!Floor clip
When you're disassociated from a rail, you will sometimes clip through thin floors from above. If you clip through a thick floor, you will start to zip either to the left or to the right, depending on your horizontal position.
(TODO) Add more attraction glitches
(TODO) Add gifs
----
!!Maps
__Warning:__ These maps should be taken with a huge grain of salt, since they're very inaccurate, they should only be used for routing purposes
Odd looking objects and their meanings:
*Purple arrows: Show the direction of the rail
*Big horizontal blue rectangles: Moving platforms
*Big horizontal gray rectangles: Metallic moving platforms
*Yellow squares: Pieces of cheese
*Pink blobs: Enemies (didn't bother to differentiate them)
*Small gray arches: Ray guns
*Pink rectangles on the floor: Buttons for pink doors
Level 1 map:
[https://i.ibb.co/5jV2YqF/level-1-route.png]
(TODO) Add remaining maps
----
!!RAM Watch and lua scripts
Billy's X position at the start of each level is always 4000, and the address for this value is a string that always starts with the number 5 and ends in the number 0. The Y position address is always the same as the X value's address, except that it always ends in a 4 instead of a 0 (these address strings quirks are common across many Flash games, by the way). Note that the addresses reset every time you load a new level.
Here's a lua script created by [user:CasualPokePlayer] that allows you to see how many units you move every frame in each direction:
local X_last_pos = memory.reads32(0xX address)
local Y_last_pos = memory.reads32(0xY address)
local function paint_callback()
local X_pos = memory.reads32(0xX address)
local Y_pos = memory.reads32(0xY address)
local X_vel = X_pos - X_last_pos
local Y_vel = Y_pos - Y_last_pos
gui.text(1, 50, string.format("X pos: %d\nX vel: %d", X_pos, X_vel))
gui.text(1, 100, string.format("Y pos: %d\nY vel: %d", Y_pos, Y_vel))
X_last_pos = X_pos
Y_last_pos = Y_pos
end
callback.onPaint(paint_callback)