Posts for Fabianx


Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
http://www.youtube.com/watch?v=pUFD4nAN8lg&NR=1 I dunno if that was in the other thread, but I found it really really entertaining and at the end I really thought ... oh, oh ... But watch for yourself :-). cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
I really like the idea as I just had the same "problem". Lots of nice tricks for Zelda and Super Metroid, but no ROM or emulator on this computer. Automated AVI making is already easily possible with the UNIX snes9x version and I guess DeHacked could setup within 2 hours or less a modification to his cgi script to automatically create AVIs for ROMs available. Now add that to make a FLV: http://jameser.blogspot.com/2006/06/tip-3-creating-flash-video-with-free.html via mencoder and / or ffmpeg. (One the AVI is made this is just one additional command) Download a free / open source flash player (you don't need to use the one from YouTube) and supply it for each video additionally to the Download link. Now we only need some webspace to upload, because of course the FLV will generate much higher traffic than just the smv or other emulator video files. So besides Webspace and good will of DeHacked I see no technical problems and so also no "but youtube users won't like it." problem. cu Fabian
Post subject: Re: [PATCH] snes9x-sound channels disabling - nitsuja work .
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Bisqwit wrote:
Fabianx wrote:
Hi, here is a quick hack for snes9x, which disables sound channels 1-5 ...
You should know that snes9x already has a mechanism of enabling/disabling individual sound channels. Have a look at <code>S9xToggleSoundChannel()</code> in unix/unix.cpp. After that, have a look at <code>S9xSetSoundControl()</code> in soundux.cpp. (The X11 and MS-DOS interfaces of snes9x have had this function for around 10 years I guess.)
Ha ha, now that I've come across this patch again I can finally counter this argument. ;-) Nope, S9xToggleSoundChannel could lead to desync in Movies as the APU is not called for processing these toggled channels. The way Upthorn (and I) did it, we do only skip the Mix stage so its correct to add this new option. Toggle = On / Off, our option is more like "Silence" / "Unsilence" a channel. Anyway I am glad this patch was finally implemented :-) and I am really looking forward to what wonders JXQ will now go again. Take care, cu Fabian PS: @P.JBoy: Yes, it probably does as a new variable is added to the global memory region the memwatch needs to be adjusted for those 2 bytes. Just ask the author to add a "offset" option for custom builds that is added ...
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Huffers wrote:
I haven't been able to get this to work with snes9x 1.51 though :( EDIT4: got keyboard input from python working now If anyone wants the patch for snes9x 1.51, just ask
Just upload it somewhere. Perhaps someones finds it useful. Its always best to upload stuff to somewhere (like your python bot for example) so that someone who stumbles upon it can just use it or learn from it :-). Btw. glad you like it and that the work is actually used ... :-) cu Fabian PS: Looking very much forward to watching your SMK run. Its my favorite game and in 1 hour the BT download will be finally finished.
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
As there is work again going on on this, I post what the real problem with luck manipulation is: I can predict quite easily with a bot, when the next critical hit will be, but the real problem is that the hitting animation is always different and such it strikes on a diffferent frame depending on starting frame. (As far as I could see it does not access the RNG for strike animation) What would be needed is a table from pressing 'Strike' to until the rabbite or whatever is killed. It unfortunately seems to also depend on distance as the hero sometimes makes a jump. Once animation was figured out, a luck manipulation bot could created. cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
I'm also against watermarks. But on a related note. There was once a discussion about providing keypresses via subtitle files. What did happen to that? cu Fabian
Post subject: Re: A Table of currently supported Desired TAS features
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
moozooh wrote:
Fabianx wrote:
snes9x 1.43/linux: […] Memory Search: no Autofire: no Auto-hold: no
I think there's something terribly wrong here. :\
This is just the linux version. The windows version supports a fair bit of those ... cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
zefiris wrote:
are there any peripherals? File format does not even have place for any.
Yes there is the "sensor motion" and VBA supports it. But I don't know if recording of sensor motion is supported.
Post subject: A Table of currently supported Desired TAS features
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
It would be good to have a table, which lists all the http://tasvideos.org/DesiredEmulatorFeatures.html currently supported by our emulators. I'll start with: snes9x 1.43/linux:
    Savestates: 2/3 Bulletproof recording: yes Resume Recording From Savestate: yes Savestate Undo: no Timing: 3/4 Frame Advance: yes Slow Motion: yes Fast Forward: yes Frame Search: no Usability: 2/9 Key remapping: yes Read-only Toggle: yes Information Display: no (yes, patched) Export To AVI: no (yes, patched) Memory Search: no Autofire: no Auto-hold: no Combos or macros: no Rewind: no Movie file features: 1/3 Storing And Loading Emulator Settings And ROM Data: not complete Starting recording from power-on: yes Recording peripherals: no Emulation features: 1/2 Disabling layers: yes Accurate emulation and recording of soft resets: no
