Initial commit

This commit is contained in:
theo@manjaro 2023-06-06 18:08:11 +02:00
commit 0be6a4125d
5 changed files with 218 additions and 0 deletions

14
LICENSE Normal file
View File

@ -0,0 +1,14 @@
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
Version 2, December 2004
Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. You just DO WHAT THE FUCK YOU WANT TO.

16
README.md Normal file
View File

@ -0,0 +1,16 @@
# Dead God Helper
A small mod for The Binding Of Isaac: Repentance!
It signals items that were not previously picked up on this savefile when you encounter them.Very useful when you're trying to get a second or third Dead God.
I made it mainly for myself, because it was annoying to go back to the menu every time I encountered an item I was unsure about.
There's an integration with External Item Description.
It is also compatible with Mod Config Menu, if you want to toggle things (such as displaying info when on Curse Of The Blind)
There's however a limitation: since (to my knowledge) there's no way to get information about seen items from the savefile, this mod takes it upon itself to track which item you picked up. (This mean that when you install the mod for the first time, every non-modded Item will be tagged as Unseen)
Anyway, I hope that this mod will be useful to someone :)
(Source code is available at https://forge.chapril.org/ayte/DeadGodHelper)

152
main.lua Normal file
View File

@ -0,0 +1,152 @@
local modname = "DeadGod Helper"
local mod = RegisterMod(modname, 1)
local json = require("json")
local math = require("math")
mod.print = Isaac.ConsoleOutput
mod.game = Game()
local save = include("save"):new()
if mod:HasData() then
save = json.decode(mod:LoadData())
end
mod.font = Font()
mod.font:Load("font/terminus.fnt")
function mod:isCurseBlind()
return mod.game:GetLevel():GetCurses() & LevelCurse.CURSE_OF_BLIND > 0
end
function mod.isIdNotTakenAlready(id)
if id>=1 and id<=save.settings.maxid then
return not save.seen[id]
else
return false
end
end
function mod.registerTouched(id)
if id>=1 and id<=save.settings.maxid then
save.seen[id] = true
end
-- Save
mod:SaveData(json.encode(save))
end
-- Used to check if EID's description should be modified
function mod.shouldBeModified(descObj)
-- Taken from https://github.com/wofsauge/External-Item-Descriptions/wiki/Description-Modifiers
-- if entity is a piedestal
if descObj.ObjType == 5 and descObj.ObjVariant == 100 then
-- Check if item was not already taken in this savefile
-- And if item is non-modded (id<= Mom's ring ID)
local id = descObj.ObjSubType
return mod.isIdNotTakenAlready(id)
end
end
-- Used to modify EID's description
function mod.modifierCallback(descObj)
if save.settings.eid then
descObj.Description = "#{{Trophy}} Not picked up yet!#"..descObj.Description
end
return descObj
end
-- Used to detect when an item is picked up
function mod:update()
for i=0, mod.game:GetNumPlayers()-1 do
local player = mod.game:GetPlayer(i)
local data = player:GetData()
local item = player.QueuedItem.Item
if data._deadgodlastid and data._deadgodlastcount and data._deadgodlastid>0 then
if item==nil then -- Finished animation
if player:GetCollectibleNum(data._deadgodlastid)>data._deadgodlastcount then -- Have it on me
-- Then I just picked it up, yay
mod.registerTouched(data._deadgodlastid)
data._deadgodlastid = 0
data._deadgodlastcount = 0
end
end
end
if item and item:IsCollectible() then
data._deadgodlastid = item.ID
data._deadgodlastcount = player:GetCollectibleNum(item.ID)
end
end
end
-- Used to draw the ! sign
function mod:PickupDrawCallback(pickupEntity, _)
if save.settings.visual and (not mod:isCurseBlind() or save.settings.showonblind)then
if pickupEntity.Variant==PickupVariant.PICKUP_COLLECTIBLE then
if mod.isIdNotTakenAlready(pickupEntity.SubType) then
local v = Isaac.WorldToScreen(pickupEntity.Position + pickupEntity.SpriteOffset)
mod.font:DrawString("!", v.X-1, v.Y-52+math.sin(mod.game:GetFrameCount()/10)*2, KColor(0.98,0.93,0.55,1), 2, true)
end
end
end
end
mod:AddCallback(ModCallbacks.MC_POST_UPDATE, mod.update)
mod:AddCallback(ModCallbacks.MC_POST_PICKUP_RENDER, mod.PickupDrawCallback)
if EID then
EID:addDescriptionModifier(
modname,
mod.shouldBeModified,
mod.modifierCallback
)
end
if ModConfigMenu then
ModConfigMenu.AddSetting(
modname, -- This should be unique for your mod
nil,
{
Type = ModConfigMenu.OptionType.BOOLEAN,
CurrentSetting = function()
return save.settings.eid
end,
Display = function()
return "Show in EID: " .. (save.settings.eid and "on" or "off")
end,
OnChange = function(b)
save.settings.eid = b
end,
}
)
ModConfigMenu.AddSetting(
modname, -- This should be unique for your mod
nil,
{
Type = ModConfigMenu.OptionType.BOOLEAN,
CurrentSetting = function()
return save.settings.visual
end,
Display = function()
return "Show on pedestals: " .. (save.settings.visual and "on" or "off")
end,
OnChange = function(b)
save.settings.visual = b
end,
}
)
ModConfigMenu.AddSetting(
modname, -- This should be unique for your mod
nil,
{
Type = ModConfigMenu.OptionType.BOOLEAN,
CurrentSetting = function()
return save.settings.showonblind
end,
Display = function()
return "Show while having Curse Of The Blind: " .. (save.settings.showonblind and "on" or "off")
end,
OnChange = function(b)
save.settings.showonblind = b
end,
}
)
end

11
metadata.xml Normal file
View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
<name>DeadGod Helper</name>
<directory>deadgod helper</directory>
<id>2985754961</id>
<description></description>
<version>1.1</version>
<visibility>Private</visibility>
<tag id="Items"/>
<tag id="Graphics"/>
</metadata>

25
save.lua Normal file
View File

@ -0,0 +1,25 @@
local savegen = {}
function savegen:new()
local save = {}
save.settings = {}
save.settings.eid = true
save.settings.visual = true
save.settings.showonblind = false
save.settings.maxid = 732
save.seen = {}
for i=1, save.settings.maxid do
save.seen[i] = false
end
function save:touch(id)
self.seen[id] = true
end
return save
end
return savegen