terrible idea for a gimmick hacking tool:
you give it two copies of a ROM, and it runs them both in parallel according to a recorded input movie, but pauses when they desync and highlights what is different.
Conversation
Notices
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 14:54:52 JST Foone🏳️⚧️ -
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 14:55:23 JST Foone🏳️⚧️ I could use this for some very silly, very lazy text injection hacking
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 15:05:12 JST Foone🏳️⚧️ gotcha!
Doing it manually wasn't THAT painful.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 15:10:59 JST Foone🏳️⚧️ oh, even better!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 15:22:37 JST Foone🏳️⚧️ and I have portrait injection! I can enumerate all the portraits by just generating 255(65536) versions of the ROM and running them all and screen capturing them.
would it surprise you to learn that I have written software to do this already?
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 15:50:17 JST Foone🏳️⚧️ This is the third time TODAY!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 16:06:26 JST Foone🏳️⚧️ I spent about 25 minutes and 12gb downloading a longplay to figure out how long I'd have to go in the game to find a better place to inject modified roms, or if I just give up and have a really long run time for each sprite-dumping-run.
the answer turned out to be "like two rooms over" :(
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 16:09:33 JST Foone🏳️⚧️ actually, no. it turns out that getting to a point where I can "be fast" is too far away, I'll get there quicker doing it the simple dumb way. Boring.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 16:12:26 JST Foone🏳️⚧️ this game goes 2 minutes 18 seconds before it renders the first line of dialogue. good lord.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 16:18:50 JST Foone🏳️⚧️ "I've written software to do this already" says the foone, but she left out that:
1. she wrote it in python2
2. this computer doesn't have python3
3. does it do a lot of printing (not print()ing) from random places? yes.
4. does it do a lot of weird string-byte manipulation? yep!brb rewriting this for the nth time
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 16:51:56 JST Foone🏳️⚧️ @Tau yeah but only so much. my system isn't powerful enough/this emulator isn't light enough that I can go at 100x speed, for example. I think I'm getting between 2-3x speed at the moment.
-
Tau 🏳️🌈 (tau@im-in.space)'s status on Thursday, 14-Nov-2024 16:51:58 JST Tau 🏳️🌈 @foone Can't you speed up the emulator to go faster?
Edit: Or running multiple emulators in parallel, I remember a youtube video of someone doing that for pokemon
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 16:55:35 JST Foone🏳️⚧️ ARG. injection attempts have revealed that my partial decode script is using the span for the data files, but I misjudged the start and end point. So I need translate all my logic to shift all variables 16 bytes to the left. gah
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 16:57:07 JST Foone🏳️⚧️ actually I may not need that. I may never touch this script again, so I'm going to just note this and try to ignore it.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 17:28:24 JST Foone🏳️⚧️ okay so the extraction is taking about 70 seconds per portrait, so searching the 8-bit space (and I PRAY it is 8-bit!) will take 70*256 seconds, or... see you in five hours!
(it'll hopefully speed up when I finish reencoding my roommate's copy of Armageddon (1998) to be videocd quality -
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 17:43:26 JST Foone🏳️⚧️ I accidentally encoded Armageddon to 24:5 ratio which is less than watchable so I'm having to restart the encode
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 17:52:12 JST Foone🏳️⚧️ I'm now considering hacking the ROM so that the opening movie is shorter
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 18:01:04 JST Foone🏳️⚧️ I figured out how to optimize the emulator (turning off the display!) and got it down to 35s.
35*256=2 and a half hours -
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 18:51:25 JST Foone🏳️⚧️ I found part of the movie player and hacked it to, uh, not work
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 18:51:50 JST Foone🏳️⚧️ it just hangs forever
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 19:02:37 JST Foone🏳️⚧️ oh hey this stack trace goes through the VRAM.
I pray to god that's a bug in the stack tracing and this code isn't jumping in and out of the VRAM
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 19:16:09 JST Foone🏳️⚧️ got it.
to patch out the opening movie, change offset 0x5EF8F in the 10729BD884F8FDCA7A310B6D606C52E46657AA48 gba rom from 0xD0 to 0xE0. -
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 19:17:11 JST Foone🏳️⚧️ it took an hour and 20 minutes to figure out which two bits to change in the ROM
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 19:21:44 JST Foone🏳️⚧️ it now takes 7 seconds per character
so it can finish in 21 minutesbut note: if I'd just let it run, it would have jut about finished by now on the slow route
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 20:16:52 JST Foone🏳️⚧️ dang it. it turns out characters have sub-expressions too
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 20:30:29 JST Foone🏳️⚧️ it turns out if you go above the maximum expression on character 1, you get to the expressions of character 2
so I just set it to character 0 and I'm iterating through all the expressions, since I can hit every expression on every character that way
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 21:35:49 JST Foone🏳️⚧️ @gregly I do it one by one for simplicity
-
Determination G. Schadenfreude (gregly@retro.pizza)'s status on Thursday, 14-Nov-2024 21:35:50 JST Determination G. Schadenfreude @foone It absolutely would not surprise me. How many versions of the ROM can you run simultaneously? Or do you do it one by one?
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 21:36:20 JST Foone🏳️⚧️ they use 241 of the 256 slots!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Thursday, 14-Nov-2024 21:38:14 JST Foone🏳️⚧️ @gregly I should try that sometime and see if it's any faster!
-
Determination G. Schadenfreude (gregly@retro.pizza)'s status on Thursday, 14-Nov-2024 21:38:15 JST Determination G. Schadenfreude @foone Sensible. I just had this image in my mind of a 16x16 grid of emulators all running slightly different versions of a ROM like some sort of quantum alternate timeline viewer. 😆
-
Medea Vanamonde🏳️⚧️ ♀ (mishavanmollusq@sfba.social)'s status on Friday, 15-Nov-2024 05:28:56 JST Medea Vanamonde🏳️⚧️ ♀ @foone do you sleep?
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 05:28:56 JST Foone🏳️⚧️ @MishaVanMollusq I went to sleep after making that post and woke up now!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 11:27:56 JST Foone🏳️⚧️ I can't figure out how to find the pointers to all the dialogue in this game so I'm just gonna invent the "statistical regex" to make the world that tiny bit worse
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 11:54:49 JST Foone🏳️⚧️ putting that aside for now because I don't actually need dialogue right now, that's just me noodling.
now I'm trying to remember what I used to edit tiles. I know yychr was the old go-to but I thought I replaced it with something newer... but I can't remember what that is.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 11:55:25 JST Foone🏳️⚧️ not Binxelview, something that knows natively how to handle the weird way tiles are packed on nintendo consoles
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 12:00:06 JST Foone🏳️⚧️ someday I'm gonna hack together my own emulator and it'll be to do one thing and one thing alone:
provenance tracking for assets.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 12:00:19 JST Foone🏳️⚧️ lemme point at a sprite and go "where was that loaded from?" and have it give me a filename and an offset
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 12:01:00 JST Foone🏳️⚧️ obviously not possible in all cases, but being able to do it at all would be amazing
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 12:04:14 JST Foone🏳️⚧️ but do I make a PSX or GBA emulator first? that's the question
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 12:21:48 JST Foone🏳️⚧️ I just scrolled past two fonts in this ROM and ONE was mirrored and the other wasn't.
I hate that. Suspicious. -
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 12:31:01 JST Foone🏳️⚧️ I found three more fonts, none of which are the one I want.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 12:38:12 JST Foone🏳️⚧️ there's a COPY of the tileset I'm looking for at 0x144C538. evil. I assume it's there for something like an altered version of this scene later, or it's a second room that was made by copying this one and altering it.
but it's an annoying red herring
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Friday, 15-Nov-2024 13:04:01 JST Foone🏳️⚧️ Found it! I scanned through tiles until I found matching ones, scribbled over them, then ran the game until I saw them defaced in game.
(I altered the defacement color in post, however, for visibility reasons)
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Sunday, 17-Nov-2024 20:03:25 JST Foone🏳️⚧️ naturally squeenix helpfully included a sprite viewer and then forgot to make it load the palettes correctly
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Sunday, 17-Nov-2024 20:46:22 JST Foone🏳️⚧️ I need to get a better arm assembler. I keep using an online one and it is generating stuff that the GBA can't handle
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 07:44:56 JST Foone🏳️⚧️ It's amazing how much stupid automation you can develop when the alternative is manually editing 240 sprites
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 07:59:25 JST Foone🏳️⚧️ I wish I could script emulators worth a damn. They all seem to approach scripting from an almost antagonistic direction, like scripting is evil or something
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 08:00:06 JST Foone🏳️⚧️ but I'm doing the second best thing to scripting: INJECTING ARM MACHINE CODE!
-
Ben Grue (grue@mastodon.social)'s status on Monday, 18-Nov-2024 08:03:29 JST Ben Grue @foone I know bizhawk started from a "scripting should be good" pov but it was kinda the first one to do it as a first class citizen so maybe went about it dumb? idk
Fun Fact: the core VERGE creators were also the original BizHawk creators (although everyone from the original team has moved on)
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 08:03:29 JST Foone🏳️⚧️ @grue oh neat! I didn't know that.
Anyway it makes sense, because bizhawk has moved on from being good. OOOOOOOOHHH!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 08:26:39 JST Foone🏳️⚧️ My current hack changes the background color, skips an unskippable 1:30 cut scene, and I froze all sprites at animation frame zero.
But it's not enough!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 08:35:55 JST Foone🏳️⚧️ maybe I'll move my process to native mGBA. I've been using bizhawk so far for TAS reasons, but my "TAS" is just "press A/B/Start a couple times until you get to the dialogue"
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 08:36:27 JST Foone🏳️⚧️ I can replace that with my old standby... a fake keyboard!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 08:39:05 JST Foone🏳️⚧️ though I may just jam a crappy pseudo-TAS into my lua script. easier than getting a fake keyboard, especially since I physically cannot get to my fake keyboards right now
-
biggestsonicfan (biggestsonicfan@digipres.club)'s status on Monday, 18-Nov-2024 09:04:59 JST biggestsonicfan @foone obviously this means you need to make more (fake) keyboards
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:09:22 JST Foone🏳️⚧️ best way to make a TAS:
if frame == 730 or frame == 816 or frame == 930 or frame == 1090 then
press_a()
end -
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:10:18 JST Foone🏳️⚧️ now I need an algorithm to push these numbers smaller while still getting the same result.
like, play the rom, run this, take screenshot at frame 2000. then try lowering one by 5%, re-run, see if we get the same screenshot. -
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:10:45 JST Foone🏳️⚧️ why do things manually that'll take maybe 5 minutes when you could spend an hour writing automation to do it for you in 30 minutes?
Kuba Orlik repeated this. -
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:11:14 JST Foone🏳️⚧️ you never know when the next time you'll need to optimize time-to-donald-duck-speaking on some GBA game
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:21:50 JST Foone🏳️⚧️ why can't I bisect my TAS for the GBA rom about donald duck
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:23:47 JST Foone🏳️⚧️ I'm always disappointed in computers ability to let me be brute force stupid.
I have to write my own code to be stupid, which surely defeats the point -
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:30:58 JST Foone🏳️⚧️ I manually did it: The first frame you can push "A" to skip the logos is 622.
621 is too early.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:40:20 JST Foone🏳️⚧️ 673 for the main menu.
yes I'm doing this manually -
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:43:03 JST Foone🏳️⚧️ frame 766 is the earliest you can press A for New GAme
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 09:51:24 JST Foone🏳️⚧️ I was accidentally running multiple copies of the same script all trying to push keys at specific times.
this created some HILARIOUS non-deterministic behavior! -
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 10:00:29 JST Foone🏳️⚧️ 882 is the earliest you can select slot 1.
it's those fade-ins, fade-outs. those things take forever.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 10:03:44 JST Foone🏳️⚧️ Here's how I documented it.
My script runs the game to frame 2000, after pushing the A button at 4 different times. Then screenshot. I can tell from the thumbnail if it made it to the dialogue or not! so I just manually bisect the numbers until I get minimums. -
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 11:10:11 JST Foone🏳️⚧️ so I did all this, and that's good, but I've not gotten much sleep and this took a couple hours.
so... I've completely forgotten WHY I needed to do this.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 11:11:07 JST Foone🏳️⚧️ I suppose just to streamline the testing of patches to modify parts of the game. It certainly does that.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Monday, 18-Nov-2024 11:14:37 JST Foone🏳️⚧️ but I can't remember if I had anything more specific in mind before I got detoured into switching emulators, kinda*.
* I started with TASing on BizHawk, and then switched to scripting mGBA. This was for Reasons, but it also didn't really happen? I only changed emulator frontends, not emulators. I was using the mGBA-core in BizHawk in the first place, so I was always using mGBA. I'm just now using it directly (in its own frontend) rather than as a module in a different frontend.
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 20-Nov-2024 16:23:54 JST Foone🏳️⚧️ I may be a fool: I've been trying to figure out how to hack sprites off a scene that HAS A MOVING CAMERA
I bet I can just hack the camera position and make it scroll off to -32767, -32767 or something
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 20-Nov-2024 16:28:32 JST Foone🏳️⚧️ uhhhh I don't know what's going on but it looks amusingly glitched, at least?
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 20-Nov-2024 16:55:10 JST Foone🏳️⚧️ @emily nope but I think he's in this game somewhere
-
emily, emitter of spooky noise (emily@sparkly.uni.horse)'s status on Wednesday, 20-Nov-2024 16:55:11 JST emily, emitter of spooky noise @foone is this cloud strife
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 20-Nov-2024 17:00:31 JST Foone🏳️⚧️ I can't figure out how this game handles the camera. I've searched for variables going up and down and all over the place and nothing matches any kind of idea of "scrolling" that I can see.
either it's doing some weird dynamic loading or it's doing something silly like storing camera frames in a linked list (that's out of order)
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 20-Nov-2024 18:11:37 JST Foone🏳️⚧️ so the only camera stuff I can find is a 4-byte value at 0x030EB0 in EWRAM (so 0x02030EB0) seems to be "how long it takes to pan over to the target destination". so if I set it to a billion, it means the camera moves so slowly it basically doesn't
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 20-Nov-2024 18:12:11 JST Foone🏳️⚧️ not super useful on its own, but maybe it'll lead somewhere interesting. watchpoint time!
-
Foone🏳️⚧️ (foone@digipres.club)'s status on Wednesday, 20-Nov-2024 18:39:06 JST Foone🏳️⚧️ Bingo! I hacked the camera to not move and now it's somewhere useful.
-