Infravision cheat – Marathon


You will find that all of the cheats.lua files, included in the three1 Marathon disk images from AlephOne, are incomplete… the infravision cheat is unavailable2, or rather, that is to say that the see() function definition is missing.

See also


If you try to call the see() function, from the console, then you get this error displayed,

string["console"]:1: attempt to call global 'see' (a nil value)

as shown in the top left hand corner of this screenshot:

see() error
see() error

I searched and most copies of the file on the web, including the original on the Github repository (alephone/examples/lua/Cheats.lua), also suffer from the omission.

I found this Simplici7y – Cheats page3, which has the see() function definition from the download link, in the file cheats advanced v2_7E.lua contained within

Simply add the following to the cheats.lua file, using a text editor

function see()
  Players[0].items["infravision"] = 1

I made my own function, all(), which saves time, as it calls everything at once

function all()

If the see() function is not present, when you call all(), then you see this:

When the see() function is added then you see this:

To enter the cheat code, hit the key that you have defined for the console access, mine is \, and then type the name of the cheat function, for example:


or, using my custom function all()


Two pistol cheats

shit() cheat

You may notice that using the standard cheats.lua that you only get one pistol when you use the shit() command. That is because the additional pistol is omitted from the script definition.

Change this line, in the shit() definition

 local weapons = { "alien weapon", "pistol", "fusion pistol", "assault rifle", "missile launcher", "flamethrower", "shotgun", "shotgun", "smg" }


 local weapons = { "alien weapon", "pistol", "pistol", "fusion pistol", "assault rifle", "missile launcher", "flamethrower", "shotgun", "shotgun", "smg" }

Basically, the "pistol" is duplicated, just like the "shotgun" is.

Bug in the provided shit() cheat

In addition, there is a bug in the shit() as provided in the cheats.lua file supplied in the disk image, when used with Marathon.

I have noticed that when the original (not modified as shown above) shit() cheat is used in Marathon (but not Durandal, nor Infinity), then there is a bug when switching weapons. The sequence is usually this: fists, magnum, fusion, rifle, napalm, rocket, alien.

However, after using the shit() cheat, then the sequence now becomes: fists, magnum, fusion, magnum (no HUD), rifle,  fusion (no HUD), napalm, rocket, alien.

That is to say that additional magnum and a fusion gun entries are added to the linked list, but without the corresponding HUD display showing when they are selected.

When these magnums (no HUD) are fired, either individually or together, first a fist appears and then a weird portion of the rocket launcher appears in the place of the magnum… but no firing occurs (I think). This occurs for both the left and right handed magnums. Note that the correctly displayed magnums work as expected. It is possible to make this weirdness go away by pressing either fire button, around 11 times (maybe 10-12) – then the rifle appears and cycling through the weapons will show that the magnum (no HUD) is no longer in the linked list. This firing of 10 – 12 times is probably enough to use up all of the ammo.

In addition, when the fusion gun (no HUD) is selected, the fusion gun fires repeatedly and automatically, just below the bottom of the screen. Note that the correctly displayed fusion gun works as expected. If either fire button is pressed then two angled up shots show in addition to the downward firing fusion bolts. If you wait long enough, whilst continually firing the two bullets (around 100 rounds), the weapon will go away, in much the same way as the weird magnum does. It should be noted that the download fusion bolts don’t cause damage, although the upward firing bullets do. In fact, the pairs of bullets seem to be like an SMG round, so maybe there is a proto-SMG in Marathon that wasn’t fully developed..

Attempt to fix

My first though was the "smg" entry in shit(), as there isn’t a small machine gun in Marathon, nor Durandal. However, removing it doesn’t help. In addition, removing the two "shotgun" entries didn’t resolve the issue either.

Dual pistol cheat

Another issue, when you only want the pistol cheat, is that the mag() command needs to be run twice, in order to get two pistols.

To get two pistols using just one command, add the following code:

function mag2()
   local items = Players[0].items
   items["pistol"] = items["pistol"] + 2
   items["pistol ammo"] = items["pistol ammo"] + 20

and call it with


This also gives you double the ammo (20 rounds/clips instead of 10).

Turning off power up cheats

Maybe the four power up cheats are annoying, and you don’t want to have to wait for them to time out (timings taken from Durandal):

  • Invincible (50 seconds duration)
  • Invisible (1 minute 10 seconds duration)
  • Infravision (3 minutes duration)
  • Extravision (3 minutes duration)

