How To: Autocode to LunaLua
Jump to navigation
Jump to 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
Details | ||
---|---|---|
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;
end
|
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;
end
|
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);
end
-- 0.7.2 and up
if player.character == P1 then
player.character = P2
end
|
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
Details | ||
---|---|---|
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 ipairs(NPC.get(NPC ID, Section-1)) do
v.direction = DIR_RIGHT;
if player.x < v.x then
v.direction = DIR_LEFT;
end
end
|
All NPCs of NPC ID in Section always face the player. |
Screen commands
Details | ||
---|---|---|
Autocode | Lua | Notes |
PushScreenBoundary,Section,UDLR,-,-,Length,Speed | -- v0.7.2 and up
local spdX = #
local spdY = #
local boundaryRect = Section.get(#).boundary
boundaryRect.left = boundaryRect.left + spdX
boundaryRect.right = boundaryRect.right + spdX
boundaryRect.top = boundaryRect.top + 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 ipairs (NPC.get()) do
if v.x < lMargin then
v.x = lMargin
end
if v.x > rMargin then
v.x = rMargin
end
if v.y < tMargin then
v.y = tMargin
end
if v.y > bMargin then
v.y = bMargin
end
end
|
Keeps NPCs from leaving the screen. |
Text commands
Details | ||
---|---|---|
Autocode | Lua | Notes |
ClearInputString,-,-,-,-,Length,- | Misc.cheatBuffer("")
|
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. |
Triggers
Layer commands
Set commands
Details | ||
---|---|---|
Autocode | Lua | Notes |
CyclePlayerLeft,-,-,-,-,Length,- | -- Pre-0.7.2
if player:mem(0xF0, FIELD_WORD) == CHARACTER_MARIO then
player:mem(0xF0, FIELD_WORD, CHARACTER_LINK);
else
local temp = player:mem(0xF0, FIELD_WORD) - 1;
player:mem(0xF0, FIELD_WORD, temp);
end
-- 0.7.2 and up
if player.character == CHARACTER_MARIO then
player.character = CHARACTER_LINK;
else
player.character = player.character - 1;
end
|
Cycles player character 'left'. |
CyclePlayerRight,-,-,-,-,Length,- | -- 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'. |
Kill,Target,-,-,-,Length,Option | Target:kill();
|
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 ipairs(NPC.get(NPC ID, -1)) do
v:mem(Address, Data type, Value);
end
|
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. |
SetHearts,-,Hearts,-,-,Length,- | 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 ipairs(NPC.get(NPC ID, -1)) do
v:mem(0x148, FIELD_FLOAT, Damage);
end
|
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
Details | ||
---|---|---|
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. |
PlayMusic,-,Section,-,-,Delay,- | playMusic(Section-1)
|
Plays the music from Section. |