mirror of
https://github.com/bryanthaboi/gen1recomp.git
synced 2026-08-12 08:21:02 +02:00
Merge pull request #970 from swuff-star/modded-evo-item
add modding support for custom item effects
This commit is contained in:
@@ -25,6 +25,18 @@ local function noEffect(data)
|
||||
return romText(data, "_ItemUseNoEffectText", "It won't have\nany effect.")
|
||||
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 = {
|
||||
POTION = 20, SUPER_POTION = 50, HYPER_POTION = 200,
|
||||
FRESH_WATER = 50, SODA_POP = 60, LEMONADE = 80,
|
||||
@@ -72,7 +84,18 @@ function ItemEffects.healsHP(id)
|
||||
end
|
||||
|
||||
-- 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"
|
||||
or id == "FULL_RESTORE" or id == "REVIVE" or id == "MAX_REVIVE"
|
||||
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 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 /
|
||||
-- ItemUseTMHM / ItemUseRepelCommon all refuse mid-battle
|
||||
-- (jp nz, ItemUseNotTime)
|
||||
|
||||
+13
-1
@@ -253,6 +253,18 @@ local function useOn(game, battle, id, target, list, moveIndex, picker)
|
||||
return
|
||||
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
|
||||
consume(game, id)
|
||||
-- refresh counts in the list
|
||||
@@ -404,7 +416,7 @@ local function useItem(game, battle, id, list)
|
||||
showMessages(game, payload)
|
||||
return
|
||||
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
|
||||
-- (ItemUseTMHM: BootedUpTMText / BootedUpHMText + TeachMachineMoveText)
|
||||
if def and def.machine then
|
||||
|
||||
Reference in New Issue
Block a user