This is what I can say for snes9x 1.43 on linux. As I don't know any other emulator, I cannot do them. But you could. Take 2 mins, quote this topic and fill in the table for your favorite emulator. If there are differences between the platform versions, write directly that it is for Windows/Linux/MacOSX. cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Phil wrote:
Fabianx wrote:
Would you do another TAS try with Genisto?
I don't think so because I haven't seen of him for at least 1 year.
Or with someone else?
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
zefiris wrote:
That's one of reasons I love VBA-rerecording ^___^ It has auto-hold, and it can be assigned to any key combination (I use buttons for simple, alt+button for autofire, ctrl+button to hold)
Ah, this applies again only to the windows version. And I guess also only to the hacked version by nitsuja? And as nitsuja did the VBA re-recoring, I guess snes9x windows might have the same features. I think it might be at the time to have a list of all TAS-features authors do need and a page in the wiki that lists the emulators that do support it. e.g.: Feature snes9x vba --------- -------- ----- scripting supported supported autohold supported supported (Win only) as an example. Does there exist such a list of not dream tas tools, but of commonly used tas tools in emulators?
Phil wrote:
I already tried this on SNes9x with Genisto. It's rather hard and harder because of desynchronisation. I don't recommend doing that
yes, because the netplay support was not frame-perfect afaik. But I was talking about frame-perfect netplay (and yes that is possible). Would you do another TAS try with Genisto?
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
I was thinking for example of Secret of Mana, where you have to have three players and its difficult to press 10 keys at once ;-). Another thing I would do was: Deactivate the Save State/Load State/Load-ROM/Frame-advance functions for the "Slave-snes9x" and have them get those commands also from the master. So the slave-snes9x just can do key-presses and send them. Another idea I had was: Does any emulator already support sticky keys. E.g. Don't press and hold, but press once to activate, press again to deactivate. I could imagine this could came in handy in TAS'ing ... cu Fabian
Post subject: If you could do 2 player tas via netplay?
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
I have got a question. If it was possible to make a 2-player TAS over the internet (e.g. frame perfect netplay support inkl. frame advance and button presses shown as soon as remote presses them) would you do it? I ask, because it seems to be quite easy to add such support with the new scripting engine. I already programmed a proof of concept for just the keypresses. But I won't research it further if no one is interested. cu Fabian
Post subject: Implemented Emulator Scripting (snes9x)
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Example first: $ lua -l obelix
joypad[0]=snes9x.SNES_Y_MASK+snes9x.SNES_RIGHT_MASK

while game.x_pos < 500
do
        snes9x.swig_mainloop(snes9x.TRUE)
