How To: Autocode to LunaLua

From PGE Wiki
Jump to: navigation, search

This is a guide for converting LunaDLL autocode to LunaLua code. Note that this guide is still incomplete; please refer to the LunaDLL Autocode Reference and LunaLua API for commands and functions not yet featured here.

Important Notes

  • The player2 keyword can be substituted for player to apply any filters/behavior/etc. to the second player instead of the first.
  • Some autocode commands do not have a LunaLua equivalent yet or do not require a LunaLua equivalent due to differences in how code is structured in the two languages.

Basic Filters

Autocode Lua Notes
FilterToSmall,-,-,-,-,Active time,-
player.powerup = PLAYER_SMALL;
Player loses all powerups.
FilterToBig,-,-,-,-,Active time,-
if  player.powerup ~= PLAYER_SMALL  then
    player.powerup = PLAYER_BIG;
Lowers player 1's powerup state down to "bigness" if they have anything better (fire flower, leaf...)
If you are already small or big, you will stay small or big.
FilterToFire,-,-,-,-,Active time,-
if  player.powerup > PLAYER_FIREFLOWER-1  then
    player.powerup = PLAYER_FIREFLOWER;
Lowers player 1's powerup state down to fire flower if they have anything better (leaf, hammer suit...)
If you are already small, big, or fire-flowered, you will stay that way.
You can use another powerup constant in place of PLAYER_FIREFLOWER to filter to that powerup instead.
FilterMount,-,-,-,-,Active time,-
player:mem(0x108, FIELD_WORD, 0);
Removes your mount (yoshi, clown car, boot...)
FilterReservePowerup,-,-,-,-,Active time,-
player.reservePowerup = 0;
Removes whatever is in the reserve powerup box.
Replace the 0 with another NPC ID to place that NPC in the reserve box.
FilterPlayer,-,P1,P2,-,Active time,-
-- Pre-v0.7.2
if  player:mem(0xF0, FIELD_WORD) == P1  then
    player:mem(0xF0, FIELD_WORD, P2);

-- 0.7.2 and up
if  player.character == P1  then
    player.character = P2
If the player is P1, change them to P2 instead. Replace P1 and P2 with the player constants of your choice.
To filter all other characters to P2, just use the middle line.

General Effect Commands

Autocode Lua Notes
HeartSystem,X,Y,MAX HEARTS,-,Active time,- Suggested library Activates a heart tracking system for players that use hearts. Allows for more than 3 hearts and displays the current heart count at X / Y on screen.
InfiniteFlying,-,-,-,-,Active time,-
player:mem(0x170,FIELD_WORD) = 52;
Keeps the player's flight timer from counting down.
ForceFacing,NPC ID,Section,-,-,Length,-
for  k,v in pairs(NPC.get(NPC ID, Section-1))  do
    v.direction = DIR_RIGHT;
    if  player.x < v.x  then
	v.direction = DIR_LEFT;
All NPCs of NPC ID in Section always face the player.

Screen commands

Autocode Lua Notes
-- v0.7.2 and up
local spdX = #
local spdY = #
local boundaryRect = Section.get(#).boundary
boundaryRect.left = boundaryRect.left + spdX
boundaryRect.right = boundaryRect.right + spdX = + spdY
boundaryRect.bottom = boundaryRect.bottom + spdY
Moves section borders.
ScreenEdgeBuffer,NPC ID,UDLR,Buffer Space,-,Length,-
local cam = Camera.get()[1]
local lMargin = cam.x - #
local rMargin = cam.x + cam.width + #
local tMargin = cam.y - #
local bMargin = cam.y + cam.height + #
for  k,v in pairs (NPC.get())  do
	if  v.x < lMargin  then
		v.x = lMargin
	if  v.x > rMargin  then
		v.x = rMargin
	if  v.y < tMargin  then
		v.y = tMargin
	if  v.y > bMargin  then
		v.y = bMargin
Keeps NPCs from leaving the screen.

Text commands

Autocode Lua Notes
Interrupts words and cheats the player is typing.
ShowText,-,X pos,Y pos,Font type,Length,String
Text.print(String, Font type, X pos, Y pos)
Shows String on the screen, at coordinates Xpos and Y pos, with specified font type.
ShowNPCLifeLeft,NPC ID,X pos,Y pos,Section,Length,Base health
local npc = NPC.get(NPC ID, Section)
local hpStr = "HP: "..tostring(npc:mem(0x148,FIELD_FLOAT)).."/"..tostring(Base health)
Text.print(hpStr, X pos, Y pos)
Displays how much life the first match for "NPC ID" in "Section" has. Displays on the screen at coordinates X pos and Y pos. Supply the correct base health for the NPC so it can calculate the correct remaining life.


Layer commands

Set commands

Autocode Lua Notes
-- Pre-0.7.2
if  player:mem(0xF0, FIELD_WORD) == CHARACTER_MARIO  then
    player:mem(0xF0, FIELD_WORD, CHARACTER_LINK);
    local temp = player:mem(0xF0, FIELD_WORD) - 1;
    player:mem(0xF0, FIELD_WORD, temp);

-- 0.7.2 and up
if  player.character == CHARACTER_MARIO  then
    player.character = CHARACTER_LINK;
    player.character = player.character - 1;
Cycles player character 'left'.
-- Pre-0.7.2
local temp = math.max(1,(player:mem(0xF0, FIELD_WORD) + 1)%6);
player:mem(0xF0, FIELD_WORD, temp);

-- 0.7.2 and up
local temp = math.max(1, (player.character+1)%6);
player.character = temp;
Cycles player character 'right'.
Kills the target.
MemAssign,Address,Value,Operation,-,Length,Data type
mem(Address, Data type, Value)
Sets the internal memory of SMBX.
NPCMemSet,NPC ID,Offset,Value,OPERATION,Length,Data type
for  k,v in pairs(NPC.get(NPC ID, -1))  do
    NPC:mem(Address, Data type, Value);
Sets the memory of all NPCs in the level of the given type.
PlayerMemSet,-,Offset,Value,OPERATION,Length,Data type
player:mem(Offset, Data type, Value)
Sets the memory of Player 1.
player:mem(0x16, FIELD_WORD, Hearts)
Sets the amount of hearts the player currently has to HEARTS.
SetHits,NPC ID,Section,Damage,-,Length,-
for  k,v in pairs(NPC.get(NPC ID, -1))  do
    NPC:mem(0x148, FIELD_FLOAT, Damage);
Set all NPCs that have the given NPCID to have taken HITS amount of hits.
SetVar,-,Operation,Value,-,Length,Variable Name See the Data class Manipulates permanent user variables

Audio commands

Autocode Lua Notes
SFX,-,Sound ID,-,-,Delay,-
Audio.playSFX(int SoundID)
// or
Audio.playSFX(string Filename)
Plays one of SMBX's sound effects if you specify a number or a custom sound effect from the level folder if you specify a filename string.
Plays the music from Section.

Advanced/Misc commands