• Please stop embedding files/images from Discord. Discord has anti-hotlinking logic in place that breaks links to Discord hosted files and images when linked to from anywhere outside of Discord. There are a multitude of file/image hosting sites you can use instead.

    (more info here)

New profile posts

Feeling like you want to want to do something while having no energy to do anything at all? Yep, being sick is never fun.
Mint
Mint
Thanks
Raus
Raus
As always, may you get a speedy recovery Miccs!
Mint
Mint
And as always, thanks, @Raus .

I feel a lot better now since this morning, it wont be a big guess that I'll be fully fine tomorrow.
Ok, so guns and bullets *DO* have vector tables! I know, it's surprising! Thing is, though, they aren't like the NPC table, where it's a bunch of function pointers. They're jump tables - my best guess is that the compiler optimized a case somewhere (hence the invalid value checks)
We are really, really blessed that Cave Story doesn't have a relocation table, since there's tons of stuff that Just Wouldn't Work if one existed.
48F8C0+(eax*4) : effects according to compendium, yet 4047B0 is (very) indirectly called by it? EDIT: Ok, wait, that's a *return* address. So it seems there's a bit of pipelining going on here. 41056E is the call to the AB50 "handle effect" code. The previous thing it calls is 105AB, which is... the bullet code???
20kdc
20kdc
Additional. It seems I've gotten a little lost. Here's the gist of it:
05AB is a routine to handle *every bullet on the screen*.
AB50 is a routine to handle *every effect on the screen*.
A bullet is 0x80 bytes long, or a *shift left of 7* - this is important because the compiler optimized what usually shows up as obvious imuls into SHL 7.

You can learn the bullet length from the compendium, the important part is that from there you find out how the loop is set up.
The compendium lists the addresses of the *first bullet*. This doesn't quite make sense till you see the actual code, and then it's really useful for translation and understanding.

(Yes, I'm using this as a journal as I go through the code)

Next, if ShotID - 1 is > 0x2C, it jumps to a bouncepad which then jumps back to the start of the loop (as if the bullet didn't exist). This code is at 8FFD. This prevents having more than the maximum amount of bullet types - any bullet hook will be placed *there*, since the code is more or less useless (and easily emulated in Lua without using up precious ASMspace). (The bullet disambiguation will get put in C-space anyway, and worst case scenario the InUse flag check can be pulled in for a total of ~72 bytes.)
20kdc
20kdc
Warning: offsets may be vaguely wrong if I forgot that the top of the screen in Cheat Engine is actually the top address and not the one I have selected. If you find this information is lacking, that's because it's meant for something *replacing* the bullets.
jmp [edx*4+409501] is the disambiguator.
NICE V3 will be tested on Windows XP, and will allow weapon modification.
Cibryll
Cibryll
I hope you don't mind me asking, but what is N.I.C.E?
20kdc
20kdc
It's a bunch of ASM modifications that call into a DLL, which then calls Lua code.
The result being entities & TSC commands can be written in Lua.
I intend to add the ability to modify bullets and weapons via it too, assuming there's even a "vector table" for those (if there's no vector table, I have to modify things weapon-by-weapon)
Bad news. If you're using Windows XP, N.I.C.E doesn't seem to like it. I have no idea why - it just *REFUSES* to load game.dll, not giving any reason - and without game.dll using N.I.C.E. becomes impossible. My debugging is continuing, and I hope GetLastError will return a good result... but given Windows's attitude to error messages (undescriptive), I am not optimistic about the likely results.
20kdc
20kdc
@Noxid: Because I'm using an XP VM to make ABSOLUTELY SURE the "NICE is broken on Windows" bug never happens again
Noxid
Noxid
3.1 or bust
20kdc
20kdc
Noxid: Did the original Cave Story even *run* on 3.1?
*I seriously doubt it*.
(It might have run on 95, but the earliest I can setup a workable VM for is 98-SE :( .)
Kenzo_ITN
Kenzo_ITN
That music really doesn't fit the atmosphere...
You really shouldn't use the CS+ soundtrack.
mckgamer
mckgamer
It wasn't CS+. It was just org rips of the game that were converted to midi. And I'm also going to be using more Cave Story sprites later on (Marine will be replaced with Quote sprites, etc.)
Back
Top