Skip to content

Releases: TeamREPENTOGON/REPENTOGON

1.1.0-testing-launcher-7

16 Nov 20:20
Compare
Choose a tag to compare
Pre-release

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

16 Nov 18:51
Compare
Choose a tag to compare
Pre-release

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

16 Nov 17:57
Compare
Choose a tag to compare
Pre-release

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

16 Nov 16:53
Compare
Choose a tag to compare
Pre-release

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

06 Nov 23:15
Compare
Choose a tag to compare
Pre-release

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

04 Nov 21:55
Compare
Choose a tag to compare
Pre-release

Internal release to test the launcher

1.1.0-testing-launcher-1

03 Nov 14:44
Compare
Choose a tag to compare
Pre-release

Internal release to check the launcher

1.0.12e

03 Nov 21:11
Compare
Choose a tag to compare

v1.0.12e -
Fixes:

  • Macs and old systems should now be compatible with REPENTOGON (we no longer use OGL 3)

1.0.12d

28 Oct 20:17
Compare
Choose a tag to compare

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.
  • 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
  • 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.
  • "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

26 Oct 16:37
a76af5d
Compare
Choose a tag to compare

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.
  • 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
  • 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.
  • "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)