mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
better mod item registry
This commit is contained in:
@@ -25,6 +25,18 @@ local function noEffect(data)
|
|||||||
return romText(data, "_ItemUseNoEffectText", "It won't have\nany effect.")
|
return romText(data, "_ItemUseNoEffectText", "It won't have\nany effect.")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function registeredEffect(data, itemDef)
|
||||||
|
if not data or not itemDef or not itemDef.effect then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
if not data.item_effects then
|
||||||
|
return nil
|
||||||
|
end
|
||||||
|
|
||||||
|
return data.item_effects[itemDef.effect]
|
||||||
|
end
|
||||||
|
|
||||||
local HEAL_AMOUNT = {
|
local HEAL_AMOUNT = {
|
||||||
POTION = 20, SUPER_POTION = 50, HYPER_POTION = 200,
|
POTION = 20, SUPER_POTION = 50, HYPER_POTION = 200,
|
||||||
FRESH_WATER = 50, SODA_POP = 60, LEMONADE = 80,
|
FRESH_WATER = 50, SODA_POP = 60, LEMONADE = 80,
|
||||||
@@ -72,7 +84,18 @@ function ItemEffects.healsHP(id)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Does this item need a party-member target?
|
-- Does this item need a party-member target?
|
||||||
function ItemEffects.needsTarget(id, itemDef)
|
-- 'data' is optional for compat purposes; targeting falls back to itemDef/vanilla detection
|
||||||
|
function ItemEffects.needsTarget(id, itemDef, data)
|
||||||
|
if itemDef and itemDef.needsTarget ~= nil then
|
||||||
|
return itemDef.needsTarget
|
||||||
|
end
|
||||||
|
|
||||||
|
local effect = registeredEffect(data, itemDef)
|
||||||
|
|
||||||
|
if effect and effect.needsTarget ~= nil then
|
||||||
|
return effect.needsTarget
|
||||||
|
end
|
||||||
|
|
||||||
return HEAL_AMOUNT[id] or STATUS_HEAL[id] or id == "MAX_POTION"
|
return HEAL_AMOUNT[id] or STATUS_HEAL[id] or id == "MAX_POTION"
|
||||||
or id == "FULL_RESTORE" or id == "REVIVE" or id == "MAX_REVIVE"
|
or id == "FULL_RESTORE" or id == "REVIVE" or id == "MAX_REVIVE"
|
||||||
or id == "RARE_CANDY" or STONES[id]
|
or id == "RARE_CANDY" or STONES[id]
|
||||||
@@ -147,6 +170,28 @@ function ItemEffects.use(data, save, itemId, target, battle, moveIndex, ow)
|
|||||||
local itemDef = data.items[itemId]
|
local itemDef = data.items[itemId]
|
||||||
local name = itemDef and itemDef.name or itemId
|
local name = itemDef and itemDef.name or itemId
|
||||||
|
|
||||||
|
local effectDef = registeredEffect(data, itemDef)
|
||||||
|
if effectDef then
|
||||||
|
if battle and effectDef.battle == false then
|
||||||
|
return "failed", { notTime(data, save) }
|
||||||
|
end
|
||||||
|
|
||||||
|
if not battle and effectDef.field == false then
|
||||||
|
return "failed", { notTime(data, save) }
|
||||||
|
end
|
||||||
|
|
||||||
|
return effectDef.use({
|
||||||
|
data = data,
|
||||||
|
save = save,
|
||||||
|
itemId = itemId,
|
||||||
|
item = itemDef,
|
||||||
|
target = target,
|
||||||
|
battle = battle,
|
||||||
|
moveIndex = moveIndex,
|
||||||
|
overworld = ow,
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
-- ItemUseVitamin / ItemUsePPUp / ItemUseEvoStone / ItemUseCoinCase /
|
-- ItemUseVitamin / ItemUsePPUp / ItemUseEvoStone / ItemUseCoinCase /
|
||||||
-- ItemUseTMHM / ItemUseRepelCommon all refuse mid-battle
|
-- ItemUseTMHM / ItemUseRepelCommon all refuse mid-battle
|
||||||
-- (jp nz, ItemUseNotTime)
|
-- (jp nz, ItemUseNotTime)
|
||||||
|
|||||||
+13
-1
@@ -253,6 +253,18 @@ local function useOn(game, battle, id, target, list, moveIndex, picker)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if result == "kept" then
|
||||||
|
if battle then
|
||||||
|
list:close()
|
||||||
|
showMessages(game, payload, function()
|
||||||
|
battle:itemUsed({})
|
||||||
|
end)
|
||||||
|
else
|
||||||
|
showMessages(game, payload, closePicker)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
if result == "consumed" then
|
if result == "consumed" then
|
||||||
consume(game, id)
|
consume(game, id)
|
||||||
-- refresh counts in the list
|
-- refresh counts in the list
|
||||||
@@ -404,7 +416,7 @@ local function useItem(game, battle, id, list)
|
|||||||
showMessages(game, payload)
|
showMessages(game, payload)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
if ItemEffects.needsTarget(id, def) and not ItemEffects.isBall(id) then
|
if ItemEffects.needsTarget(id, def, game.data) and not ItemEffects.isBall(id) then
|
||||||
-- TMs/HMs boot up and announce their move before the target picker
|
-- TMs/HMs boot up and announce their move before the target picker
|
||||||
-- (ItemUseTMHM: BootedUpTMText / BootedUpHMText + TeachMachineMoveText)
|
-- (ItemUseTMHM: BootedUpTMText / BootedUpHMText + TeachMachineMoveText)
|
||||||
if def and def.machine then
|
if def and def.machine then
|
||||||
|
|||||||
Reference in New Issue
Block a user