end
joypad[0]=0
-> Presses the run key until obelix reaches position 500. (game.x_pos was found automatically via searching and comparing values, see example 3) Example 2:
print(ram_word[4473])
-> prints the current frame counter. Example 3:
        -- Init the search
        s_erg = search.search_ram(ram_word, nil)

        -- Press right all the time
        joypad[0]=snes9x.SNES_RIGHT_MASK

        for i=1,20 do
                -- run for 5 frames
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                -- Search more
                s_erg = search.search_ram(ram_word, s_erg, function (a,b) return a>b end)
        end

        -- Now we run backwards

        -- Press left all the time
        joypad[0]=snes9x.SNES_LEFT_MASK

        -- Wait 40 frames to be running backwards again
        for i=1,40 do snes9x.swig_mainloop(snes9x.TRUE) end

        for i=1,10 do
                -- run for 5 frames
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                snes9x.swig_mainloop(snes9x.TRUE)
                -- Search more
                s_erg = search.search_ram(ram_word, s_erg, function (a,b) return a<b end)
        end
        print("Search erg: ")
        search.print_search(s_erg)
The result is: > obelix.find_x_counter() Search erg: 152 27648 25600 112 27136 25344 113 106 99 153 108 100 Okay 113 and 153 look like coordinates. While 112 and 152 just seem to be found by looking from the wrong offset. Lets put a watch on it: > while true do print(ram_word[113], ram_word[153]) snes9x.swig_mainloop(snes9x.TRUE) end The result is now that we can play the game and watch the value change in real time. Neat! - So what do we need to do now? - I need someone who has Visual C++ and can compile it for windows. - For those that have linux and lua5.1 it might be possible to just download snes9x.so to try it out: http://studwww.ira.uka.de/~s_franz2/snes9x/snes9x.so Then do: lua -l snes9x To have the search.lua and obelix.lua just apply the diff found below. Else you need to compile snes9x and apply the following patch: http://studwww.ira.uka.de/~s_franz2/snes9x/initial_scripting_with_swig-v5.diff Old instructions follow: -- Hi, I implemented initial scripting support for snes9x via swig/lua plus swig/python, swig/php and swig/perl. It is not yet completely finished, but it was much easier than I thought with the help of swig (www.swig.org). And with swig using for example python instead of lua is just a matter of changing the Makefile! (Set SWIG_PYTHON=1 and comment SWIG_LUA = 1, touch snes9x.i and make again!) This means everyone can use their favorite scripting language with snes9x and is not dependant on lua. The patch is rather small and still one can already change all non-pointer settings. And one can also control the main loop as well as all MovieFunctions and access or change all of main memory. It is however not yet possible to 'hook' somewhere into the code and it will just load Themepark by default ;-). And sorry patch is for unix/linux only at the moment as thats what I'm using. (But if you want to try it out, too, what about downloading some Knoppix DVD and run it from Windows via CoLinux (included) or directly boot it) How to build it: - Install lua5.1 - Install swig either from source or via a package and make sure swig has lua and/or python support. - Get the patch from http://studwww.ira.uka.de/~s_franz2/snes9x/initial_scripting_with_swig-v3.diff Use snes9x-1.43-WIP1-src.tar.gz. (You can get it from one of the mirrors) Unpack it. Build it. - patch -p1 < ../initial_scripting*.diff - ./configure - make If everything was okay you now have snes9x.so for lua and _snes9x.so+snes9x.py for python. To use it do for example the following for python: Python 2.3.5 (#2, Oct 16 2006, 19:19:48) [GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import snes9x Rate: 48000, Buffer size: 2048, 16-bit: yes, Stereo: yes, Encoded: no Found ROM file header (and ignored it). "THEME PARK" [checksum ok] LoROM, 8Mbits, Type: ROM only, Mode: 20, TV: PAL, S-RAM: 0KB, ROMId: ATQP Company: 67 CRC32: CA0E041C joystick: No joystick found. >>> x = snes9x.MovieInfo() >>> snes9x.S9xMovieCreate("test345.smv", 0x1F, snes9x.MOVIE_OPT_FROM_RESET, x.Metadata, 0) Movie record 1 >>> snes9x.my_mainloop() Or what about the following in php or perl: # php runme.php # perl runme.pl Or another nice example in lua: # lua -l snes9x Rate: 48000, Buffer size: 2048, 16-bit: yes, Stereo: yes, Encoded: no Found ROM file header (and ignored it). "THEME PARK" [checksum ok] LoROM, 8Mbits, Type: ROM only, Mode: 20, TV: PAL, S-RAM: 0KB, ROMId: ATQP Company: 67 CRC32: CA0E041C joystick: No joystick found. Lua 5.1.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio > -- Lets create a new movie > snes9x.S9xMovieCreate("test345.smv", 0x1F, snes9x.MOVIE_OPT_FROM_RESET, snes9x.char_to_wchar(""), 0) > -- We need to convert to wchar_t* as swig does not know that type. Movie record > j=snes9x.uint32Array_frompointer(snes9x.joypads) -- We need a new variable first and need to use this helper functions, but it works. > = snes9x.uint32Array_getitem(j, 0) -- Joypad = 0 0 > -- Lets press and hold START > return snes9x.uint32Array_setitem(j, 0, snes9x.SNES_START_MASK ) > return snes9x.uint32Array_getitem(j, 0) 4096 > -- Okay lets wait 100 frames for our start to be accepted > for i = 1,100 do snes9x.my_mainloop() end > return snes9x.uint32Array_getitem(j, 0) 4096 > snes9x.uint32Array_setitem(j, 0, snes9x. 0 ) > for i = 1,100 do snes9x.my_mainloop() end > snes9x.uint32Array_setitem(j, 0, snes9x.SNES_START_MASK ) > for i = 1,100 do snes9x.my_mainloop() end > -- Okay enough keys pressed lets examine memory > ram=snes9x.uint8Array_frompointer(snes9x.Memory.RAM) > addr = 0x7E8900 - 0x7E0000 -- As RAM is mapped at 0x7E of Memory we need to strip the base address > = snes9x.uint8Array_getitem(ram, addr) > -- Okay we have finished our task, lets save that movie > snes9x.S9xMovieStop(snes9x.FALSE) Movie stop > snes9x.S9xExit() -- I hope you enjoy the scripting engine and comments are appreciated, but now I'm much too tired to write anything more. cu Fabian Author: Fabian Franz <snes9x@fabian-franz.de>
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
N. Harmonik wrote:
And just to refresh everyone's memory about the bugs, as well as introduce some new ones: http://www.gamefaqs.com/console/snes/code/588645.html PS: Oh and can we keep the Volume Evelope Height Reading on this time?
Oh, gosh you are right there are lots of new bugs: "infinite run stamina: With any weapon that has reached level three you can exploit an infinite run glitch. Hold down the attack button until the weapon reaches its maxinum charge level , continue to hold the attack button , while also holding the run button " "Invicibility during boss battles: When you receive the alchemy spell "escape" from Horace, take it with you before any bossfight. Then, quickly cast it on you and your dog. You won't be able to esacpe, but you'll be invulnerable to any attack. " "Skip the fight with the two mechadusters: To skip the very first boss fight againest the two mechadusters, just simply press the start button when you're watching the cutscene at the begining of the game and youll start right in Prehistoria." cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Wow! We Fabians do rule :-). After having seen Donut Ghost House, I was like: WTF is happening here. I think it was way cool how you did fly below the bottom of some of the levels. It was also really awesome how you did that Vanilla Dome level, which had been really gnarly before. I liked how funky and effortless Mario did fly through the levels and it was absolutely outrageous that flying no longer was boring, but indeed very exciting. I also very much liked the groovy feeling that Mario had and how he juggled with the items. Last but not least, in Donut Plains 2 you ruled the tubular mondo ;-). This truely was not only entertainment but Art! When I remember back how it was necessary to try to get every live possible and how you skipped so many extra lives. Excellent! Looking forward to your next project :-). cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
>Btw.: I messed a little more with the >assembler code, and I have the strong >suspicion that the original random function >looked a lot like this abomination: >
// A[16] is the address space at 
>03f0-03ff

