TeamREPENTOGON / TeamREPENTOGON/REPENTOGON

Better support for Rep+ completion marks

Open
#783 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
C++
Stars
345
Forks
51
Avg merge
11h 2m
Merged PRs (30d)
4

Description

In Rep+, the "progression" event counters appear to be a bitmask. This is causing issues with Isaac.GetCompletionMark/SetCompletionMark

It doesn't appear to be a simple 0=off,1=normal,2=hard anymore.

It appears to be more like this:

local completionMarkDifficulty = {
  off           = 1 << -1, -- 0
  normal        = 1 << 0,  -- 1 (grey mark)
  hard          = 1 << 1,  -- 2 (red mark)
  online_normal = 1 << 2,  -- 4 (blue mark)
  online_hard   = 1 << 3,  -- 8 (purple mark)
}

For example, I got a blue mark with Judas for Moms Heart. The event counter returns 7

Isaac.GetPersistentGameData():GetEventCounter(EventCounter.PROGRESSION_KILL_MOMS_HEART_WITH_JUDAS) -- returns 7

However, Isaac.GetCompletionMark(PlayerType.PLAYER_JUDAS, CompletionType.MOMS_HEART) is returning 3 (which could mean normal + hard)

"7" appears to be saying that normal, hard, and online normal should all be enabled. I get a red mark in single player and a blue mark in online.

local value = 7
print(value & completionMarkDifficulty.normal == completionMarkDifficulty.normal) -- true
print(value & completionMarkDifficulty.hard == completionMarkDifficulty.hard) -- true
print(value & completionMarkDifficulty.online_normal == completionMarkDifficulty.online_normal) -- true
print(value & completionMarkDifficulty.online_hard == completionMarkDifficulty.online_hard) -- false

Isaac.SetCompletionMark(PlayerType.PLAYER_JUDAS, CompletionType.MOMS_HEART, 2) -- 2 for hard
...causes PROGRESSION_KILL_MOMS_HEART_WITH_JUDAS to go from 7 to 6
...which is effectively disabling normal
...strange

Trying to set a larger value with SetCompletionMark throws an error (e.g. 3)

It doesn't feel like everything here is fully synced up.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No source file or test is named. Start by reproducing the documented GetEventCounter, GetCompletionMark, and SetCompletionMark examples for Judas and Mom's Heart, then trace how the progression value is interpreted. Done means the completion-mark APIs stay consistent with the reported normal, hard, and online bitmask values without rejecting valid values.

Written by the indexing model from the issue text.

Assessment

Tech stack
cpp, lua
Domain
api, reverse-engineering
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.