Coder Social home page Coder Social logo

rebirthitemtracker's Introduction

For Repentance DLC support, get Gamonymous's updated version at https://github.com/Rchardon/RebirthItemTracker

RebirthItemTracker

This uses the log.txt file to track item pickups in The Binding of Isaac: Rebirth, Afterbirth, Afterbirth+, and Antibirth.

The game's built-in item tracker only shows 10 items and the pause screen items are hard to read, so this program offers a more powerful alternative. This is particularly useful for streamers, so their viewers can see their items, but can be used by anyone.

Additionally, the tracker...

  • tells you what an item does when you pick it up.
  • marks items that were picked up during a Curse of the Blind.
  • marks items that were rerolled using D4/_D100/etc.
  • shows what floor items were picked up on.
  • shows the floor the player is currently on.
  • displays the current seed.
  • allows tournament hosts to receive players' item data through a server, so they can fit nicely in a restream layout.

Download it here (get the latest file that doesn't have "source code" in the name).

To use it, first extract that zip file and then run the exe inside. Don't put it inside the same folder as any file \named log.txt.

You can right click anywhere in the window to get an options screen.

You can mouse over items you've picked up to see their stats again, and click on them to open platinumgod.co.uk in your browser for more information about that item.

It tries to read log.txt from inside the appropriate game folder, based on which game you select in the tracker options. If something is unexpectedly weird about your game folder and it can't find it, you can put the tracker folder into the folder with your log.txt and it will force it to use the specific one it finds there. (If you do this, you can't change between different isaac games by using the tracker option, and you'd have to have multiple tracker installs to use for Antibirth vs Afterbirth+, for example. Normally this should not have to happen.)

The tracker checks for updates each time you launch it, and will update itself if you allow it. This only works on Windows. You can toggle this in the options window.

The tracker can be used on Linux, but you have to run it from source, and it can't autoupdate. Read "HOW TO BUILD.txt" for instructions.

The tracker doesn't work properly on a Mac: it will crash when you open the options menu. If you're okay with manually editing your options.json file instead of using the gui to change your options, you might be able to run it on a Mac in the same way it can be run on Linux (see above).

Status Message Customization

The tracker displays a line of text at the top of its window. This text can be adjusted in the options to contain various different pieces of information.

By default, it shows: "Seed: {seed} / Guppy: {guppy} / Leviathan: {leviathan} / Spun: {spun} / {version_number} / Room: {room_id}"

Where there's a word inside curly braces, it substitutes the value of that variable. Variables that you can use here include:

  • General game info: {seed}, {version_number}, {room_id}

  • Transformations: {guppy}, {bob}, {conjoined}, {funguy}, {leviathan}, {ohcrap}, {seraphim}, {spun}, {yesmother}, {superbum}, {beelzebub}, {bookworm}, {spiderbaby}

  • Stats: {dmg}, {delay}, {speed}, {shot_speed}, {range}, {height}, {tears}

The stats are kind of obsolete now that Found HUD is built into the game. They also don't track changes from things like pills or Experimental Treatment, because those don't say what they do in the game's log file.

Tournament/Restreaming Use

First, each competitor needs to go to the options screen, click "Let Others Watch Me", click "Get an authkey", authorize the application on twitch in the browser window that pops up, and then paste the authkey they receive into the tracker. After getting an authkey once, this step doesn't need to happen again. Don't show the authkey on stream.

If you're in "Let Others Watch Me" mode, indicated by the text "uploading to server" in the title bar, then the host can see your items with the "Watch Someone Else" button.

The host needs to run a separate copy of the tracker for each competitor. To compensate for twitch delay, there's a "read delay" setting which makes the tracker wait that many seconds before displaying updates from the player. Ctrl-up and ctrl-down are shortcuts to change the delay, which is also shown in the title bar.

Known issues

  • When using the Glowing Hour Glass right after taking any object, this object will remains in the tracker even if the character doesn't have it anymore.

  • If you want to make a shortcut to the tracker, and you want automatic updates to work, make the shortcut to the file "Rebirth Item Tracker.exe" and not "item_tracker.exe".

  • When playing Antibirth, it doesn't display detailed item information, nor can it keep track of what floor you're on.

  • If you ever save & quit and close the game, the tracker will forget anything that happened during that run when you relaunch the game.

rebirthitemtracker's People

Contributors

bondarenkoartur avatar brandonnowlin avatar brett824 avatar cracktuar avatar gama11 avatar hyphen-ated avatar imsjrhowa avatar inschato avatar johndrinkwater avatar rchardon avatar sillypears avatar ticklemynausea avatar viroulep avatar zamiell avatar zgd3 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rebirthitemtracker's Issues

crash on restart

Hello

when I restart a game by keeping R pulled, the tracker crash and won't restart (the window only show for a second). The tracker log says :

Traceback (most recent call last):
File "item_tracker.py", line 581, in main
File "item_tracker.py", line 498, in run
AttributeError: 'NoneType' object has no attribute 'group'

HAve I done something wrong?

Missing the "Arial" font

Traceback (most recent call last):
File "item_tracker.py", line 452, in
File "item_tracker.py", line 301, in run
File "pygame\sysfont.pyo", line 577, in SysFont
IOError: unable to read font filename

no idea how to fix it

Wrap the top text and line up the items

<Inschato> Since we're on the topic of the text, I also noticed that maybe if the seed/desc are disabled, the items should align to the top of the window

We just have the height of the padding added right now, could do a simple (but inelegant) check to not add that

<+_910dan> can you have setting where it wraps the text if people want it horizontal

This one is harder, but it also benefits from not having the text height padding not hardcoded.

Completing the angel key crashes the tracker

7:33 PM - Smite: had a combo that makes your tracker crash, not sure what it was but i got it on tape somewhere
8:47 PM - Smite: looks like the key completion caused it both times. I did cheat to get the key out of one angel room though
8:48 PM - Smite: by going back to menu and resuming

I haven't investigated yet

Guppy counter don't reset with the run

Seems with the change to guppy_set from guppy_count some guppy_count don't have change in the item_tracker.py and now the counter never reset with the run and don't start at 0 on the first run.

"check_end_run" hasn't the expected behaviour

These lines from the function :

if self.bosses and self.bosses[-1][0] in ['???', 'The Lamb', 'Mega Satan']:
    end_type = "Won"

I don't know if it worked with Rebirth, but with Afterbirth it's broken : the end_type can never be "Won" because neither of "???"/"The Lamb"/"Mega Satan" is added to the boss encountered list.

Boss detection is achieved by looking for "Mom clear times", and in afterbirth's logs it only concerns Mom's death (I don't know/remember for Rebirth).

What I've found is that at the end of each boss the following log output occurs :

deathspawn_boss, color idx -1
Boss %bossid% added to SaveState

I believe we can rely on the second line to determine boss clearing, as it is output only when the player defeats the boss.
I did some research and made some id/boss name association :

  • 6 : Mom
  • 25 : It lives
  • 24 : Satan
  • 39 : Isaac
  • 54 : The Lamb
  • 40 : ???
  • 55 : Mega Satan

If this looks good to you I'll push a fix to #82.

Detect greed mode and display floors properly

Currently it just tracks the floors as if on normal mode (b1, b2, c1, c2, d1, d2, etc), but should be tracking floors as basement, caves, depths, etc.

From what I've seen in the log, greed mode floors are indicated by m_StageType 3, where basement, cellar and burning basement are 0, 1, 2 respectively. I reset on both greed mode and normal mode a bunch to verify this and haven't seen anything else pop up in the log.

Level::Init m_Stage 1, m_StageType 3

To detect you'd just check for m_Stage with m_StageType 3

Stage 1 = Basement
Stage 2 = Caves
Stage 3 = Depths
Stage 4 = Womb
Stage 5 = Sheol
Stage 6 = Shop
Stage 7 = Ultra Greed

Duplication error in release.py

line 24:
shutil.copytree('dist/', installDir + 'optionpicker/')
should probably read something like:
shutil.copytree('dist/', installDir + 'optionpicker/', ignore=shutil.ignore_patterns("item_tracker.exe"))
to avoid duplicating the item_tracker.exe file.

Tracker sometimes goes way offscreen

My power went out and when I tried to run the tracker afterward, my options.json contained:

"x_position": -31996,
"y_position": -31977

and so the tracker was not visible. a few people have complained about the tracker not being visible before and I'm guessing this is what they were seeing.

maybe there's some way we can prevent this from happening

Save screen position

Much like how it remembers the window size now, it should remember where you put it on the screen and put itself there at next launch

customizable text display

have a thing where you can configure what goes into the display, like
"Seed: %seed% - Guppy: %guppy% - Special: %special%"
so people can swap around the order or labels

IndexError: list index out of range

Hi, hope I am submitting this correctly. Random twitch viewer here.

Issue:
item_tracker v0.6 occasionally stops tracking items and pops up an error window in the background saying errors have occurred and check the log file. Error Pictured
isaac tracker errors

The log file then contains the following:

Traceback (most recent call last):
File "item_tracker.py", line 611, in < module>
File "item_tracker.py", line 472, in run
File "item_tracker.py", line 340, in write_item_text
IndexError: list index out of range

Hope this is useful, but perhaps I am just doing something wrong.

App sometimes gets stuck loading, process refuses to close.

Had this occur a few times now. I try to load the app, the command window appears, and it just sits there and the app doesn't load. The item_tracker.exe process does seem to start, but nothing happens. Any attempts to close the process also don't seem to work (Tried Task Manager, taskkill, Process Hacker etc.).
Might be worth mentioning that this only started occuring in 0.9. 0.8 didn't seem to have this issue.

Glowing Hourglass + X

If you activate the hourglass right after taking an object, the object remains in the tracker even if the character don't have it anymore.

I don't know how to fix this though...

Books pick and drop left in history

Visiting a library room and I already had an active item (Mom's Bra), I picked each of the book then took back the Mom's Bra but the books were still in the list.

New GUI Cleanup

Greying out options is confusing for the end-user. "Why is this option greyed out? Did I misconfigure something? Did I do something wrong?" Not to mention it seems a little sloppy.

  1. By default, all of the tournament settings (besides the 2 buttons) should be hidden if both of them are disabled. By pressing a button, now all of the settings appear.
  2. When in competitor mode, "Twitch Name" and "Read Delay" should not show up at all.
  3. When in host mode, "Trackserver Authkey" and "Get an authkey" should not show up at all.

DeadCat Count

Hi,
is it possible to add a DeadCat counter for remaining the number of life?

Rerolling shows all your old items

Hopefully we can reliably detect when someone rerolls their build based on the fact that a bunch of items were taken all at once. I think we should have an option where it either clears out all the previous items they don't have anymore, or it keeps the current behavior which some people might like more (because it looks hilarious)

[New Feature]Always on top

That would be great to add an option "always on top" that would keep the item tracker windows at the top of the windows.
It would be even better if it could be on top of the game when fullscreen, but I don't think this is feasible.

Making so tracker tracks spacebar items

it could really help if it would track spacebar items (or only books if you want to do it that way)... would help with the library books (if you have ton of books toughed you want to reroll books for item room items, if not you dont want to waste a reroll in the library)

Overlay on the game

Hello Hyphen-ated
I saw someone with an overlay like that but I don't know how he did
capture
Do you know how he did ? And if yes, how I can do to have the same ?

Has the caching system been tested ?

Just in case I overlooked something in #75, did anyone test the caching system in the view ?

Without the __hash__ function being implemented, two items with identical id will likely not have the same hash, and therefore be duplicated in the set of cached item, which actually means that there is no cache (worse, items from all previous runs are stored !).

Thoughts ?

Make the graphics better for the collectible items

Currently, all of the collectible images for the tracker are taken from the in-game images. In them, all of the items have a 1 pixel black border to them.

This works fine for the most part, with a few exceptions:

  • Judas' Shadow, item #311 - a completely black item
  • My Shadow, item #433 - a completely black item

These items aren't visible with a pure black background, which is semi-common in stream layouts. Furthermore, even items that aren't completely black don't look very good on a black background. For example, notice the contrast on the D6 and Incubus:

http://i.imgur.com/7lSbJMg.png

One easy fix is to simply add a border to the PNG files for Judas' Shadow and My Shadow and call it a day. However, a much better solution to make all of this look a lot nicer is to draw shadows or semi-transparent borders around the items. This is what is done on the Balls of Steel item tracker. Here's a picture of it in action:

http://i.imgur.com/PC6W5NP.png

I'm a huge fan of this and I believe it should be done to this tracker as well. In terms of how to accomplish it, I see two possible ways:

  1. All of the PNG image files themselves are modified. Someone proficient with Photoshop can probably do this kind of thing in a batch job? Not really sure, as this isn't my area of expertise.

  2. Dynamically draw the borders/shadows in the Python code. For example, see this example using PIL: http://code.activestate.com/recipes/474116-drop-shadows-with-pil/

Thoughts?

Overall, with the recent addition of the tournament feature and more eyes in general on the item tracker, I really think some attention to detail needs to be given in this regard.

Occasional crash

IndexError: list index out of range
Traceback (most recent call last):
File "item_tracker.py", line 452, in
File "item_tracker.py", line 372, in run

Show Curse Blind Crashes Program

When enabled, after I get a curse of the blind floor, the program completely crashed and wouldn't load up again.

'NoneType' object has no attribute 'floor_has_curse'

I solved the issue by just commenting out lines 344 - 347 in the view.py file since those were the offending lines of code.

Refactor the code so that it is "state" based

[13:11] <+Brett824> it basically allows us to rearch to do what we've always wanted the tracker to do -- have the log read stuff to a state, and have the UI draw stuff from the state

This is step 1 in implementing network functionality, even though it has technically has nothing to do with networking.

Step 2 (transferring the state) can't be started until step 1 is complete, but should be relatively straightforward once step 1 is completed..

Make it be a client to the trackerserver

I've just finished writing a server that will store json states.
it uses twitch accounts for auth
the tracker needs to do the following:
1: have a button in options like "set up restreaming server account" that when you click it, sends your browser to https://api.twitch.tv/kraken/oauth2/authorize?response_type=token&client_id=cc0x4xs7f13phbtgco2xeflil2pu2uy&redirect_uri=http://localhost:9080/tracker/setup&scope=

(except instead of localhost:9080 it'll be the real server address)

the user will allow us to use their twitch account to auth them, then it will give them a token that we generated ourselves.

2: have a text field in the options for them to paste our token
3: have a mode where it's sending states to the server (along with the token currently in the options) every time the state changes. PUT http://localhost:9080/tracker/api/update/{token}
4: have a mode where you can type in a twitch username, and it will poll the server every X seconds to get their current state. GET http://localhost:9080/tracker/api/user/{name}

hmm maybe polling the json state directly is going to be too much bandwidth, and we should instead have a thing where we poll the state version number, and then grab the json if the version changed

It is not on the screen

The tracker does not appear the way that I see in the videos , in the corner , just does not appear when I start Isaac and the tracker.

Cant make shortcut on desktop

I already move the folder to the rebirth one and if i open it on the folder it works but if i make a shortcut to the desktop it says that windows cannot find 'dist/item_tracker.exe'

Coop problems

When you play in coop mode, it doubles up your items in the tracker

checklist for next release

  • update item descriptions to reflect newly found info ("hidden" stat ups found on old items, various nits)
  • some method of floor splits
  • dmg calculator ???
  • better error messages (log.txt not found, etc)
  • reword instructions to avoid issues with placing the item tracker in the wrong directory

update checking

we should have the tracker grab the current version number from github at startup and display in the titlebar(?) if a new version is available. and of course if it fails to find it, it should just not show anything rather than throw an error

current_seed.txt

Hello,
is it possible that at each race, the software creates a file that contains current_seed.txt the current seed? with an option to choose where the file should be created

Afterbirth Compatability

If the player picks up an item that isn't in the items.txt file, the tracker should not crash. Instead, it should just display a Curse of the Blind "?" icon.

This change should allow the vanilla tracker to work with Afterbirth "out of the box".

Make it work with Afterbirth

  1. The location of the log file changes.
  2. The new alternate floors (Burning Basement, Flooded Caves, etc.) crash the tracker because it can't parse the floor.
  3. ???

I know Sillypears did some work yesterday messing around with trying to make the tracker work, can you expand on this?

Show character stats

damage, speed, etc (it would not calculate your actual tear damage with multipliers and whatnot)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.