I'm replying publicly, this was also posted on
https://gamefaqs.gamespot.com/boards/588388-inindo-way-of-the-ninja/78094030 and I'll cross-link this thread from there also.
Are you, by chance, familiar with The Birdman? He was a speedrunning of Inindo that discovered some kind of tech or RNG manipulation that led to an insane time.
His video, however, was lost.
He said he was working with someone on stuff for the game and you seem to be active around that same time and the most knowledgeable person I have found. Please, if you could provide any kind of info on someone asking about RNG manip or speedrunning in general, I'd appreciate it!
I'm not sure, but I have written a tool that can provide complete disassembly of the inindo VM used in many Koei games from the period. I also have the diassembly of the RNG, so exploring ways to influence it is possible. It's a standard C-lib RNG in 32-bit using the 32-bit opcodes from the Koei VM.
For example:
https://pastebin.com/dTnSdcFdI also know a lot about the savegame / SRM / "state" structure which is maintained at 0x7ef000. This matches 100% to the S-RAM, it's simply copied across and the 16-bit checksum is set along with a "KOEI" string and 226 bytes of padding (available space). There is a "start game" state stored in the ROM that is initially copied on a new game by the startup/loader overlay code.
I was recently (last month) working on updating my inindo-edit project that I'd publish all the source-code with. So anyone can use the snes+koei disassembler and all the tools I have available along with the structure of the inindo rom and s-ram.
Here's my S-RAM struct:
https://pastebin.com/hmXW3xxZHere's the output from the current version of my disassembler and the associated functions/data database:
(seems this isn't secure, so file might disappear again.)
https://bit.ly/383Nl6s(slightly better solution:)
https://easyupload.io/198k3n(updating inindo_edit would be best obviously since it should never disappear, and you could run the disassembler yourself on any version of any compatible rom.)
You'll find the C-lib rand() function at inindo/koeicode/root.asm ln 3094
root.rand:
$7e35ca call root.vm_start ; 20254b
$7e35cf long l = root.rand_state ; b7102053
$7e35d3 long r = #$41c64e6d ; b7196d4ec641
$7e35d9 long l *= r ; b701
$7e35db long r = #$3039 ; b71939300000
$7e35e1 long l += r ; b703
$7e35e3 long root.rand_state = l ; b7122053
$7e35e7 long l = root.rand_state ; b7102053
$7e35eb long r = #$10 ; b71910000000
$7e35f1 long l >>= r (signed) ; b720
$7e35f3 long no operation ; b727
$7e35f5 r = #$7fff ; 8cff7f
$7e35f8 l &= r ; da
$7e35f9 return ; cf
root.srand:
$7e35fa call root.vm_start ; 20254b
$7e35ff l = arg1 ; 0c
$7e3600 long l = zero extend ; b726
$7e3602 long root.rand_state = l ; b7122053
$7e3606 return ; cf
root.randr:
$7e3607 call root.vm_start ; 20254b
$7e360c l = arg1 ; 0c
$7e360d if (l) goto _l3612 ; d71236
$7e3610 l = #0 ; 40
$7e3611 return ; cf
_l3612:
$7e3612 call root.rand ; acca35
$7e3615 r = arg1 ; 1c
$7e3616 l %= (u)r ; ba
$7e3617 return ; cf
This is the standard 80s ANSI-C LCG:
https://en.wikipedia.org/wiki/Linear_congruential_generatorMultiplier = 1103515245
Increment = 12345
"ANSI C: Watcom, Digital Mars, CodeWarrior, IBM VisualAge C/C++ [11] C90, C99, C11: Suggestion in the ISO/IEC 9899,[12] C18"
From C89:
static unsigned long int next = 1;
int rand(void) /* RAND_MAX assumed to be 32767 */
{
next = next * 1103515245 + 12345;
return (unsigned int)(next/65536) % 32768;
}
void srand(unsigned int seed)
{
next = seed;
}
So it is easy to conclude that Koei's C-runtime implementation is based upon a reference implementation of ANSI C89 / ISO C90.
Although it's somewhat less on-topic to this thread I suppose I should also answer the other bit of the question too.
To "Professor_Palmer";
Regarding your question about "someone asking about", as I said I'm not sure. I have had a couple offers of help however and I have shared my sourcecode with one person.
That person also mentioned this "The Birdman" individual and the existing speedrun or something very similar. The name seems oddly familiar to me although I can't put my finger on it exactly.
They were working on their own disassembly, mostly on other Koei games and although I did share my source at the time with them I have sincere doubts it would have amounted to much of any sort of significance in such a short length of time.
The same work I've done has been done by others in the past. I'm really only repeating and "reinventing the wheel" because that earlier work was never published in an accessible format. I believe the earlier works date back to around 2008 where a nearly full reversing was completed by someone who was even able to render complete dungeon and other maps including items and additional data, as far as I can tell 100% complete in scope.
I believe that my implementation is superior in several ways, although suffers from several major gaps that were filled by the other work. I suppose this is due to different aims and focus.
So that's a very wordy way to state that quite simply there is a lot of reason to believe that there are dozens or many more people with all the ability required to produce such things. I also believe with some certainty that existing unpublished work remains discarded by the authors and buried, and may never be dug up again by anyone.
So to track down a particular author who wishes to remain anonymous, or any specific details of their particular work or knowledge without them having published it themselves, voluntarily, is quite simply impossible.