Releases: TeamREPENTOGON/REPENTOGON
1.1.0-testing-launcher-7
Changes:
- The ZHL loader now dumps the state of threads before loading ZHL. This should help identify if the main thread properly starts in a suspended state while the loader does its magic
1.1.0-testing-launcher-6
Fixes:
- Fixed calls to
FlushInstructionCache
so that they now operate on the current process rather than on a module. We assume this could lead to some versions of Repentogon not properly having memory updated under some conditions
1.1.0-testing-launcher-5
Changes:
- Added ZHL::DumpMemory that can be used to dump chunks of memory in hex
- Added an optional output parameter to ASMPatcher::PatchAt that indicates the length of the patch in bytes
- Added more logs when patching KAGE::StartupEngine to debug why some people are unable to launch Repentogon from the launcher
1.1.0-testing-launcher-4
Changes:
- Replaced printf logs in Repentogon with ZHL::Log logs, allowing for a unified logging file
- Added logs to ASMPatcher::Patch in order to understand why some people cannot start Repentogon even with the launcher
1.1.0-testing-launcher-3
Fixes:
- Reenabled Lua 5.3.3 -> 5.4 redirection, preventing a deadlock when starting the game with Repentogon enabled from the launcher
- Added a proof of stack balancing in the LuaDumpRegistry function to ensure progress
1.1.0-testing-launcher-2
Internal release to test the launcher
1.1.0-testing-launcher-1
Internal release to check the launcher
1.0.12e
1.0.12d
v1.0.12d -
Fixes:
- Fixed an oversight that prevented Repentogon from updating when ran from an incompatible Isaac version
v1.0.12c -
Fixes:
- Fix loss of items in Mom's chase when playing coop or 2 player chaarcters like J&E
v1.0.12b -
Fixes:
- Fix various regressions involving status effects introduced by 1.0.12
v1.0.12a -
Additions:
- Ambush:
- [Get/Set]MaxBossChallengeWaves()
- Allows changing the number of waves in a boss challenge room
Fixes:
- Boss challenge rooms wave count no longer accidentally tied to normal challenge room wave count (ie, now two instead of three)
v1.0.12 -
Additions:
- Add new Vanilla Tweaks option "Console Autofill Limit", which determines the number of autocomplete items that are displayed in the debug console.
- Level:
- CanPlaceRoom(RoomConfigRoom, int GridIndex, int Dimension = -1, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false, bool AllowNoNeighbors = false)
Returns true if the room would be able to fit at this location. - TryPlaceRoom(RoomConfigRoom, int GridIndex, int Dimension = -1, int Seed = 0, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false, bool AllowNoNeighbors = false)
Will only place the room if it can fit and all doors can be successfully connected to neighboring rooms.
If successful, returns the new RoomDescriptor, returns nil otherwise.
If a seed of nil or 0 is provided, a seed will be auto-generated based on the location, room shape, and level seed.
Boolean params are additional safeties that can be enabled or disabled:
AllowMultipleDoors - Set to false to only allow successful placement if the room would only have one door (for placing special rooms).
AllowSpecialNeighbors - Set to true to allow connections to existing special rooms (note secret rooms are always allowed, but boss rooms are never allowed).
AllowNoNeighbors - Set to true to allow placing the room out in the void with no neighbors. - CanPlaceRoomAtDoor(RoomConfigRoom, RoomDescriptor, DoorSlot, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false)
Returns true if the room could be successfully placed connected to the specified DoorSlot of an existing room. - TryPlaceRoomAtDoor(RoomConfigRoom, RoomDescriptor, DoorSlot, int Seed = 0, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false)
Attempts to place the room connected to an existing room via the specified DoorSlot. - FindValidRoomPlacementLocations(RoomConfigRoom, int Dimension = -1, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false)
Returns a table of level GridIndexes that would be valid locations to place the given room. - GetNeighboringRooms(int GridIndex, RoomShape, int Dimension = -1)
Returns a table map of DoorSlot->RoomDescriptor. Don't use ipairs!
Can be used to determine the neighbors of a room before even placing it.
Note that this does not give you any signal of if a room would actually fit, or if the neighbors would even allow a connection.
- CanPlaceRoom(RoomConfigRoom, int GridIndex, int Dimension = -1, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false, bool AllowNoNeighbors = false)
- StatsMenu:
- SetSelectedElement(int element)
- GetSelectedElement() - int
- Room:
- GetLRoom[Area/Tile]Desc() now return a usable class
- GetGridIndexByTile() now accepts a table of int[2]
- LRoomAreaDesc:
- Describes the corners of an L-room shape (as divided horizontally into two rectangles), in worldspace
- Vector Get[High/Low]TopLeft/BottomRight
- LRoomTileDesc:
- Describes the corners of an L-room shape (as divided horizontally into two rectangles), in grid coordinates
- int[2] Get[High/Low]TopLeft/BottomRight
- int[2] GetRandomTile(Seed)
- Can use Room:GetGridIndexByTile() to retrieve grid idx at these coordinates
- RoomDescriptor:
- GetDimension() - int
- GetNeighboringRooms()
Returns a table map of DoorSlot->RoomDescriptor. Don't use ipairs!
- ItemConfigCard:
- Added weight and hidden parameter to cards, both can be specified in pocketitems.xml
- Added the ability to specify a custom "availability condition" to evaluate when the game checks if a card is available.
- Hidden
- InitialWeight
- Weight - can be modified
- GetAvailabilityCondition()
- SetAvailabilityCondition(function)
- ClearAvailabilityCondition()
- Sprite:
- SetOverlayLayerFrame(int Layer, int Frame) - SetLayerFrame for overlays
- GetLayerFrameData(int Layer) - Returns the current AnimationFrame for the given layer.
- GetOverlayLayerFrameData(int Layer) - Same as above for the overlay animation.
- AnimationFrame:
- GetStartFrame()
- GetEndFrame()
- Point:
- [Get/Set]Color() - Allows setting a color per-Point; colors are lerped between points
- [Get/Set]IsWorldSpace() - Automatically converts this Point's position from worldspace to screenspace when rendering
- ModCallbacks:
- MC_PRE_GLOWING_HOURGLASS_SAVE/LOAD (int Slot)
Called before the Glowing Hourglass state is saved/loaded
- MC_PRE_GLOWING_HOURGLASS_SAVE/LOAD (int Slot)
- PersistentGameData:
- AddBestiaryKill(EntityType, Variant = 0)
- AddBossKilled(BossType)
- IsBossKilled(BossType)
- EntityPlayer:
- GetMaxCoins() - int
- GetMaxKeys() - int
- GetMaxBombs() - int
- EntitySlot:
- GetPrizeCollectible() - int
- New "customcache" tags (for items.xml and MC_EVALUATE_CUSTOM_CACHE):
- "maxcoins"
- "maxkeys"
- "maxbombs"
/newline/
Modified:
- Beam:
- Beams now have an inherent Sprite object, no longer prone to losing its Sprite reference
- Changes made to the Sprite provided in the constructor will not be reflected in the Beam, and vis-versa
- Wrap[S/T]Mode are automatically set to proper values for the spritesheet to loop vertically
- ModCallbacks:
- MC_POST_PICKUP_SELECTION
Additionally passes "RequestedVariant", "RequestedSubType" and "RNG".
A third bool argument can be included in the return table to specify wether or not you want to let the callback continue execution after the update to Variant and SubType.
- MC_POST_PICKUP_SELECTION
- "Hush AI Fixes" patch will no longer be applied during daily runs.
- Deal rooms with variants above 99 will now also generate in Red Rooms
- Hold SHIFT of the DROP key to scroll faster through the main menu changelog
Fixes:
- Fixed a vanilla bug that caused wisps from destroyed Mystery Gift/Eden's Soul wisps to spawn even after a run restart.
- Fixed HUD:GetCoopMenuSprite() returning invalid data
- Fixed EntityPlayer:AddActiveCharge() incorrectly allowing overcharge when adding charge to all slots at the same time (with -1 given as the slot)
1.0.12c
v1.0.12c -
Fixes:
- Fix loss of items in Mom's chase when playing coop or 2 player chaarcters like J&E
v1.0.12b -
Fixes:
- Fix various regressions involving status effects introduced by 1.0.12
v1.0.12a -
Additions:
- Ambush:
- [Get/Set]MaxBossChallengeWaves()
- Allows changing the number of waves in a boss challenge room
Fixes:
- Boss challenge rooms wave count no longer accidentally tied to normal challenge room wave count (ie, now two instead of three)
v1.0.12 -
Additions:
- Add new Vanilla Tweaks option "Console Autofill Limit", which determines the number of autocomplete items that are displayed in the debug console.
- Level:
- CanPlaceRoom(RoomConfigRoom, int GridIndex, int Dimension = -1, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false, bool AllowNoNeighbors = false)
Returns true if the room would be able to fit at this location. - TryPlaceRoom(RoomConfigRoom, int GridIndex, int Dimension = -1, int Seed = 0, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false, bool AllowNoNeighbors = false)
Will only place the room if it can fit and all doors can be successfully connected to neighboring rooms.
If successful, returns the new RoomDescriptor, returns nil otherwise.
If a seed of nil or 0 is provided, a seed will be auto-generated based on the location, room shape, and level seed.
Boolean params are additional safeties that can be enabled or disabled:
AllowMultipleDoors - Set to false to only allow successful placement if the room would only have one door (for placing special rooms).
AllowSpecialNeighbors - Set to true to allow connections to existing special rooms (note secret rooms are always allowed, but boss rooms are never allowed).
AllowNoNeighbors - Set to true to allow placing the room out in the void with no neighbors. - CanPlaceRoomAtDoor(RoomConfigRoom, RoomDescriptor, DoorSlot, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false)
Returns true if the room could be successfully placed connected to the specified DoorSlot of an existing room. - TryPlaceRoomAtDoor(RoomConfigRoom, RoomDescriptor, DoorSlot, int Seed = 0, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false)
Attempts to place the room connected to an existing room via the specified DoorSlot. - FindValidRoomPlacementLocations(RoomConfigRoom, int Dimension = -1, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false)
Returns a table of level GridIndexes that would be valid locations to place the given room. - GetNeighboringRooms(int GridIndex, RoomShape, int Dimension = -1)
Returns a table map of DoorSlot->RoomDescriptor. Don't use ipairs!
Can be used to determine the neighbors of a room before even placing it.
Note that this does not give you any signal of if a room would actually fit, or if the neighbors would even allow a connection.
- CanPlaceRoom(RoomConfigRoom, int GridIndex, int Dimension = -1, bool AllowMultipleDoors = true, bool AllowSpecialNeighbors = false, bool AllowNoNeighbors = false)
- StatsMenu:
- SetSelectedElement(int element)
- GetSelectedElement() - int
- Room:
- GetLRoom[Area/Tile]Desc() now return a usable class
- GetGridIndexByTile() now accepts a table of int[2]
- LRoomAreaDesc:
- Describes the corners of an L-room shape (as divided horizontally into two rectangles), in worldspace
- Vector Get[High/Low]TopLeft/BottomRight
- LRoomTileDesc:
- Describes the corners of an L-room shape (as divided horizontally into two rectangles), in grid coordinates
- int[2] Get[High/Low]TopLeft/BottomRight
- int[2] GetRandomTile(Seed)
- Can use Room:GetGridIndexByTile() to retrieve grid idx at these coordinates
- RoomDescriptor:
- GetDimension() - int
- GetNeighboringRooms()
Returns a table map of DoorSlot->RoomDescriptor. Don't use ipairs!
- ItemConfigCard:
- Added weight and hidden parameter to cards, both can be specified in pocketitems.xml
- Added the ability to specify a custom "availability condition" to evaluate when the game checks if a card is available.
- Hidden
- InitialWeight
- Weight - can be modified
- GetAvailabilityCondition()
- SetAvailabilityCondition(function)
- ClearAvailabilityCondition()
- Sprite:
- SetOverlayLayerFrame(int Layer, int Frame) - SetLayerFrame for overlays
- GetLayerFrameData(int Layer) - Returns the current AnimationFrame for the given layer.
- GetOverlayLayerFrameData(int Layer) - Same as above for the overlay animation.
- AnimationFrame:
- GetStartFrame()
- GetEndFrame()
- Point:
- [Get/Set]Color() - Allows setting a color per-Point; colors are lerped between points
- [Get/Set]IsWorldSpace() - Automatically converts this Point's position from worldspace to screenspace when rendering
- ModCallbacks:
- MC_PRE_GLOWING_HOURGLASS_SAVE/LOAD (int Slot)
Called before the Glowing Hourglass state is saved/loaded
- MC_PRE_GLOWING_HOURGLASS_SAVE/LOAD (int Slot)
- PersistentGameData:
- AddBestiaryKill(EntityType, Variant = 0)
- AddBossKilled(BossType)
- IsBossKilled(BossType)
- EntityPlayer:
- GetMaxCoins() - int
- GetMaxKeys() - int
- GetMaxBombs() - int
- EntitySlot:
- GetPrizeCollectible() - int
- New "customcache" tags (for items.xml and MC_EVALUATE_CUSTOM_CACHE):
- "maxcoins"
- "maxkeys"
- "maxbombs"
/newline/
Modified:
- Beam:
- Beams now have an inherent Sprite object, no longer prone to losing its Sprite reference
- Changes made to the Sprite provided in the constructor will not be reflected in the Beam, and vis-versa
- Wrap[S/T]Mode are automatically set to proper values for the spritesheet to loop vertically
- ModCallbacks:
- MC_POST_PICKUP_SELECTION
Additionally passes "RequestedVariant", "RequestedSubType" and "RNG".
A third bool argument can be included in the return table to specify wether or not you want to let the callback continue execution after the update to Variant and SubType.
- MC_POST_PICKUP_SELECTION
- "Hush AI Fixes" patch will no longer be applied during daily runs.
- Deal rooms with variants above 99 will now also generate in Red Rooms
- Hold SHIFT of the DROP key to scroll faster through the main menu changelog
Fixes:
- Fixed a vanilla bug that caused wisps from destroyed Mystery Gift/Eden's Soul wisps to spawn even after a run restart.
- Fixed HUD:GetCoopMenuSprite() returning invalid data
- Fixed EntityPlayer:AddActiveCharge() incorrectly allowing overcharge when adding charge to all slots at the same time (with -1 given as the slot)