![]() Register - Login |
||
| Main - Memberlist - Active users - Calendar - Wiki - IRC Chat - Online users Ranks - Rules/FAQ - JCS - Stats - Latest Posts - Color Chart - Smilies |
||
| Jul - Posts by messiaen |
| Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 45 46 47 48 49 50 51 52 53 54 |
| messiaen Catgirl Level: 61 Posts: 211/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| There is another interesting list of "spawn" behaviors at 0xEBBA4 : 1300 3DB8 0100 0086 <--Produces Wing Cap 1300 3DD8 0200 0088 <-- Produces Metal Mario map 1300 3E1C 0300 00BE <-- Produces the cap which makes you pass through objects 1300 1F3C 0400 0074 <-- Produces a ridable Koopa Sheel (model not hard-coded) 1300 09A4 0500 0000 <-- Produces coin(s) 1300 0964 0600 0000 <-- Produces coin(s) 1300 0984 0700 00D4 <-- Produces coin(s) 1300 3FDC 0800 007A <-- Produces 1-up 1300 07F8 0900 00D4 <-- Same as 0x80C (Produces star on 100th coin) with Parameter 01 set to 01 1300 4010 0A00 017A <-- Produces moving 1-up 1300 07F8 0B00 027A 1300 07F8 0C00 037A 1300 07F8 0D00 047A 1300 07F8 0E00 057A 1300 07F8 6300 0000 And now begins a list of RAM pointers. Usually, these are related to the data block above it. In some cases, it is interesting to compare these adresses with the ones called by the behaviors scripts, because they are a indication of what object may be using them. There is another MASSIVE list of Behavior pointers at 0xEC7E0. There are lot of repeated pointers, so most likely each one in the list is used by a specific object. However, I'm not sure if the behaviors which produce boss stars might be in there, because Koopa the Quick star is produced by behavior 0x3E64, and this isn't in the checksum area but inside his ASM as a ADD Immediate instruction. Again, I'm mostly using Yoshiman's Spawn any object code to check on this behavior and Nemu's debugging features, so if anyone feels like working on this massive list go ahead and post the results. Edit: Starting at 0xEC7E0 there are two behavior pointers lists: 0xEC7E0 - 0xED350: Format is [behavior - 4 bytes] [mode - 2 bytes] [parameter? - 2 bytes] 0xED35C - 0xED5E0: Format a bit different for the last 4 bytes. There are even warp behaviors in this one. |
| messiaen Catgirl Level: 61 Posts: 212/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
Sorry, I forgot to check your first post again , but thanks for the explanation on 0x42/0x43 commands. The Castle Grounds is a hard level to deal with, because there are many ASM events which aren't triggered by the Level Script but by something else. Anyway, I don't think it's really worth to work much changing existing levels, as more flexibility can be obtained much easier from custom level scripts/geometry.One thing I'm looking for is boss stars positions, maybe they could be in this checksum area (or it could be more complex than that). The star spawned by Koopa in Bob-omb uses the 0x3E64 behavior, and of its 0x0C calls, the one responsible for settings its position is 0x802F2614. Looking at the ASM, here's what I found: Before we move on, this is from Cellar Dweller's struct_object.txt: /* 12 @ 0xa0 - 3x float position array */ /* 12 @ 0x164 - another 3x float position array copied from offset 0xa0 by behavior command 0x2d */ So, if I understand what's going on, 0x16C / 0xA8 and 0x164 / 0xA0 are respectively Z and X positions. One of the positions is the start position (probably copied from Koopa the Quick), while the other is the final destination of the star. Changing these values before they get loaded and you'll change where the star will be spawned. The question I have is, these are 32-bit float values, but in the ROM they are probably stored 16-bit (ie, as in the 0x24 command). How to convert them back to 16-bit so we can search them on the ROM? --- About camera coordinates, I think they are stored (3 floats) at 8034B8A8, 8034B8AC and 8034B8B0. The "double door" camera ASM uses a very simple function (80378800) which just repositions the camera. |
| messiaen Catgirl Level: 61 Posts: 213/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| To change some of the textures TT64 doesn't edit, most people use Tile Molester. This thread might help you, as well as this list. Be sure to select the aproppriate "codec" to view the textures within Tile Molester. The "Super Mario 64" at the title screen isn't a texture, so it can't be modified by this method. |
| messiaen Catgirl Level: 61 Posts: 214/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
Very nice . Using NEMU, it won't be hard to find which banks these pointers refers to, I will try to make a list of them tomorrow. Some of these pointers are collision data for some behaviors which are shared by solid objects (ie, the bridge in Bob-omb, in which the parameters determine which collision to use).Edit: Beggining on 0xED6CC, there is a list of X,Y,Z coords with the same incremented number pattern. Other lists starts at 0xED718 and 0xED7B8. Many other coordinate lists such as those can be found in level banks, so I think there may be some REALLY interesting stuff there. Perhaps some of the more complex camera movements, such as Lakitu, use this kind of format. |
| messiaen Catgirl Level: 61 Posts: 215/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
The camera trick would be very interesting . I haven't worked yet on the banks list for that pointers, but I found the coordinates of the Snowman's Bottom trajectory in Cool Cool Mountain. They start at 0xDF6909 :Snowball's Bottom Trajectory: 0000 09C5 0A66 FC31 0001 09E5 0A00 FCE0 0002 0A06 08FC FE0C [...] It goes to up to 1D, then ends with FFFF. They are inside the 0x07 Bank of Cool Cool Mountain, so 0xDF6909 - 0xDE0361 (bank start) = 0x165A8 (relative offset). In this case, the pointer isn't in one of those pointer tables, but in the ASM as an ADDIU instruction: VL-Tone, you should make a teaser video of a rainbow road where you have to race against the Koopa .Edit: At 0xE03965, begins the Racin Penguin coordinates from Cool Cool Mountain. Again the pointer is hardcoded, so here are the addresses to change if you want to move/expand it: 0xCCA6C [ROM] / 80311A6C [RAM]: LUI A0, 0x0702 0xCCA70 [ROM] / 80311A70 [RAM]: JAL 0x80277F50 0xCCA74 [ROM] / 80311A74 [RAM]: ADDIU A0, A0, 0x3604 Here is what I've found about other pointers in the checksum area: |
| messiaen Catgirl Level: 61 Posts: 216/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| -------------------------------------------- Koopa-The-Quick Trajectory Modifier v0.2 -------------------------------------------- ![]() This simple program helps you creating a custom Koopa-The-Quick race in Bob-Omb's Battlefield using Toad's Tool 64 v0.5.98b interface. Earlier or newer versions of Toad's Tool 64 aren't supported. ----------- How to use ----------- - Apply koopa_trajectory.ppf patch to an extended Super Mario 64 ROM. - Delete the "M64GeometryDataFlat.m64" file from your Toad's Tool 64 folder. - Open the patched file and wait for the polygon decoding process. - Open the file in Toad's Tool 64 and go the Bob-Omb's Battlefield course and do the desired modifications. - Save your work, quit Toad's Tool 64 and run koopa.exe in a console window (sample usage: koopa.exe koopa_path.z64 mario64.z64). This will patch your original extended ROM with the new trajectory. ------------ How it works ------------ The ROM patched with koopa_trajectory.ppf is used to collect new coordinates for the race. Koopa's trajectory is mapped as 0x24 objects in the Bob-Omb's Battlefield level. You can extend his trajectory up to 146 coordinates or use less coordinates than the original path if you want. In either case, an object with a X, Y, Z position of 0,0,0 will determine the end of the trajectory. The last object in the level is reserved for the star position. The star position is in the checksum-protected area of the ROM, so a patch is applied to override the checksum check. Some emulators might complaint about it, but the ROM will run fine. I'll include a option to restore CRC check in a later version, but you'll have to correct it manually and disable Toad's Tool 64 CRC check. Download Link for v0.2. |
| messiaen Catgirl Level: 61 Posts: 217/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| Use a clean extended ROM to patch the koopa_path.ppf file. This patched ROM will be only a intermediary in the process. Once you are done editing Koopa's path - remember to make your last coordinate is 0,0,0 - you can patch the result in any extended ROM which still use the original Bob-omb's Battlefield level. Since the Flat Lethal Lava Land patch keeps this level intact, it's safe to use it there. But it's always a nice idea to make backups of your ROM(s) before applying these patches. Edit: I'm adding also support for the Tiny-Huge Island race. It will require more modifications than Bob-omb (including applying the checksum trick) because the data isn't at the very end of the bank. And since the checksum won't be a problem, I'll map some object to be the position where the star will be spawned. |
| messiaen Catgirl Level: 61 Posts: 218/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| 1. You can try this on levels which have Yoshi loaded, such as the Castle Grounds. Place a Yoshi and change it's Behavior value to match that of Koopa The Quick (you have to be in 'expert mode' to do this). On the "Type" parameter, don't choose 01 or 02 as this will crash the game. This way you can get a running Yoshi, but the animations will look glitched. 2. You can have MIPS outside the castle (only because it's loaded in that level), but changing the way it acts would require complex ASM modifications. You could still try changing its behavior to get different effects, but remember that many behaviors will crash the game, so keep track of what you're doing and try one behavior at a time. 3. Unfortunately, editing polygons of animated characters/levels is a very complex process and there is no indication that it will be ever implemented in TT64. Just recently VL-Tone has started working on a polygon importer, but it will probably be limited to import a new level terrain in a Flatworld-like level and (big maybe) non-animated solid objects. |
| messiaen Catgirl Level: 61 Posts: 219/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| Check my last post at the checksum area thread for the coordinates pointers. For the ASM pointers, you can just read the last two bytes of these LUI and ADDIU instructions to get the pointers. The problem, again, is to know which level bank these pointers refers to in a flexible way, so that you can get Koopa into new levels. Edit: I finished a simple Windows front-end, so you don't have to manually type the file names. Besides, it prevents you from choosing the wrong files and messing with your ROM. Now you can also modify the spawned star location, and Koopa's speed (Normal / Double / Triple). |
| messiaen Catgirl Level: 61 Posts: 220/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| There are a few videos on YouTube which feature Mario64 (and even Mario Kart64) levels in first-person shooter games, so this area seems to be already covered by other tools. However, exporting the geometry of non-animated 0x24/0x43 objects would be interesting. For the additional behaviors, perhaps you could place them at level script bank (0x0E), this way you would avoid problems expanding shared banks. I haven't tested many "moving" platforms behaviors, but most of them are quite flexible and will work with any model as long as you provide a valid collision pointer, so behavior templates are a good idea. |
| messiaen Catgirl Level: 61 Posts: 221/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| Why don't you go for something like "Global/Shared Behaviors" (Bank 0x13) and "Level Behaviors" (0x0E) for the lists? I don't see any reason why someone would need more flexibility than that (ie, choosing yet another bank for behaviors). This way you could simplify things, as the Bank Number in the 0x24 commands would be restricted to these two values, which would have individual description lists. Global/Shared are somewhat innacurate descriptions of the 0x13 behavior bank, because some of the behaviors contain pointers to specific level banks which may crash the game, but so far it's the best solution I could come up with. About the importer, I don't have any experience in 3D modelling, but how can I know if the scale of my objects is good for Mario 64? Also, last time I checked (a long time ago), the boundaries for a "Flatworld" level were X -8192, Z 8192 (Y seemed to be a bit more flexible). Even though I could get polygons drawn after 8192, the collision didn't worked. For most levels, this seems to be the boundaries used, so you should experiment a bit with it in order to set some size restrictions. |
| messiaen Catgirl Level: 61 Posts: 222/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| Some interesting Gameshark codes by Viper: 812F8EC6 ???? Number Of Stars For Yoshi To Appear On The Castle Roof (Default 0078 [dec = 120]) 812F84CA ???? Number Of Stars To Make "Mips" The Rabbit Appear - 1st Time (Default 000F [dec = 15]) 812F8522 ???? Number Of Stars To Make "Mips" The Rabbit Appear - 2nd Time (Default 0032 [dec = 50]) On the ROM, these value are at 0xB3EC6, 0xB34CA and 0xB3522, all of them inside the checksum area. |
| messiaen Catgirl Level: 61 Posts: 223/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| I noticed the "wall" effect. If you place a collisiong plane along the X and Z axis (such as the "Flatworld"), the engine will aditionally create free "Y" space, making it a [unfilled] "collision square". An object wich individual collision won't be limited by this (ie, if you set a very narrow square for your main collision), as its collision will "extend" the collision range. That is, unless you place it out what seems to be the boundaries limits (a 16384 units square), then the object will show but the collision won't work (that is, it will work UNTIL 8192). It makes sense, since the polygon commands are very low-level code (handled by hardware?), while the collision format is handled by the software. I hope this makes any sense . |
| messiaen Catgirl Level: 61 Posts: 224/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| I did a quick test and indeed this seems to be a hardcoded limitation. Extending the collision beyond 8192 (2000) or -8192 (DFFF) won't work, and any area beyond this is ignored by the game. Polygons can be rendered outside this area. |
| messiaen Catgirl Level: 61 Posts: 225/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| These are the last X, Y, Z Yoshi values before he disappears: X = C583C300 Y = 44FE4000 Z = C5BC9A88 Uh, could you convert them into 16-bit ? I feel lame asking this, but would you mind releasing your 32-bit float to 16-bit signed integer converter? |
| messiaen Catgirl Level: 61 Posts: 227/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| Maybe, but for now my focus is to make it edit trajectories on original levels and find more data. If anyone wants to help, check out if I'm not missing any object which uses fixed trajectories: - Koopa The Quick (Bob-omb and Tiny-Huge Island) - Racing Penguin (Cool-Cool Mountain) - Snowman's Bottom (Cool-Cool Mountain) - MIPS the Rabbit (Inside Castle) - Dorrie |
| messiaen Catgirl Level: 61 Posts: 228/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| Tox-Boxes actually use a simpler type of data, which just determine in which direction it will rotate 90 degrees. This data is in the checksum area, so they can be used in every level. As for Yoshi, I'm not sure if he uses path coordinates, because his movement is very simple. I forgot about Rainbow Ride! This reminds me also of the platform in the second area of Lethal Lava Land, it probably uses the same system of coordinates. |
| messiaen Catgirl Level: 61 Posts: 229/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
I'm almost ready with v0.2! Here is a screenshot of the Windows FrontEnd:![]() It's much safer to use it than the console version, because it will check if you are using the correct files. Besides changing the coordinates and spawned star position, it can also set Koopa to Double or Triple speed, using a very cheap behavior trick . By default, it moves the behavior bank to 0x11B0000 and expand it a bit.Now I need to learn more about command-line arguments parsing, maybe eventually I can expand this to a general checksum area editor, there's a lot of interesting Gameshark stuff that can be patched to the ROM and needs to be tested. --- Download link for v0.2 with a Windows front-end on the first post! |
| messiaen Catgirl Level: 61 Posts: 230/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
Thanks a lot for tooking the time to release this .I used it a bit today trying to find King Bob-omb's star position. It uses the same function as Koopa to place the star. Here is what I found from Bob-omb: C58CA000 (Z) 44FA0000 (X) I got the "Y" from the Star's "RAM Object": Hex: 07D0 1194 EE6C Dec: 2000 4500 -4500 However I can't seem to find these on the ROM, any ideas on that?! |
| messiaen Catgirl Level: 61 Posts: 231/1085 EXP: 1795237 For next: 81359 Since: 11-20-07 Since last post: 197 days Last activity: 183 days |
|
||
| The "Show Dialog Box" function is 0x802A4BE4: -->From the King Bob-Omb ASM: 802A7F70: ADDIU A0, R0, 0x0002 <-- Argument 0 802A7F74: ADDIU A1, R0, 0x0001 <-- Argument 1 802A7F78: ADDIU A2, R0, 0x00A2 <-- Argument 0 802A7F7C: JAL 0x802A4BE4 <-- "Show Dialog Box" Function 802A7F80: ADDIU A3, R0, 0x0080 <-- Argument 3 = Message number (80h = 128dec) 802A7F84: BEQ V0, R0, 0x802A7F9C <-- If Return = 0 do something The first three arguments are probably the parameters discussed at the Mario 64 Dialog Params thread. Here is an ASM Hack that get rids of hardcoded pointers/star positions in Koopa-The-Quick: With this hack, Koopa-the-Quick (when parameter 1 = 1) won't read it's path pointer/star position from the checksum area, but will instead check for values stored in its RAM object. These values are flexible and can be set by adding these lines to Koopa's behavior: 27 3E 00 00 07 01 16 A0 [0x180 = Pointer to coordinates path] 27 3F 00 00 0B D6 11 94 [0x184 = X, Y spawned star coordinates] 27 50 00 00 EE 08 00 00 [0x1c8 = Z spawned star coordinate. Last 2 bytes are unused] These variables seems unused by Koopa-The-Quick, so I think it's safe to use them. Here is the original code that loads Koopa's trajectory for Bob-omb Battlefield: 802FCDF0: LUI A0, 0x8033 # A0 = 0x80330000 [Base address for memory access] [...] 802FCDFC: ADDU A0, A0, T6 # doesn't do anything because T6 = 0 802FCE00: JAL 0x80277F50 # probably some function related with segmented memory 802FCE04: LW A0, 0x2864 (A0) # Load word from 0x80332864 (in ROM, 0xED864) [Koopa trajectory pointer] Here is my replacement code. The last values are the instruction in machine language for easier patching. [RAM/ROM] 802FCDF0/0xB7DF0: LUI A0, 0x8036 # A0 = 0x80360000 # Base address so we can get RAM object pointer # 3C048036 [...] 802FCDFC/0xB7DFC: LW A0, 0x1160 (A0) # Read pointer and stores at A0. # 8C841160 [...] 802FCE04/0xB7E04: LW A0, 0x0180 (A0) # Load word (Koopa's pointer) from offset 0x180 of RAM object. # 8C840180 And here's the patch for the spawned star position: 802FD658/0xB8658: LH T2, 0x01C8 (T4) # Z position # 858A01C8 802FD65C/0xB865C: LH T1, 0x0184 (T4) # X position # 85890184 802FD660/0xB8660: LH T7, 0x0186 (T4) # Y position # 858F0186 |
| Pages: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... 45 46 47 48 49 50 51 52 53 54 |
| Jul - Posts by messiaen |
![]() |
Acmlmboard - 07/23/2013 b378.03 ©2000-2013 Acmlm, Xkeeper, Inuyasha, et al. |
| Query execution time: | 0.056658 seconds |
| Script execution time: | 0.084813 seconds |
| Total render time: | 0.141470 seconds |