anotherPowerDownLibrary.lua v1.1.2 - like powerUpGuard or altpsystem, but newer

Share and discuss custom LunaLua code and content packs for SMBX2.
mariobrigade2018
Spike
Spike
Posts: 296
Joined: Wed May 24, 2023 7:00 pm
Flair: Normie in coding who dreams of making a Mario game
Pronouns: he/him

Re: anotherPowerDownLibrary.lua v1.1.2 - like powerUpGuard or altpsystem, but newer

Postby mariobrigade2018 » Mon Jan 22, 2024 1:06 am

Alucard648 wrote:
Wed Sep 01, 2021 12:33 am
KBM-Quine wrote:
Sun Feb 07, 2021 5:54 pm
the reason for characters with the heart system not being able to use it is it'd defeat the point of the heart system.
Characters with heart system should have +2 max HP to balance that.
viewtopic.php?t=28409

Youtube_Kexzis
Goomba
Goomba
Posts: 1
Joined: Sat Mar 16, 2024 10:30 am
Pronouns: he/him

Re: anotherPowerDownLibrary.lua v1.1.2 - like powerUpGuard or altpsystem, but newer

Postby Youtube_Kexzis » Fri Mar 29, 2024 2:39 pm

I tried this and it doesn't work (I use SMBX2 b5). My code looks like this:

-------------------------------------------------------
--[[anotherPowerDownLibrary.lua v1.1.2 by KBM-Quine]]--
--[[ with code help from: ]]--
--[[ rixithechao, Enjl, and Hoeloe ]]--
-------------------------------------------------------
local anotherPowerDownLibrary = {}
local pm = require("playermanager")
local bowser
if not isOverworld then
bowser = require("characters/bowser")
end

anotherPowerDownLibrary.enabled = true
anotherPowerDownLibrary.customForcedState = 751
anotherPowerDownLibrary.powerDownSFX = 5

local usableCharacters = { --most characters either don't work with it or have unique enough gameplay that warrants exclusion
[CHARACTER_MARIO] = true,
[CHARACTER_LUIGI] = true,
[CHARACTER_PEACH] = false,
[CHARACTER_TOAD] = false,
[CHARACTER_LINK] = false,
[CHARACTER_MEGAMAN] = false,
[CHARACTER_WARIO] = true,
[CHARACTER_BOWSER] = false, --bowser is coded to work, but will be disabled by default
[CHARACTER_KLONOA] = false,
[CHARACTER_NINJABOMBERMAN] = false,
[CHARACTER_ROSALINA] = false,
[CHARACTER_SNAKE] = false,
[CHARACTER_ZELDA] = true,
[CHARACTER_ULTIMATERINKA] = false,
[CHARACTER_UNCLEBROADSWORD] = true,
[CHARACTER_SAMUS] = false
}

function anotherPowerDownLibrary.setCharacterActive(charID, bool)
usableCharacters[charID] = bool
end

function anotherPowerDownLibrary.onInitAPI()
registerEvent(anotherPowerDownLibrary, "onTick")
registerEvent(anotherPowerDownLibrary, "onPlayerHarm")
end

function anotherPowerDownLibrary.onPlayerHarm(event, p)
if usableCharacters[p.character] and anotherPowerDownLibrary.enabled then
if p.character == CHARACTER_UNCLEBROADSWORD or p.character == CHARACTER_BOWSER then
event.cancelled = false
elseif p.powerup > 2 and p.mount == MOUNT_NONE and not p:mem(0x0C, FIELD_BOOL) and p:mem(0x16, FIELD_WORD) < 3 and not p.hasStarman and p.BlinkTimer == 0 then
event.cancelled = true
SFX.play(anotherPowerDownLibrary.powerDownSFX)
p.forcedState = anotherPowerDownLibrary.customForcedState
end
end
end

local playerData = {}

function anotherPowerDownLibrary.onTick()
if not isOverworld and anotherPowerDownLibrary.enabled then
for _, p in ipairs(Player.get()) do
local ps = PlayerSettings.get(pm.getCharacters()[p.character].base, p.powerup)
playerData[p] = playerData[p] or {}
playerData[p].curState = playerData[p].curState or 0

if p.BlinkTimer == 120 and p.character == CHARACTER_UNCLEBROADSWORD and playerData[p].curState ~= PLAYER_BIG then --allows uncle broadsword to use this libaray without overwriting his unique mechanics
p.powerup = PLAYER_BIG
end
if p.BlinkTimer > 0 and p.character == CHARACTER_BOWSER then --allows bowser to use this libaray without overwriting his unique mechanics
if playerData[p].curState > PLAYER_BIG then
if bowser ~= nil then
bowser.setHP(2)
end
end
return
end

if p.forcedTimer == 0 then --if a forcedState timer isn't active, track player powerup
playerData[p].curState = p.powerup
end
if p.forcedState == anotherPowerDownLibrary.customForcedState then --taken from modPlayer.bas, line 7477
if p:mem(0x12E, FIELD_BOOL) then --ducking state, seemingly wouldn't work if using player.InDuckingPosition?
p:mem(0x132, FIELD_BOOL, true) --standing value?? seems to corrilates to .stand in modPlayer.bas, is player.Unknown132
p:mem(0x12E, FIELD_BOOL, false)
p.height = ps.hitboxHeight
p.y = p.y - ps.hitboxHeight + ps.hitboxDuckHeight
end
p.forcedTimer = p.forcedTimer + 1
p.CurrentPlayerSprite = 1
if p.forcedTimer % 5 == 0 then
if p.powerup == PLAYER_BIG then
p.powerup = playerData[p].curState
else
p.powerup = PLAYER_BIG
end
end
if p.forcedTimer >= 50 then
if p.powerup == playerData[p].curState then
p.powerup = PLAYER_BIG
end
p.BlinkTimer = 150
p.BlinkState = true
p.forcedState = 0
p.forcedTimer = 0
end
end
end
end
end

return anotherPowerDownLibrary


Return to “LunaLua”

Who is online

Users browsing this forum: No registered users and 0 guests

SMWCentralTalkhausMario Fan Games GalaxyKafukaMarioWikiSMBXEquipoEstelari