# phantasy_hero_magic_prep no regs prepare hero/player agent for spell use
("phantasy_hero_magic_prep",
[
(store_script_param_1, ":caster"),
## IF agent happens to have a chargeable staff, put it in slot0
(assign, ":weapon", 0),
(assign, ":empty", 0),
(assign, ":weapon_1",0),
(assign, ":weapon_2",0),
(assign, ":weapon_3",0),
(assign, ":weapon_4",0),
# GS get slots 1-3 and see if any are staves that should move to slot0. We only care about caster staves right now
# players with more than 1 staff will only use the highest one found in the list of staves, mainly to preserve necromancer staff.
# multiple special staves are thrown away now at the agent level to prepare for auto-charging later.
(try_begin),
(try_begin),
(agent_get_item_slot, ":weapon_2", ":caster", 1), # Weapon slot 2
(is_between, ":weapon_1", "itm_gnarled_staff", "itm_snake_staff"), # GS so stop checking if not these
(assign, ":weapon", ":weapon_2"),
(agent_unequip_item, ":caster", ":weapon_2", 2), #
(assign, ":empty", 2),
(else_try),
(lt, ":weapon_2", 1),
(assign, ":empty", 2), # don't waste the time spent looking at the slot earlier
(try_end),
(try_begin),
(agent_get_item_slot, ":weapon_3", ":caster", 2), # Weapon slot 3
(is_between, ":weapon_3", "itm_gnarled_staff", "itm_snake_staff"), # GS so stop checking if not these
(try_begin),
(gt, ":weapon", ":weapon_3"), # the unlikely case of 2 or more staves equipped, which one staff to keep?
(assign, ":weapon", ":weapon_3"),
(try_end),
(agent_unequip_item, ":caster", ":weapon_3", 3), # it is unequipped to prevent confusion for auto-charging staves someday
(assign, ":empty", 3),
(else_try),
(lt, ":weapon_3", 1),
(assign, ":empty", 3),
(try_end),
(try_begin),
(agent_get_item_slot, ":weapon_4", ":caster", 3), # Weapon slot 4
(is_between, ":weapon_4", "itm_gnarled_staff", "itm_snake_staff"), # GS so stop checking if not these
(try_begin),
(gt, ":weapon", ":weapon_4"), # the unlikely case of 2 or more staves equipped, which one staff to keep?
(assign, ":weapon", ":weapon_4"),
(try_end),
(agent_unequip_item, ":caster", ":weapon_4", 4), #
(assign, ":empty", 4),
(else_try),
(lt, ":weapon_4", 1),
(assign, ":empty", 4),
(try_end),
(try_begin), # if it was already in slot 1 or didnt exist we don't need to do anything with staves...
(gt, ":weapon", 0), # GS special staff exists in another slot 2-4.
(agent_get_item_slot, ":weapon_1", ":caster", 0), # Weapon slot 1
(gt, ":weapon_1", 0), # GS the slot is not empty
(assign, ":weapon_move", ":weapon_1"), # GS save the weapon to juggle slots later. Let's find any staves
(agent_unequip_item, ":caster", ":weapon_1", 1), #
(agent_equip_item, ":caster", ":weapon", 1), # GS now staff from slots 1-3 is in slot0
(try_begin),
(gt, ":empty", 0), # GS earlier found an empty slot. so we can now put the item we moved just now to that slot
(agent_equip_item, ":caster", ":weapon_move", ":empty"), # GS except now its not empty so best look for empty slot again
(assign, ":empty", 0),
(try_end),
(try_end),
## we do however need to do something for slot 2:
(agent_get_item_slot, ":weapon_2", ":caster", 1), # Weapon slot 2 is agent inventory slot 1. I know...
(gt, ":weapon_2", 0), # weapons slot 2 is NOT empty
(assign, ":weapon_move", ":weapon_2"), # hang on to weapon 2
(agent_unequip_item, ":caster", ":weapon_2", 2), # slot is clear
## see if we get lucky and theres an open slot to move it to
(try_begin),
(eq, ":empty", 0), # slot 1 might be open, or one of the other slots found earlier received slot_1's weapon
(agent_get_item_slot, ":weapon_1", ":caster", 0), # Weapon slot 1 is agent inventory slot 0. I know...
(agent_get_item_slot, ":weapon_3", ":caster", 2), # Weapon slot 3 is agent inventory slot 2. I know...
(agent_get_item_slot, ":weapon_4", ":caster", 3), # Weapon slot 4 is agent inventory slot 3. I know...
(try_begin),
(lt, ":weapon_1", 1),
(assign, ":empty", 1),
(else_try),
(lt, ":weapon_3", 1),
(assign, ":empty", 3),
(else_try),
(lt, ":weapon_4", 1),
(assign, ":empty", 4),
(else_try), # GS do it the hard way; all slots are full and we still have to dump a weapon
# the problem now is which of the other 3 slots is expendable?
# and is it reasonable to for the player to anticipate what to keep,
# so we should prefer dumping say slot 3 over 4? What if slot 3/4 inherited a high value item when juggling staves
(agent_get_item_slot, ":weapon_3", ":caster", 2), # check weapon slot 3 first
(item_get_value, ":value3",":weapon_3"),
(item_get_value, ":value2",":weapon_move"),
(try_begin),
(lt, ":value3", ":value2"), # weapon slot 3 item is worth less than slot 2 item although it might be a shield
(agent_unequip_item, ":caster", ":weapon_3", 3), #
(agent_equip_item, ":caster", ":weapon_move", 3), # slot 2 got juggled to slot 3
(try_end),
(try_end),
(gt, ":empty", 0), # it must have changed in the first 3 slots something is open now
(agent_equip_item, ":caster", ":weapon_move", ":empty"), # and so now we can juggle slot 2 to the empty slot.
## If it had been full before it was already handled.
(try_end),
(try_end),
## this much needed doing no matter who it was, if they are a magic caster. But the next is only for NPCs
(try_begin),
(get_player_agent_no, ":player_agent"),
(neg|eq, ":caster", ":player_agent"),
(agent_get_item_slot, ":weapon_3", ":caster", 2),
(try_begin),
(gt, ":weapon_3", 0),
(agent_unequip_item, ":caster", ":weapon_3", 3), # dumps slot 3
(try_end),
(agent_get_item_slot, ":weapon_4", ":caster", 3),
(try_begin),
(gt, ":weapon_4", 0),
(agent_unequip_item, ":caster", ":weapon_4", 4), # dumps slot 4
(try_end),
(try_end), # finished with preparing slots.
]),