>byte rand() {
>  return A[A[0]] += A[ A[0] = A[0]%15+1 ];
>}
Yeah, that is what I have found out as well. >Worked on crit manipulation. The thing is, the >RNG gets called everything between 1 and >over 10 times a frame. I can predict how >many calls it needs to get a crit, but I dont' >know how many frames that will be until >then. If you do nothing it normally is once per frame. I've looked at all the RNG calling functions. >It may also be that you would have to >slash at an enemy at some split frame to get >there, which is not possible. Yes, that is possible. The point is just that the animation of the hit is not random, but instead seems to be fixed on frame counter. I've set all bits of the RNG to 0 such making it useless and fully deterministic and I still had different animations, but an infinity of critical hits and chests. The length of the aninmation determines the frame of hit, where the RNG is asked. To be helpful the RNG prediction now has to see where the next critical hit frame is, when nothing big changes and have to look if there is a frame where the length of the animation would fit that frame. Then put this out as the first frame, where it is possible to strike. My real problem was that I could not find out how the length of the animation was calculated. This way you won't get a 100% prediction, but you can help a TASer to not have to try everything ... >Also the RNG >sometimes gets called for seemingly no >reason, like when a tune sets in, or when an >enemy make some AI decisions. You normally don't need to predict that far ... >Predicting will be not possible until someone >really takes it apart, far more than I'm >capable of. I'll mess around with the >conventional trial&error. If you can tell me how the length of the animation from button-press until hit is calculated, its possible to predict it at least for a short time. And I'm talking about source code changes here, that'll show the frame of possibly next critical hit frame / frames. Or you use again the source and make an interface for the memory, to be able to read it out with third party software. Great, that you are also working on that. cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
I also have no other choice than to vote no and this without even watching it. Especially by being also a Fabian myself. I am really so full of words, that it would take books to fill that boring things in ... On another more serious note: Someone really should make a movie out of it with the "crazy frog" theme ... And possibly all sound effects still in effect as the jumping sound would be good to hear. If someone needs a movie with just sound-effects channels enabled, tell me :-). I'll gladly encode it for you. Completely full in motion, cu Fabian
Post subject: Re: Savestate index
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Highness wrote:
What do you guys think about that? Remember that this is just a thought I have. I'm not really demanding it, but it sure would be a GREAT feature as you can dive right into a movie without having to watch it all from scratch or certein save states etc. It would also be good if you forget to create a savestate and you can just have this batch do it for you. [...] Thanks for taking time to read this! :)
Thats a quite nice idea. Page up and Page down could be used for that one ... It could create the index on the fly or pre-calculate it and it could even update the index automatically while tassing ... (and there we are again with JXQs problem, which applies also to here) Most difficult thing is the compression though ... Screenshots is easy, as you can just put the image at the end of the zip file. As GIF and JPEG have headers at the end and zip files have them at the beginning (or vice versa) - I don't remember, but hybrids were possible ... But there is one problem ... I don't have windows so I could only create that functionality for linux (and snes9x as thats what I'm using, but the file could be pretty generic ) ... Are any tas'sers using snes9x / linux? cu Fabian
Post subject: Re: Solution for a desynch problem in all consoles
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
flagitious wrote:
A common problem occurs when you load a state in read only mode, in which you have previously redone something before that state. N
Yeah, I had that problem also once. If you want a fast solution, which just wastes space, you could store a unique id with the movie When re-recording this unique id, a new uniqueid is created and the old one is just valid until this point. (so now there need to be two uniqueids stored) So in loading a savestate, you just have to see if it matches one of the uniqueids and if frame-count < valid frame. Its still not a perfect solution, but I can't think of anything better at the moment. Wanted to share anyway ... cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
JXQ wrote:
If there was a way to disable certain sound channels in SNES9x, maybe this concept could be done while keeping the sound effects of the original game. I think that would be cool.
Uhm, ok I was wrong. I did not check the code thouroughly enough ... Here is a patch for snes9x. http://tasvideos.org/forum/viewtopic.php?p=79281#79281 So @the SF2-Video submitter: Mind mixing it with the sound effects? cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
JXQ wrote:
This is awesome. You can disable sound channels. This means I could record individual sound effects and slowly paste them onto the video. (Unfortunately, being ZSNES, I can't just load up my movie file and record the entire thing music-less...)
Ok, I've posted a patch for snes9x in the development section, but unless you compile it yourself this won't help you ... http://tasvideos.org/forum/viewtopic.php?p=79281#79281 So you'll have to bug nitsuja to make a new version for you ... It was so easy to add, I wonder why support was missing ... cu Fabian
Post subject: [PATCH] snes9x-sound channels disabling - nitsuja work ...
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Hi, here is a quick hack for snes9x, which disables sound channels 1-5 ...
--- soundux.cpp.old     2004-07-11 23:51:00.000000000 +0200
+++ soundux.cpp 2006-04-26 00:41:55.000000000 +0200
@@ -153,6 +153,8 @@
 #define VOL_DIV16 0x0080
 #define ENVX_SHIFT 24

+static bool enabled_channels[NUM_CHANNELS];
+
 extern "C" void DecodeBlockAsm (int8 *, int16 *, int32 *, int32 *);
 extern "C" void DecodeBlockAsm2 (int8 *, int16 *, int32 *, int32 *);

@@ -1140,9 +1142,12 @@

                if (pitch_mod & (1 << (J + 1)))
                        wave [I / 2] = ch->sample * ch->envx;
-
-               MixBuffer [I      ^ Settings.ReverseStereo] += VL;
-               MixBuffer [I + (1 ^ Settings.ReverseStereo)] += VR;
+
+               if (enabled_channels[J])
+               {
+                       MixBuffer [I      ^ Settings.ReverseStereo] += VL;
+                       MixBuffer [I + (1 ^ Settings.ReverseStereo)] += VR;
+               }
                ch->echo_buf_ptr [I      ^ Settings.ReverseStereo] += VL;
                ch->echo_buf_ptr [I + (1 ^ Settings.ReverseStereo)] += VR;
         }
@@ -1425,7 +1430,8 @@
                        }
                }