Add these lines to Cheats.lua:

function nosee()
   Players[0].items["infravision"] = 0 

function nowow()
   Players[0].items["extravision"] = 0

function nobye()
   Players[0].items["invisibility"] = 0

function nonuke()
   Players[0].items["invincibility"] = 0

Call them with nosee(), nowow(), nobye() and nonuke() respectively. However, they don’t work at all…

From the AlephOne Lua page, specifically 4.19 Players, it would seem better to set the respective duration to 1 or zero, i.e. .infravision_duration, .extravision_duration, .invisibility_duration, or .invincibility_duration .

For example,

function nosee()
   Players[0]..infravision_duration = 0 

function nowow()
   Players[0].extravision_duration = 0

function nobye()
   Players[0].invisibility_duration = 0

function nonuke()
   Players[0].invincibility_duration = 0


Energy cheats

You have to call nrg() repeatedly, up to three times to get a full purple bar.

Add this code to get a full purple bar immediately:

function nrg3()
  if Players[0].life < 450 then
    Players[0].life = 450

and call with


A note on maximum energy

Energy is defined by 150 for a full bar. So 150 is a full red bar, 300 is a full yellow bar and 450 is a full purple bar.

Unfortunately you can’t seem to go beyond this, and setting .life higher than 450 has no apparent effect, so this code (which would allow you to call nrg() 5 times) doesn’t work:

function nrg()
  if Players[0].life < 150 then 
    Players[0].life = 150
  elseif Players[0].life < 300 then
    Players[0].life = 300
  elseif Players[0].life < 450 then
   Players[0].life = 450
  elseif Players[0].life < 600 then
    Players[0].life = 600
  elseif Players[0].life < 750 then
    Players[0].life = 750

Nor does this

function nrg3()
  if Players[0].life < 750 then
    Players[0].life = 750

Shame that…

Other bugs

  1. When you get too close to an alien, they disappear! You have to take a step back and they reappear.
  2. There was another bug, but I forget what…
  3. When you load, or graduate, a level (in Marathon), if you are already pressing the mouse buttons, then they do not register.
  4. Using the Caps Lock for Run, if you load, or graduate, a level or (likewise) start the game with Caps Lock depressed, then turning run on or off thereafter makes no difference, you just end up moving at walking speed only.


1 Marathon, Marathon: Duradal, and Marathon Infinity
2 Extract from cheats.lua

-- Cheats.lua
-- To use this script, select it as the solo script in environment
-- preferences
-- To cheat, type the console key, then the function in the left
-- column, then enter. Press the microphone button to jump.
-- nrg() Energy (1x)
-- otwo() Oxygen
-- bye() Invisible
-- nuke() Invincible
-- see() Infravision
-- wow() Extravision
-- mag() Pistol
-- rif() Assault rifle
-- pow() Rocket launcher
-- toast() Flamethrower
-- melt() Fusion gun
-- puff() Shotgun
-- zip() SMG
-- pzbxay() Alien weapon
-- ammo() All weapons' ammo
-- qwe() Jump
-- shit() Everything (almost)
-- yourmom() Save at this spot

3 Linked to from

Mar 1, 2012


New Marathon files on Simplici7y.cheats advanced v2
This is a revised version of Iamanidiot123’s advanced cheats script, which is based on the original Cheats.lua released by Treellama in the Aleph One download. Additional functionality has been added, including hard falling damage.

But remember this…

Cheaters don’t really win,
and winners don’t really cheat,
Unless you’re talking politics.

(Bungie Software, 1995)

More bugs (Infinity)

  1. Using the shit() cheat, on vidmaster levels, you can end up limited to just 4 missiles, rather than say 40+. On total carnage. Maybe if you have alien and then change weapon? In the first part of the second vidmaster level “If I had a rocket launcher I’d make someone pay”, you type shit() repeatedly to get many rockets (but you have the alien weapon selected) then in the second part of the second vidmaster level “If I had a rocket launcher I’d make someone pay” when you switch to the rocket you only have 4. This ammo limit shouldn’t apply when on Total Carnage level.
  2. The rising and lowering lava disappears on the second part of the second vidmaster level “If I had a rocket launcher I’d make someone pay”, in the second to last room, either side of the long (narrow) passageway. It disappears halfway along the second pool, when you reach the wider mid point of the path through second pool. If you go back, retrace steps the raising and lowering lava reappears.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s