mirror of
https://github.com/izzy2lost/Diddy-Kong-Racing.git
synced 2026-06-19 01:16:26 -07:00
Adventure two 25% (#387)
* identify transition bug
* Document fog system
* Label fogchanger attributes
* and more
* anti aliasing
* name some object vars
* block the racer inputs
* Update unknown_0255E0.c
* Update README.md
* Update src/object_functions.c
* I just did thing I guess???
* me when I realise almost all the pass through discs are just copy and pasted code.
* YOU'RE PUSHING THEM?!?!
bruh bruh bruh bruh
* I guess I'm in the object naming rabbit hole now
wow maybe I'll actually get these looking good 😳
* i did frogs
* got it
* Quick fixes
This commit is contained in:
@@ -1,181 +1,181 @@
|
||||
# Diddy Kong Racing
|
||||
|
||||
This repo contains a work-in-progress decompilation of Diddy Kong Racing for the N64. You will need to have a original copy of the ROM to extract the game's assets.
|
||||
|
||||
Currently, only the US 1.0 version of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time.
|
||||
|
||||
<!-- README_SCORE_SUMMARY_BEGIN -->
|
||||
As of April 24, 2023, this is our current score:
|
||||
|
||||
    Decomp progress: 51.18%
|
||||
|
||||
    Documentation progress: 24.34%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
|
||||
---
|
||||
|
||||
## Dependencies
|
||||
|
||||
* `libcapstone-dev`
|
||||
* `gcc`, Version 8.0 or higher
|
||||
* `make`, Version 4.2 or higher
|
||||
* `python3`
|
||||
* `wget`
|
||||
|
||||
`sudo apt install build-essential pkg-config git python3 wget libcapstone-dev`
|
||||
|
||||
### binutils
|
||||
|
||||
You are not required to install a binutils package, but it does speed up the initial setup if you do have it installed.
|
||||
|
||||
* Ubuntu/Debian (x86): `sudo apt install binutils-mips-linux-gnu`
|
||||
|
||||
## Setup / Building
|
||||
1. Install the dependencies
|
||||
2. Place the ROM file within the `baseroms` directory.
|
||||
**a.** The name of the ROM file does not matter, but it must end with one of these extensions: `.z64`, `.v64`, `.n64`, or `.rom`. It will be detected automatically from an md5 checksum.
|
||||
**b.** If you use a byte-swapped or little-endian ROM, then it will automatically be converted to a big-endian (.z64) ROM file.
|
||||
3. Run `make` in the main directory.
|
||||
**a.** Use the `-jN` argument to use `N` number of threads to speed up building. For example, if you have a system with 4 cores / 4 threads, you should do `make -j4`.
|
||||
|
||||
### Building on MacOS
|
||||
1. `brew install gcc capstone coreutils`
|
||||
2. Put GNU-coreutils `bin` on path using by adding `PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"` to your shell rcfile (or update any GNU-util usage in `Makefile` and `tools/Makefile` to use the `g`-prefixed versions).
|
||||
3. Download latest `macos` build of `ido-static-recomp` from [here](https://github.com/decompals/ido-static-recomp/releases/), and add `cp` the binaries to `tools/ido-static-recomp/build5.3/out`.
|
||||
4. Take a look at [this gist](https://gist.github.com/tonyspumoni/fc1b4c9217c5f2821a9fc4cbf69b51ef) to see what other updates are needed to get the build to pass, and apply them if they are relevant to your environment. You may need to add specific `-I` and `-L` flags to get things like `openssl` and `gcc-12` includes/libs included.
|
||||
5. `make` from repository root should work now.
|
||||
|
||||
## Modding
|
||||
If you are modifying the code in the repo, then you should add `NON_MATCHING=1` to the make command.
|
||||
Example: `make NON_MATCHING=1 -j4`
|
||||
|
||||
The `NON_MATCHING` define will include the functions that don't exactly match one-to-one, but should be no different functionality-wise. If you do notice any bugs that occur in a `NON_MATCHING` build that are not in the vanilla game, then please file an issue describing the bug. It would be helpful if you can track down which function is causing the bug, but that is not required.
|
||||
|
||||
## Style Guide
|
||||
|
||||
The style guide for the project can be found here: https://docs.google.com/document/d/1euQf8nwynGcCZL1MfoMaLs-XRvx3ejjj8fIfykUZ-NQ
|
||||
|
||||
If you see variables/functions/structs/etc. that doesn't follow these rules, then file an issue and we'll try to fix them.
|
||||
|
||||
## Scripts
|
||||
|
||||
There are some useful scripts that should be kept in mind when working on this repo.
|
||||
|
||||
---
|
||||
|
||||
#### `./extract.sh <version>`
|
||||
|
||||
This script will extract all the assets from a DKR ROM and place them into `/assets/` folder according to the config file within the `/extract-ver/` folder. The version parameter should either be `us_1.0`, `us_1.1`, `eu_1.0`, `eu_1.1`, or `jp`.
|
||||
|
||||
Example: `./extract.sh us_1.0`
|
||||
|
||||
---
|
||||
|
||||
#### `./diff.sh <function_name>`
|
||||
|
||||
Compares the assembly output of a function from a built ROM to the base ROM. Useful for decompiling.
|
||||
|
||||
Example: `./diff.sh menu_init`
|
||||
|
||||
---
|
||||
|
||||
#### `./rename.sh <old_name> <new_name>`
|
||||
|
||||
This script will rename an existing symbol, file name, and/or folder name within the repo with a new one.
|
||||
|
||||
Example: `./rename.sh D_A4001000 SP_IMEM`
|
||||
|
||||
---
|
||||
|
||||
#### `./get_symbol.sh <ram_address>|<symbol>`
|
||||
|
||||
Given either a RAM address or symbol, returns its `(symbol, address)` pairing as defined in `/build/us_1.0/dkr.map`. If specified, the RAM address must be in base 16. The `0x` prefix is not required.
|
||||
|
||||
Example:
|
||||
```
|
||||
./get_symbol.sh 0xA4001000
|
||||
0xA4001000 = SP_IMEM
|
||||
|
||||
./get_symbol.sh osCicId
|
||||
0x80000310 = osCicId
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `./score.sh`
|
||||
|
||||
Prints out the current completion percentage of the decomp. You do need to have an `OK` build for this to work properly.
|
||||
|
||||
The scoring is split into 2 sections:
|
||||
1. Assembly to C Decompilation (Adventure One)
|
||||
2. Cleanup and Documentation (Adventure Two)
|
||||
|
||||
Show scores for Adventure One & Adventure Two: `./score.sh`
|
||||
Show score for Adventure One only: `./score.sh -a 1`
|
||||
Show score for Adventure Two only: `./score.sh -a 2`
|
||||
Show top 10 files remaining: `./score.sh -t 10`
|
||||
|
||||
To make progress in Adventure 2, a function must be properly named (must not start with `func_`) and also include a doxygen comment above it.
|
||||
|
||||
For example:
|
||||
```c
|
||||
/**
|
||||
* Returns 1 if Drumstick is avaliable to use, or 0 if not.
|
||||
*/
|
||||
s32 is_drumstick_unlocked(void) {
|
||||
return gActiveMagicCodes & 2;
|
||||
}
|
||||
```
|
||||
|
||||
<!-- README_SCORE_BEGIN -->
|
||||
As of April 24, 2023, this is our current score:
|
||||
```
|
||||
=================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
---------------- 51.18% Complete ----------------
|
||||
# Decompiled functions: 1501
|
||||
# GLOBAL_ASM remaining: 331
|
||||
# NON_MATCHING functions: 12
|
||||
# NON_EQUIVALENT WIP functions: 64
|
||||
------------------ Game Status ------------------
|
||||
Balloons: 25/47, Keys: 3/4, Trophies: 2/5
|
||||
T.T. Amulets: 2/4, Wizpig Amulets: 2/4
|
||||
-------------------------------------------------
|
||||
We are racing in Treasure Caves. (Lap 3/3)
|
||||
=================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
---------------- 24.34% Complete ----------------
|
||||
# Documented functions: 485
|
||||
# Undocumented remaining: 1079
|
||||
------------------ Game Status ------------------
|
||||
Balloons: 12/47, Keys: 1/4, Trophies: 1/5
|
||||
T.T. Amulets: 1/4, Wizpig Amulets: 1/4
|
||||
-------------------------------------------------
|
||||
We are racing Taj in the Car Challenge. (Lap 1/3)
|
||||
=================================================
|
||||
```
|
||||
<!-- README_SCORE_END -->
|
||||
|
||||
---
|
||||
|
||||
## TODO list
|
||||
|
||||
### Major
|
||||
|
||||
What should be focused on.
|
||||
|
||||
* Decompiling the non-matching asm files into matching C functions.
|
||||
* Documenting variables & functions
|
||||
|
||||
### Minor
|
||||
|
||||
What can be done, but not essential.
|
||||
|
||||
* Figuring out the formats for the assets in the /assets/ folder.
|
||||
* Creating tools to modify assets
|
||||
|
||||
### Future
|
||||
|
||||
These features won't be complete anytime soon.
|
||||
|
||||
* Add support for the other 4 versions.
|
||||
# Diddy Kong Racing
|
||||
|
||||
This repo contains a work-in-progress decompilation of Diddy Kong Racing for the N64. You will need to have a original copy of the ROM to extract the game's assets.
|
||||
|
||||
Currently, only the US 1.0 version of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time.
|
||||
|
||||
<!-- README_SCORE_SUMMARY_BEGIN -->
|
||||
As of April 24, 2023, this is our current score:
|
||||
|
||||
    Decomp progress: 51.18%
|
||||
|
||||
    Documentation progress: 24.34%
|
||||
<!-- README_SCORE_SUMMARY_END -->
|
||||
|
||||
---
|
||||
|
||||
## Dependencies
|
||||
|
||||
* `libcapstone-dev`
|
||||
* `gcc`, Version 8.0 or higher
|
||||
* `make`, Version 4.2 or higher
|
||||
* `python3`
|
||||
* `wget`
|
||||
|
||||
`sudo apt install build-essential pkg-config git python3 wget libcapstone-dev`
|
||||
|
||||
### binutils
|
||||
|
||||
You are not required to install a binutils package, but it does speed up the initial setup if you do have it installed.
|
||||
|
||||
* Ubuntu/Debian (x86): `sudo apt install binutils-mips-linux-gnu`
|
||||
|
||||
## Setup / Building
|
||||
1. Install the dependencies
|
||||
2. Place the ROM file within the `baseroms` directory.
|
||||
**a.** The name of the ROM file does not matter, but it must end with one of these extensions: `.z64`, `.v64`, `.n64`, or `.rom`. It will be detected automatically from an md5 checksum.
|
||||
**b.** If you use a byte-swapped or little-endian ROM, then it will automatically be converted to a big-endian (.z64) ROM file.
|
||||
3. Run `make` in the main directory.
|
||||
**a.** Use the `-jN` argument to use `N` number of threads to speed up building. For example, if you have a system with 4 cores / 4 threads, you should do `make -j4`.
|
||||
|
||||
### Building on MacOS
|
||||
1. `brew install gcc capstone coreutils`
|
||||
2. Put GNU-coreutils `bin` on path using by adding `PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"` to your shell rcfile (or update any GNU-util usage in `Makefile` and `tools/Makefile` to use the `g`-prefixed versions).
|
||||
3. Download latest `macos` build of `ido-static-recomp` from [here](https://github.com/decompals/ido-static-recomp/releases/), and add `cp` the binaries to `tools/ido-static-recomp/build5.3/out`.
|
||||
4. Take a look at [this gist](https://gist.github.com/tonyspumoni/fc1b4c9217c5f2821a9fc4cbf69b51ef) to see what other updates are needed to get the build to pass, and apply them if they are relevant to your environment. You may need to add specific `-I` and `-L` flags to get things like `openssl` and `gcc-12` includes/libs included.
|
||||
5. `make` from repository root should work now.
|
||||
|
||||
## Modding
|
||||
If you are modifying the code in the repo, then you should add `NON_MATCHING=1` to the make command.
|
||||
Example: `make NON_MATCHING=1 -j4`
|
||||
|
||||
The `NON_MATCHING` define will include the functions that don't exactly match one-to-one, but should be no different functionality-wise. If you do notice any bugs that occur in a `NON_MATCHING` build that are not in the vanilla game, then please file an issue describing the bug. It would be helpful if you can track down which function is causing the bug, but that is not required.
|
||||
|
||||
## Style Guide
|
||||
|
||||
The style guide for the project can be found here: https://docs.google.com/document/d/1euQf8nwynGcCZL1MfoMaLs-XRvx3ejjj8fIfykUZ-NQ
|
||||
|
||||
If you see variables/functions/structs/etc. that doesn't follow these rules, then file an issue and we'll try to fix them.
|
||||
|
||||
## Scripts
|
||||
|
||||
There are some useful scripts that should be kept in mind when working on this repo.
|
||||
|
||||
---
|
||||
|
||||
#### `./extract.sh <version>`
|
||||
|
||||
This script will extract all the assets from a DKR ROM and place them into `/assets/` folder according to the config file within the `/extract-ver/` folder. The version parameter should either be `us_1.0`, `us_1.1`, `eu_1.0`, `eu_1.1`, or `jp`.
|
||||
|
||||
Example: `./extract.sh us_1.0`
|
||||
|
||||
---
|
||||
|
||||
#### `./diff.sh <function_name>`
|
||||
|
||||
Compares the assembly output of a function from a built ROM to the base ROM. Useful for decompiling.
|
||||
|
||||
Example: `./diff.sh menu_init`
|
||||
|
||||
---
|
||||
|
||||
#### `./rename.sh <old_name> <new_name>`
|
||||
|
||||
This script will rename an existing symbol, file name, and/or folder name within the repo with a new one.
|
||||
|
||||
Example: `./rename.sh D_A4001000 SP_IMEM`
|
||||
|
||||
---
|
||||
|
||||
#### `./get_symbol.sh <ram_address>|<symbol>`
|
||||
|
||||
Given either a RAM address or symbol, returns its `(symbol, address)` pairing as defined in `/build/us_1.0/dkr.map`. If specified, the RAM address must be in base 16. The `0x` prefix is not required.
|
||||
|
||||
Example:
|
||||
```
|
||||
./get_symbol.sh 0xA4001000
|
||||
0xA4001000 = SP_IMEM
|
||||
|
||||
./get_symbol.sh osCicId
|
||||
0x80000310 = osCicId
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `./score.sh`
|
||||
|
||||
Prints out the current completion percentage of the decomp. You do need to have an `OK` build for this to work properly.
|
||||
|
||||
The scoring is split into 2 sections:
|
||||
1. Assembly to C Decompilation (Adventure One)
|
||||
2. Cleanup and Documentation (Adventure Two)
|
||||
|
||||
Show scores for Adventure One & Adventure Two: `./score.sh`
|
||||
Show score for Adventure One only: `./score.sh -a 1`
|
||||
Show score for Adventure Two only: `./score.sh -a 2`
|
||||
Show top 10 files remaining: `./score.sh -t 10`
|
||||
|
||||
To make progress in Adventure 2, a function must be properly named (must not start with `func_`) and also include a doxygen comment above it.
|
||||
|
||||
For example:
|
||||
```c
|
||||
/**
|
||||
* Returns 1 if Drumstick is avaliable to use, or 0 if not.
|
||||
*/
|
||||
s32 is_drumstick_unlocked(void) {
|
||||
return gActiveMagicCodes & 2;
|
||||
}
|
||||
```
|
||||
|
||||
<!-- README_SCORE_BEGIN -->
|
||||
As of April 24, 2023, this is our current score:
|
||||
```
|
||||
=================================================
|
||||
ADVENTURE ONE (ASM -> C Decompilation)
|
||||
---------------- 51.18% Complete ----------------
|
||||
# Decompiled functions: 1501
|
||||
# GLOBAL_ASM remaining: 331
|
||||
# NON_MATCHING functions: 12
|
||||
# NON_EQUIVALENT WIP functions: 64
|
||||
------------------ Game Status ------------------
|
||||
Balloons: 25/47, Keys: 3/4, Trophies: 2/5
|
||||
T.T. Amulets: 2/4, Wizpig Amulets: 2/4
|
||||
-------------------------------------------------
|
||||
We are racing in Treasure Caves. (Lap 3/3)
|
||||
=================================================
|
||||
ADVENTURE TWO (Cleanup & Documentation)
|
||||
---------------- 25.01% Complete ----------------
|
||||
# Documented functions: 511
|
||||
# Undocumented remaining: 1053
|
||||
------------------ Game Status ------------------
|
||||
Balloons: 12/47, Keys: 1/4, Trophies: 1/5
|
||||
T.T. Amulets: 1/4, Wizpig Amulets: 1/4
|
||||
-------------------------------------------------
|
||||
We are racing Taj in the Car Challenge. (Lap 2/3)
|
||||
=================================================
|
||||
```
|
||||
<!-- README_SCORE_END -->
|
||||
|
||||
---
|
||||
|
||||
## TODO list
|
||||
|
||||
### Major
|
||||
|
||||
What should be focused on.
|
||||
|
||||
* Decompiling the non-matching asm files into matching C functions.
|
||||
* Documenting variables & functions
|
||||
|
||||
### Minor
|
||||
|
||||
What can be done, but not essential.
|
||||
|
||||
* Figuring out the formats for the assets in the /assets/ folder.
|
||||
* Creating tools to modify assets
|
||||
|
||||
### Future
|
||||
|
||||
These features won't be complete anytime soon.
|
||||
|
||||
* Add support for the other 4 versions.
|
||||
|
||||
@@ -79,11 +79,11 @@ glabel func_800452A0
|
||||
/* 045F9C 8004539C 8FBE0080 */ lw $fp, 0x80($sp)
|
||||
/* 045FA0 800453A0 24170003 */ li $s7, 3
|
||||
.L800453A4:
|
||||
/* 045FA4 800453A4 3C058012 */ lui $a1, %hi(D_8011D588+3) # $a1, 0x8012
|
||||
/* 045FA4 800453A4 3C058012 */ lui $a1, %hi(gEggChallengeFlags+3) # $a1, 0x8012
|
||||
/* 045FA8 800453A8 2411FFFF */ li $s1, -1
|
||||
/* 045FAC 800453AC 00008025 */ move $s0, $zero
|
||||
/* 045FB0 800453B0 00009025 */ move $s2, $zero
|
||||
/* 045FB4 800453B4 24A5D58B */ addiu $a1, %lo(D_8011D588+3) # addiu $a1, $a1, -0x2a75
|
||||
/* 045FB4 800453B4 24A5D58B */ addiu $a1, %lo(gEggChallengeFlags+3) # addiu $a1, $a1, -0x2a75
|
||||
/* 045FB8 800453B8 02E02025 */ move $a0, $s7
|
||||
/* 045FBC 800453BC 00009825 */ move $s3, $zero
|
||||
.L800453C0:
|
||||
@@ -168,8 +168,8 @@ glabel func_800452A0
|
||||
/* 0460D8 800454D8 82A20002 */ lb $v0, 2($s5)
|
||||
/* 0460DC 800454DC 24010001 */ li $at, 1
|
||||
/* 0460E0 800454E0 10400007 */ beqz $v0, .L80045500
|
||||
/* 0460E4 800454E4 3C0A8012 */ lui $t2, %hi(D_8011D588) # $t2, 0x8012
|
||||
/* 0460E8 800454E8 814AD588 */ lb $t2, %lo(D_8011D588)($t2)
|
||||
/* 0460E4 800454E4 3C0A8012 */ lui $t2, %hi(gEggChallengeFlags) # $t2, 0x8012
|
||||
/* 0460E8 800454E8 814AD588 */ lb $t2, %lo(gEggChallengeFlags)($t2)
|
||||
/* 0460EC 800454EC 00000000 */ nop
|
||||
/* 0460F0 800454F0 314B0040 */ andi $t3, $t2, 0x40
|
||||
/* 0460F4 800454F4 11600002 */ beqz $t3, .L80045500
|
||||
@@ -177,8 +177,8 @@ glabel func_800452A0
|
||||
/* 0460FC 800454FC 00008825 */ move $s1, $zero
|
||||
.L80045500:
|
||||
/* 046100 80045500 10410007 */ beq $v0, $at, .L80045520
|
||||
/* 046104 80045504 3C0C8012 */ lui $t4, %hi(D_8011D588+1) # $t4, 0x8012
|
||||
/* 046108 80045508 818CD589 */ lb $t4, %lo(D_8011D588+1)($t4)
|
||||
/* 046104 80045504 3C0C8012 */ lui $t4, %hi(gEggChallengeFlags+1) # $t4, 0x8012
|
||||
/* 046108 80045508 818CD589 */ lb $t4, %lo(gEggChallengeFlags+1)($t4)
|
||||
/* 04610C 8004550C 00000000 */ nop
|
||||
/* 046110 80045510 318D0040 */ andi $t5, $t4, 0x40
|
||||
/* 046114 80045514 11A00003 */ beqz $t5, .L80045524
|
||||
@@ -188,8 +188,8 @@ glabel func_800452A0
|
||||
/* 046120 80045520 24010002 */ li $at, 2
|
||||
.L80045524:
|
||||
/* 046124 80045524 10410007 */ beq $v0, $at, .L80045544
|
||||
/* 046128 80045528 3C0E8012 */ lui $t6, %hi(D_8011D588+2) # $t6, 0x8012
|
||||
/* 04612C 8004552C 81CED58A */ lb $t6, %lo(D_8011D588+2)($t6)
|
||||
/* 046128 80045528 3C0E8012 */ lui $t6, %hi(gEggChallengeFlags+2) # $t6, 0x8012
|
||||
/* 04612C 8004552C 81CED58A */ lb $t6, %lo(gEggChallengeFlags+2)($t6)
|
||||
/* 046130 80045530 00000000 */ nop
|
||||
/* 046134 80045534 31CF0040 */ andi $t7, $t6, 0x40
|
||||
/* 046138 80045538 11E00003 */ beqz $t7, .L80045548
|
||||
@@ -199,8 +199,8 @@ glabel func_800452A0
|
||||
/* 046144 80045544 24010003 */ li $at, 3
|
||||
.L80045548:
|
||||
/* 046148 80045548 10410009 */ beq $v0, $at, .L80045570
|
||||
/* 04614C 8004554C 3C188012 */ lui $t8, %hi(D_8011D588+3) # $t8, 0x8012
|
||||
/* 046150 80045550 8318D58B */ lb $t8, %lo(D_8011D588+3)($t8)
|
||||
/* 04614C 8004554C 3C188012 */ lui $t8, %hi(gEggChallengeFlags+3) # $t8, 0x8012
|
||||
/* 046150 80045550 8318D58B */ lb $t8, %lo(gEggChallengeFlags+3)($t8)
|
||||
/* 046154 80045554 00000000 */ nop
|
||||
/* 046158 80045558 33190040 */ andi $t9, $t8, 0x40
|
||||
/* 04615C 8004555C 13200005 */ beqz $t9, .L80045574
|
||||
|
||||
+6
-6
@@ -159,7 +159,7 @@ typedef enum MiscAsset {
|
||||
MISC_ASSET_UNK35,
|
||||
MISC_ASSET_UNK36,
|
||||
MISC_ASSET_UNK37,
|
||||
MISC_ASSET_UNK38,
|
||||
MISC_ASSET_RACER_HITBOX_SIZE,
|
||||
MISC_ASSET_UNK39,
|
||||
MISC_ASSET_UNK3A,
|
||||
MISC_ASSET_UNK3B,
|
||||
@@ -188,11 +188,11 @@ typedef enum SurfaceType {
|
||||
SURFACE_SAND,
|
||||
SURFACE_ZIP_PAD,
|
||||
SURFACE_STONE,
|
||||
SURFACE_UNK05,
|
||||
SURFACE_UNK06,
|
||||
SURFACE_UNK07,
|
||||
SURFACE_UNK08,
|
||||
SURFACE_UNK09,
|
||||
SURFACE_EGG_SPAWN,
|
||||
SURFACE_EGG_01,
|
||||
SURFACE_EGG_02,
|
||||
SURFACE_EGG_03,
|
||||
SURFACE_EGG_04,
|
||||
SURFACE_FROZEN_WATER,
|
||||
SURFACE_UNK0B,
|
||||
SURFACE_TAJ_PAD,
|
||||
|
||||
@@ -15,9 +15,9 @@ typedef struct LevelObjectEntry_Racer {
|
||||
typedef struct LevelObjectEntry_Scenery {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x09 */ u8 radius;
|
||||
/* 0x0A */ u8 unkA;
|
||||
/* 0x0B */ u8 unkB;
|
||||
/* 0x0B */ u8 solid;
|
||||
} LevelObjectEntry_Scenery;
|
||||
|
||||
typedef struct LevelObjectEntry_Fish {
|
||||
@@ -28,9 +28,9 @@ typedef struct LevelObjectEntry_Fish {
|
||||
|
||||
typedef struct LevelObjectEntry_Animator {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ s8 unk8;
|
||||
/* 0x09 */ s8 unk9;
|
||||
/* 0x0A */ s8 unkA;
|
||||
/* 0x08 */ s8 batchID;
|
||||
/* 0x09 */ s8 speedFactorX;
|
||||
/* 0x0A */ s8 speedfactorY;
|
||||
} LevelObjectEntry_Animator;
|
||||
|
||||
typedef struct LevelObjectEntry_Weapon {
|
||||
@@ -78,7 +78,7 @@ typedef struct LevelObjectEntry_Exit {
|
||||
|
||||
typedef struct LevelObjectEntry_Audio {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u16 unk8;
|
||||
/* 0x08 */ u16 soundId;
|
||||
/* 0x0A */ u16 unkA;
|
||||
/* 0x0C */ u8 unkC;
|
||||
/* 0x0D */ u8 unkD;
|
||||
@@ -121,7 +121,7 @@ typedef struct LevelObjectEntry_Checkpoint {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 scale;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x0A */ u8 yRotation;
|
||||
/* 0x0A */ u8 angleY;
|
||||
/* 0x0B */ s8 unkB;
|
||||
/* 0x0C */ s8 unkC;
|
||||
/* 0x0D */ s8 unkD;
|
||||
@@ -204,7 +204,7 @@ typedef struct LevelObjectEntry_Unknown25 {
|
||||
typedef struct LevelObjectEntry_SkyControl {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x09 */ u8 radius;
|
||||
} LevelObjectEntry_SkyControl;
|
||||
|
||||
typedef struct LevelObjectEntry_AudioReverb {
|
||||
@@ -216,21 +216,21 @@ typedef struct LevelObjectEntry_AudioReverb {
|
||||
|
||||
typedef struct LevelObjectEntry_Torch_Mist {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x08 */ u8 animSpeed;
|
||||
/* 0x09 */ u8 radius;
|
||||
} LevelObjectEntry_Torch_Mist;
|
||||
|
||||
typedef struct LevelObjectEntry_TexScroll {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ s16 unk8;
|
||||
/* 0x08 */ s16 numTextures;
|
||||
/* 0x0A */ s8 unkA;
|
||||
/* 0x0B */ s8 unkB;
|
||||
} LevelObjectEntry_TexScroll;
|
||||
|
||||
typedef struct LevelObjectEntry_ModeChange {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x08 */ u8 radius;
|
||||
/* 0x09 */ u8 angleY;
|
||||
/* 0x0A */ u8 vehicleID;
|
||||
} LevelObjectEntry_ModeChange;
|
||||
|
||||
@@ -252,7 +252,7 @@ typedef struct LevelObjectEntry_Buoy_PirateShip {
|
||||
|
||||
typedef struct LevelObjectEntry_Weather {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ s16 unk8;
|
||||
/* 0x08 */ s16 radius;
|
||||
/* 0x0A */ s16 unkA;
|
||||
/* 0x0C */ s16 unkC;
|
||||
/* 0x0E */ s16 unkE;
|
||||
@@ -284,8 +284,8 @@ typedef struct LevelObjectEntry_SeaMonster {
|
||||
|
||||
typedef struct LevelObjectEntry_Bonus {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x08 */ u8 radius;
|
||||
/* 0x09 */ u8 angleY;
|
||||
/* 0x0A */ u8 unkA;
|
||||
} LevelObjectEntry_Bonus;
|
||||
|
||||
@@ -295,7 +295,7 @@ typedef struct LevelObjectEntry_LensFlare {
|
||||
|
||||
typedef struct LevelObjectEntry_LensFlareSwitch {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ s16 unk8;
|
||||
/* 0x08 */ s16 radius;
|
||||
} LevelObjectEntry_LensFlareSwitch;
|
||||
|
||||
typedef struct LevelObjectEntry_CollectEgg {
|
||||
@@ -374,8 +374,8 @@ typedef struct LevelObjectEntry_Trigger {
|
||||
typedef struct LevelObjectEntry_AirZippers_WaterZippers {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x0A */ u8 unkA;
|
||||
/* 0x09 */ u8 radius;
|
||||
/* 0x0A */ u8 angleY;
|
||||
} LevelObjectEntry_AirZippers_WaterZippers;
|
||||
|
||||
typedef struct LevelObjectEntry_Unknown58 {
|
||||
@@ -400,7 +400,7 @@ typedef struct LevelObjectEntry_Parkwarden {
|
||||
|
||||
typedef struct LevelObjectEntry_WorldKey {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x08 */ u8 keyID;
|
||||
} LevelObjectEntry_WorldKey;
|
||||
|
||||
typedef struct LevelObjectEntry_BananaCreator {
|
||||
@@ -415,14 +415,14 @@ typedef struct LevelObjectEntry_TreasureSucker {
|
||||
typedef struct LevelObjectEntry_Log {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x0A */ u8 unkA;
|
||||
/* 0x09 */ u8 radius;
|
||||
/* 0x0A */ u8 angleY;
|
||||
} LevelObjectEntry_Log;
|
||||
|
||||
typedef struct LevelObjectEntry_LavaSpurt {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x08 */ u8 delayTimer;
|
||||
/* 0x09 */ u8 initialTimer;
|
||||
} LevelObjectEntry_LavaSpurt;
|
||||
|
||||
typedef struct LevelObjectEntry_PosArrow {
|
||||
@@ -489,8 +489,8 @@ typedef struct LevelObjectEntry_Lasergun {
|
||||
/* 0x09 */ u8 angleY;
|
||||
/* 0x0A */ s8 targeting;
|
||||
/* 0x0B */ s8 fireRate;
|
||||
/* 0x0C */ u8 unkC;
|
||||
/* 0x0D */ u8 unkD;
|
||||
/* 0x0C */ u8 laserDuration;
|
||||
/* 0x0D */ u8 radius;
|
||||
} LevelObjectEntry_Lasergun;
|
||||
|
||||
typedef struct LevelObjectEntry_GroundZipper {
|
||||
@@ -535,14 +535,14 @@ typedef struct LevelObjectEntry_Snowball {
|
||||
|
||||
typedef struct LevelObjectEntry_Teleport {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ s8 unk8;
|
||||
/* 0x08 */ s8 levelID;
|
||||
} LevelObjectEntry_Teleport;
|
||||
|
||||
typedef struct LevelObjectEntry_Lighthouse_RocketSignpost {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ u8 unk8;
|
||||
/* 0x09 */ u8 unk9;
|
||||
/* 0x0A */ u8 unkA;
|
||||
/* 0x09 */ u8 radius;
|
||||
/* 0x0A */ u8 angleY;
|
||||
} LevelObjectEntry_Lighthouse_RocketSignpost;
|
||||
|
||||
typedef struct LevelObjectEntry_Windsail {
|
||||
@@ -561,8 +561,8 @@ typedef struct LevelObjectEntry_Fireball_Octoweapon {
|
||||
|
||||
typedef struct LevelObjectEntry_Frog {
|
||||
/* 0x00 */ LevelObjectEntryCommon common;
|
||||
/* 0x08 */ s16 unk8;
|
||||
/* 0x0A */ u8 unkA;
|
||||
/* 0x08 */ s16 homeRadius;
|
||||
/* 0x0A */ u8 drumstick;
|
||||
} LevelObjectEntry_Frog;
|
||||
|
||||
typedef struct LevelObjectEntry_SilverCoinAdv2 {
|
||||
@@ -577,7 +577,7 @@ typedef struct LevelObjectEntry_TTDoor {
|
||||
/* 0x0B */ u8 unkB;
|
||||
/* 0x0C */ u8 unkC;
|
||||
/* 0x0D */ u8 padD;
|
||||
/* 0x0E */ s8 unkE;
|
||||
/* 0x0E */ s8 doorID;
|
||||
} LevelObjectEntry_TTDoor;
|
||||
|
||||
typedef struct LevelObjectEntry_MidiFadePoint {
|
||||
|
||||
+45
-45
@@ -644,7 +644,7 @@ typedef struct ObjectHeader24 {
|
||||
|
||||
typedef struct ObjectHeader {
|
||||
u8 pad0[0x4];
|
||||
/* 0x04 */ f32 unk4;
|
||||
/* 0x04 */ f32 shadowScale;
|
||||
/* 0x08 */ f32 unk8;
|
||||
/* 0x0C */ f32 scale;
|
||||
/* 0x10 */ s32 *modelIds;
|
||||
@@ -718,11 +718,11 @@ typedef struct ObjectInteraction {
|
||||
f32 x_position;
|
||||
f32 y_position;
|
||||
f32 z_position;
|
||||
u8 unk10;
|
||||
u8 hitboxRadius;
|
||||
u8 unk11;
|
||||
u8 unk12;
|
||||
u8 pushForce;
|
||||
u8 distance;
|
||||
s16 unk14;
|
||||
s16 flags;
|
||||
s8 unk16;
|
||||
s8 unk17;
|
||||
} ObjectInteraction;
|
||||
@@ -799,8 +799,8 @@ typedef struct Object_LaserGun {
|
||||
/* 0x0C */ s16 fireTimer;
|
||||
/* 0x0E */ s8 targeting;
|
||||
/* 0x0F */ s8 fireRate;
|
||||
/* 0x10 */ u8 unk10;
|
||||
/* 0x11 */ u8 unk11;
|
||||
/* 0x10 */ u8 laserDuration;
|
||||
/* 0x11 */ u8 radius;
|
||||
} Object_LaserGun;
|
||||
|
||||
typedef struct Object_Laser {
|
||||
@@ -817,8 +817,8 @@ typedef struct Object_TrophyCabinet {
|
||||
typedef struct Object_Animator {
|
||||
/* 0x00 */ s16 segmentId;
|
||||
/* 0x02 */ s16 batchId;
|
||||
/* 0x04 */ s16 xSpeedFactor;
|
||||
/* 0x06 */ s16 ySpeedFactor;
|
||||
/* 0x04 */ s16 speedFactorX;
|
||||
/* 0x06 */ s16 speedFactorY;
|
||||
/* 0x08 */ s16 xSpeed;
|
||||
/* 0x0A */ s16 ySpeed;
|
||||
} Object_Animator;
|
||||
@@ -890,15 +890,15 @@ typedef struct Object_EffectBox {
|
||||
|
||||
typedef struct Object_EggCreator {
|
||||
/* 0x0 */ u8 pad0[4];
|
||||
/* 0x4 */ struct Object *unk4;
|
||||
/* 0x4 */ struct Object *currentEgg;
|
||||
} Object_EggCreator;
|
||||
|
||||
typedef struct Object_CollectEgg {
|
||||
/* 0x0 */ u8 pad0[4];
|
||||
/* 0x4 */ struct Object *unk4;
|
||||
/* 0x8 */ s16 unk8;
|
||||
/* 0xA */ s8 unkA;
|
||||
/* 0xB */ s8 unkB;
|
||||
/* 0x8 */ s16 hatchTimer;
|
||||
/* 0xA */ s8 racerID;
|
||||
/* 0xB */ s8 status;
|
||||
} Object_CollectEgg;
|
||||
|
||||
typedef struct Object_UnkId58 {
|
||||
@@ -937,7 +937,7 @@ typedef struct Object_TTDoor {
|
||||
/* 0x08 */ s32 unk8;
|
||||
/* 0x0C */ s16 unkC;
|
||||
/* 0x0C */ s8 unkE;
|
||||
/* 0x0F */ u8 unkF;
|
||||
/* 0x0F */ u8 doorID;
|
||||
/* 0x10 */ u8 pad10[2];
|
||||
/* 0x12 */ u8 unk12;
|
||||
/* 0x13 */ s8 unk13;
|
||||
@@ -979,7 +979,7 @@ typedef struct Object_AudioReverb {
|
||||
} Object_AudioReverb;
|
||||
|
||||
typedef struct Object_TexScroll {
|
||||
/* 0x0 */ s16 unk0;
|
||||
/* 0x0 */ s16 numTextures;
|
||||
/* 0x2 */ s16 pad2;
|
||||
/* 0x4 */ s16 unk4;
|
||||
/* 0x6 */ s16 unk6;
|
||||
@@ -988,23 +988,23 @@ typedef struct Object_TexScroll {
|
||||
} Object_TexScroll;
|
||||
|
||||
typedef struct Object_Frog {
|
||||
/* 0x00 */ f32 unk0;
|
||||
/* 0x04 */ f32 unk4;
|
||||
/* 0x08 */ f32 unk8;
|
||||
/* 0x0C */ f32 unkC;
|
||||
/* 0x10 */ f32 unk10;
|
||||
/* 0x14 */ u8 unk14;
|
||||
/* 0x15 */ u8 unk15;
|
||||
/* 0x16 */ s16 unk16;
|
||||
/* 0x18 */ s8 unk18;
|
||||
/* 0x19 */ s8 unk19;
|
||||
/* 0x1A */ s16 unk1A;
|
||||
/* 0x1C */ f32 unk1C;
|
||||
/* 0x20 */ f32 unk20;
|
||||
/* 0x24 */ f32 unk24;
|
||||
/* 0x28 */ f32 unk28;
|
||||
/* 0x2C */ f32 unk2C;
|
||||
/* 0x30 */ f32 unk30;
|
||||
/* 0x00 */ f32 homeX;
|
||||
/* 0x04 */ f32 homeY;
|
||||
/* 0x08 */ f32 homeZ;
|
||||
/* 0x0C */ f32 homeRadius;
|
||||
/* 0x10 */ f32 homeRadiusSquare;
|
||||
/* 0x14 */ u8 action;
|
||||
/* 0x15 */ u8 drumstick;
|
||||
/* 0x16 */ s16 hopTimer;
|
||||
/* 0x18 */ s8 hopFrame; // Animation frame while jumping
|
||||
/* 0x19 */ s8 squishCooldown;
|
||||
/* 0x1A */ s16 hopDirection;
|
||||
/* 0x1C */ f32 forwardVel;
|
||||
/* 0x20 */ f32 hopStartX;
|
||||
/* 0x24 */ f32 hopStartZ;
|
||||
/* 0x28 */ f32 hopTargetX;
|
||||
/* 0x2C */ f32 hopTargetZ;
|
||||
/* 0x30 */ f32 scaleY;
|
||||
} Object_Frog;
|
||||
|
||||
typedef struct Object_Wizpig2 {
|
||||
@@ -1103,7 +1103,7 @@ typedef struct Object_Racer {
|
||||
/* 0x140 */ struct Object *magnetTargetObj;
|
||||
/* 0x144 */ struct Object *held_obj;
|
||||
/* 0x148 */ struct Object *approachTarget;
|
||||
/* 0x14C */ struct Object *unk14C;
|
||||
/* 0x14C */ struct Object *zipperObj;
|
||||
/* 0x150 */ struct Object *unk150;
|
||||
/* 0x154 */ struct Object *unk154;
|
||||
/* 0x158 */ struct Object *unk158;
|
||||
@@ -1170,7 +1170,7 @@ typedef struct Object_Racer {
|
||||
/* 0x1CC */ s8 aiSkill;
|
||||
/* 0x1CD */ u8 unk1CD;
|
||||
/* 0x1CE */ u8 unk1CE;
|
||||
/* 0x1CF */ s8 unk1CF;
|
||||
/* 0x1CF */ s8 eggHudCounter;
|
||||
/* 0x1D0 */ s8 spectateCamID;
|
||||
/* 0x1D1 */ s8 unk1D1;
|
||||
/* 0x1D2 */ s8 unk1D2;
|
||||
@@ -1205,7 +1205,7 @@ typedef struct Object_Racer {
|
||||
/* 0x1F2 */ u8 unk1F2;
|
||||
/* 0x1F3 */ u8 unk1F3;
|
||||
/* 0x1F4 */ u8 startInput;
|
||||
/* 0x1F5 */ u8 unk1F5;
|
||||
/* 0x1F5 */ u8 zipperDirCorrection;
|
||||
/* 0x1F6 */ s8 unk1F6;
|
||||
/* 0x1F7 */ u8 transparency;
|
||||
/* 0x290 */ u8 indicator_type;
|
||||
@@ -1243,20 +1243,20 @@ typedef struct Object_Racer {
|
||||
} Object_Racer;
|
||||
|
||||
typedef struct Object_Bonus {
|
||||
/* 0x00 */ f32 unk0;
|
||||
/* 0x04 */ f32 unk4;
|
||||
/* 0x08 */ f32 unk8;
|
||||
/* 0x0C */ f32 unkC;
|
||||
/* 0x10 */ s32 unk10;
|
||||
/* 0x00 */ f32 directionX;
|
||||
/* 0x04 */ f32 directionY;
|
||||
/* 0x08 */ f32 directionZ;
|
||||
/* 0x0C */ f32 rotationDiff; // Rotational offset, to test intersection when the exit is rotated.
|
||||
/* 0x10 */ s32 radius; // Activation radius.
|
||||
/* 0x14 */ s8 unk14;
|
||||
} Object_Bonus;
|
||||
|
||||
typedef struct Object_ModeChange {
|
||||
/* 0x00 */ f32 unk0;
|
||||
/* 0x04 */ f32 unk4;
|
||||
/* 0x08 */ f32 unk8;
|
||||
/* 0x0C */ f32 unkC;
|
||||
/* 0x10 */ s32 unk10;
|
||||
/* 0x00 */ f32 directionX;
|
||||
/* 0x04 */ f32 directionY;
|
||||
/* 0x08 */ f32 directionZ;
|
||||
/* 0x0C */ f32 rotationDiff; // Rotational offset, to test intersection when the exit is rotated.
|
||||
/* 0x10 */ s32 radius; // Activation radius.
|
||||
/* 0x14 */ u8 vehicleID;
|
||||
} Object_ModeChange;
|
||||
|
||||
@@ -1412,7 +1412,7 @@ typedef struct Object_Log {
|
||||
|
||||
typedef struct Object_Fireball_Octoweapon {
|
||||
u8 pad0[0x1C];
|
||||
s32 unk1C;
|
||||
s32 soundMask;
|
||||
} Object_Fireball_Octoweapon;
|
||||
|
||||
typedef struct Object_AnimatedObject {
|
||||
|
||||
+1
-1
@@ -6,6 +6,6 @@
|
||||
|
||||
void func_80031130(s32, f32 *, f32*, s32);
|
||||
s32 func_800314DC(LevelModelSegmentBoundingBox *segment, s32 x1, s32 z1, s32 x2, s32 z2);
|
||||
s32 func_80031600(f32 *pos, f32 *pos2, f32*, s8 *surface, s32, s32 *);
|
||||
s32 func_80031600(f32 *pos, f32 *pos2, f32 *radius, s8 *surface, s32, s32 *hasCollision);
|
||||
|
||||
#endif
|
||||
|
||||
+19
-12
@@ -114,7 +114,7 @@ FadeTransition D_800DD408 = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FAD
|
||||
UNUSED char *D_800DD410[3] = {
|
||||
(char *)sDebugCarString, (char *)sDebugHovercraftString, (char *)sDebugPlaneString
|
||||
};
|
||||
FadeTransition D_800DD41C = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_BLACK, 30, -1);
|
||||
FadeTransition gLevelFadeOutTransition = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_BLACK, 30, -1);
|
||||
FadeTransition D_800DD424 = FADE_TRANSITION(FADE_FULLSCREEN, FADE_FLAG_NONE, FADE_COLOR_BLACK, 260, -1);
|
||||
/*******************************/
|
||||
|
||||
@@ -166,7 +166,7 @@ Vehicle gLevelDefaultVehicleID;
|
||||
Vehicle D_8012351C; // Looks to be the current level's vehicle ID.
|
||||
s32 sBootDelayTimer;
|
||||
s8 D_80123524;
|
||||
s8 D_80123525;
|
||||
s8 gNextMap;
|
||||
UNUSED s8 D_80123526; // Set to 0 then never used.
|
||||
s32 gCurrNumF3dCmdsPerPlayer;
|
||||
s32 gCurrNumHudMatPerPlayer;
|
||||
@@ -1359,7 +1359,7 @@ void ingame_logic_loop(s32 updateRate) {
|
||||
// fall-through
|
||||
case 4:
|
||||
D_801234F8 = 1;
|
||||
gPlayableMapId = D_80123525;
|
||||
gPlayableMapId = gNextMap;
|
||||
D_80123504 = 0;
|
||||
D_80123508 = 0;
|
||||
buttonHeldInputs = 0;
|
||||
@@ -2166,7 +2166,7 @@ void func_8006F140(s32 arg0) {
|
||||
D_80123524 = 0;
|
||||
D_80123526 = 0;
|
||||
if (arg0 == 1) { //FADE_BARNDOOR_HORIZONTAL?
|
||||
transition_begin(&D_800DD41C);
|
||||
transition_begin(&gLevelFadeOutTransition);
|
||||
}
|
||||
if (arg0 == 3) { //FADE_CIRCLE?
|
||||
gLevelLoadTimer = 282;
|
||||
@@ -2184,7 +2184,7 @@ void func_8006F140(s32 arg0) {
|
||||
|
||||
UNUSED void func_8006F20C(void) {
|
||||
if (gLevelLoadTimer == 0) {
|
||||
transition_begin(&D_800DD41C);
|
||||
transition_begin(&gLevelFadeOutTransition);
|
||||
gLevelLoadTimer = 40;
|
||||
D_80123524 = 1;
|
||||
}
|
||||
@@ -2192,28 +2192,35 @@ UNUSED void func_8006F20C(void) {
|
||||
|
||||
void func_8006F254(void) {
|
||||
if (gLevelLoadTimer == 0) {
|
||||
transition_begin(&D_800DD41C);
|
||||
transition_begin(&gLevelFadeOutTransition);
|
||||
gLevelLoadTimer = 40;
|
||||
D_80123524 = 2;
|
||||
}
|
||||
}
|
||||
|
||||
void func_8006F29C(void) {
|
||||
/**
|
||||
* Check if all available trophy races and Wizpig 1 has been beaten, and if the cutscene has not yet played.
|
||||
*/
|
||||
void begin_lighthouse_rocket_cutscene(void) {
|
||||
if (gLevelLoadTimer == 0) {
|
||||
if ((gSettingsPtr->trophies & 0xFF) == 0xFF && !(gSettingsPtr->cutsceneFlags & CUTSCENE_LIGHTHOUSE_ROCKET) && gSettingsPtr->bosses & 1) {
|
||||
gSettingsPtr->cutsceneFlags |= CUTSCENE_LIGHTHOUSE_ROCKET;
|
||||
transition_begin(&D_800DD41C);
|
||||
transition_begin(&gLevelFadeOutTransition);
|
||||
gLevelLoadTimer = 40;
|
||||
D_80123525 = 0x2D;
|
||||
gNextMap = ASSET_LEVEL_ROCKETSEQUENCE;
|
||||
D_80123524 = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_8006F338(s32 arg0) {
|
||||
/**
|
||||
* Begin a transition, then set the next level to the passed argument.
|
||||
* This is used only to warp to Future Fun Land from the hub area.
|
||||
*/
|
||||
void begin_level_teleport(s32 levelID) {
|
||||
if (gLevelLoadTimer == 0) {
|
||||
D_80123525 = arg0;
|
||||
transition_begin(&D_800DD41C);
|
||||
gNextMap = levelID;
|
||||
transition_begin(&gLevelFadeOutTransition);
|
||||
gLevelLoadTimer = 40;
|
||||
D_80123524 = 4;
|
||||
}
|
||||
|
||||
+2
-2
@@ -148,8 +148,8 @@ s32 check_dmem_validity(void);
|
||||
void func_8006F140(s32 arg0);
|
||||
void func_8006F20C(void);
|
||||
void func_8006F254(void);
|
||||
void func_8006F29C(void);
|
||||
void func_8006F338(s32 arg0);
|
||||
void begin_lighthouse_rocket_cutscene(void);
|
||||
void begin_level_teleport(s32 arg0);
|
||||
void func_8006F388(u8 arg0);
|
||||
void func_8006F398(void);
|
||||
void set_frame_blackout_timer(void);
|
||||
|
||||
+619
-493
File diff suppressed because it is too large
Load Diff
+18
-10
@@ -51,6 +51,22 @@ enum SilvereCoinBehaviours {
|
||||
SILVER_COIN_INACTIVE
|
||||
};
|
||||
|
||||
enum EggPickupStatus {
|
||||
EGG_SPAWNED,
|
||||
EGG_UNK_01,
|
||||
EGG_MOVING,
|
||||
EGG_IN_BASE,
|
||||
EGG_HATCHED
|
||||
};
|
||||
|
||||
enum FrogActions {
|
||||
FROG_IDLE,
|
||||
FROG_HOP,
|
||||
FROG_SQUISH,
|
||||
FROG_FLAT,
|
||||
FROG_UNSQUISH
|
||||
};
|
||||
|
||||
typedef struct Object78_80033DD0 {
|
||||
s32 *unk0;
|
||||
s16 unk4;
|
||||
@@ -64,14 +80,6 @@ typedef struct unk80034B4C {
|
||||
s32 unk78;
|
||||
} unk80034B4C;
|
||||
|
||||
typedef struct unk8003564C {
|
||||
s8 unk0;
|
||||
s8 unk1;
|
||||
s16 unk2;
|
||||
s16 unk4;
|
||||
s16 unk6;
|
||||
} unk8003564C;
|
||||
|
||||
typedef struct unk80035E20 {
|
||||
u8 pad0[0x40];
|
||||
s32 unk40;
|
||||
@@ -243,8 +251,8 @@ typedef struct Object_78_Banana {
|
||||
|
||||
typedef struct Object_LevelName_78 {
|
||||
f32 radius;
|
||||
s16 unk4;
|
||||
s16 unk6;
|
||||
s16 levelID;
|
||||
s16 opacity;
|
||||
} Object_LevelName_78;
|
||||
|
||||
// Unsure about the signed/unsigned with these arrays.
|
||||
|
||||
+7
-7
@@ -868,7 +868,7 @@ s32 init_object_shadow(Object *obj, ShadowData *shadow) {
|
||||
shadow->texture = (TextureHeader *) load_texture((s32) ((ObjectHeader *) objHeader)->unk34);
|
||||
objHeader = ((ObjectSegment *) obj)->header;
|
||||
}
|
||||
shadow->scale = (f32) objHeader->unk4;
|
||||
shadow->scale = objHeader->shadowScale;
|
||||
shadow->unk8 = -1;
|
||||
D_8011AE50 = (s32) shadow->texture;
|
||||
if (((ObjectSegment *) obj)->header->unk32 && shadow->texture == NULL) {
|
||||
@@ -2039,7 +2039,7 @@ void func_800155B8(void) {
|
||||
objsWithInteractives++;
|
||||
if (objInteract->unk11 != 2) {
|
||||
objInteract->obj = NULL;
|
||||
objInteract->unk14 &= ~0x48;
|
||||
objInteract->flags &= ~(INTERACT_FLAGS_COLLIDED | INTERACT_FLAGS_PUSHING);
|
||||
objInteract->distance = 0xFF;
|
||||
}
|
||||
}
|
||||
@@ -2055,18 +2055,18 @@ void func_800155B8(void) {
|
||||
D_8011AE6C[D_8011AE70] = obj;
|
||||
D_8011AE70++;
|
||||
}
|
||||
if (objInteract->unk14 & 4) {
|
||||
if (objInteract->flags & INTERACT_FLAGS_UNK_0004) {
|
||||
for (j = 0; j < objsWithInteractives; j++) {
|
||||
if (i != j) {
|
||||
obj2 = objList[j];
|
||||
objInteract2 = obj2->interactObj;
|
||||
if (objInteract2->unk14 & 3) {
|
||||
if (objInteract2->flags & 3) {
|
||||
if (objInteract2->unk11 == 3) {
|
||||
func_80016748(obj, obj2);
|
||||
} else if (objInteract2->unk11 != 2) {
|
||||
xDiff = obj->segment.trans.x_position - obj2->segment.trans.x_position;
|
||||
zDiff = obj->segment.trans.z_position - obj2->segment.trans.z_position;
|
||||
if (objInteract2->unk14 & 0x20) {
|
||||
if (objInteract2->flags & INTERACT_FLAGS_UNK_0020) {
|
||||
var_f12 = 0x400000; //4194304.0f;
|
||||
} else {
|
||||
var_f12 = 0x40000; //262144.0f;
|
||||
@@ -2079,7 +2079,7 @@ void func_800155B8(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (objInteract->unk14 & 0x100) {
|
||||
if (objInteract->flags & INTERACT_FLAGS_UNK_0100) {
|
||||
for (j = 0; j < objsWithInteractives; j++) {
|
||||
if (i != j) {
|
||||
obj2 = objList[j];
|
||||
@@ -2714,7 +2714,7 @@ s32 func_8001C524(f32 diffX, f32 diffY, f32 diffZ, s32 someFlag) {
|
||||
if (segment) {
|
||||
levelObj = &((segment->unk3C_a.level_entry)->ttDoor);
|
||||
var_a0 = 1;
|
||||
if (someFlag && (sp64 != levelObj->unkE)) {
|
||||
if (someFlag && (sp64 != levelObj->doorID)) {
|
||||
var_a0 = 0;
|
||||
}
|
||||
if ((someFlag == 2) && (levelObj->unk8 != 3)) {
|
||||
|
||||
@@ -139,6 +139,26 @@ enum ObjectBehaviours {
|
||||
BHV_UNK_7F
|
||||
};
|
||||
|
||||
enum ObjectInteractionFlags {
|
||||
INTERACT_FLAGS_NONE,
|
||||
INTERACT_FLAGS_SOLID = (1 << 0),
|
||||
INTERACT_FLAGS_TANGIBLE = (1 << 1),
|
||||
INTERACT_FLAGS_UNK_0004 = (1 << 2),
|
||||
INTERACT_FLAGS_PUSHING = (1 << 3),
|
||||
INTERACT_FLAGS_UNK_0010 = (1 << 4),
|
||||
INTERACT_FLAGS_UNK_0020 = (1 << 5),
|
||||
INTERACT_FLAGS_COLLIDED = (1 << 6),
|
||||
INTERACT_FLAGS_UNK_0080 = (1 << 7),
|
||||
INTERACT_FLAGS_UNK_0100 = (1 << 8),
|
||||
INTERACT_FLAGS_UNK_0200 = (1 << 9),
|
||||
INTERACT_FLAGS_UNK_0400 = (1 << 10),
|
||||
INTERACT_FLAGS_UNK_0800 = (1 << 11),
|
||||
INTERACT_FLAGS_UNK_1000 = (1 << 12),
|
||||
INTERACT_FLAGS_UNK_2000 = (1 << 13),
|
||||
INTERACT_FLAGS_UNK_4000 = (1 << 14),
|
||||
INTERACT_FLAGS_UNK_8000 = (1 << 15),
|
||||
};
|
||||
|
||||
typedef struct RacerShieldGfx {
|
||||
s16 x_position;
|
||||
s16 y_position;
|
||||
|
||||
+28
-35
@@ -200,7 +200,7 @@ s8 gRacerDialogueCamera;
|
||||
s8 gRacerInputBlocked;
|
||||
s8 gStartBoostTime;
|
||||
s16 gDialogueCameraAngle;
|
||||
s8 D_8011D588[4];
|
||||
s8 gEggChallengeFlags[4];
|
||||
s8 D_8011D58C[4];
|
||||
GhostHeader *gGhostData[3];
|
||||
s8 D_8011D59C;
|
||||
@@ -695,25 +695,18 @@ s32 roll_percent_chance(s32 chance) {
|
||||
|
||||
GLOBAL_ASM("asm/non_matchings/racer/func_8004447C.s")
|
||||
|
||||
// Still don't know what this really is.
|
||||
struct TempStruct2 {
|
||||
Object *unk0[4];
|
||||
u8 pad10[0x1BF];
|
||||
s32 unk1CF;
|
||||
};
|
||||
|
||||
void func_80045128(struct TempStruct2 *header) {
|
||||
void func_80045128(Object **racerObjs) {
|
||||
Object_Racer *obj;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
obj = (Object_Racer *) header->unk0[i]->unk64;
|
||||
D_8011D588[i] = obj->lap;
|
||||
if (obj->unk1CF != 0) {
|
||||
D_8011D588[i] |= 0x40;
|
||||
obj = (Object_Racer *) racerObjs[i]->unk64;
|
||||
gEggChallengeFlags[i] = obj->lap;
|
||||
if (obj->eggHudCounter) {
|
||||
gEggChallengeFlags[i] |= 0x40;
|
||||
}
|
||||
if (obj->held_obj != 0) {
|
||||
D_8011D588[i] |= 0x80;
|
||||
gEggChallengeFlags[i] |= 0x80;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -853,13 +846,13 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
if (1) { } if (1) { } if (1) { } if (1) { } if (1) { }
|
||||
|
||||
|
||||
if (racer->unk1F5 != 0) {
|
||||
if (racer->zipperDirCorrection != 0) {
|
||||
gCurrentStickX = 0;
|
||||
racer->magnetTimer = 0;
|
||||
racer->steerAngle = 0;
|
||||
racer->spinout_timer = 0;
|
||||
racer->unk1E0 = 0;
|
||||
var_v1 = racer->unk14C->segment.trans.y_rotation - (racer->steerVisualRotation & 0xFFFF);
|
||||
var_v1 = racer->zipperObj->segment.trans.y_rotation - (racer->steerVisualRotation & 0xFFFF);
|
||||
if (var_v1 > 0x8000) {
|
||||
var_v1 -= 0xFFFF;
|
||||
}
|
||||
@@ -877,7 +870,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
if (racer->throttleReleased) {
|
||||
racer->boostType |= BOOST_SMALL_FAST;
|
||||
}
|
||||
racer->unk1F5 = 0;
|
||||
racer->zipperDirCorrection = 0;
|
||||
func_80072348(racer->playerIndex, 8U);
|
||||
} else {
|
||||
obj->segment.x_velocity = ((f64) obj->segment.x_velocity) * 0.75f;
|
||||
@@ -1136,7 +1129,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
}
|
||||
temp = 1.0f;
|
||||
racer->unk196 += (((s32) ((((f32) var_v1) * 1.75) * temp)) * updateRate) >> 6;
|
||||
if (racer->unk1F5 == 0) {
|
||||
if (racer->zipperDirCorrection == 0) {
|
||||
if ((gCurrentPlayerIndex == PLAYER_COMPUTER) && (racer->raceFinished == 0)) {
|
||||
var_f16 = racer->lateral_velocity * 0.25;
|
||||
temp_f0 = var_f16 * 0.35;
|
||||
@@ -1278,9 +1271,9 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
racer->buoyancy = 0.0f;
|
||||
}
|
||||
if ((racer->unk1E5 > 0) && (obj->segment.trans.y_position < (sp118 + var_f14))) {
|
||||
obj->interactObj->unk14 |= 0x10;
|
||||
obj->interactObj->flags |= 0x10;
|
||||
} else {
|
||||
obj->interactObj->unk14 &= 0xFFEF;
|
||||
obj->interactObj->flags &= 0xFFEF;
|
||||
}
|
||||
sp118 = obj->segment.trans.y_position - (sp118 + var_f14);
|
||||
if (racer->buoyancy > 0.0) {
|
||||
@@ -1812,7 +1805,7 @@ void update_camera_plane(f32 updateRate, Object* obj, Object_Racer* racer) {
|
||||
baseFloat2 = 110.0f;
|
||||
baseFloat1 = 42.0f;
|
||||
}
|
||||
if (((!(gCurrentRacerInput & 0x10)) || racer->unk1E2 < 3) && !racer->unk1F5) {
|
||||
if (((!(gCurrentRacerInput & 0x10)) || racer->unk1E2 < 3) && !racer->zipperDirCorrection) {
|
||||
angle = (-racer->steerVisualRotation - (racer->unk196 & 0xFFFF)) + 0x8000;
|
||||
if (angle > 0x8000) {
|
||||
angle -= 0xFFFF;
|
||||
@@ -2061,7 +2054,7 @@ void update_carpet(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
func_80006AC8(obj);
|
||||
}
|
||||
if (is_taj_challenge() && racer->vehicleID == VEHICLE_CARPET) {
|
||||
obj->interactObj->unk14 = 0;
|
||||
obj->interactObj->flags = INTERACT_FLAGS_NONE;
|
||||
}
|
||||
sp26 = obj->segment.animFrame;
|
||||
racer->vehicleID = VEHICLE_CARPET;
|
||||
@@ -2166,10 +2159,10 @@ void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer) {
|
||||
gDialogueCameraAngle = 0;
|
||||
gRacerInputBlocked = FALSE;
|
||||
}
|
||||
obj->interactObj->unk14 = 5;
|
||||
obj->interactObj->flags = INTERACT_FLAGS_SOLID | INTERACT_FLAGS_UNK_0004;
|
||||
obj->interactObj->unk11 = 0;
|
||||
obj->interactObj->unk10 = 0xF;
|
||||
obj->interactObj->unk12 = 0x14;
|
||||
obj->interactObj->hitboxRadius = 15;
|
||||
obj->interactObj->pushForce = 20;
|
||||
tempRacer->unk1EE = 0;
|
||||
if (!D_8011D582) {
|
||||
tempRacer->transparency = 255;
|
||||
@@ -2466,9 +2459,9 @@ void update_player_racer(Object *obj, s32 updateRate) {
|
||||
}
|
||||
}
|
||||
if (tempRacer->unk1E5 > 0 && obj->segment.trans.y_position < waterHeight + 5.0f) {
|
||||
obj->interactObj->unk14 |= 0x10;
|
||||
obj->interactObj->flags |= INTERACT_FLAGS_UNK_0010;
|
||||
} else {
|
||||
obj->interactObj->unk14 &= 0xFFEF;
|
||||
obj->interactObj->flags &= 0xFFEF;
|
||||
}
|
||||
}
|
||||
func_8002ACC8(0);
|
||||
@@ -4227,19 +4220,19 @@ void func_80055A84(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) {
|
||||
f32 zTemp;
|
||||
s32 xRot;
|
||||
f32 angleX;
|
||||
f32 *temp_v0;
|
||||
f32 *racerSize;
|
||||
Vec3f tempPos;
|
||||
s32 i;
|
||||
f32 sp40;
|
||||
f32 radius;
|
||||
s8 surface;
|
||||
s8 shouldSquish;
|
||||
|
||||
if (obj->segment.trans.y_position > gCurrentCourseHeight) {
|
||||
obj->segment.trans.y_position = gCurrentCourseHeight;
|
||||
}
|
||||
temp_v0 =(f32 *) get_misc_asset(MISC_ASSET_UNK38);
|
||||
racerSize = (f32 *) get_misc_asset(MISC_ASSET_RACER_HITBOX_SIZE);
|
||||
surface = -1;
|
||||
sp40 = temp_v0[racer->vehicleIDPrev];
|
||||
radius = racerSize[racer->vehicleIDPrev];
|
||||
tempPos.x = obj->segment.trans.x_position;
|
||||
tempPos.y = obj->segment.trans.y_position;
|
||||
tempPos.z = obj->segment.trans.z_position;
|
||||
@@ -4248,7 +4241,7 @@ void func_80055A84(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) {
|
||||
sp74 = 0;
|
||||
flags = 0;
|
||||
if (racer->playerIndex != PLAYER_COMPUTER || racer->vehicleIDPrev < VEHICLE_TRICKY) {
|
||||
flags = func_80017248(obj, 1, &sp74, &racer->unkD8, &tempPos.x, &sp40, &surface);
|
||||
flags = func_80017248(obj, 1, &sp74, &racer->unkD8, &tempPos.x, &radius, &surface);
|
||||
}
|
||||
if (flags & 0x80) {
|
||||
D_8011D548 = tempPos.x - obj->segment.trans.x_position;
|
||||
@@ -4261,7 +4254,7 @@ void func_80055A84(Object *obj, Object_Racer *racer, UNUSED s32 updateRate) {
|
||||
}
|
||||
func_80031130(1, &racer->unkD8.x, &tempPos.x, racer->vehicleID);
|
||||
sp74 = 0;
|
||||
racer->unk1E3 = func_80031600(&racer->unkD8.x, &tempPos.x, &sp40, &surface, 1, &sp74);
|
||||
racer->unk1E3 = func_80031600(&racer->unkD8.x, &tempPos.x, &radius, &surface, TRUE, &sp74);
|
||||
racer->unk1E4 = flags;
|
||||
racer->unk1E3 |= flags;
|
||||
racer->unk1E2 = 0;
|
||||
@@ -4365,7 +4358,7 @@ void handle_racer_items(Object *obj, Object_Racer *racer, UNUSED s32 updateRate)
|
||||
heldObj->segment.y_velocity = obj->segment.y_velocity - 2.0;
|
||||
heldObj->segment.z_velocity = obj->segment.z_velocity * 0.7;
|
||||
heldObjData = (Vertex *) &heldObj->unk64->egg;
|
||||
((Object_64 *) heldObjData)->egg.unkB = 2;
|
||||
((Object_64 *) heldObjData)->egg.status = EGG_MOVING;
|
||||
racer->held_obj = NULL;
|
||||
racer->unk211 = 1;
|
||||
}
|
||||
@@ -6097,7 +6090,7 @@ void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR
|
||||
sp11C = get_checkpoint_count();
|
||||
if (sp11C != 0) {
|
||||
racer->unk1C9 = 0;
|
||||
racer->unk1F5 = 0;
|
||||
racer->zipperDirCorrection = 0;
|
||||
racer->attackType = ATTACK_NONE;
|
||||
racer->lateral_velocity = 0;
|
||||
sp94 = 20.0f;
|
||||
|
||||
@@ -210,6 +210,7 @@ void func_80042D20(Object *obj, Object_Racer *racer, s32 updateRate);
|
||||
void handle_racer_items(Object *obj, Object_Racer *racer, s32 updateRate);
|
||||
void drop_bananas(Object *obj, Object_Racer *racer, s32 number);
|
||||
void update_player_racer(Object *obj, s32 updateRate);
|
||||
void func_80045128(Object **racerObjs);
|
||||
|
||||
//Non Matching
|
||||
void set_ghost_position_and_rotation(Object *obj);
|
||||
|
||||
+1
-1
@@ -213,7 +213,7 @@ void update_bluey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *ra
|
||||
racer->headAngleTarget = 0;
|
||||
}
|
||||
racer = (Object_Racer *) firstRacerObj->unk64;
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) {
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->flags & INTERACT_FLAGS_PUSHING && obj->segment.unk38.byte.unk3B == 1) {
|
||||
racer->attackType = ATTACK_SQUISHED;
|
||||
}
|
||||
if (racer->raceFinished) {
|
||||
|
||||
@@ -167,7 +167,7 @@ void update_bubbler(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *
|
||||
}
|
||||
}
|
||||
racer = (Object_Racer *) firstRacerObj->unk64;
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) {
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->flags & INTERACT_FLAGS_PUSHING && obj->segment.unk38.byte.unk3B == 1) {
|
||||
racer->attackType = ATTACK_SQUISHED;
|
||||
}
|
||||
if (racer->raceFinished) {
|
||||
|
||||
@@ -72,7 +72,7 @@ void update_rocket(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
if (sp2C == 0x64) {
|
||||
D_8011D610 = 0;
|
||||
}
|
||||
racer->unk1F5 = 0;
|
||||
racer->zipperDirCorrection = FALSE;
|
||||
if (racer->playerIndex == PLAYER_COMPUTER) {
|
||||
if (*startTimer != 100) {
|
||||
*startTimer -= 30;
|
||||
@@ -153,7 +153,7 @@ void update_rocket(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
}
|
||||
firstRacerObj = get_racer_object(0);
|
||||
racer = (Object_Racer*)firstRacerObj->unk64;
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) {
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->flags & INTERACT_FLAGS_PUSHING && obj->segment.unk38.byte.unk3B == 1) {
|
||||
racer->attackType = ATTACK_SQUISHED;
|
||||
}
|
||||
if (racer->raceFinished != 0) {
|
||||
|
||||
@@ -231,7 +231,7 @@ void update_smokey(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
}
|
||||
}
|
||||
racer = (Object_Racer *) firstRacerObj->unk64;
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) {
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->flags & INTERACT_FLAGS_PUSHING && obj->segment.unk38.byte.unk3B == 1) {
|
||||
racer->attackType = ATTACK_SQUISHED;
|
||||
}
|
||||
if (racer->raceFinished != FALSE) {
|
||||
|
||||
@@ -48,10 +48,10 @@ s8 D_8011D5CC;
|
||||
/******************************/
|
||||
|
||||
void func_8005C2F0(Object *object, unk8005C2F0 *arg1) {
|
||||
object->interactObj->unk14 = 5;
|
||||
object->interactObj->flags = INTERACT_FLAGS_SOLID | INTERACT_FLAGS_UNK_0004;
|
||||
object->interactObj->unk11 = 0;
|
||||
object->interactObj->unk10 = 0x1E;
|
||||
object->interactObj->unk12 = 0;
|
||||
object->interactObj->hitboxRadius = 30;
|
||||
object->interactObj->pushForce = 0;
|
||||
arg1->unkC = 0.0f;
|
||||
D_8011D5C0 = object->segment.trans.y_position;
|
||||
if (arg1->unk118 != 0) {
|
||||
@@ -198,7 +198,7 @@ void update_tricky(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
}
|
||||
func_8006F140(1);
|
||||
}
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) {
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->flags & INTERACT_FLAGS_PUSHING && obj->segment.unk38.byte.unk3B == 1) {
|
||||
racer->attackType = ATTACK_SQUISHED;
|
||||
}
|
||||
if (racer->raceFinished != FALSE) {
|
||||
|
||||
@@ -70,7 +70,7 @@ void update_wizpig(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
if (sp28 == 0x64) {
|
||||
D_8011D600 = 0;
|
||||
}
|
||||
racer->unk1F5 = 0;
|
||||
racer->zipperDirCorrection = FALSE;
|
||||
if (racer->playerIndex == PLAYER_COMPUTER) {
|
||||
if (*startTimer != 100) {
|
||||
*startTimer -= 30;
|
||||
@@ -231,7 +231,7 @@ void update_wizpig(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r
|
||||
fade_when_near_camera(obj, racer, 0x28);
|
||||
firstRacerObj = get_racer_object(0);
|
||||
racer = (Object_Racer *) firstRacerObj->unk64;
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->unk14 & 8 && obj->segment.unk38.byte.unk3B == 1) {
|
||||
if (obj == firstRacerObj->interactObj->obj && firstRacerObj->interactObj->flags & INTERACT_FLAGS_PUSHING && obj->segment.unk38.byte.unk3B == 1) {
|
||||
racer->attackType = ATTACK_SQUISHED;
|
||||
}
|
||||
if (racer->raceFinished) {
|
||||
|
||||
Reference in New Issue
Block a user