-               MixBuffer [I] += V;
+               if (enabled_channels[J])
+                       MixBuffer [I] += V;
                ch->echo_buf_ptr [I] += V;

                if (pitch_mod & (1 << (J + 1)))
@@ -1856,6 +1862,11 @@
     so.stereo = stereo;
     so.sixteen_bit = Settings.SixteenBitSound;
     so.encoded = FALSE;
+    for (uint32 J = 0; J < NUM_CHANNELS; J++)
+       enabled_channels[J]=1;
+    // HACK
+    for (uint32 J = 0; J <= 4; J++)
+       enabled_channels[J]=0;

     S9xResetSound (TRUE);
I'm sure nitsuja can code a beautiful GUI for that ... But here is the general idea ... cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Luke wrote:
First, you can set a breakpoint whenever the memory address is being written or read. This can give some insight into what it's being used for and how it changes. If you are trying to find the code for a certain event (say, how much damage you are going to do), first try to find a RAM address that changes when the event occurs. Then set a breakpoint when this RAM address is accessed. This will get you to the general spot in the code where the event happens.
Great! Yeah, thats the usual reverse-engineering process ... :-D Are there any disassemblers for other consoles than NES. Like SNES? And also: When I know that it changes variable 7EE7CD for example, how can I find this address in the ROM. I mean, how is the address format? cu Fabian
Experienced Forum User
Joined: 12/17/2004
Posts: 99
Location: Karlsruhe, Germany
Ok, as some of you rom hackers are here. How do you locate the random number generator? I have located a variable, which changes each frame and looks kind of random, but using a "cheat" to set it to a fixed value does not make the game more deterministically in regards to certain events. So there must be something else. So, how in general do you find code (I know asm) or memory addresses, which are responsible for critical hits / bonus rewards / ... Any strategies? @Bisqwit: Have you recorded any information for making the bisqbot for Mega Man? Which strategies did you use? cu Fabian PS: I am "working" on analyzing Secret of Mana, but this applies to any game as well ...