--LUA 5.3
--Title: Resistance: Retribution
--Author: Jay Poulisse
--Version 1.0: Initial Commit To Git for SIEA
--Version 1.1: Fixed Death and Final Boss kill trophies
--Version 1.2: Fixed Death Trophies
--Version 1.3: Re-Engineered Level-based Trophies
--Version 1.4: Fix tracking of Auger Used 100x Trophy
--Version 1.5: Re-Engineered Final Boss Kill trophy
--Version 1.6: Fixed broken weapon tracking function
--Version 1.7: Changed level trophies to Level Breifing text search
--Version 1.8: Fixed Auger Trophy
--Version 1.9: Fixed Chrysalis trophy by searching for text after death
--Version 2.0: Fixed Weapons Tracking
--Version 2.1: Fixed Crash
--Version 2.2: Fixed Level Scanning
--Version 2.2.1: Fixed Crash
--Version 2.3: Updated ReadString function, fixed nil misspellings
--Version 2.4: Fixed Death calls for all languages
--Version 2.4.1: Fixed death calls to be check death flag
--Version 2.4.2: Fixed Weapon Used Table
--Version 2.4.3: Fixed Chrysalis Death
--Version 2.4.4: Fixed Crash Fix, MP no longer selectable
--Version 3.0.1: Fixed Numbers
--Version 4.0: Updated Hooks from PC/OP to OP+Offset
--Version 4.2: Touched Up Tracking
apiRequest(1.0) -- request version 1.0 API. Calling apiRequest() is mandatory.
print ("SCRIPT VESION 4.2!")
-- set as appropriate
local USA = 100
local JAPAN = 200
local EUROPE = 300
local REGION = USA
local gpr = require( "ax-gpr-alias" ) -- you can access Allegrex GPR by alias (gpr.a0 / gpr["a0"])
local pad = require("pad")
local emuObj = getEmuObject()
local axObj = getAXObject()
local trophyObj = getTrophyObject()
local TROPHY_retrobution_paid = 0
local TROPHY_grayson_and_cartwright_together_again = 1
local TROPHY_who_dragged_you_off_the_scrap_heap = 2
local TROPHY_ill_relax_when_the_sky_is_safe = 3
local TROPHY_a_moment_to_relax = 4
local TROPHY_I_kind_of_like_you = 5
local TROPHY_stay_with_me = 6
local TROPHY_im_having_fish_tonight = 7
local TROPHY_you_call_that_an_angel = 8
local TROPHY_im_not_in_your_army_remember = 9
local TROPHY_I_love_what_youve_done_to_the_place = 10
local TROPHY_this_worksite_is_closed_permanently = 11
local TROPHY_started_the_evacuation = 12
local TROPHY_burrowers_always_leave_something_behind = 13
local TROPHY_finish_the_serum = 14
local TROPHY_great_shooting_grayson = 15
local TROPHY_catacomb_caper = 16
local TROPHY_I_really_hate_mallery = 17
local TROPHY_buried_a_burrower = 18
local TROPHY_I_still_plan_to_kill_all_of_them = 19
local TROPHY_so_thats_why_its_called_a_hammer = 20
local TROPHY_give_mallery_what_he_had_coming = 21
local TROPHY_injected_the_serum = 22
local TROPHY_destroy_the_chrysalis_and_raine = 23
local TROPHY_soft_spot = 24
local TROPHY_that_was_an_experience = 25
local TROPHY_omni_lethal = 26
local TROPHY_cloven_killer = 27
--DLC TROPHIES
local TROPHY_Sentinel_Survivor = 28
local TROPHY_Infected_Inception = 29
local TROPHY_Ive_Got_Your_Cure_Right_Here = 30
local LEVEL_WRITE_OPCODE = 0x83C40000 --*1
local LEVEL_WRITE_ADDR = 0x08C893BC -- *1 Find where the level file is being sent to memory
--local DEAD_WRITE_OPCODE = 0x82050000 --*2
--local DEAD_WRITE_ADDR = 0x08C6E6D8 --*2 Find the death screen. Death screen is treated the same as the pause screen... I wish I were kidding.
local DEAD_WRITE_ADDR = 0x08913098 --08913098:A2040020 sb $a0,0x20($s0)
local DEAD_WRITE_OPCODE = 0xA2040020
--local CHRY_WRITE_OPCODE = 0x8C840000 --08CDF86C:8C840000 lw $a0,0($a0)
--local CHRY_WRITE_ADDR = 0x08CDF86C --*3 Final boss death animation OLD
local CHRY_WRITE_ADDR = 0x08CDF840 --08CDF840:8E540038 lw $s4,0x38($s2)
local CHRY_WRITE_OPCODE = 0x8E540038
local WEAPON_WRITE_OPCODE = 0x8E440014 --*4
local WEAPON_WRITE_ADDR = 0x0891252C --*4 Writes the value of the equipped gun to memory
local KILLCOUNT_OPCODE = 0x00912021 -- *5
local KILLCOUNT_ADDR = 0x088B2920 --088B2918:00912021 addu $a0,$a0,$s1
local EXPLOSION_OPCODE = 0x00912021 --088B296C:00912021 addu $a0,$a0,$s1
local EXPLOSION_ADDR = 0x088B296C
local AUGER_AMMO_USED_ADDR = 0x088B347C
local AUGER_AMMO_USED_OP = 0x8E0402AC
local KillCount_Threshold = 50
local Weapon_Count_Threshold = 10
local InfectedFlagAddr = 0x8F20468
local NormalKillsAddr = 0x8F20478
local ExplosionKillsAddr = 0x8F20488
local TotalKillsAddr = 0x8F20498
local MagnumStorageAddr = 0x8F204A8
local MagnumKillsAddr = 0x8F204B8
local AugerUsedAddr = 0x8F204C8
local File_Name_Address = 0x8E983E8
local MP_ADDR = 0x08AECB08 --08AECB08:A0A4003C sb $a0,0x3c($a1)
local MP_OPCODE = 0xA0A4003C
pad = {}
pad.L3 = 0x00000002 -- L3 (PS4)
pad.R3 = 0x00000004 -- R3 (PS4)
pad.OPTIONS = 0x00000008 -- Options (PS4)
pad.UP = 0x00000010 -- Up
pad.RIGHT = 0x00000020 -- Right
pad.DOWN = 0x00000040 -- Down
pad.LEFT = 0x00000080 -- Left
pad.L2 = 0x00000100 -- L2 (PS4)
pad.R2 = 0x00000200 -- R2 (PS4)
pad.L1 = 0x00000400 -- L1
pad.R1 = 0x00000800 -- R1
pad.TRIANGLE = 0x00001000 -- Triangle
pad.CIRCLE = 0x00002000 -- Circle
pad.CROSS = 0x00004000 -- Cross
pad.SQUARE = 0x00008000 -- Square
pad.SELECT = 0x00010000 -- Select
pad.START = 0x00020000 -- Start
local SaveData = emuObj.LoadConfig()
local function initsaves()
local doSave = false
if SaveData.t == nil then
SaveData.t = {}
doSave = true
end
if SaveData.DLCTrophies == nil then
SaveData.DLCTrophies = {}
doSave = true
end
if SaveData.InfectedIntel == nil then
SaveData.InfectedIntel = {}
doSave = true
end
if SaveData.InfectedLevels == nil then
SaveData.InfectedLevels = {}
doSave = true
end
if SaveData["44MagKills"] == nil then
SaveData["44MagKills"] = 0
doSave = true
end
if SaveData["Kills"] == nil then
SaveData["Kills"] = 0
doSave = true
end
if SaveData["AugerUseCount"] == nil then
SaveData["AugerUseCount"] = 0
doSave = true
end
if (SaveData.weapons_used == nil) then
SaveData.weapons_used = {}
for x = 1, Weapon_Count_Threshold do -- 10 slots for weapon ids
SaveData.weapons_used[x] = 0xff -- 0xff indicates an empty slot.
end
doSave = true
end
for x = 0, TROPHY_cloven_killer do
if SaveData.t[x] == nil then
SaveData.t[x] = 0
doSave = true
end
end
for x = 28, 30 do
if SaveData.DLCTrophies[x] == nil then
SaveData.DLCTrophies[x] = 0
doSave = true
end
end
for x = 1, 21 do
if SaveData.InfectedIntel[x] == nil then
SaveData.InfectedIntel[x] = 0
doSave = true
end
end
for x = 1, 23 do
if SaveData.InfectedLevels[x] == nil then
SaveData.InfectedLevels[x] = 0
doSave = true
end
end
if doSave == true then
emuObj.SaveConfig(SaveData)
print "_NOTE: ***** initsaves: Saving Config *****"
end
end
initsaves()
function TriggerTrophy(trophy_id)
print ("---------------------------------------------------------------------------------------")
print (string.format("CHECKING TROPHY %d", trophy_id))
print ("---------------------------------------------------------------------------------------")
if SaveData.t[trophy_id] ~= 1 then
SaveData.t[trophy_id] = 1
trophyObj.Unlock(trophy_id)
print ("---------------------------------------------------------------------------------------")
print (string.format("TROPHY_NOTE: %d Awarded!", trophy_id))
print ("---------------------------------------------------------------------------------------")
emuObj.SaveConfig(SaveData)
else
print ("TROPHY_NOTE: %d Previously Awarded!", trophy_id)
end
for x = 1, TROPHY_cloven_killer do
if x ~= TROPHY_retrobution_paid then
if SaveData.t[x] == nil or SaveData.t[x] == 0 then
return
end
end
end
if SaveData.t[TROPHY_retrobution_paid] == 1 then
print("TROPHY %d: ALREADY AWARDED!", TROPHY_retrobution_paid)
else
print("TROPHY %d Awarded!", TROPHY_retrobution_paid)
end
end
function TriggerDLCTrophy(trophy_id)
if SaveData.DLCTrophies[trophy_id] ~= 1 then
SaveData.DLCTrophies[trophy_id] = 1
trophyObj.Unlock(trophy_id)
print ("---------------------------------------------------------------------------------------")
print (string.format("TROPHY_NOTE: %d Awarded!", trophy_id))
print ("---------------------------------------------------------------------------------------")
emuObj.SaveConfig(SaveData)
else
print ("TROPHY_NOTE: %d Previously Awarded!", trophy_id)
end
end
-- Reads a null terminated string and returns it.
function ReadString(address)
-- Initialized to empty (probably not needed but still)
local result = ""
-- Just in case!
local failsafe = 0
local mem = 0
mem = axObj.ReadMem8(address);
if mem == nil or type(mem) ~= "number" then
print("Mem: ", mem)
mem = 0
end
-- Loop as long as the address being read is not null, and put the value into mem.
while mem ~= 0 and failsafe < 2048 do
-- Add the character to our string.
result = result .. string.char(mem)
-- Increase the address.
address = address + 1
-- Get new memory location.
mem = axObj.ReadMem8(address);
if mem == nil or type(mem) ~= "number" then
print("Mem: ", mem)
mem = 0
end
-- Increase our failsafe to prevent very long strings/buffer overflows/bad things/etc.
failsafe = failsafe + 1
end
-- Return the result.
return result
end
-- Called on the loading screen shortly before loading is completed.
function Infected()
local GetTextReg = axObj.GetGpr(gpr.a1)
local ConvertToString = axObj.ReadMemStr(GetTextReg)
if (ConvertToString == "INFECTED_WIDGET") then
print ("INFECTED MODE ENABLED!")
axObj.WriteMem8(InfectedFlagAddr, 1)
end
if (ConvertToString == "PSP_PLUS_WIDGET") then
print ("Transferring SaveData Trackers To Memory...")
print ("Total Kills Amount: ", SaveData["Kills"])
print ("Total 44 Mag Kills Amount :", SaveData["Kills"])
print ("Total Auger Used Times: ", SaveData["AugerUseCount"])
axObj.WriteMem8(TotalKillsAddr, SaveData["Kills"])
axObj.WriteMem8(MagnumKillsAddr, SaveData["44MagKills"])
axObj.WriteMem8(AugerUsedAddr, SaveData["AugerUseCount"])
end
end
InfectedOp = 0x00C84821 --08D05D88:00C84821 addu $t1,$a2,$t0
axObj.AddHook("Resistance", 0x4F2388, InfectedOp, Infected)
function OnLevelWrite()
--Level_Number = axObj.ReadMem8(0x8B38E0C) -- Level Number
--Minigame_Signal = axObj.ReadMem8(0x08b38e08) --Minigame = 9, DLC = 2, Base game = 1
print("=========================================================")
print(" OnLoad")
print("=========================================================")
-- Grab the current file name.
local filename = ReadString(File_Name_Address)
-- Print for debug.
print("File: ", filename)
local GetInfectedFlag = axObj.ReadMem8(InfectedFlagAddr)
if (filename == "ROTER_C1") then
print ("2nd Rotterdam Level Hit! Award Trophy Grayson and Cartwrite Together Again!")
TriggerTrophy(TROPHY_grayson_and_cartwright_together_again)
end
if (filename == "ROTER_C1" and GetInfectedFlag == 1) then
print ("**INFECTED** 2nd Rotterdam Level Hit!")
TrackInfectedLevels(1)
end
if (filename == "ROTER_A1") then
print ("3rd Rotterdam Level Hit! Award Trophy Who Dragged You Off The Scrap Heap!")
TriggerTrophy(TROPHY_who_dragged_you_off_the_scrap_heap)
end
if (filename == "ROTER_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 3rd Rotterdam Level Hit!")
TrackInfectedLevels(2)
end
if (filename == "ROTER_D1") then
print ("4th Rotterdam Level Hit! Award Trophy I'll Relax When The Sky Is Safe!")
TriggerTrophy(TROPHY_ill_relax_when_the_sky_is_safe)
end
if (filename == "ROTER_D1" and GetInfectedFlag == 1) then
print ("**INFECTED** 4th Rotterdam Level Hit!")
TrackInfectedLevels(3)
end
if (filename == "BONN_A1") then
print ("1st Bonn Level Hit! Award Trophy A Moment To Relax!")
TriggerTrophy(TROPHY_a_moment_to_relax)
end
if (filename == "BONN_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 1st Bonn Level Hit!")
TrackInfectedLevels(4)
end
if (filename == "BONN_B1") then
print ("2nd Bonn Level Hit! Award Trophy I Kind Of Like You!")
TriggerTrophy(TROPHY_I_kind_of_like_you)
end
if (filename == "BONN_B1" and GetInfectedFlag == 1) then
print ("**INFECTED** 2st Bonn Level Hit!")
TrackInfectedLevels(5)
end
if (filename == "BONN_C1") then
print ("3rd Bonn Level Hit! Award Trophy Stay With Me!")
TriggerTrophy(TROPHY_stay_with_me)
end
if (filename == "BONN_C1" and GetInfectedFlag == 1) then
print ("**INFECTED** 3rd Bonn Level Hit!")
TrackInfectedLevels(6)
end
if (filename == "BONN_D1") then
print ("4th Bonn Level Hit! Award Trophy I'm Having Fish Tonight!")
TriggerTrophy(TROPHY_im_having_fish_tonight)
end
if (filename == "BONN_D1" and GetInfectedFlag == 1) then
print ("**INFECTED** 4th Bonn Level Hit!")
TrackInfectedLevels(7)
end
if (filename == "TRENC_A1") then
print ("1st Construction Level Hit! Award Trophy You Call That An Angel!")
TriggerTrophy(TROPHY_you_call_that_an_angel)
end
if (filename == "TRENC_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 1st Bonn Level Hit!")
TrackInfectedLevels(8)
end
if (filename == "TRENC_B1") then
print ("2nd Construction Level Hit! Award Trophy I'm Not In Your Army Remember!")
TriggerTrophy(TROPHY_im_not_in_your_army_remember)
end
if (filename == "TRENC_B1" and GetInfectedFlag == 1) then
print ("**INFECTED** 2nd Bonn Level Hit!")
TrackInfectedLevels(9)
end
if (filename == "TRENC_C1") then
print ("3rd Construction Level Hit! Award Trophy I Love What You've Done To The Place!")
TriggerTrophy(TROPHY_I_love_what_youve_done_to_the_place)
end
if (filename == "TRENC_C1" and GetInfectedFlag == 1) then
print ("**INFECTED** 3rd Bonn Level Hit!")
TrackInfectedLevels(10)
end
if (filename == "LUXEM_A1") then
print ("1st Luxem Level Hit! Award Trophy This Worksite Is Closed Permanently!")
TriggerTrophy(TROPHY_this_worksite_is_closed_permanently)
end
if (filename == "LUXEM_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 1st Luxem Level Hit!")
TrackInfectedLevels(11)
end
if (filename == "LUXEM_B1") then
print ("2nd Luxem Level Hit! Award Trophy Started The Evacuation!")
TriggerTrophy(TROPHY_started_the_evacuation)
end
if (filename == "LUXEM_B1" and GetInfectedFlag == 1) then
print ("**INFECTED** 2nd Luxem Level Hit!")
TrackInfectedLevels(12)
end
if (filename == "LUXEM_E1") then
print ("3rd Luxem Level Hit! Award Trophy Burrowers Always Leave Something Behind!")
TriggerTrophy(TROPHY_burrowers_always_leave_something_behind)
end
if (filename == "LUXEM_E1" and GetInfectedFlag == 1) then
print ("**INFECTED** 3rd Luxem Level Hit!")
TrackInfectedLevels(13)
end
if (filename == "LUXEM_C1") then
print ("4th Luxem Level Hit! Award Trophy Finish The Serum!")
TriggerTrophy(TROPHY_finish_the_serum)
end
if (filename == "LUXEM_C1" and GetInfectedFlag == 1) then
print ("**INFECTED** 4th Luxem Level Hit!")
TrackInfectedLevels(14)
end
if (filename == "CATAC_A1") then
print ("1st Catacombs Level Hit! Award Trophy Great Shooting Grayson")
TriggerTrophy(TROPHY_great_shooting_grayson)
end
if (filename == "CATAC_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 1st Catacombs Level Hit!")
TrackInfectedLevels(15)
end
if (filename == "CATAC_B1") then
print ("2nd Catacombs Level Hit! Award Trophy Catacomb Caper")
TriggerTrophy(TROPHY_catacomb_caper)
end
if (filename == "CATAC_B1" and GetInfectedFlag == 1) then
print ("**INFECTED** 2nd Catacombs Level Hit!")
TrackInfectedLevels(16)
end
if (filename == "CATAC_C1") then
print ("3rd Catacombs Level Hit! Award Trophy I Really Hate Mallery")
TriggerTrophy(TROPHY_I_really_hate_mallery)
end
if (filename == "CATAC_C1" and GetInfectedFlag == 1) then
print ("**INFECTED** 3rd Catacombs Level Hit!")
TrackInfectedLevels(17)
end
if (filename == "CATAC_D1") then
print ("4th Catacombs Level Hit! Award Trophy Buried A Burrower")
TriggerTrophy(TROPHY_buried_a_burrower)
end
if (filename == "CATAC_D1" and GetInfectedFlag == 1) then
print ("**INFECTED** 4th Catacombs Level Hit!")
TrackInfectedLevels(18)
end
if (filename == "TOWER_A1") then
print ("1st Tower Level Hit! Award Trophy I Still Plan To Kill All Of Them")
TriggerTrophy(TROPHY_I_still_plan_to_kill_all_of_them)
end
if (filename == "TOWER_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 1st Tower Level Hit!")
TrackInfectedLevels(19)
end
if (filename == "TOWER_B1") then
print ("2nd Tower Level Hit! Award Trophy So That's Why It's Called A Hammer")
TriggerTrophy(TROPHY_so_thats_why_its_called_a_hammer)
end
if (filename == "TOWER_B1" and GetInfectedFlag == 1) then
print ("**INFECTED** 2nd Tower Level Hit!")
TrackInfectedLevels(20)
end
if (filename == "TOWER_C1") then
print ("3rd Tower Level Hit! Give Mallery What He Had Coming")
TriggerTrophy(TROPHY_give_mallery_what_he_had_coming)
end
if (filename == "TOWER_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 3rd Tower Level Hit!")
TrackInfectedLevels(21)
end
if (filename == "TOWER_E1") then
print ("4th Tower Level Hit! Award Trophy Injected The Serum")
TriggerTrophy(TROPHY_injected_the_serum)
end
if (filename == "TOWER_A1" and GetInfectedFlag == 1) then
print ("**INFECTED** 4th Tower Level Hit!")
TrackInfectedLevels(22)
end
end
axObj.AddHook("Resistance", 0x4759BC, LEVEL_WRITE_OPCODE, OnLevelWrite)
function DeathHook()
local DeathFlag = axObj.GetGpr(gpr.a0) --This seems to be set to 1 when health is set to 0
if (DeathFlag == 1) then
print ("YOU HAVE DIED! AWARDING TROPHY THAT WAS AN EXPERIENCE")
TriggerTrophy(TROPHY_that_was_an_experience)
end
end
axObj.AddHook("Resistance", 0xFF698, DEAD_WRITE_OPCODE, DeathHook)
function Chry_Death()
local Chry_Death_Flag = axObj.GetGpr(gpr.s1)
local DeathName = ReadString(Chry_Death_Flag)
local GetInfectedFlag = axObj.ReadMem8(InfectedFlagAddr)
if (DeathName == "N_CHRY_DEATH") then
TriggerTrophy(TROPHY_destroy_the_chrysalis_and_raine)
print ("CHRYSALIS IS DEAD! AWARDING TROPHY DESTORY THE CHRYSALIS AND RAINE!")
end
if (DeathName == "N_CHRY_DEATH" and GetInfectedFlag == 1) then
print ("**INFECTED** CHRYSALIS IS DEAD!")
TrackInfectedLevels(23)
end
end
axObj.AddHook("Resistance", 0x4CBE40, CHRY_WRITE_OPCODE, Chry_Death)
function WeaponsUsed(Weapon)
for x = 0, Weapon_Count_Threshold do
if SaveData.weapons_used[x] == 0xFF then
SaveData.weapons_used[x] = Weapon
emuObj.SaveConfig(SaveData)
--print("NOTE_: Weapon %x is being put into table", Weapon)
break
elseif (SaveData.weapons_used[x] == Weapon) then
break
end
end
if SaveData.weapons_used[Weapon_Count_Threshold] ~= 0xFF then
TriggerTrophy(TROPHY_omni_lethal)
end
end
function KillCount()
print ("KILLCOUNT HOOK!")
local GetTotalKills = axObj.ReadMem8(TotalKillsAddr)
local GetMagnumStorage = axObj.ReadMem8(MagnumStorageAddr)
local GetMagnumKills = axObj.ReadMem8(MagnumKillsAddr)
local GetInfectedFlag = axObj.ReadMem8(InfectedFlagAddr)
NewKC = GetTotalKills + 1
axObj.WriteMem8(TotalKillsAddr, NewKC)
SaveData["Kills"] = NewKC
emuObj.SaveConfig(SaveData)
print ("NewKC is currently at: ", NewKC)
if (GetTotalKills >= 50) then
TriggerTrophy(TROPHY_cloven_killer)
end
--print ("MAGNUM STORAGE: ", GetMagnumStorage)
--print ("INFECTED FLAG: ", GetInfectedFlag)
--[[
if (GetMagnumStorage == 1 and GetInfectedFlag == 1) then
New44Mag = GetMagnumKills + 1
axObj.WriteMem8(MagnumKillsAddr, GetMagnumKills + 1)
SaveData["44MagKills"] = GetMagnumKills
emuObj.SaveConfig(SaveData)
end
--]]
if (GetMagnumStorage == 1 and GetInfectedFlag == 1) then
AddMagnumKC()
end
if (GetMagnumKills >= 24 and GetInfectedFlag == 1) then
TriggerDLCTrophy(TROPHY_Ive_Got_Your_Cure_Right_Here)
end
--[[
local GetTotalKills = axObj.ReadMem8(TotalKillsAddr)
local GetMagnumStorage = axObj.ReadMem8(MagnumStorageAddr)
local GetInfectedFlag = axObj.ReadMem8(InfectedFlagAddr)
local GetMagnumKills = axObj.ReadMem8(MagnumKillsAddr)
axObj.WriteMem8(TotalKillsAddr, GetTotalKills + 1)
SaveData["Kills"] = GetTotalKills
emuObj.SaveConfig(SaveData)
if (GetTotalKills >= 49) then
TriggerTrophy(TROPHY_cloven_killer)
end
--]]
end
axObj.AddHook("Resistance", 0x9EF18, KILLCOUNT_OPCODE, KillCount)
--[[
function ExplosionKillCount()
--print ("EXPLOSION HOOK!")
local GetTotalKills = axObj.ReadMem8(TotalKillsAddr)
local GetMagnumStorage = axObj.ReadMem8(MagnumStorageAddr)
local GetMagnumKills = axObj.ReadMem8(MagnumKillsAddr)
local GetInfectedFlag = axObj.ReadMem8(InfectedFlagAddr)
axObj.WriteMem8(TotalKillsAddr, GetTotalKills + 1)
SaveData["Kills"] = GetTotalKills
emuObj.SaveConfig(SaveData)
if (GetTotalKills >= 49) then
TriggerTrophy(TROPHY_cloven_killer)
end
--print ("MAGNUM STORAGE: ", GetMagnumStorage)
--print ("INFECTED FLAG: ", GetInfectedFlag)
--[[
if (GetMagnumStorage == 1 and GetInfectedFlag == 1) then
New44Mag = GetMagnumKills + 1
axObj.WriteMem8(MagnumKillsAddr, GetMagnumKills + 1)
SaveData["44MagKills"] = GetMagnumKills
emuObj.SaveConfig(SaveData)
end
--]]
--[[
if (GetMagnumStorage == 1 and GetInfectedFlag == 1) then
AddMagnumKC()
end
if (GetMagnumKills >= 24) then
TriggerDLCTrophy(TROPHY_Ive_Got_Your_Cure_Right_Here)
end
end
axObj.AddHook("Resistance", 0x9EF6C, EXPLOSION_OPCODE, ExplosionKillCount)
--]]
function AddMagnumKC()
print ("MAGNUM KILLCOUNT HOOK!")
local GetMagnumStorage = axObj.ReadMem8(MagnumStorageAddr)
local GetInfectedFlag = axObj.ReadMem8(InfectedFlagAddr)
local GetMagnumKills = axObj.ReadMem8(MagnumKillsAddr)
local GetTotalKills = axObj.ReadMem8(TotalKillsAddr)
New44Mag = GetMagnumKills + 1
axObj.WriteMem8(MagnumKillsAddr, New44Mag)
SaveData["44MagKills"] = New44Mag
print ("NewMagnumKC is currently at: ", New44Mag)
emuObj.SaveConfig(SaveData)
if (GetMagnumKills >= 24 and GetInfectedFlag == 1) then
TriggerTrophy(TROPHY_Ive_Got_Your_Cure_Right_Here)
end
if (GetTotalKills >= 50) then
TriggerTrophy(TROPHY_cloven_killer)
end
end
function BarrelKillCount()
print ("BARREL KILLCOUNT HOOK!")
local GetTotalKills = axObj.ReadMem8(TotalKillsAddr)
local GetMagnumStorage = axObj.ReadMem8(MagnumStorageAddr)
local GetMagnumKills = axObj.ReadMem8(MagnumKillsAddr)
local GetInfectedFlag = axObj.ReadMem8(InfectedFlagAddr)
NewKC = GetTotalKills + 1
axObj.WriteMem8(TotalKillsAddr, NewKC)
SaveData["Kills"] = GetTotalKills
emuObj.SaveConfig(SaveData)
print ("NewKC is currently at: ", NewKC)
if (GetTotalKills >= 50) then
TriggerTrophy(TROPHY_cloven_killer)
end
end
BarrelKillCountOp = 0x24A50001 --088B325C:24A50001 addiu $a1,$a1,1
axObj.AddHook("Resistance", 0x9F85C, BarrelKillCountOp, BarrelKillCount)
--]]
function AugerUsed() --Tracking of ammunition used is possible. If WeaponEquipped == Auger and AmmoUsed >= 100 then trigger trophy
local Weapon_Register = axObj.GetGpr(gpr.a0)
local Weapon_Table_Register = axObj.GetGpr(gpr.a2)
local Ammo_Count = axObj.GetGpr(gpr.a1)
--print (Weapon_Table_Register)
--print (Ammo_Count)
--print (Weapon)
if (Weapon_Table_Register == 0) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("Grenade!")
end
if (Weapon_Table_Register == 144) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
AddAugerUsed()
print ("AUGER WS!")
end
if (Weapon_Table_Register == 96) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("303 RIFLE!")
end
if (Weapon_Table_Register == 208) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("SNIPER RIFLE!")
end
if (Weapon_Table_Register == 336) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("001 RAZOR!")
end
if (Weapon_Table_Register == 320) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("CHAINGUN!")
end
if (Weapon_Table_Register == 288) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("SHOTGUN!")
end
if (Weapon_Table_Register == 64) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("ROCKET LAUNCHER!")
end
if (Weapon_Table_Register == 176) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("LONGBOW!")
end
if (Weapon_Table_Register == 368) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("PLASMA GRENADE!")
end
if (Weapon_Table_Register == 192) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("ALLURE!")
end
if (Weapon_Table_Register == 464) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 1)
print ("MAGNUM!")
end
if (Weapon_Table_Register == 608) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("ADVANCED AUGER!")
end
if (Weapon_Table_Register == 576) then
WeaponsUsed(Weapon_Table_Register)
axObj.WriteMem8(MagnumStorageAddr, 0)
print ("003 RAZOR")
end
if (Weapon_Table_Register ~= 464) then
axObj.WriteMem8(MagnumStorageAddr, 0)
end
end
axObj.AddHook("Resistance", 0x9FA7C, AUGER_AMMO_USED_OP, AugerUsed)
function AddAugerUsed()
local GetTotalAuger = axObj.ReadMem8(AugerUsedAddr)
axObj.WriteMem8(AugerUsedAddr, GetTotalAuger + 1)
SaveData["AugerUseCount"] = GetTotalAuger
emuObj.SaveConfig(SaveData)
if (GetTotalAuger >= 99) then
TriggerTrophy(TROPHY_soft_spot)
end
end
function OnIntel()
--Borrowed from Aim Assist intel patch...
-- String is held in A0, get it.
local s = axObj.ReadMemStr(axObj.GetGpr(gpr.a0))
if s == "INTEL_3_0_0" then
print("Are We Soldiers or Archaeologist Infected Intel Collected!")
TrackInfectedIntel(1)
end
if s == "INTEL_3_0_1" then
print("Strange Is A Relative Term Infected Intel Collected!")
TrackInfectedIntel(2)
end
if s == "INTEL_3_0_2" then
print("Yanks Aren't Talking Infected Intel Collected!")
TrackInfectedIntel(3)
end
if s == "INTEL_3_0_3" then
print("The Yanks' Dirty Work Infected Intel Collected!")
TrackInfectedIntel(4)
end
if s == "INTEL_3_1_0" then
print("Too Big To Carry Infected Intel Collected!")
TrackInfectedIntel(5)
end
if s == "INTEL_3_1_1" then
print("We're Not Alone Infected Intel Collected!")
TrackInfectedIntel(6)
end
if s == "INTEL_3_1_2" then
print("We're Not Alone Infected Intel Collected!")
TrackInfectedIntel(7)
end
if s == "INTEL_3_1_3" then
print("Sirens or Furies Infected Intel Collected!")
TrackInfectedIntel(8)
end
if s == "INTEL_3_1_4" then
print("Power of the Atom Infected Intel Collected!")
TrackInfectedIntel(9)
end
if s == "INTEL_3_2_0" then
print("Screaming Roger Cosby Infected Intel Collected!")
TrackInfectedIntel(10)
end
if s == "INTEL_3_2_1" then
print("Buried Secrets Infected Intel Collected!")
TrackInfectedIntel(11)
end
if s == "INTEL_3_3_0" then
print("A Stink That Just Won't Quit Infected Intel Collected!")
TrackInfectedIntel(12)
end
if s == "INTEL_3_3_1" then
print("Gray Skies Infected Intel Collected!")
TrackInfectedIntel(13)
end
if s == "INTEL_3_3_2" then
print("Wild Kingdom Infected Intel Collected!")
TrackInfectedIntel(14)
end
if s == "INTEL_3_3_3" then
print("Super Sub-Human Infected Intel Collected!")
TrackInfectedIntel(15)
end
if s == "INTEL_3_3_4" then
print("Chink in the Armor Infected Intel Collected!")
TrackInfectedIntel(16)
end
if s == "INTEL_3_4_0" then
print("Treasure Trove Infected Intel Collected!")
TrackInfectedIntel(17)
end
if s == "INTEL_3_4_1" then
print("Alien Blood Diamonds Infected Intel Collected!")
TrackInfectedIntel(18)
end
if s == "INTEL_3_4_2" then
print("How Long Have These Been Here Infected Intel Collected!")
TrackInfectedIntel(19)
end
if s == "INTEL_3_4_3" then
print("Dark Mirror Infected Intel Collected!")
TrackInfectedIntel(20)
end
if s == "INTEL_3_5_0" then
print("Bastard or Saint Infected Intel Collected!")
TrackInfectedIntel(21)
end
end
axObj.AddHook("Resistance", 0x289BC, 0x00E04025, OnIntel)
function TrackInfectedIntel(IntelID)
for x = 1, 21 do
if SaveData.InfectedIntel[x] == 0 then
SaveData.InfectedIntel[x] = IntelID
emuObj.SaveConfig(SaveData)
--print("NOTE_: Weapon %x is being put into table", Weapon)
break
elseif (SaveData.InfectedIntel[x] == IntelID) then
break
end
end
if SaveData.InfectedIntel[21] ~= 0 then
TriggerDLCTrophy(TROPHY_Infected_Inception)
end
end
function TrackInfectedLevels(LevelID)
for x = 1, 23 do
if SaveData.InfectedLevels[x] == 0 then
SaveData.InfectedLevels[x] = LevelID
emuObj.SaveConfig(SaveData)
--print("NOTE_: Weapon %x is being put into table", Weapon)
break
elseif (SaveData.InfectedLevels[x] == LevelID) then
break
end
end
if SaveData.InfectedLevels[23] ~= 0 then
TriggerDLCTrophy(TROPHY_Sentinel_Survivor)
end
end