(29-11-2016, 08:02 AM)Nick Nelson Wrote:
I thought I would post this here. I was able to use the notes from queueRAM and shygoo to help me with this project, so I just wanted to thank them!
Thank you for posting this - it is absolutely beautiful! I really appreciate that you posted the source as well - very nice GUI and HUD makes every well polished. I think I'm going to spend some time studying your NEAT implementation and the neural network paper you cited. Was there anything that you learned about MK64 objects structures or level data along the way that would be useful to share here as well?
Maybe not a whole lot of stuff, but I did spend about 55 hours messing with the RAM. So give me some time and I'll go through my notes and post them.
Since swapping around courses in the main course table wasn't working, I decided to dig into the code to see if it handled anything special on a per-course basis. I tracked down every instance where the course ID (0x800DC5A0) is referenced and documented them. There ended up being 170+ of them, so it's kind of a lot to digest. I'm attaching an armips assembly file which documents each of them and any tables they use. Some are data tables, some are jump tables, some are just basic branch switch statements.
Also, I confirmed that course ID = 0x14 is the Award Ceremony. Many of the tables contain 21 entries and special code exists for 0x14 and non-0x14 cases.
Since there are so many references, I'm going to need help tracking down what they are all used for. Next steps are taking a look at when this code is called at run-time, figuring out how the dynamically populated arrays are generated, and digging into the specific loading functions.
In addition to the main course table @ 802B8D80/122390, here are some of the other course-related tables (but all of the course-specific code is relevant):
There are many font and other texture tables in the ROM. I documented some of them in my previous mk64 asm examples post. However, here is a more complete overview.
Segment 0A contains the MIO0 and Raw textures and starts at ROM offset 0x729A30.
Segment 0B contains the TKMK00 textures and starts at ROM offset 0x7FA3C0.
Segment 02 contains the texture tables and is loaded at RAM 0x801978D0 from ROM offset 0x12AAE0. There, the following tables exist: ROM Range Seg 02 Range Type Description
12AAE0-12BFA8 02000000-020014C8 0x14 MIO0 8x8 fonts
12BFA8-12C084 020014C8-020015A4 0x14 TKMK00 gold and pink textures
12C084-12C46C 020015A4-0200198C 0x14 MIO0 IA16 text and graphics
12C46C-12C4CC 0200198C-020019EC 0x8 Seg02 List of some tables in 12C084-12C46C
12C4CC-12C60C 020019EC-02001B2C 0x14 TKMK00 character names
12C60C-12C92C 02001B2C-02001E4C 0x14 MIO0 Track thumbnails
12C92C-12CA84 02001E4C-02001FA4 0x8 Seg2 List of some tables 12C60C-12C92C
12CA84-12CB9C 02001FA4-020020BC 0x14 MIO0 IA16 border and trophies
12CB9C-12CBFC 020020BC-0200211C 0x8 Seg2 List of some tables 12CA84-12CB9C
12CBFC-12F078 0200211C-02004598 0x14 Raw font textures
12F078-12F0C8 02004598-020045E8 0x14 TKMK00 320x240 backgrounds
12F0C8-12F118 020045E8-02004638 0x14 Raw "Push Start" and copyright
12F118-12F2BC 02004638-020047DC 0x14 TKMK00 Menu headings
12F2BC-12F35C 020047DC-0200487C 0x14 Raw Green arrow
12F35C-12F53C 0200487C-02004A5C 0x14 TKMK00 Menu options
12F53C-12F62C 02004A5C-02004B4C 0x14 MIO0 and Raw player select menu border
12F62C-12FCA8 02004B4C-020051C8 0x14 TKMK00 track names
12FCA8-1311E8 020051C8-02006708 0x14 MIO0 character menu animations
1311E8-132128 02006708-02007648 0x8 Seg2 List character menu animations
Each 0x14 type table has the structure of: struct {
u16 type; // 00 = TKMK00, 01 = TKMK00, 03 = MIO0, 05 = Raw??
u16 todo02; // unused?
u32 segAddr; // segmented (0A or 0B) address
u16 width; // texture width
u16 height; // texture height
u16 todo0C;
u16 length; // bytes of compressed data (although sometimes off)
u16 todo10;
u16 todo12;
}
Each 0x8 type table has the structure of: struct {
u32 segAddr; // segmented 02 address
u32 todo04; // TODO: some count? 0x3C, 0x32, 0x0A, 0x05, 0x02, 0x01
}
Furthermore, there is an array of segment 02 table pointers in ROM at 0xE86F8-0xE9040 and 0xE90C0-0xE912C
(This post was last modified: 27-03-2017, 11:53 AM by queueRAM.)
I wanted to ask if anyone is investigating how to get CPU-controlled players to fire blue, green and red shells. It would also be interesting that CPU controlled players could use turbo mushrooms. The CPU currently has as a form of attack the use of the star and as a form of defense bananas and fake item and ghost.It would be interesting if this could make the difficulty of MK64 increase a little.If someone got this should be In the editing tools.
(04-08-2017, 06:44 PM)SATURN_81 Wrote: I wanted to ask if anyone is investigating how to get CPU-controlled players to fire blue, green and red shells. It would also be interesting that CPU controlled players could use turbo mushrooms. The CPU currently has as a form of attack the use of the star and as a form of defense bananas and fake item and ghost.It would be interesting if this could make the difficulty of MK64 increase a little.If someone got this should be In the editing tools.
Well i know they have the ability to do it but i wasn't programmed into the game for some reason, plus the red shells in this game isn't the best
Hello there! My name is Alex, I am a Masters student who is currently writing a dissertation about the mechanical value of the Blue Shell in Mario Kart, and my research has lead me here. Apologies if this is the wrong place to enquire, but I didn't wish to be so bold as to start my own thread!
I've been dabbling with MK64 for a month or two now, and I'm still struggling to see if the things I want to do are entirely feasible, and I was wondering if any of you would be able to help me? Essentially, I'm looking to do the following:
- Remove the Blue Shell from the item rotation/add the Blue Shell to the CPUs item rotation (pretty much just altering the tables the items are picked from)
- Track the racers positions throughout the race (finding their x & y co-ordinates perhaps?)
- Give the player any item they wish at runtime
I think it's possible to do all of these in theory, but I've been having some issues finding the memory locations for these various variables. Would anyone be able to provide me with some advice? Your support would be greatly appreciated!
(03-01-2018, 07:17 PM)UndeniablyAlex Wrote: Hello there! My name is Alex, I am a Masters student who is currently writing a dissertation about the mechanical value of the Blue Shell in Mario Kart, and my research has lead me here. Apologies if this is the wrong place to enquire, but I didn't wish to be so bold as to start my own thread!
I've been dabbling with MK64 for a month or two now, and I'm still struggling to see if the things I want to do are entirely feasible, and I was wondering if any of you would be able to help me? Essentially, I'm looking to do the following:
- Remove the Blue Shell from the item rotation/add the Blue Shell to the CPUs item rotation (pretty much just altering the tables the items are picked from)
- Track the racers positions throughout the race (finding their x & y co-ordinates perhaps?)
- Give the player any item they wish at runtime
I think it's possible to do all of these in theory, but I've been having some issues finding the memory locations for these various variables. Would anyone be able to provide me with some advice? Your support would be greatly appreciated!
Hi Alex. Interesting topics. I know this thread is quite long, but I think most of the information you are looking for is contained within it. I'll point you to some resources that you can hopefully make use of. Let us know if you have any further questions.
Regarding item rotation, there are different probabilities for each item given the modes and placement. You can view orbitaldecay's post here, but high-level overview is:
(03-01-2018, 07:17 PM)UndeniablyAlex Wrote:
Hello there! My name is Alex, I am a Masters student who is currently writing a dissertation about the mechanical value of the Blue Shell in Mario Kart, and my research has lead me here. Apologies if this is the wrong place to enquire, but I didn't wish to be so bold as to start my own thread!
I've been dabbling with MK64 for a month or two now, and I'm still struggling to see if the things I want to do are entirely feasible, and I was wondering if any of you would be able to help me? Essentially, I'm looking to do the following:
- Remove the Blue Shell from the item rotation/add the Blue Shell to the CPUs item rotation (pretty much just altering the tables the items are picked from)
- Track the racers positions throughout the race (finding their x & y co-ordinates perhaps?)
- Give the player any item they wish at runtime
I think it's possible to do all of these in theory, but I've been having some issues finding the memory locations for these various variables. Would anyone be able to provide me with some advice? Your support would be greatly appreciated!
Hi Alex. Interesting topics. I know this thread is quite long, but I think most of the information you are looking for is contained within it. I'll point you to some resources that you can hopefully make use of. Let us know if you have any further questions.
Regarding item rotation, there are different probabilities for each item given the modes and placement. You can view orbitaldecay's post here, but high-level overview is:
orbitaldecay Wrote:
MEM 0x80165F5E: Player 1 Inventory
Thanks so much for your help queueRAM! I'll read through the thread with a fine tooth comb now (I had glanced over the first few pages to double check I wasn't completely off-base with what was possible!), and I shall get get back and post some details when I've progressed with my experiment details and if I have any other questions
Many thanks again, I'll be sure to reference you if I can!
Apologies if I'm just making a series of rookie mistakes (quite new to this and still getting to grips with the toolset itself)
So I'm trying to get to the item table so that I can edit the values themselves, ideally testing it by setting all of the variables to the same thing (01 for banana or something), but when I get to the address storing the pointer to the item table, trying to go to that address $884C6C4C, I go past the end of the file.
Am I doing something wrong, or using the wrong program? I'm currently working with ROM Disassembler, Project64 and Cheat Engine.
Many thanks!
Mario Kart 64 Hacking General Discussion«1 ...
1314151617»