mirror of
https://github.com/n64decomp/mk64
synced 2026-08-24 07:00:13 -04:00
Merge remote-tracking branch 'upstream/master' into 3d-objects
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
name: Doxygen GitHub Pages Deploy Action
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.LINUX_DEPLOY_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt install build-essential cmake pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
|
||||
- name: Build
|
||||
run: |
|
||||
cp -r complementary_file/* .
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
make assets
|
||||
make -j
|
||||
- name: Install Doxygen
|
||||
run: |
|
||||
sudo apt-get install graphviz doxygen
|
||||
wget https://www.doxygen.nl/files/doxygen-1.10.0.linux.bin.tar.gz
|
||||
tar -xzf doxygen-*.linux.bin.tar.gz
|
||||
|
||||
- name: make badge
|
||||
run: |
|
||||
pip install pybadges
|
||||
python3 progress.py badge
|
||||
|
||||
- name: Generate Doxygen documentation
|
||||
run: |
|
||||
./doxygen-*/bin/doxygen Doxyfile
|
||||
|
||||
- name: Create .nojekyll (ensures pages with underscores work on gh pages)
|
||||
run: touch docs/html/.nojekyll
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: JamesIves/github-pages-deploy-action@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: gh-pages
|
||||
folder: docs/html
|
||||
@@ -1,36 +0,0 @@
|
||||
name: Doxygen GitHub Pages Deploy Action
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
submodules: "true"
|
||||
|
||||
- name: Install Doxygen
|
||||
run: |
|
||||
sudo apt-get install graphviz doxygen -y
|
||||
wget https://www.doxygen.nl/files/doxygen-1.10.0.linux.bin.tar.gz
|
||||
tar -xzf doxygen-*.linux.bin.tar.gz
|
||||
|
||||
- name: Generate Doxygen documentation
|
||||
run: |
|
||||
./doxygen-*/bin/doxygen Doxyfile
|
||||
|
||||
- name: Create .nojekyll (ensures pages with underscores work on gh pages)
|
||||
run: touch docs/html/.nojekyll
|
||||
|
||||
- name: Deploy to GitHub Pages
|
||||
uses: JamesIves/github-pages-deploy-action@v4
|
||||
with:
|
||||
token: ${{ secrets.GITHUB_TOKEN }}
|
||||
branch: gh-pages
|
||||
folder: docs/html
|
||||
@@ -0,0 +1,30 @@
|
||||
name: Linux Compile test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "*" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.LINUX_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt install build-essential cmake pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
|
||||
- name: Build
|
||||
run: |
|
||||
cp -r complementary_file/* .
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
make assets
|
||||
make -j
|
||||
@@ -0,0 +1,32 @@
|
||||
name: Macos Compile test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "*" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
if: 0
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.MACOS_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
brew update
|
||||
brew install python3 capstone coreutils make pkg-config tehzz/n64-dev/mips64-elf-binutils cmake
|
||||
- name: Build
|
||||
run: |
|
||||
cp -r complementary_file/* .
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
make assets
|
||||
make -j
|
||||
@@ -0,0 +1,31 @@
|
||||
name: Windows Compile test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "*" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: windows-2022
|
||||
steps:
|
||||
- uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
submodules: "true"
|
||||
- name: Get Complementary file
|
||||
uses: actions/checkout@v4.1.1
|
||||
with:
|
||||
path: complementary_file
|
||||
repository: UnspaghettifyKart/action-build-private-file
|
||||
ssh-key: ${{ secrets.WINDOWS_SSH_PRIVATE_KEY }}
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
Invoke-WebRequest https://github.com/coco875/mk64-tools/releases/download/v0.0.6/mips-tools-chain-windows.zip -OutFile mips-tools-chain-windows.zip
|
||||
Expand-Archive mips-tools-chain-windows.zip -DestinationPath mips-tools-chain-windows
|
||||
Copy-Item -Path mips-tools-chain-windows/mingw64 -Destination tools -Recurse
|
||||
- name: Build
|
||||
run: |
|
||||
Copy-Item -Path complementary_file/* -Destination . -Recurse
|
||||
echo "${{ secrets.AES_KEY }}" | openssl enc -d -aes-256-cbc -pass stdin -pbkdf2 -in baserom.us.z64.aes -out baserom.us.z64
|
||||
python tools/windows_build.py
|
||||
+12
-2
@@ -45,7 +45,7 @@ doxygen/doxygen/*
|
||||
docs/html/*
|
||||
xml/*
|
||||
/build/*
|
||||
# decomp permuter
|
||||
# Decomp permuter
|
||||
/nonmatchings/*
|
||||
*.dump
|
||||
*.mio0
|
||||
@@ -53,6 +53,10 @@ xml/*
|
||||
*.map
|
||||
.assets-local.txt
|
||||
|
||||
# Torch
|
||||
include/assets/*
|
||||
tools/torch/*
|
||||
|
||||
# no context header for now, until it's greenlit for the repo
|
||||
context_gen_header.h
|
||||
contexts/*
|
||||
@@ -64,6 +68,7 @@ expected/*
|
||||
|
||||
# Assets. Generally ignored, but ones with "custom" in the name are fine.
|
||||
/bin/*
|
||||
/modding/*
|
||||
/courses/**/*linkonly*
|
||||
/textures/**/*.png
|
||||
/textures/**/*.bin
|
||||
@@ -73,6 +78,7 @@ expected/*
|
||||
/assets/**/*.mio0
|
||||
/assets/**/*.raw
|
||||
/assets/**/*.inc.c
|
||||
/assets/code/*
|
||||
/music/**/*.m64
|
||||
/sound/**/*.m64
|
||||
/sound/**/*.aiff
|
||||
@@ -87,6 +93,7 @@ expected/*
|
||||
|
||||
# Doxygen
|
||||
docs/html/*
|
||||
docs/doxygen_syms.md
|
||||
|
||||
# windows build
|
||||
mingw64/
|
||||
@@ -95,4 +102,7 @@ mingw64/
|
||||
|
||||
# models
|
||||
models/*/*
|
||||
!models/*/*.json
|
||||
!models/*/*.json
|
||||
|
||||
# torch
|
||||
torch.hash.yml
|
||||
|
||||
@@ -13,3 +13,6 @@
|
||||
[submodule "tools/blender/fast64"]
|
||||
path = tools/blender/fast64
|
||||
url = https://github.com/coco875/fast64.git
|
||||
[submodule "tools/torch"]
|
||||
path = tools/torch
|
||||
url = https://github.com/HarbourMasters/torch
|
||||
|
||||
@@ -947,7 +947,7 @@ INPUT = docs/ \
|
||||
src/ \
|
||||
include/ \
|
||||
courses/ \
|
||||
tools/doxygen_syms.md
|
||||
docs/doxygen_syms.md
|
||||
|
||||
# This tag can be used to specify the character encoding of the source files
|
||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||
|
||||
Vendored
-105
@@ -1,105 +0,0 @@
|
||||
def totalProgBadge = addEmbeddableBadgeConfiguration(id: "totalProgress", subject: "Total Progress", color: "7d0000")
|
||||
def gameCodeProgBadge = addEmbeddableBadgeConfiguration(id: "gameProgress", subject: "Game Code Progress", color: "7d0000")
|
||||
|
||||
def mainProgBadge = addEmbeddableBadgeConfiguration(id: "mainProgress", subject: "Main Code Progress", color: "7d0000")
|
||||
def endingProgBadge = addEmbeddableBadgeConfiguration(id: "endingProgress", subject: "Ending Code Progress", color: "7d0000")
|
||||
def racingProgBadge = addEmbeddableBadgeConfiguration(id: "racingProgress", subject: "Racing Code Progress", color: "7d0000")
|
||||
def audioProgBadge = addEmbeddableBadgeConfiguration(id: "audioProgress", subject: "Audio Code Progress", color: "7d0000")
|
||||
def osProgBadge = addEmbeddableBadgeConfiguration(id: "osProgress", subject: "Libultra Code Progress", color: "7d0000")
|
||||
|
||||
def bytesToDecompile = addEmbeddableBadgeConfiguration(id: "bytesLeft", subject: "Remaining Decompilable Bytes", color: "7d0000")
|
||||
def m2cFuncs = addEmbeddableBadgeConfiguration(id: "m2c", subject: "Remaining Functions", color: "7d0000")
|
||||
def nonmatchingFuncs = addEmbeddableBadgeConfiguration(id: "nonmatching", subject: "Non Matching Functions", color: "7d0000")
|
||||
|
||||
pipeline {
|
||||
agent any
|
||||
stages {
|
||||
stage('Build Tools') {
|
||||
steps {
|
||||
sh 'make -j4 -C tools/'
|
||||
}
|
||||
}
|
||||
stage('Extract Assets') {
|
||||
steps {
|
||||
sh 'ln -s "$ROMS_DIR/Mario Kart 64 (U) [!].z64" baserom.us.z64'
|
||||
// verify no assets were committed to repo
|
||||
sh '[ -z "$(find {actors,levels,textures}/ -name \'*.png\')" ]'
|
||||
sh '[ -z "$(find bin/ -name \'*.m64\' -or \'*.bin\')" ]'
|
||||
sh './extract_assets.py us'
|
||||
}
|
||||
}
|
||||
stage('Build U Source') {
|
||||
steps {
|
||||
sh 'make -j4 VERSION=us'
|
||||
}
|
||||
}
|
||||
stage('Update progress') {
|
||||
when {
|
||||
branch 'master'
|
||||
}
|
||||
steps {
|
||||
script {
|
||||
progress = sh(
|
||||
script: "python3 progress.py totalBadge",
|
||||
returnStdout: true).trim()
|
||||
totalProgBadge.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py gameBadge",
|
||||
returnStdout: true).trim()
|
||||
gameCodeProgBadge.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py mainBadge",
|
||||
returnStdout: true).trim()
|
||||
mainProgBadge.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py endingBadge",
|
||||
returnStdout: true).trim()
|
||||
endingProgBadge.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py racingBadge",
|
||||
returnStdout: true).trim()
|
||||
racingProgBadge.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py audioBadge",
|
||||
returnStdout: true).trim()
|
||||
audioProgBadge.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py osBadge",
|
||||
returnStdout: true).trim()
|
||||
osProgBadge.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py bytesToDecompile",
|
||||
returnStdout: true).trim()
|
||||
bytesToDecompile.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py m2cFuncs",
|
||||
returnStdout: true).trim()
|
||||
m2cFuncs.setStatus(progress)
|
||||
|
||||
progress = sh(
|
||||
script: "python3 progress.py nonmatchingFuncs",
|
||||
returnStdout: true).trim()
|
||||
nonmatchingFuncs.setStatus(progress)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
environment {
|
||||
QEMU_IRIX = credentials('qemu-irix')
|
||||
ROMS_DIR = credentials('roms')
|
||||
}
|
||||
|
||||
post {
|
||||
always {
|
||||
cleanWs()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -176,8 +176,7 @@ ifeq ($(DUMMY),FAIL)
|
||||
endif
|
||||
|
||||
ifeq ($(filter clean distclean print-%,$(MAKECMDGOALS)),)
|
||||
|
||||
# Make tools if out of date
|
||||
# Make tools if out of date
|
||||
DUMMY != make -C $(TOOLS_DIR)
|
||||
ifeq ($(DUMMY),FAIL)
|
||||
$(error Failed to build tools)
|
||||
@@ -212,7 +211,8 @@ DATA_DIR := data
|
||||
INCLUDE_DIRS := include
|
||||
|
||||
# Directories containing source files
|
||||
SRC_DIRS := src src/data src/racing src/ending src/audio src/debug src/os src/os/math courses
|
||||
SRC_ASSETS_DIR := assets/code/ceremony_data assets/code/startup_logo assets/code/data_800E45C0 assets/code/data_segment2 assets/code/data_800E8700 assets/code/common_data
|
||||
SRC_DIRS := src src/data src/buffers src/racing src/ending src/audio src/debug src/os src/os/math courses assets/code/ceremony_data assets/code/startup_logo $(SRC_ASSETS_DIR)
|
||||
ASM_DIRS := asm asm/os asm/unused $(DATA_DIR) $(DATA_DIR)/sound_data $(DATA_DIR)/karts
|
||||
|
||||
|
||||
@@ -223,7 +223,7 @@ TEXTURE_DIRS := textures/common
|
||||
|
||||
ALL_DIRS = $(BUILD_DIR) $(addprefix $(BUILD_DIR)/,$(SRC_DIRS) $(COURSE_DIRS) include $(ASM_DIRS) $(TEXTURES_DIR)/raw \
|
||||
$(TEXTURES_DIR)/standalone $(TEXTURES_DIR)/startup_logo $(TEXTURES_DIR)/crash_screen $(TEXTURES_DIR)/trophy $(TEXTURES_DIR)/courses \
|
||||
$(TEXTURE_DIRS) $(TEXTURE_DIRS)/tlut $(BIN_DIR))
|
||||
$(TEXTURE_DIRS) $(TEXTURE_DIRS)/tlut $(BIN_DIR)) assets/course_metadata
|
||||
|
||||
# file dependencies generated by splitter
|
||||
MAKEFILE_SPLIT = Makefile.split
|
||||
@@ -233,7 +233,7 @@ include $(MAKEFILE_SPLIT)
|
||||
# We filter them out from the regular C_FILES since we don't need nor want the
|
||||
# UTF-8 versions getting compiled
|
||||
EUC_JP_FILES := src/ending/credits.c src/code_80005FD0.c src/code_80091750.c
|
||||
C_FILES := $(filter-out $(EUC_JP_FILES),$(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c)))
|
||||
C_FILES := $(filter-out %.inc.c,$(filter-out $(EUC_JP_FILES),$(foreach dir,$(SRC_DIRS),$(wildcard $(dir)/*.c))))
|
||||
S_FILES := $(foreach dir,$(ASM_DIRS),$(wildcard $(dir)/*.s))
|
||||
# Include source files in courses/course_name/files.c but exclude .inc.c files.
|
||||
COURSE_FILES := $(foreach dir,$(COURSE_DIRS),$(filter-out %.inc.c,$(wildcard $(dir)/*.c)))
|
||||
@@ -366,6 +366,7 @@ BIN2C := $(PYTHON) $(TOOLS_DIR)/bin2c.py
|
||||
EXTRACT_DATA_FOR_MIO := $(TOOLS_DIR)/extract_data_for_mio
|
||||
ASSET_EXTRACT := $(PYTHON) $(TOOLS_DIR)/new_extract_assets.py
|
||||
LINKONLY_GENERATOR := $(PYTHON) $(TOOLS_DIR)/linkonly_generator.py
|
||||
TORCH := $(TOOLS_DIR)/torch/cmake-build-release/torch
|
||||
EMULATOR = mupen64plus
|
||||
EMU_FLAGS = --noosd
|
||||
LOADER = loader64
|
||||
@@ -406,6 +407,12 @@ ifeq ($(COMPARE),1)
|
||||
@$(SHA1SUM) -c $(TARGET).sha1 > $(NULL_OUT) && $(PRINT) "$(TARGET): $(GREEN)OK$(NO_COL)\n" || ($(PRINT) "$(YELLOW)Building the ROM file has succeeded, but does not match the original ROM.\nThis is expected, and not an error, if you are making modifications.\nTo silence this message, use 'make COMPARE=0.' $(NO_COL)\n" && $(FALSE))
|
||||
endif
|
||||
|
||||
assets:
|
||||
@echo "Extracting torch assets..."
|
||||
@$(TORCH) code $(BASEROM)
|
||||
@$(TORCH) header $(BASEROM)
|
||||
@$(TORCH) modding export $(BASEROM)
|
||||
|
||||
doc:
|
||||
$(PYTHON) $(TOOLS_DIR)/doxygen_symbol_gen.py
|
||||
doxygen
|
||||
@@ -493,7 +500,7 @@ $(TEXTURE_FILES_TLUT):
|
||||
$(V)$(N64GRAPHICS) -i $(BUILD_DIR)/$@.inc.c -g $@.png -f $(lastword $(subst ., ,$@)) -s u8 -c $(lastword $(subst ., ,$(subst .$(lastword $(subst ., ,$(TEXTURE_FILES_TLUT))), ,$(TEXTURE_FILES_TLUT)))) -p $(BUILD_DIR)/$@.tlut.inc.c
|
||||
|
||||
# common textures
|
||||
$(BUILD_DIR)/src/data/common_textures.o: src/data/common_textures.c $(TEXTURE_FILES) $(TEXTURE_FILES_TLUT)
|
||||
$(BUILD_DIR)/assets/code/common_data/common_data.o: assets/code/common_data/common_data.c $(TEXTURE_FILES) $(TEXTURE_FILES_TLUT)
|
||||
@$(PRINT) "$(GREEN)Compiling Common Textures: $(BLUE)$@ $(NO_COL)\n"
|
||||
@$(CC_CHECK) $(CC_CHECK_CFLAGS) -MMD -MP -MT $@ -MF $(BUILD_DIR)/$*.d $<
|
||||
$(V)$(CC) -c $(CFLAGS) -o $@ $<
|
||||
@@ -638,7 +645,7 @@ endif
|
||||
# Compile Trophy and Podium Models #
|
||||
#==============================================================================#
|
||||
|
||||
LDFLAGS += -R $(BUILD_DIR)/src/ending/ceremony_data.elf
|
||||
LDFLAGS += -R $(BUILD_DIR)/assets/code/ceremony_data/ceremony_data.elf
|
||||
|
||||
%/ceremony_data.elf: %/ceremony_data.o
|
||||
$(V)$(LD) -t -e 0 -Ttext=0B000000 -Map $@.map -o $@ $< --no-check-sections
|
||||
@@ -658,7 +665,7 @@ LDFLAGS += -R $(BUILD_DIR)/src/ending/ceremony_data.elf
|
||||
# Compile Startup Logo #
|
||||
#==============================================================================#
|
||||
|
||||
LDFLAGS += -R $(BUILD_DIR)/src/data/startup_logo.elf
|
||||
LDFLAGS += -R $(BUILD_DIR)/assets/code/startup_logo/startup_logo.elf
|
||||
|
||||
%/startup_logo.elf: %/startup_logo.o
|
||||
$(V)$(LD) -t -e 0 -Ttext=06000000 -Map $@.map -o $@ $< --no-check-sections
|
||||
@@ -677,19 +684,19 @@ LDFLAGS += -R $(BUILD_DIR)/src/data/startup_logo.elf
|
||||
# Compile Common Textures #
|
||||
#==============================================================================#
|
||||
|
||||
LDFLAGS += -R $(BUILD_DIR)/src/data/common_textures.elf
|
||||
LDFLAGS += -R $(BUILD_DIR)/assets/code/common_data/common_data.elf
|
||||
|
||||
%/common_textures.elf: %/common_textures.o
|
||||
%/common_data.elf: %/common_data.o
|
||||
$(V)$(LD) -t -e 0 -Ttext=0D000000 -Map $@.map -o $@ $< --no-check-sections
|
||||
|
||||
%/common_textures.bin: %/common_textures.elf
|
||||
%/common_data.bin: %/common_data.elf
|
||||
$(V)$(EXTRACT_DATA_FOR_MIO) $< $@
|
||||
|
||||
%/common_textures.mio0: %/common_textures.bin
|
||||
%/common_data.mio0: %/common_data.bin
|
||||
@$(PRINT) "$(GREEN)Compressing Common Textures: $(BLUE)$@ $(NO_COL)\n"
|
||||
$(V)$(MIO0TOOL) -c $< $@
|
||||
|
||||
%/common_textures.mio0.s: %/common_textures.mio0
|
||||
%/common_data.mio0.s: %/common_data.mio0
|
||||
$(PRINT) ".include \"macros.inc\"\n\n.section .data\n\n.balign 4\n\n.incbin \"$<\"\n\n" > $@
|
||||
|
||||
|
||||
@@ -704,7 +711,7 @@ $(BUILD_DIR)/$(LD_SCRIPT): $(LD_SCRIPT)
|
||||
$(V)$(CPP) $(CPPFLAGS) -DBUILD_DIR=$(BUILD_DIR) -MMD -MP -MT $@ -MF $@.d -o $@ $<
|
||||
|
||||
# Link MK64 ELF file
|
||||
$(ELF): $(O_FILES) $(COURSE_DATA_TARGETS) $(BUILD_DIR)/$(LD_SCRIPT) $(BUILD_DIR)/src/data/startup_logo.mio0.o $(BUILD_DIR)/src/ending/ceremony_data.mio0.o $(BUILD_DIR)/src/data/common_textures.mio0.o $(COURSE_GEOGRAPHY_TARGETS) undefined_syms.txt
|
||||
$(ELF): $(O_FILES) $(COURSE_DATA_TARGETS) $(BUILD_DIR)/$(LD_SCRIPT) $(BUILD_DIR)/assets/code/startup_logo/startup_logo.mio0.o $(BUILD_DIR)/assets/code/ceremony_data/ceremony_data.mio0.o $(BUILD_DIR)/assets/code/common_data/common_data.mio0.o $(COURSE_GEOGRAPHY_TARGETS) undefined_syms.txt
|
||||
@$(PRINT) "$(GREEN)Linking ELF file: $(BLUE)$@ $(NO_COL)\n"
|
||||
$(V)$(LD) $(LDFLAGS) -o $@
|
||||
|
||||
@@ -722,7 +729,7 @@ $(BUILD_DIR)/$(TARGET).objdump: $(ELF)
|
||||
$(OBJDUMP) -D $< > $@
|
||||
|
||||
|
||||
.PHONY: all clean distclean distclean_assets default diff test load
|
||||
.PHONY: all clean distclean distclean_assets default diff test load assets
|
||||
# with no prerequisites, .SECONDARY causes no intermediate target to be removed
|
||||
.SECONDARY:
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Mario Kart 64
|
||||
# Mario Kart 64
|
||||
This work-in-progress decompilation of Mario Kart 64 pursues historical and educational elements within the game found via taking it apart and putting it back together. Inspiration to do so not only emanates from the game's hardware and technology but also its immensely positive effects on the cultures and families of nearly every nationality.
|
||||
|
||||
This repository does not contain assets. Compiling requires asset extraction from a prior copy of the game.
|
||||
@@ -11,31 +11,35 @@ It supports and builds the following versions:
|
||||
| mk64.eu-1.0.z64 | EUR 1.0 | a729039453210b84f17019dda3f248d5888f7690 |
|
||||
| mk64.eu-final.z64 | EUR 1.1 | f6b5f519dd57ea59e9f013cc64816e9d273b2329 |
|
||||
|
||||
[](https://github.com/n64decomp/mk64/actions/workflows/linux-compile.yml)
|
||||
|
||||
## Progress
|
||||
|
||||
Total progress consists of all code segments together.
|
||||
|
||||
Game code progress consists of `main`, `ending` and `racing`.
|
||||
|
||||
[](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
[](https://ci.valandil.ca/job/mk64/job/master/)
|
||||

|
||||

|
||||
|
||||
[](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
[](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
[](https://ci.valandil.ca/job/mk64/job/master/)
|
||||

|
||||

|
||||

|
||||
|
||||
- [](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- [](https://ci.valandil.ca/job/mk64/job/master/)
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
- 
|
||||
|
||||
## Quick Start
|
||||
|
||||
```
|
||||
git submodule update --init --recursive
|
||||
```
|
||||
Extract assets
|
||||
```
|
||||
make assets -j
|
||||
make -j
|
||||
```
|
||||
|
||||
|
||||
@@ -235,7 +235,7 @@ glabel func_8000929C
|
||||
/* 00A1E4 800095E4 AFA70030 */ sw $a3, 0x30($sp)
|
||||
/* 00A1E8 800095E8 0C0023CE */ jal func_80008F38
|
||||
/* 00A1EC 800095EC AFA40050 */ sw $a0, 0x50($sp)
|
||||
/* 00A1F0 800095F0 0C0046B9 */ jal func_80011AE4
|
||||
/* 00A1F0 800095F0 0C0046B9 */ jal reset_kart_ai_behaviour
|
||||
/* 00A1F4 800095F4 8FA40050 */ lw $a0, 0x50($sp)
|
||||
/* 00A1F8 800095F8 8FA40050 */ lw $a0, 0x50($sp)
|
||||
/* 00A1FC 800095FC 3C0F8016 */ lui $t7, %hi(D_8016348C) # $t7, 0x8016
|
||||
|
||||
@@ -26,11 +26,11 @@ glabel D_800ECFC8
|
||||
glabel func_80009B60
|
||||
/* 00A760 80009B60 3C0E800E */ lui $t6, %hi(gCurrentCourseId)
|
||||
/* 00A764 80009B64 85CEC5A0 */ lh $t6, %lo(gCurrentCourseId)($t6)
|
||||
/* 00A768 80009B68 3C01800E */ lui $at, %hi(D_800DCA4C)
|
||||
/* 00A768 80009B68 3C01800E */ lui $at, %hi(gKartAICourseMaximumSeparation)
|
||||
/* 00A76C 80009B6C 3C0A8016 */ lui $t2, %hi(D_80163100) # $t2, 0x8016
|
||||
/* 00A770 80009B70 000E7880 */ sll $t7, $t6, 2
|
||||
/* 00A774 80009B74 002F0821 */ addu $at, $at, $t7
|
||||
/* 00A778 80009B78 C424CA4C */ lwc1 $f4, %lo(D_800DCA4C)($at)
|
||||
/* 00A778 80009B78 C424CA4C */ lwc1 $f4, %lo(gKartAICourseMaximumSeparation)($at)
|
||||
/* 00A77C 80009B7C 27BDFF30 */ addiu $sp, $sp, -0xd0
|
||||
/* 00A780 80009B80 254A3100 */ addiu $t2, %lo(D_80163100) # addiu $t2, $t2, 0x3100
|
||||
/* 00A784 80009B84 4600218D */ trunc.w.s $f6, $f4
|
||||
@@ -247,7 +247,7 @@ glabel func_80009B60
|
||||
/* 00AA98 80009E98 24010014 */ li $at, 20
|
||||
/* 00AA9C 80009E9C 11610003 */ beq $t3, $at, .L80009EAC
|
||||
/* 00AAA0 80009EA0 00000000 */ nop
|
||||
/* 00AAA4 80009EA4 0C00478E */ jal func_80011E38
|
||||
/* 00AAA4 80009EA4 0C00478E */ jal kart_ai_behaviour
|
||||
/* 00AAA8 80009EA8 8FA400D0 */ lw $a0, 0xd0($sp)
|
||||
.L80009EAC:
|
||||
/* 00AAAC 80009EAC 3C0E8016 */ lui $t6, %hi(D_80163378) # $t6, 0x8016
|
||||
@@ -257,7 +257,7 @@ glabel func_80009B60
|
||||
/* 00AABC 80009EBC 318D0001 */ andi $t5, $t4, 1
|
||||
/* 00AAC0 80009EC0 11ED0003 */ beq $t7, $t5, .L80009ED0
|
||||
/* 00AAC4 80009EC4 AFAD0030 */ sw $t5, 0x30($sp)
|
||||
/* 00AAC8 80009EC8 0C006B04 */ jal cpu_use_item_strategy
|
||||
/* 00AAC8 80009EC8 0C006B04 */ jal kart_ai_use_item_strategy
|
||||
/* 00AACC 80009ECC 01802025 */ move $a0, $t4
|
||||
.L80009ED0:
|
||||
/* 00AAD0 80009ED0 8FA400D0 */ lw $a0, 0xd0($sp)
|
||||
@@ -1195,7 +1195,7 @@ glabel func_80009B60
|
||||
/* 00B854 8000AC54 4600218D */ trunc.w.s $f6, $f4
|
||||
/* 00B858 8000AC58 44055000 */ mfc1 $a1, $f10
|
||||
/* 00B85C 8000AC5C 3C0B800E */ lui $t3, %hi(gCurrentCourseId)
|
||||
/* 00B860 8000AC60 3C03800E */ lui $v1, %hi(D_800DCA20)
|
||||
/* 00B860 8000AC60 3C03800E */ lui $v1, %hi(gKartAISteeringSensitivity)
|
||||
/* 00B864 8000AC64 00057C00 */ sll $t7, $a1, 0x10
|
||||
/* 00B868 8000AC68 44023000 */ mfc1 $v0, $f6
|
||||
/* 00B86C 8000AC6C 000F6403 */ sra $t4, $t7, 0x10
|
||||
@@ -1223,7 +1223,7 @@ glabel func_80009B60
|
||||
/* 00B8BC 8000ACBC 000B6040 */ sll $t4, $t3, 1
|
||||
/* 00B8C0 8000ACC0 006C1821 */ addu $v1, $v1, $t4
|
||||
/* 00B8C4 8000ACC4 10410006 */ beq $v0, $at, .L8000ACE0
|
||||
/* 00B8C8 8000ACC8 8463CA20 */ lh $v1, %lo(D_800DCA20)($v1)
|
||||
/* 00B8C8 8000ACC8 8463CA20 */ lh $v1, %lo(gKartAISteeringSensitivity)($v1)
|
||||
/* 00B8CC 8000ACCC 24010003 */ li $at, 3
|
||||
/* 00B8D0 8000ACD0 50410014 */ beql $v0, $at, .L8000AD24
|
||||
/* 00B8D4 8000ACD4 3C013F00 */ lui $at, 0x3f00
|
||||
@@ -1267,10 +1267,10 @@ glabel func_80009B60
|
||||
.L8000AD5C:
|
||||
/* 00B95C 8000AD5C 8FAA0034 */ lw $t2, 0x34($sp)
|
||||
.L8000AD60:
|
||||
/* 00B960 8000AD60 3C0D8016 */ lui $t5, %hi(D_801632E8) # 0x8016
|
||||
/* 00B960 8000AD60 3C0D8016 */ lui $t5, %hi(gKartAIBehaviourState) # 0x8016
|
||||
/* 00B964 8000AD64 24010002 */ li $at, 2
|
||||
/* 00B968 8000AD68 01AA6821 */ addu $t5, $t5, $t2
|
||||
/* 00B96C 8000AD6C 95AD32E8 */ lhu $t5, %lo(D_801632E8)($t5) # 0x32e8($t5)
|
||||
/* 00B96C 8000AD6C 95AD32E8 */ lhu $t5, %lo(gKartAIBehaviourState)($t5) # 0x32e8($t5)
|
||||
/* 00B970 8000AD70 15A10013 */ bne $t5, $at, .L8000ADC0
|
||||
/* 00B974 8000AD74 3C01800F */ lui $at, %hi(D_800ECFB8) # $at, 0x800f
|
||||
/* 00B978 8000AD78 C424CFB8 */ lwc1 $f4, %lo(D_800ECFB8)($at)
|
||||
|
||||
+3
-3
@@ -21,7 +21,7 @@ glabel jpt_800ED4A0
|
||||
|
||||
.section .text
|
||||
|
||||
glabel cpu_use_item_strategy
|
||||
glabel kart_ai_use_item_strategy
|
||||
/* 01B810 8001AC10 000478C0 */ sll $t7, $a0, 3
|
||||
/* 01B814 8001AC14 01E47823 */ subu $t7, $t7, $a0
|
||||
/* 01B818 8001AC18 000F7900 */ sll $t7, $t7, 4
|
||||
@@ -96,11 +96,11 @@ glabel L8001ACAC
|
||||
/* 01B928 8001AD28 00032400 */ sll $a0, $v1, 0x10
|
||||
/* 01B92C 8001AD2C 00046403 */ sra $t4, $a0, 0x10
|
||||
/* 01B930 8001AD30 01802025 */ move $a0, $t4
|
||||
/* 01B934 8001AD34 0C01EBDE */ jal gen_random_item_cpu
|
||||
/* 01B934 8001AD34 0C01EBDE */ jal kart_ai_gen_random_item
|
||||
/* 01B938 8001AD38 85A50002 */ lh $a1, 2($t5)
|
||||
/* 01B93C 8001AD3C 8FA40030 */ lw $a0, 0x30($sp)
|
||||
/* 01B940 8001AD40 02002825 */ move $a1, $s0
|
||||
/* 01B944 8001AD44 0C006ADD */ jal cpu_decisions_branch_item
|
||||
/* 01B944 8001AD44 0C006ADD */ jal kart_ai_decisions_branch_item
|
||||
/* 01B948 8001AD48 00403025 */ move $a2, $v0
|
||||
/* 01B94C 8001AD4C 10000003 */ b .L8001AD5C
|
||||
/* 01B950 8001AD50 00000000 */ nop
|
||||
@@ -341,8 +341,8 @@ glabel L8009F8B8
|
||||
/* 0A04FC 8009F8FC 100003F1 */ b .L800A08C4
|
||||
/* 0A0500 8009F900 AE020000 */ sw $v0, ($s0)
|
||||
glabel L8009F904
|
||||
/* 0A0504 8009F904 3C11800E */ lui $s1, %hi(D_800E7574) # $s1, 0x800e
|
||||
/* 0A0508 8009F908 26317574 */ addiu $s1, %lo(D_800E7574) # addiu $s1, $s1, 0x7574
|
||||
/* 0A0504 8009F904 3C11800E */ lui $s1, %hi(gCourseNamesDup) # $s1, 0x800e
|
||||
/* 0A0508 8009F908 26317574 */ addiu $s1, %lo(gCourseNamesDup) # addiu $s1, $s1, 0x7574
|
||||
/* 0A050C 8009F90C 0C024C0D */ jal get_string_width
|
||||
/* 0A0510 8009F910 8E240000 */ lw $a0, ($s1)
|
||||
/* 0A0514 8009F914 244A0005 */ addiu $t2, $v0, 5
|
||||
@@ -1228,13 +1228,13 @@ glabel L800A05C4
|
||||
/* 0A11D4 800A05D4 3C013F80 */ li $at, 0x3F800000 # 1.000000
|
||||
/* 0A11D8 800A05D8 44819000 */ mtc1 $at, $f18
|
||||
/* 0A11DC 800A05DC C6300024 */ lwc1 $f16, 0x24($s1)
|
||||
/* 0A11E0 800A05E0 3C06800E */ lui $a2, %hi(D_800E7524)
|
||||
/* 0A11E0 800A05E0 3C06800E */ lui $a2, %hi(gCourseNames)
|
||||
/* 0A11E4 800A05E4 00194880 */ sll $t1, $t9, 2
|
||||
/* 0A11E8 800A05E8 00C93021 */ addu $a2, $a2, $t1
|
||||
/* 0A11EC 800A05EC 8E24000C */ lw $a0, 0xc($s1)
|
||||
/* 0A11F0 800A05F0 8E250010 */ lw $a1, 0x10($s1)
|
||||
/* 0A11F4 800A05F4 8E27001C */ lw $a3, 0x1c($s1)
|
||||
/* 0A11F8 800A05F8 8CC67524 */ lw $a2, %lo(D_800E7524)($a2)
|
||||
/* 0A11F8 800A05F8 8CC67524 */ lw $a2, %lo(gCourseNames)($a2)
|
||||
/* 0A11FC 800A05FC E7B20014 */ swc1 $f18, 0x14($sp)
|
||||
/* 0A1200 800A0600 0C024CC9 */ jal func_80093324
|
||||
/* 0A1204 800A0604 E7B00010 */ swc1 $f16, 0x10($sp)
|
||||
|
||||
@@ -488,7 +488,7 @@ glabel L800A23DC
|
||||
/* 0A3204 800A2604 24010002 */ li $at, 2
|
||||
.L800A2608:
|
||||
/* 0A3208 800A2608 80620005 */ lb $v0, 5($v1)
|
||||
/* 0A320C 800A260C 3C06800E */ lui $a2, %hi(D_800E75C4)
|
||||
/* 0A320C 800A260C 3C06800E */ lui $a2, %hi(gCourseNamesDup2)
|
||||
/* 0A3210 800A2610 E7B40014 */ swc1 $f20, 0x14($sp)
|
||||
/* 0A3214 800A2614 04410003 */ bgez $v0, .L800A2624
|
||||
/* 0A3218 800A2618 00024083 */ sra $t0, $v0, 2
|
||||
@@ -511,7 +511,7 @@ glabel L800A23DC
|
||||
/* 0A3254 800A2654 000D7080 */ sll $t6, $t5, 2
|
||||
/* 0A3258 800A2658 00CE3021 */ addu $a2, $a2, $t6
|
||||
/* 0A325C 800A265C 0C024CC9 */ jal func_80093324
|
||||
/* 0A3260 800A2660 8CC675C4 */ lw $a2, %lo(D_800E75C4)($a2)
|
||||
/* 0A3260 800A2660 8CC675C4 */ lw $a2, %lo(gCourseNamesDup2)($a2)
|
||||
/* 0A3264 800A2664 24010002 */ li $at, 2
|
||||
.L800A2668:
|
||||
/* 0A3268 800A2668 02208025 */ move $s0, $s1
|
||||
@@ -681,7 +681,7 @@ glabel L800A26A8
|
||||
/* 0A34C0 800A28C0 24010002 */ li $at, 2
|
||||
.L800A28C4:
|
||||
/* 0A34C4 800A28C4 80620005 */ lb $v0, 5($v1)
|
||||
/* 0A34C8 800A28C8 3C06800E */ lui $a2, %hi(D_800E75C4)
|
||||
/* 0A34C8 800A28C8 3C06800E */ lui $a2, %hi(gCourseNamesDup2)
|
||||
/* 0A34CC 800A28CC E7B40014 */ swc1 $f20, 0x14($sp)
|
||||
/* 0A34D0 800A28D0 04410003 */ bgez $v0, .L800A28E0
|
||||
/* 0A34D4 800A28D4 00026883 */ sra $t5, $v0, 2
|
||||
@@ -704,7 +704,7 @@ glabel L800A26A8
|
||||
/* 0A3510 800A2910 00085080 */ sll $t2, $t0, 2
|
||||
/* 0A3514 800A2914 00CA3021 */ addu $a2, $a2, $t2
|
||||
/* 0A3518 800A2918 0C024CC9 */ jal func_80093324
|
||||
/* 0A351C 800A291C 8CC675C4 */ lw $a2, %lo(D_800E75C4)($a2)
|
||||
/* 0A351C 800A291C 8CC675C4 */ lw $a2, %lo(gCourseNamesDup2)($a2)
|
||||
/* 0A3520 800A2920 24010002 */ li $at, 2
|
||||
.L800A2924:
|
||||
/* 0A3524 800A2924 02208025 */ move $s0, $s1
|
||||
@@ -899,7 +899,7 @@ glabel L800A29D0
|
||||
/* 0A37DC 800A2BDC 24010002 */ li $at, 2
|
||||
.L800A2BE0:
|
||||
/* 0A37E0 800A2BE0 80620005 */ lb $v0, 5($v1)
|
||||
/* 0A37E4 800A2BE4 3C06800E */ lui $a2, %hi(D_800E75C4)
|
||||
/* 0A37E4 800A2BE4 3C06800E */ lui $a2, %hi(gCourseNamesDup2)
|
||||
/* 0A37E8 800A2BE8 E7B40014 */ swc1 $f20, 0x14($sp)
|
||||
/* 0A37EC 800A2BEC 04410003 */ bgez $v0, .L800A2BFC
|
||||
/* 0A37F0 800A2BF0 00026083 */ sra $t4, $v0, 2
|
||||
@@ -922,7 +922,7 @@ glabel L800A29D0
|
||||
/* 0A382C 800A2C2C 00194080 */ sll $t0, $t9, 2
|
||||
/* 0A3830 800A2C30 00C83021 */ addu $a2, $a2, $t0
|
||||
/* 0A3834 800A2C34 0C024CC9 */ jal func_80093324
|
||||
/* 0A3838 800A2C38 8CC675C4 */ lw $a2, %lo(D_800E75C4)($a2)
|
||||
/* 0A3838 800A2C38 8CC675C4 */ lw $a2, %lo(gCourseNamesDup2)($a2)
|
||||
/* 0A383C 800A2C3C 24010002 */ li $at, 2
|
||||
.L800A2C40:
|
||||
/* 0A3840 800A2C40 02208025 */ move $s0, $s1
|
||||
|
||||
@@ -184,7 +184,6 @@
|
||||
"bin/gTextureMenu100cc.rgba16.tkmk00": {"meta":{"size":"0x200"}, "offsets": {"us":["0x8080C0", "0x0"]}},
|
||||
"bin/gTextureMenu150cc.rgba16.tkmk00": {"meta":{"size":"0x200"}, "offsets": {"us":["0x8082C0", "0x0"]}},
|
||||
"bin/gTextureMenuExtra.rgba16.tkmk00": {"meta":{"size":"0x200"}, "offsets": {"us":["0x8084C0", "0x0"]}},
|
||||
|
||||
"bin/gTextureMenuWithoutItem.rgba16.tkmk00": {"meta":{"size":"0x300"}, "offsets": {"us":["0x8086C0", "0x0"]}},
|
||||
"bin/gTextureMenuWithItem.rgba16.tkmk00": {"meta":{"size":"0x300"}, "offsets": {"us":["0x8089C0", "0x0"]}},
|
||||
"bin/gTextureMenuBegin.rgba16.tkmk00": {"meta":{"size":"0x200"}, "offsets": {"us":["0x808CC0", "0x0"]}},
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
579c48e211ae952530ffc8738709f078d5dd215e:
|
||||
name: Mario Kart 64 [US]
|
||||
path: yamls/us
|
||||
config:
|
||||
gbi: F3DEX_MK64
|
||||
sort: OFFSET
|
||||
enums:
|
||||
- include/defines.h
|
||||
output:
|
||||
binary: mkcube.otr
|
||||
headers: include/assets
|
||||
code: assets/code
|
||||
metadata: [yamls/courses]
|
||||
segments:
|
||||
- 0x000000
|
||||
- 0x000000
|
||||
- 0x12AAE0
|
||||
- 0x000000
|
||||
- 0x000000
|
||||
- 0x000000
|
||||
- 0x825800
|
||||
- 0x000000
|
||||
- 0x000000
|
||||
- 0x88CD70
|
||||
- 0x729A30
|
||||
- 0x821D10
|
||||
- 0x7FA3C0
|
||||
- 0x132B50
|
||||
- 0x000000
|
||||
- 0x145470
|
||||
@@ -1964,7 +1964,7 @@ Gfx d_course_frappe_snowland_dl_33E0[] =
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_frappe_unknown_waypoints[] = {
|
||||
TrackWaypoint d_course_frappe_snowland_unknown_waypoints[] = {
|
||||
{-4, 0, -259, 0},
|
||||
{-4, 0, -282, 0},
|
||||
{-10, 0, -526, 0},
|
||||
@@ -2040,7 +2040,7 @@ TrackWaypoint d_course_frappe_unknown_waypoints[] = {
|
||||
{-32768, 0, 0, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_frappe_track_waypoints[] = {
|
||||
TrackWaypoint d_course_frappe_snowland_track_waypoints[] = {
|
||||
{-4, 0, -270, 1},
|
||||
{-4, 0, -290, 1},
|
||||
{-4, 0, -310, 2},
|
||||
|
||||
@@ -75,8 +75,8 @@ extern Gfx d_course_frappe_snowland_dl_3198[];
|
||||
extern Gfx d_course_frappe_snowland_dl_3270[];
|
||||
extern Gfx d_course_frappe_snowland_dl_3328[];
|
||||
extern Gfx d_course_frappe_snowland_dl_33E0[];
|
||||
extern TrackWaypoint d_course_frappe_unknown_waypoints[];
|
||||
extern TrackWaypoint d_course_frappe_track_waypoints[];
|
||||
extern TrackWaypoint d_course_frappe_snowland_unknown_waypoints[];
|
||||
extern TrackWaypoint d_course_frappe_snowland_track_waypoints[];
|
||||
extern u8 d_course_frappe_snowland_snowman_tlut[];
|
||||
extern u8 d_course_frappe_snowland_snowman_head[];
|
||||
extern u8 d_course_frappe_snowland_snowman_body[];
|
||||
|
||||
@@ -6767,7 +6767,7 @@ Gfx d_course_koopa_troopa_beach_dl_AD40[] =
|
||||
};
|
||||
|
||||
// 0xADE0 path
|
||||
TrackWaypoint d_course_koopa_troopa_beach_unknown_waypoints0[] = {
|
||||
TrackWaypoint d_course_koopa_troopa_beach_unknown_waypoints[] = {
|
||||
{-34, 0, 103, 0},
|
||||
{-34, 0, 60, 0},
|
||||
{-38, 0, -184, 0},
|
||||
@@ -6894,7 +6894,7 @@ TrackWaypoint d_course_koopa_troopa_beach_unknown_waypoints1[] = {
|
||||
{-32768, 0, 0, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_koopa_troopa_beach_track_waypoints0[] = {
|
||||
TrackWaypoint d_course_koopa_troopa_beach_track_waypoints[] = {
|
||||
{-34, 1, 81, 1},
|
||||
{-34, 1, 61, 1},
|
||||
{-34, 1, 41, 1},
|
||||
@@ -7506,7 +7506,7 @@ TrackWaypoint d_course_koopa_troopa_beach_track_waypoints0[] = {
|
||||
{-32768, -32768, -32768, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_koopa_troopa_beach_track_waypoints1[] = {
|
||||
TrackWaypoint d_course_koopa_troopa_beach_track_waypoints_2[] = {
|
||||
{-29, 1, 88, 1},
|
||||
{-29, 1, 68, 1},
|
||||
{-29, 1, 48, 1},
|
||||
|
||||
@@ -306,10 +306,10 @@ extern Gfx d_course_koopa_troopa_beach_dl_AB88[];
|
||||
extern Gfx d_course_koopa_troopa_beach_dl_AC10[];
|
||||
extern Gfx d_course_koopa_troopa_beach_dl_AC68[];
|
||||
extern Gfx d_course_koopa_troopa_beach_dl_AD40[];
|
||||
extern TrackWaypoint d_course_koopa_troopa_beach_unknown_waypoints0[];
|
||||
extern TrackWaypoint d_course_koopa_troopa_beach_unknown_waypoints[];
|
||||
extern TrackWaypoint d_course_koopa_troopa_beach_unknown_waypoints1[];
|
||||
extern TrackWaypoint d_course_koopa_troopa_beach_track_waypoints0[];
|
||||
extern TrackWaypoint d_course_koopa_troopa_beach_track_waypoints1[];
|
||||
extern TrackWaypoint d_course_koopa_troopa_beach_track_waypoints[];
|
||||
extern TrackWaypoint d_course_koopa_troopa_beach_track_waypoints_2[];
|
||||
extern u8 d_course_koopa_troopa_beach_crab_tlut[];
|
||||
extern u8 d_course_koopa_troopa_beach_crab_frames[][4096];
|
||||
extern u32 d_course_koopa_troopa_beach_unk_data1[];
|
||||
|
||||
@@ -3017,7 +3017,7 @@ Gfx d_course_sherbet_land_dl_4B20[] =
|
||||
};
|
||||
|
||||
// unk 0x4BF8
|
||||
TrackWaypoint d_course_sherbet_land_uknown_waypoints[] = {
|
||||
TrackWaypoint d_course_sherbet_land_unknown_waypoints[] = {
|
||||
{-10, 0, 10, 0},
|
||||
{-10, 0, -8, 0},
|
||||
{-18, 0, -213, 0},
|
||||
|
||||
@@ -152,7 +152,7 @@ extern Gfx d_course_sherbet_land_dl_4930[];
|
||||
extern Gfx d_course_sherbet_land_dl_4A20[];
|
||||
extern Gfx d_course_sherbet_land_dl_4A98[];
|
||||
extern Gfx d_course_sherbet_land_dl_4B20[];
|
||||
extern TrackWaypoint d_course_sherbet_land_uknown_waypoints[];
|
||||
extern TrackWaypoint d_course_sherbet_land_unknown_waypoints[];
|
||||
extern TrackWaypoint d_course_sherbet_land_track_waypoints[];
|
||||
extern Vtx d_course_sherbet_land_model1[];
|
||||
extern Vtx d_course_sherbet_land_model2[];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#include <PR/ultratypes.h>
|
||||
#include <PR/mbi.h>
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "course_offsets.h"
|
||||
#include "course_data.h"
|
||||
|
||||
|
||||
@@ -3294,7 +3294,7 @@ TrackWaypoint d_course_wario_stadium_unknown_waypoints[] = {
|
||||
{-32768, 0, 0, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_wario_staduim_track_waypoints[] = {
|
||||
TrackWaypoint d_course_wario_stadium_track_waypoints[] = {
|
||||
{13, 0, -9, 1},
|
||||
{11, 0, -28, 1},
|
||||
{11, 0, -48, 1},
|
||||
|
||||
@@ -116,7 +116,7 @@ extern Gfx d_course_wario_stadium_dl_5460[];
|
||||
extern Gfx d_course_wario_stadium_dl_54E8[];
|
||||
extern Gfx d_course_wario_stadium_dl_5588[];
|
||||
extern TrackWaypoint d_course_wario_stadium_unknown_waypoints[];
|
||||
extern TrackWaypoint d_course_wario_staduim_track_waypoints[];
|
||||
extern TrackWaypoint d_course_wario_stadium_track_waypoints[];
|
||||
extern Vtx d_course_wario_stadium_sign_head_model1[];
|
||||
extern Vtx d_course_wario_stadium_sign_head_model2[];
|
||||
extern Vtx d_course_wario_stadium_sign_head_model3[];
|
||||
|
||||
@@ -7411,7 +7411,7 @@ Gfx d_course_yoshi_valley_dl_D540[] =
|
||||
|
||||
|
||||
// 0xD780
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints0[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints[] = {
|
||||
{-3, 0, -4, 0},
|
||||
{-3, 0, -20, 0},
|
||||
{-3, 0, -261, 0},
|
||||
@@ -7487,7 +7487,7 @@ TrackWaypoint d_course_yoshi_valley_unknown_waypoints0[] = {
|
||||
{-32768, 0, 0, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints1[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints_2[] = {
|
||||
{-6, 0, -5, 1},
|
||||
{-6, 0, -21, 1},
|
||||
{-5, 0, -434, 1},
|
||||
@@ -7564,7 +7564,7 @@ TrackWaypoint d_course_yoshi_valley_unknown_waypoints1[] = {
|
||||
{-32768, 0, 0, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints2[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints_3[] = {
|
||||
{-3, 0, -3, 4},
|
||||
{-3, 0, -19, 4},
|
||||
{0, 0, -268, 4},
|
||||
@@ -7649,7 +7649,7 @@ TrackWaypoint d_course_yoshi_valley_unknown_waypoints2[] = {
|
||||
{-32768, 0, 0, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints3[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_unknown_waypoints_4[] = {
|
||||
{-2, 0, -1, 7},
|
||||
{0, 0, -18, 7},
|
||||
{-2, 0, -268, 7},
|
||||
@@ -7737,7 +7737,7 @@ TrackWaypoint d_course_yoshi_valley_unknown_waypoints3[] = {
|
||||
{-32768, 0, 0, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints0[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints[] = {
|
||||
{-3, 180, -12, 1},
|
||||
{-3, 180, -32, 2},
|
||||
{-3, 180, -52, 2},
|
||||
@@ -8418,7 +8418,7 @@ TrackWaypoint d_course_yoshi_valley_track_waypoints0[] = {
|
||||
{-32768, -32768, -32768, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints1[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints_2[] = {
|
||||
{-6, 180, -13, 1},
|
||||
{-5, 180, -33, 2},
|
||||
{-5, 180, -53, 2},
|
||||
@@ -9088,7 +9088,7 @@ TrackWaypoint d_course_yoshi_valley_track_waypoints1[] = {
|
||||
{-32768, -32768, -32768, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints2[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints_3[] = {
|
||||
{-3, 180, -11, 1},
|
||||
{-2, 180, -31, 2},
|
||||
{-2, 180, -51, 2},
|
||||
@@ -9770,7 +9770,7 @@ TrackWaypoint d_course_yoshi_valley_track_waypoints2[] = {
|
||||
{-32768, -32768, -32768, 0},
|
||||
};
|
||||
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints3[] = {
|
||||
TrackWaypoint d_course_yoshi_valley_track_waypoints_4[] = {
|
||||
{-1, 180, -9, 1},
|
||||
{0, 180, -29, 2},
|
||||
{0, 180, -49, 2},
|
||||
|
||||
@@ -133,14 +133,14 @@ extern Gfx d_course_yoshi_valley_dl_D018[];
|
||||
extern Gfx d_course_yoshi_valley_dl_D1E8[];
|
||||
extern Gfx d_course_yoshi_valley_dl_D3D0[];
|
||||
extern Gfx d_course_yoshi_valley_dl_D540[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints0[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints1[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints2[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints3[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints0[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints1[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints2[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints3[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints_2[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints_3[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_unknown_waypoints_4[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints_2[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints_3[];
|
||||
extern TrackWaypoint d_course_yoshi_valley_track_waypoints_4[];
|
||||
extern Lights1 d_course_yoshi_valley_unknown_light1;
|
||||
extern Lights1 d_course_yoshi_valley_unknown_light2;
|
||||
extern Lights1 d_course_yoshi_valley_unknown_light3;
|
||||
|
||||
+5
-5
@@ -75,12 +75,12 @@
|
||||
#include "src/code_80091440.h"
|
||||
#include "src/code_80091750.h"
|
||||
#include "src/code_800AF9B0.h"
|
||||
#include "src/common_textures.h"
|
||||
#include "src/data/data_800E45C0.h"
|
||||
#include "src/data/data_800E8700.h"
|
||||
#include <assets/common_data.h>
|
||||
#include <assets/data_800E45C0.h>
|
||||
#include <assets/data_800E8700.h>
|
||||
#include "src/data/some_data.h"
|
||||
#include "src/data/path_spawn_data.h"
|
||||
#include "src/data/trig_tables.h"
|
||||
#include "src/data/path_spawn_metadata.h"
|
||||
#include "src/buffers/trig_tables.h"
|
||||
#include "src/data_segment2.h"
|
||||
#include "src/effects.h"
|
||||
#include "src/ending/ceremony_and_credits.h"
|
||||
|
||||
@@ -10,9 +10,11 @@ The build system has the following package requirements:
|
||||
|
||||
To add submodules run `git submodule update --init --recursive` after cloning.
|
||||
|
||||
Run `make assets` to extract assets.
|
||||
|
||||
# Linux
|
||||
```bash
|
||||
sudo apt install build-essential pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
|
||||
sudo apt install cmake build-essential pkg-config git binutils-mips-linux-gnu python3 zlib1g-dev libaudiofile-dev libcapstone-dev
|
||||
```
|
||||
|
||||
### Arch
|
||||
@@ -28,11 +30,11 @@ Review the [n64decomp/sm64](https://github.com/n64decomp/sm64) readme for instru
|
||||
# Windows
|
||||
|
||||
- Clone the repo or download the zip.
|
||||
- Download and extract the toolchain from [here](https://github.com/coco875/mk64-tools/releases/download/v0.0.6/mips-tools-chain-windows.zip)
|
||||
- Download and extract the toolchain from [here](https://github.com/coco875/mk64-tools/releases/download/v0.0.7/mips-tools-chain-windows.zip)
|
||||
|
||||
### Setup
|
||||
- Place the `mingw64` folder from the toolchain into the tools folder like so: `mk64/tools/mingw64`.
|
||||
- Open a terminal (cmd or powershell) in the repo folder and run `"tools\mingw64\w64devkit.exe"` and after `make`
|
||||
- Open a terminal (cmd or powershell) in the repo folder and run `"tools\mingw64\w64devkit.exe"` and after `make assets && make -j`
|
||||
- Wait for the build to finish and Enjoy!
|
||||
|
||||
# macOS
|
||||
|
||||
+1
-1
@@ -92,4 +92,4 @@ p {
|
||||
|
||||
html.dark-mode .clipboard {
|
||||
fill: white;
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -57,4 +57,4 @@ Complete resources for learning about mk64 decomp
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@endhtmlonly
|
||||
@endhtmlonly
|
||||
@@ -159,9 +159,9 @@ index 0000000..5569838
|
||||
+ // Don't use `bool = !bool` here as the game code can swap these on you.
|
||||
+ // Which will confuse the code. This forces it to always be correct
|
||||
+ if (isFlycam) {
|
||||
+ player->type |= PLAYER_CPU;
|
||||
+ player->type |= PLAYER_KART_AI;
|
||||
+ } else {
|
||||
+ player->type &= PLAYER_CPU;
|
||||
+ player->type &= PLAYER_KART_AI;
|
||||
+ }
|
||||
+
|
||||
+ gIsHUDVisible = !isFlycam;
|
||||
|
||||
+1
-1
@@ -58,6 +58,6 @@ extern BombKart gBombKarts[NUM_BOMB_KARTS_MAX];
|
||||
extern Collision D_80164038[NUM_BOMB_KARTS_MAX];
|
||||
|
||||
// data/data_0DD0A0_1.s
|
||||
extern BombKartSpawn D_800DCC08[NUM_COURSES][NUM_BOMB_KARTS_MAX];
|
||||
extern BombKartSpawn gBombKartSpawns[NUM_COURSES][NUM_BOMB_KARTS_MAX];
|
||||
|
||||
#endif
|
||||
|
||||
@@ -4,6 +4,9 @@
|
||||
#include "ultra64.h"
|
||||
|
||||
typedef f32 Vec3f[3];
|
||||
typedef f32 Vec4f[4];
|
||||
|
||||
typedef s32 Vec3iu[3];
|
||||
|
||||
typedef s16 Vec3s[3];
|
||||
typedef u16 Vec3su[3];
|
||||
|
||||
+19
-4
@@ -88,13 +88,13 @@
|
||||
#define PLAYER_STAGING (1 << 9) // 0x0200
|
||||
#define PLAYER_UNKNOWN (1 << 10) // 0x0400 // unused ?
|
||||
#define PLAYER_CINEMATIC_MODE (1 << 11) // 0x0800 // Also used to track eliminations in Battle mode.
|
||||
#define PLAYER_CPU (1 << 12) // 0x1000
|
||||
#define PLAYER_KART_AI (1 << 12) // 0x1000
|
||||
#define PLAYER_START_SEQUENCE (1 << 13) // 0x2000
|
||||
#define PLAYER_HUMAN (1 << 14) // 0x4000
|
||||
#define PLAYER_EXISTS (1 << 15) // 0x8000
|
||||
|
||||
// Compiles to -0x1000 in diff.py
|
||||
#define PLAYER_HUMAN_AND_CPU PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_CPU | PLAYER_START_SEQUENCE
|
||||
#define PLAYER_HUMAN_AND_KART_AI PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_KART_AI | PLAYER_START_SEQUENCE
|
||||
|
||||
#define ZERO_PLAYERS_SELECTED 0
|
||||
#define ONE_PLAYERS_SELECTED 1
|
||||
@@ -290,7 +290,7 @@
|
||||
/**
|
||||
* @brief Item IDs
|
||||
*/
|
||||
typedef enum {
|
||||
typedef enum ITEMS {
|
||||
/* 0x00 */ ITEM_NONE = 0,
|
||||
/* 0x01 */ ITEM_BANANA,
|
||||
/* 0x02 */ ITEM_BANANA_BUNCH,
|
||||
@@ -307,7 +307,22 @@ typedef enum {
|
||||
/* 0x0D */ ITEM_DOUBLE_MUSHROOM,
|
||||
/* 0x0E */ ITEM_TRIPLE_MUSHROOM,
|
||||
/* 0x0F */ ITEM_SUPER_MUSHROOM
|
||||
} ITEMS;
|
||||
};
|
||||
|
||||
typedef enum KART_AI_BEHAVIOURS {
|
||||
BEHAVIOUR_NONE = 0,
|
||||
BEHAVIOUR_1,
|
||||
BEHAVIOUR_HOP,
|
||||
BEHAVIOUR_3,
|
||||
BEHAVIOUR_4,
|
||||
BEHAVIOUR_5,
|
||||
BEHAVIOUR_NORMAL_SPEED,
|
||||
BEHAVIOUR_FAST_SPEED,
|
||||
BEHAVIOUR_SLOW_SPEED,
|
||||
BEHAVIOUR_9,
|
||||
BEHAVIOUR_10,
|
||||
BEHAVIOUR_MAX_SPEED
|
||||
};
|
||||
|
||||
/**
|
||||
* @brief Balloon status
|
||||
|
||||
@@ -1,21 +0,0 @@
|
||||
#ifndef HARDCODED_SEGMENTS_H
|
||||
#define HARDCODED_SEGMENTS_H
|
||||
|
||||
/**
|
||||
* @file Contains hardcoded segment addresses
|
||||
* Only used in the linker
|
||||
**/
|
||||
|
||||
|
||||
#define LINKER_MAIN 0x80000400
|
||||
|
||||
#define LINKER_ENDING 0x80280000
|
||||
|
||||
#define LINKER_RACING 0x8028DF00
|
||||
|
||||
#define LINKER_TRIG_TABLES 0x802BA370
|
||||
|
||||
// End of Jumper pak memory
|
||||
#define RDRAM_END 0x807FFFFF
|
||||
|
||||
#endif /* HARDCODED_SEGMENTS_H */
|
||||
@@ -52,6 +52,23 @@
|
||||
#define ALIGNED16
|
||||
#endif
|
||||
|
||||
// Fixed point macros
|
||||
#define FTOFIX(f) ((s32)((f) * 65536.0))
|
||||
#define ITOFIX(i) ((s32)((i) << 16))
|
||||
#define FIXTOF(x) ((double)((x) / 65536.0))
|
||||
#define FIXTOI(x) ((s32)((x) >> 16))
|
||||
|
||||
// Split fixed-point values into its integer or fractional parts.
|
||||
#define toFixedInt(f) (FTOFIX(f) >> 16)
|
||||
#define toFrac(f) (FTOFIX(f) & 0xFFFF)
|
||||
|
||||
// Setup a fixed-point matrix using floats or doubles. Recommend using doubles for more precision.
|
||||
#define toFixedPointMatrix(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15, x16) \
|
||||
{{((toFixedInt(x1)) << 16) | toFixedInt(x2), ((toFixedInt(x3)) << 16) | toFixedInt(x4), (toFixedInt(x5) << 16) | toFixedInt(x6), (toFixedInt(x7) << 16) | toFixedInt(x8)}, \
|
||||
{((toFixedInt(x9)) << 16) | toFixedInt(x10), ((toFixedInt(x11)) << 16) | toFixedInt(x12), (toFixedInt(x13) << 16) | toFixedInt(x14), (toFixedInt(x15) << 16) | toFixedInt(x16)}, \
|
||||
{((toFrac(x1)) << 16) | toFrac(x2), ((toFrac(x3)) << 16) | toFrac(x4), (toFrac(x5) << 16) | toFrac(x6), (toFrac(x7) << 16) | toFrac(x8)}, \
|
||||
{((toFrac(x9)) << 16) | toFrac(x10), ((toFrac(x11)) << 16) | toFrac(x12), (toFrac(x13) << 16) | toFrac(x14), (toFrac(x15) << 16) | toFrac(x16)}}
|
||||
|
||||
// convert a virtual address to physical.
|
||||
#define VIRTUAL_TO_PHYSICAL(addr) ((uintptr_t)(addr) & 0x1FFFFFFF)
|
||||
|
||||
|
||||
@@ -5,6 +5,12 @@
|
||||
#include <common_structs.h>
|
||||
#include "camera.h"
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ s16 waypointStart;
|
||||
/* 0x2 */ s16 waypointEnd;
|
||||
/* 0x4 */ s32 type;
|
||||
} KartAIBehaviour; // size = 0x8
|
||||
|
||||
enum SpTaskState {
|
||||
SPTASK_STATE_NOT_STARTED,
|
||||
SPTASK_STATE_RUNNING,
|
||||
|
||||
@@ -3,7 +3,14 @@
|
||||
|
||||
OUTPUT_ARCH (mips)
|
||||
|
||||
#include "include/linker_segments.h"
|
||||
#define LINKER_MAIN 0x80000400
|
||||
|
||||
#define LINKER_ENDING 0x80280000
|
||||
|
||||
#define LINKER_RACING 0x8028DF00
|
||||
|
||||
// End of Jumper pak memory
|
||||
#define RDRAM_END 0x807FFFFF
|
||||
|
||||
#define BEGIN_SEG(name, addr) \
|
||||
_##name##SegmentStart = ADDR(.name); \
|
||||
@@ -81,7 +88,7 @@ SECTIONS
|
||||
BUILD_DIR/src/debug/crash_screen_enhancement.o(.text);
|
||||
BUILD_DIR/src/debug/debug.o(.text);
|
||||
BUILD_DIR/src/os/sprintf.o(.text);
|
||||
BUILD_DIR/src/os/is_debug.o(.text);
|
||||
BUILD_DIR/src/os/is_debug.o(.text);
|
||||
#endif
|
||||
BUILD_DIR/src/os/osCreateThread.o(.text);
|
||||
#ifdef VERSION_EU
|
||||
@@ -209,7 +216,7 @@ SECTIONS
|
||||
BUILD_DIR/src/profiler.o(.data);
|
||||
BUILD_DIR/src/crash_screen.o(.data);
|
||||
BUILD_DIR/src/staff_ghosts.o(.data);
|
||||
BUILD_DIR/src/data/path_spawn_data.o(.data);
|
||||
BUILD_DIR/src/data/path_spawn_metadata.o(.data);
|
||||
BUILD_DIR/src/camera.o(.data);
|
||||
BUILD_DIR/src/render_player.o(.data);
|
||||
BUILD_DIR/src/kart_dma.o(.data);
|
||||
@@ -217,7 +224,7 @@ SECTIONS
|
||||
BUILD_DIR/src/player_controller.o(.data);
|
||||
BUILD_DIR/src/spawn_players.o(.data);
|
||||
BUILD_DIR/src/update_objects.o(.data);
|
||||
BUILD_DIR/src/data/data_800E45C0.o(.data);
|
||||
BUILD_DIR/assets/code/data_800E45C0/data_800E45C0.o(.data);
|
||||
BUILD_DIR/src/code_80057C60.o(.data);
|
||||
BUILD_DIR/src/data/some_data.o(.data);
|
||||
BUILD_DIR/src/effects.o(.data);
|
||||
@@ -226,7 +233,7 @@ SECTIONS
|
||||
BUILD_DIR/src/code_800AF9B0.o(.data);
|
||||
BUILD_DIR/src/menus.o(.data);
|
||||
BUILD_DIR/src/save.o(.data);
|
||||
BUILD_DIR/src/data/data_800E8700.o(.data);
|
||||
BUILD_DIR/assets/code/data_800E8700/data_800E8700.o(.data);
|
||||
BUILD_DIR/src/audio/synthesis.o(.data);
|
||||
BUILD_DIR/src/audio/heap.o(.data);
|
||||
BUILD_DIR/src/audio/load.o(.data);
|
||||
@@ -342,13 +349,15 @@ SECTIONS
|
||||
BUILD_DIR/src/os/osEepromWrite.o(.bss);
|
||||
BUILD_DIR/asm/os/__osException.o(.bss);
|
||||
BUILD_DIR/src/os/osLeoDiskInit.o(.bss);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_NOLOAD(main)
|
||||
|
||||
/* Checks that segments are not overlapping into the memory pool but is not strictly necessary */
|
||||
BEGIN_NOLOAD(memoryPool)
|
||||
{
|
||||
BUILD_DIR/src/data/memory_pool.o(.bss);
|
||||
BUILD_DIR/src/buffers/memory_pool.o(.bss);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_NOLOAD(memoryPool)
|
||||
|
||||
@@ -387,19 +396,21 @@ SECTIONS
|
||||
BUILD_DIR/src/racing/race_logic.o(.bss*);
|
||||
BUILD_DIR/src/racing/actors.o(.bss*);
|
||||
BUILD_DIR/src/racing/memory.o(.bss*);
|
||||
BUILD_DIR/src/buffers/random.o(.bss*);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_NOLOAD(racing)
|
||||
|
||||
BEGIN_NOLOAD(buffers)
|
||||
{
|
||||
BUILD_DIR/src/data/buffers.o(.bss*);
|
||||
BUILD_DIR/src/data/gfx_output_buffer.o(.bss*);
|
||||
BUILD_DIR/src/buffers/trig_tables_bss.o(.bss*);
|
||||
BUILD_DIR/src/buffers/buffers.o(.bss*);
|
||||
BUILD_DIR/src/buffers/gfx_output_buffer.o(.bss*);
|
||||
BUILD_DIR/src/audio/synthesis.o(.bss*);
|
||||
BUILD_DIR/src/audio/heap.o(.bss*);
|
||||
BUILD_DIR/src/audio/load.o(.bss);
|
||||
BUILD_DIR/src/audio/data.o(.bss);
|
||||
. = ALIGN(0x8);
|
||||
BUILD_DIR/src/audio/load.o(.bss*);
|
||||
BUILD_DIR/src/audio/data.o(.bss*);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_NOLOAD(buffers)
|
||||
|
||||
@@ -438,7 +449,7 @@ SECTIONS
|
||||
BEGIN_SEG(data_segment2, 0x02000000)
|
||||
{
|
||||
BUILD_DIR/src/data/textures.o(.data);
|
||||
BUILD_DIR/src/data/data_segment2.o(.data);
|
||||
BUILD_DIR/assets/code/data_segment2/data_segment2.o(.data);
|
||||
}
|
||||
END_SEG(data_segment2)
|
||||
|
||||
@@ -446,7 +457,7 @@ SECTIONS
|
||||
/* common textures, decompressed and set as segment 0x0D */
|
||||
BEGIN_SEG(common_textures, 0x0D000000)
|
||||
{
|
||||
BUILD_DIR/src/data/common_textures.mio0.o(.data);
|
||||
BUILD_DIR/assets/code/common_data/common_data.mio0.o(.data);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_SEG(common_textures)
|
||||
@@ -476,9 +487,9 @@ SECTIONS
|
||||
END_SEG(other_textures)
|
||||
|
||||
/* 0x802BA370 724220-729A30 [0x5810] */
|
||||
BEGIN_SEG(trigTables, LINKER_TRIG_TABLES)
|
||||
BEGIN_SEG(trigTables, _buffersSegmentNoloadStart)
|
||||
{
|
||||
BUILD_DIR/src/data/trig_tables.o(.data);
|
||||
BUILD_DIR/src/buffers/trig_tables.o(.data);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_SEG(trigTables)
|
||||
@@ -504,14 +515,14 @@ SECTIONS
|
||||
0x828400 -> 0x8028DE30 (0xD0) */
|
||||
BEGIN_SEG(ceremonyData, 0x0B000000)
|
||||
{
|
||||
BUILD_DIR/src/ending/ceremony_data.mio0.o(.data);
|
||||
BUILD_DIR/assets/code/ceremony_data/ceremony_data.mio0.o(.data);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_SEG(ceremonyData)
|
||||
|
||||
BEGIN_SEG(startupLogo, 0x06000000)
|
||||
{
|
||||
BUILD_DIR/src/data/startup_logo.mio0.o(.data);
|
||||
BUILD_DIR/assets/code/startup_logo/startup_logo.mio0.o(.data);
|
||||
. = ALIGN(0x10);
|
||||
}
|
||||
END_SEG(startupLogo)
|
||||
@@ -645,6 +656,8 @@ SECTIONS
|
||||
ASSERT((_mainSegmentNoloadEnd <= _memoryPoolSegmentNoloadStart), "Error: Main segment extended into the memory pool.")
|
||||
ASSERT((_memoryPoolSegmentNoloadEnd <= _endingSegmentStart), "Error: Memory pool extended into the ending segment.")
|
||||
ASSERT((_endingSegmentNoloadEnd <= _racingSegmentStart), "Error: Ending segment extended into the racing segment")
|
||||
ASSERT((_endingSegmentNoloadEnd <= _racingSegmentStart), "Error: Ending segment extended into the racing segment.")
|
||||
ASSERT((_racingSegmentNoloadEnd <= _buffersSegmentNoloadStart), "Error: Racing segment extended into the buffers segment.")
|
||||
ASSERT((_buffersSegmentNoloadEnd <= RDRAM_END), "Error: Buffers segment extended past 8MB of memory")
|
||||
ASSERT((_buffersSegmentNoloadEnd <= RDRAM_END), "Error: Buffers segment extended into trig tables segment.")
|
||||
}
|
||||
|
||||
+47
-5
@@ -5,10 +5,11 @@ import json
|
||||
import csv
|
||||
import os
|
||||
import re
|
||||
from pybadges import badge
|
||||
|
||||
# Script arguments.
|
||||
parser = argparse.ArgumentParser(description="Computes current progress throughout the whole project.")
|
||||
parser.add_argument("format", nargs="?", default="text", choices=["text", "verbose", "totalBadge", "gameBadge", "mainBadge", "endingBadge", "racingBadge", "audioBadge", "osBadge", "bytesToDecompile", "globalAsmFuncs", "m2cFuncs", "nonmatchingFuncs"])
|
||||
parser.add_argument("format", nargs="?", default="text", choices=["text", "verbose", "totalBadge", "gameBadge", "mainBadge", "endingBadge", "racingBadge", "audioBadge", "osBadge", "bytesToDecompile", "globalAsmFuncs", "m2cFuncs", "nonmatchingFuncs", "badge"])
|
||||
parser.add_argument("-d", "--debug", dest='debug', action='store_true',
|
||||
help="Adds additional debug information, outputs files parsed and score for each file")
|
||||
parser.add_argument("-n", "--nonmatching", dest='nonmatching', action='store_true',
|
||||
@@ -24,7 +25,7 @@ def GetNonMatchingFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
functions += re.findall(NON_MATCHING_FUNC_PATTERN, f.read(), re.DOTALL)
|
||||
functions += re.findall(NON_MATCHING_PRAGMA_PATTERN, f.read(), re.DOTALL)
|
||||
|
||||
@@ -38,7 +39,7 @@ def CountMipsToCFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
functions += re.findall(MIPS_TO_C_FUNC_PATTERN, f.read(), re.DOTALL)
|
||||
|
||||
return functions
|
||||
@@ -51,7 +52,7 @@ def CountGlobalAsmFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
functions += re.findall(GLOBAL_ASM_FUNC_PATTERN, f.read(), re.DOTALL)
|
||||
|
||||
return functions
|
||||
@@ -65,7 +66,7 @@ def GetCFunctions(files):
|
||||
functions = []
|
||||
|
||||
for file in files:
|
||||
with open(file) as f:
|
||||
with open(file, encoding="utf-8") as f:
|
||||
source_code = f.read()
|
||||
|
||||
# Parse regex pattern
|
||||
@@ -523,5 +524,46 @@ elif args.format == 'verbose':
|
||||
print(str(segRacing) + "/" + str(seg_racing_size) + " bytes " + adjective + " in segRacing " + str(segRacingPct) + "%")
|
||||
print(str(audio) + "/" + str(audio_size) + " bytes " + adjective + " in audio " + str(audioPct) + "%")
|
||||
print(str(libultra) + "/" + str(libultra_size) + " bytes " + adjective + " in libultra " + str(libultraPct) + "%\n")
|
||||
|
||||
elif args.format == 'badge':
|
||||
adjective = "decompiled" if args.nonmatching else "matched"
|
||||
|
||||
badge_size_left = badge(left_text="Size left", right_text=str(remaining_size), right_color="blue")
|
||||
with open("docs/html/size_left.svg", "w") as f:
|
||||
f.write(badge_size_left)
|
||||
badge_total_size = badge(left_text="Total size", right_text=str(total_code_size), right_color="blue")
|
||||
with open("docs/html/total_size.svg", "w") as f:
|
||||
f.write(badge_total_size)
|
||||
badge_total_pct = badge(left_text="Total progress", right_text=str(round(totalPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/total_progress.svg", "w") as f:
|
||||
f.write(badge_total_pct)
|
||||
badge_game_pct = badge(left_text="Game progress", right_text=str(round(gamePct, 2))+"%", right_color="green")
|
||||
with open("docs/html/game_progress.svg", "w") as f:
|
||||
f.write(badge_game_pct)
|
||||
badge_asm_funcs = badge(left_text="WIP functions", right_text=str(TotalGlobalAsmFunctions), right_color="blue")
|
||||
with open("docs/html/asm_funcs.svg", "w") as f:
|
||||
f.write(badge_asm_funcs)
|
||||
badge_nonmatching_funcs = badge(left_text="NON_MATCHING functions", right_text=str(TotalNonMatchingFunctions), right_color="blue")
|
||||
with open("docs/html/nonmatching_funcs.svg", "w") as f:
|
||||
f.write(badge_nonmatching_funcs)
|
||||
badge_m2c_funcs = badge(left_text="MIPS_TO_C functions", right_text=str(TotalMipsToCFunctions), right_color="blue")
|
||||
with open("docs/html/m2c_funcs.svg", "w") as f:
|
||||
f.write(badge_m2c_funcs)
|
||||
badge_seg_main = badge(left_text="Main progress", right_text=str(round(segMainPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/seg_main_progress.svg", "w") as f:
|
||||
f.write(badge_seg_main)
|
||||
badge_seg_ending = badge(left_text="Ending progress", right_text=str(round(segEndingPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/seg_ending_progress.svg", "w") as f:
|
||||
f.write(badge_seg_ending)
|
||||
badge_seg_racing = badge(left_text="Racing progress", right_text=str(round(segRacingPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/seg_racing_progress.svg", "w") as f:
|
||||
f.write(badge_seg_racing)
|
||||
badge_audio = badge(left_text="Audio progress", right_text=str(round(audioPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/audio_progress.svg", "w") as f:
|
||||
f.write(badge_audio)
|
||||
badge_libultra = badge(left_text="Libultra progress", right_text=str(round(libultraPct, 2))+"%", right_color="green")
|
||||
with open("docs/html/libultra_progress.svg", "w") as f:
|
||||
f.write(badge_libultra)
|
||||
|
||||
else:
|
||||
print("Unknown format argument: " + args.format)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <actors.h>
|
||||
#include <PR/gbi.h>
|
||||
#include <main.h>
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
|
||||
/**
|
||||
* @brief Renders the green shell actor.
|
||||
|
||||
@@ -18,7 +18,7 @@ void update_actor_kiwano_fruit(struct KiwanoFruit *fruit) {
|
||||
s32 nearestWaypoint;
|
||||
|
||||
player = &gPlayers[fruit->targetPlayer];
|
||||
if (((player->type & PLAYER_CPU) != 0) || (player->unk_110.unk34 == 0)) {
|
||||
if (((player->type & PLAYER_KART_AI) != 0) || (player->unk_110.unk34 == 0)) {
|
||||
fruit->state = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <actors.h>
|
||||
#include <PR/gbi.h>
|
||||
#include <main.h>
|
||||
#include <common_textures.h>
|
||||
#include <assets/common_data.h>
|
||||
#include "courses/all_course_data.h"
|
||||
|
||||
/**
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
#include "audio/synthesis.h"
|
||||
#include "audio/seqplayer.h"
|
||||
#include "audio/port_eu.h"
|
||||
#include "data/gfx_output_buffer.h"
|
||||
#include "buffers/gfx_output_buffer.h"
|
||||
|
||||
#define ALIGN16(val) (((val) + 0xF) & ~0xF)
|
||||
|
||||
|
||||
@@ -109,10 +109,6 @@ Acmd *final_resample(Acmd *acmd, struct NoteSynthesisState *synthesisState, s32
|
||||
Acmd *func_800B86A0(Acmd *cmd, struct NoteSubEu *note, struct NoteSynthesisState *synthesisState, s32 nSamples, u16 inBuf, s32 headsetPanSettings, u32 flags);
|
||||
Acmd *note_apply_headset_pan_effects(Acmd *acmd, struct NoteSubEu *noteSubEu, struct NoteSynthesisState *note, s32 bufLen, s32 flags, s32 leftRight);
|
||||
|
||||
// These 2 are almost certainly misnamed and misplaced
|
||||
extern u64 gGfxSPTaskOutputBuffer[];
|
||||
extern u32 gGfxSPTaskOutputBufferSize;
|
||||
|
||||
extern struct SynthesisReverb gSynthesisReverbs[4];
|
||||
|
||||
/*
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
#include <ultra64.h>
|
||||
#include <macros.h>
|
||||
#include "config.h"
|
||||
#include "buffers.h"
|
||||
|
||||
ALIGNED8 union_D_802BFB80 D_802BFB80;
|
||||
ALIGNED8 struct_D_802DFB80 D_802DFB80[2][2][8];
|
||||
#ifdef AVOID_UB
|
||||
ALIGNED8 struct_D_802F1F80 D_802F1F80[2][4][8];
|
||||
#else
|
||||
ALIGNED8 u16 D_802F1F80[2][4][0x100 * 8];
|
||||
#endif
|
||||
|
||||
ALIGNED8 u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
|
||||
#ifdef AVOID_UB
|
||||
ALIGNED8 u16 gFramebuffers[3][SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
#else
|
||||
u16 gFramebuffer0[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u16 gFramebuffer1[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u16 gFramebuffer2[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
#endif
|
||||
@@ -0,0 +1,7 @@
|
||||
#include <ultra64.h>
|
||||
#include <macros.h>
|
||||
#include "gfx_output_buffer.h"
|
||||
|
||||
ALIGNED8 u64 gGfxSPTaskOutputBuffer[GFX_OUTPUT_BUFFER_SIZE];
|
||||
|
||||
u32 gGfxSPTaskOutputBufferSize;
|
||||
@@ -9,6 +9,5 @@
|
||||
|
||||
// 0x3F00
|
||||
extern u64 gGfxSPTaskOutputBuffer[GFX_OUTPUT_BUFFER_SIZE];
|
||||
extern u32 gGfxSPTaskOutputBufferSize;
|
||||
|
||||
#endif // GFX_OUTPUT_BUFFER_H
|
||||
@@ -5,7 +5,7 @@
|
||||
#define MEMORY_POOL_SIZE 0xAB630
|
||||
|
||||
/**
|
||||
* Memory pool setup to prevent other code segments flowing into the memory pool
|
||||
* and for easier portability.
|
||||
* Memory pool variable prevents code segments flowing into the memory pool
|
||||
* for easier portability.
|
||||
*/
|
||||
u8 memoryPool[MEMORY_POOL_SIZE];
|
||||
@@ -0,0 +1,4 @@
|
||||
#include <segments.h>
|
||||
|
||||
u16 gRandomSeed16;
|
||||
u8 randomSeedPadding[216];
|
||||
@@ -0,0 +1,4 @@
|
||||
#include <ultra64.h>
|
||||
|
||||
extern u16 gRandomSeed16;
|
||||
extern u8 randomSeedPadding[];
|
||||
@@ -0,0 +1,13 @@
|
||||
#include <ultra64.h>
|
||||
#include <macros.h>
|
||||
|
||||
/**
|
||||
* Trig tables get loaded into memory at this location.
|
||||
* See trig_tables.c for the real file.
|
||||
*/
|
||||
|
||||
#ifdef VERSION_EU
|
||||
ALIGNED8 u8 trigTablesPadding[0x5750];
|
||||
#else
|
||||
ALIGNED8 u8 trigTablesPadding[0x5810];
|
||||
#endif
|
||||
+119
-119
@@ -20,7 +20,7 @@
|
||||
#include "code_80057C60.h"
|
||||
#include "bomb_kart.h"
|
||||
#include "courses/all_course_data.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "common_structs.h"
|
||||
#include "main.h"
|
||||
#include "menus.h"
|
||||
@@ -29,14 +29,14 @@
|
||||
#include "ending/podium_ceremony_actors.h"
|
||||
#include "spawn_players.h"
|
||||
#include "sounds.h"
|
||||
#include "data/path_spawn_data.h"
|
||||
#include "data/path_spawn_metadata.h"
|
||||
|
||||
s32 unk_code_80005FD0_pad[24];
|
||||
Collision D_80162E70;
|
||||
s16 D_80162EB0; // Possibly a float.
|
||||
s16 D_80162EB2; // possibly [3]
|
||||
|
||||
UnkCommonTextureStruct0 *D_80162EB8[20];
|
||||
KartAIBehaviour *gCoursesKartAIBehaviour[NUM_COURSES-1];
|
||||
|
||||
// more padding?
|
||||
s32 D_80162F08[2];
|
||||
@@ -91,17 +91,17 @@ u16 D_80163240[12];
|
||||
u16 D_80163258[12];
|
||||
u16 D_80163270[12];
|
||||
s32 D_80163288[10];
|
||||
UnkCommonTextureStruct0 *D_801632B0;
|
||||
u16 D_801632B8[12];
|
||||
u16 D_801632D0[12];
|
||||
u16 D_801632E8[12];
|
||||
KartAIBehaviour *sCurrentKartAIBehaviour;
|
||||
u16 gCurrentKartAIBehaviourId[12];
|
||||
u16 gPreviousKartAIBehaviourId[12];
|
||||
u16 gKartAIBehaviourState[12];
|
||||
s16 D_80163300[12];
|
||||
u16 D_80163318[12];
|
||||
u16 D_80163330[10];
|
||||
u16 D_80163344[2];
|
||||
u16 D_80163348[2];
|
||||
u16 D_8016334C[2];
|
||||
u16 D_80163350[12];
|
||||
u16 gSpeedKartAIBehaviour[12];
|
||||
s32 D_80163368[4];
|
||||
s32 D_80163378;
|
||||
s32 D_8016337C;
|
||||
@@ -1111,22 +1111,22 @@ void func_80008424(s32 playerId, f32 arg1, Player *player) {
|
||||
}
|
||||
} else {
|
||||
var_a1 = 1;
|
||||
switch (D_80163350[playerId]) { /* switch 1; irregular */
|
||||
case 1: /* switch 1 */
|
||||
switch (gSpeedKartAIBehaviour[playerId]) { /* switch 1; irregular */
|
||||
case SPEED_KART_AI_BEHAVIOUR_FAST: /* switch 1 */
|
||||
player->effects &= ~0x00200000;
|
||||
player_speed(player);
|
||||
break;
|
||||
case 3: /* switch 1 */
|
||||
case SPEED_KART_AI_BEHAVIOUR_MAX: /* switch 1 */
|
||||
player->effects |= 0x200000;
|
||||
player_speed(player);
|
||||
break;
|
||||
case 2: /* switch 1 */
|
||||
case SPEED_KART_AI_BEHAVIOUR_SLOW: /* switch 1 */
|
||||
if (((var_f2 / 18.0f) * 216.0f) > 20.0f) {
|
||||
arg1 = 1.6666666f;
|
||||
}
|
||||
var_a1 = 0;
|
||||
break;
|
||||
case 0: /* switch 1 */
|
||||
case SPEED_KART_AI_BEHAVIOUR_NORMAL: /* switch 1 */
|
||||
default: /* switch 1 */
|
||||
var_a1 = 0;
|
||||
break;
|
||||
@@ -1521,7 +1521,7 @@ void func_8000929C(s32 playerId, Player *player) {
|
||||
}
|
||||
D_80163240[playerId] = 1;
|
||||
func_80008F38(playerId);
|
||||
func_80011AE4(playerId);
|
||||
reset_kart_ai_behaviour(playerId);
|
||||
D_801642D8[playerId].unk_06 = 0;
|
||||
if ((D_8016348C == 0) && !(player->type & 0x800)) {
|
||||
gTimePlayerLastTouchedFinishLine[playerId] = func_80009258(playerId, someTemp0, tempPos2);
|
||||
@@ -1683,7 +1683,7 @@ void func_80009B60(s32 playerId) {
|
||||
f32 athing = 1.5f;
|
||||
|
||||
player = &gPlayers[playerId];
|
||||
if ((s32) D_800DCA4C[gCurrentCourseId] >= 0) {
|
||||
if ((s32) gKartAICourseMaximumSeparation[gCurrentCourseId] >= 0) {
|
||||
D_80163100[playerId] += 1;
|
||||
if (playerId == 0) {
|
||||
D_80163378++;
|
||||
@@ -1736,15 +1736,15 @@ void func_80009B60(s32 playerId) {
|
||||
player->unk_044 &= ~0x0001;
|
||||
}
|
||||
func_8000929C(playerId, player);
|
||||
if ((gCurrentCourseId != 0x0014) && ((D_80163240[playerId] == 1) || (playerId == 0))) {
|
||||
if ((gCurrentCourseId != COURSE_AWARD_CEREMONY) && ((D_80163240[playerId] == 1) || (playerId == 0))) {
|
||||
set_places();
|
||||
}
|
||||
if (player->type & 0x1000) {
|
||||
if ((D_801630E2 == 1) && (gCurrentCourseId != 0x0014)) {
|
||||
func_80011E38(playerId);
|
||||
if ((D_801630E2 == 1) && (gCurrentCourseId != COURSE_AWARD_CEREMONY)) {
|
||||
kart_ai_behaviour(playerId);
|
||||
}
|
||||
if ((playerId & 1) != (D_80163378 & 1)) {
|
||||
cpu_use_item_strategy(playerId);
|
||||
kart_ai_use_item_strategy(playerId);
|
||||
}
|
||||
func_800099EC(playerId, player);
|
||||
D_80162FD0 = 0;
|
||||
@@ -1955,7 +1955,7 @@ void func_80009B60(s32 playerId) {
|
||||
if (var_a2 < (s16) temp_f6) {
|
||||
var_a2 = temp_f6;
|
||||
}
|
||||
var_v1 = D_800DCA20[gCurrentCourseId];
|
||||
var_v1 = gKartAISteeringSensitivity[gCurrentCourseId];
|
||||
switch (D_801631D8[playerId]) { /* switch 4; irregular */
|
||||
case 2: /* switch 4 */
|
||||
if (D_80163068[playerId] > (0.5f * 1.0f)) {
|
||||
@@ -1974,7 +1974,7 @@ void func_80009B60(s32 playerId) {
|
||||
}
|
||||
break;
|
||||
}
|
||||
if ((D_801632E8[playerId] == 2) && ((D_80163068[playerId] > 0.9f) || (D_80163068[playerId] < -0.9f))) {
|
||||
if ((gKartAIBehaviourState[playerId] == KART_AI_BEHAVIOUR_STATE_RUNNING) && ((D_80163068[playerId] > 0.9f) || (D_80163068[playerId] < -0.9f))) {
|
||||
D_801630E8[playerId] = 0;
|
||||
player->effects &= ~0x10;
|
||||
}
|
||||
@@ -2194,7 +2194,7 @@ f32 func_8000B874(f32 posX, f32 posZ, u16 waypointIndex, s32 pathIndex) {
|
||||
void func_8000B95C(s32 playerId, u16 waypointIndex, s32 pathIndex) {
|
||||
UNUSED Vec3f pad;
|
||||
D_80163068[playerId] = 0.0f;
|
||||
if ((s32) D_800DCA4C[gCurrentCourseId] >= 0) {
|
||||
if ((s32) gKartAICourseMaximumSeparation[gCurrentCourseId] >= 0) {
|
||||
if ((gPlayers[playerId].type & 0x8000) != 0) {
|
||||
D_80163068[playerId] = func_8000B874(gPlayers[playerId].pos[0], gPlayers[playerId].pos[2], waypointIndex, pathIndex);
|
||||
}
|
||||
@@ -2947,7 +2947,7 @@ void set_bomb_kart_spawn_positions(void) {
|
||||
BombKartSpawn *temp_s1;
|
||||
|
||||
for (var_s3 = 0; var_s3 < NUM_BOMB_KARTS_VERSUS; var_s3++) {
|
||||
temp_s1 = &D_800DCC08[gCurrentCourseId][var_s3];
|
||||
temp_s1 = &gBombKartSpawns[gCurrentCourseId][var_s3];
|
||||
switch (gCurrentCourseId) {
|
||||
case COURSE_YOSHI_VALLEY:
|
||||
startingXPos = temp_s1->startingXPos;
|
||||
@@ -3432,7 +3432,7 @@ void func_8000F2BC(TrackWaypoint *arg0, size_t size) {
|
||||
// Appears to allocate memory for each course.
|
||||
void func_8000F2DC(void) {
|
||||
|
||||
struct _struct_D_800DD9D0_0x10 *ptr = &D_800DD9D0[gCurrentCourseId];
|
||||
struct _struct_gCoursePathSizes_0x10 *ptr = &gCoursePathSizes[gCurrentCourseId];
|
||||
s32 temp;
|
||||
s32 i;
|
||||
|
||||
@@ -3553,12 +3553,12 @@ void func_8000F628(void) {
|
||||
D_80163068[i] = 0.0f;
|
||||
D_80163090[i] = 0.0f;
|
||||
var_s5 = &D_801634F8[i];
|
||||
var_s5->unkC = D_800DCAA0[gCurrentCourseId] * (f32) (((i + 1) % 3) - 1);
|
||||
var_s5->unkC = gKartAICourseMinimumSeparation[gCurrentCourseId] * (f32) (((i + 1) % 3) - 1);
|
||||
var_s5->unk4 = var_s5->unkC;
|
||||
var_s5->unk0 = 0.0f;
|
||||
var_s5->unk8 = 0.015f;
|
||||
func_80011AB8(i);
|
||||
D_80163350[i] = 0;
|
||||
reset_kart_ai_behaviour_none(i);
|
||||
gSpeedKartAIBehaviour[i] = 0;
|
||||
D_801644F8[i] = 0;
|
||||
D_80163398[i] = 0;
|
||||
D_801633B0[i] = 0;
|
||||
@@ -3658,7 +3658,7 @@ void func_8000F628(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
func_80011A5C();
|
||||
copy_courses_kart_ai_behaviour();
|
||||
}
|
||||
|
||||
// @arg index from 0 to 3.
|
||||
@@ -3678,11 +3678,11 @@ void func_800100F0(s32 pathIndex) {
|
||||
s32 i;
|
||||
|
||||
// cast required
|
||||
if ((s32)D_800DCA4C[gCurrentCourseId] >= 0) {
|
||||
if ((s32)gKartAICourseMaximumSeparation[gCurrentCourseId] >= 0) {
|
||||
pathDest = D_80164550[pathIndex];
|
||||
bInvalidPath = 1;
|
||||
if (gCurrentCourseId != COURSE_AWARD_CEREMONY) {
|
||||
var_v0 = process_path_data(pathDest, segmented_to_virtual_dupe_2(D_800DC8D0[gCurrentCourseId][pathIndex]));
|
||||
var_v0 = process_path_data(pathDest, segmented_to_virtual_dupe_2(gCoursePathTable2[gCurrentCourseId][pathIndex]));
|
||||
gWaypointCountByPathIndex[pathIndex] = (u16) var_v0;
|
||||
} else {
|
||||
// Course path included in course_data which has already been loaded into memory.
|
||||
@@ -3729,8 +3729,8 @@ void func_80010218(s32 pathIndex) {
|
||||
TrackWaypoint *var_s1;
|
||||
TrackWaypoint *var_s2;
|
||||
|
||||
if (((s32) D_800DCA4C[gCurrentCourseId]) >= 0) {
|
||||
waypointWidth = D_800DCA4C[gCurrentCourseId];
|
||||
if (((s32) gKartAICourseMaximumSeparation[gCurrentCourseId]) >= 0) {
|
||||
waypointWidth = gKartAICourseMaximumSeparation[gCurrentCourseId];
|
||||
waypoint = &D_80164550[pathIndex][0];
|
||||
var_s1 = &D_80164560[pathIndex][0];
|
||||
var_s2 = &D_80164570[pathIndex][0];
|
||||
@@ -3779,7 +3779,7 @@ f32 func_80010480(s32 pathIndex, u16 waypointIndex) {
|
||||
f32 root2;
|
||||
f32 root1;
|
||||
|
||||
if ((s32) D_800DCA4C[gCurrentCourseId] < 0) {
|
||||
if ((s32) gKartAICourseMaximumSeparation[gCurrentCourseId] < 0) {
|
||||
return 0.0f;
|
||||
}
|
||||
waypointCount = gWaypointCountByPathIndex[pathIndex];
|
||||
@@ -3821,7 +3821,7 @@ void func_800107C4(s32 pathIndex) {
|
||||
s32 var_a3;
|
||||
s16 *wut;
|
||||
|
||||
if ((s32) D_800DCA4C[gCurrentCourseId] >= 0) {
|
||||
if ((s32) gKartAICourseMaximumSeparation[gCurrentCourseId] >= 0) {
|
||||
var_a3 = gWaypointCountByPathIndex[pathIndex];
|
||||
var_t4 = &D_80164580[pathIndex][0];
|
||||
for(var_s0 = 0; var_s0 < var_a3; var_s0++, var_t4++) {
|
||||
@@ -3889,7 +3889,7 @@ void func_80010DBC(s32 pathIndex) {
|
||||
s32 waypointIndex;
|
||||
u16 *angle;
|
||||
|
||||
if ((s32) D_800DCA4C[gCurrentCourseId] >= 0) {
|
||||
if ((s32) gKartAICourseMaximumSeparation[gCurrentCourseId] >= 0) {
|
||||
for (angle = &D_80164590[pathIndex][0], waypointIndex = 0; waypointIndex < gWaypointCountByPathIndex[pathIndex]; waypointIndex++, angle++) {
|
||||
*angle = func_80010CB0(pathIndex, waypointIndex);
|
||||
}
|
||||
@@ -4166,121 +4166,121 @@ s32 func_8001168C(PathNoY *pathDest, TrackWaypoint *pathSrc, s32 numWaypoints) {
|
||||
return count;
|
||||
}
|
||||
|
||||
void func_80011A5C(void) {
|
||||
void copy_courses_kart_ai_behaviour(void) {
|
||||
s32 i;
|
||||
for (i = 0; i < 20; i++) {
|
||||
D_80162EB8[i] = segmented_to_virtual_dupe_2(D_800DC720[i]);
|
||||
for (i = 0; i < NUM_COURSES - 1; i++) {
|
||||
gCoursesKartAIBehaviour[i] = segmented_to_virtual_dupe_2(gKartAIBehaviourLUT[i]);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80011AB8(s32 index) {
|
||||
D_801632B8[index] = 0;
|
||||
D_801632D0[index] = 0;
|
||||
D_801632E8[index] = 0;
|
||||
void reset_kart_ai_behaviour_none(s32 playerIndex) {
|
||||
gCurrentKartAIBehaviourId[playerIndex] = 0;
|
||||
gPreviousKartAIBehaviourId[playerIndex] = 0;
|
||||
gKartAIBehaviourState[playerIndex] = KART_AI_BEHAVIOUR_STATE_NONE;
|
||||
}
|
||||
|
||||
void func_80011AE4(s32 index) {
|
||||
D_801632B8[index] = 0;
|
||||
D_801632D0[index] = 0;
|
||||
D_801632E8[index] = 1;
|
||||
void reset_kart_ai_behaviour(s32 playerIndex) {
|
||||
gCurrentKartAIBehaviourId[playerIndex] = 0;
|
||||
gPreviousKartAIBehaviourId[playerIndex] = 0;
|
||||
gKartAIBehaviourState[playerIndex] = KART_AI_BEHAVIOUR_STATE_START;
|
||||
}
|
||||
|
||||
void func_80011B14(s32 playerId, Player *player) {
|
||||
u16 sp2E;
|
||||
s16 temp_t1;
|
||||
s16 temp_t2;
|
||||
s32 temp_t3;
|
||||
void kart_ai_behaviour_start(s32 playerId, Player *player) {
|
||||
u16 playerWaypoint;
|
||||
s16 waypointStart;
|
||||
s16 waypointEnd;
|
||||
s32 behaviourType;
|
||||
s32 test;
|
||||
|
||||
D_801632B0 = D_80162EB8[gCurrentCourseId] + D_801632B8[playerId];
|
||||
sCurrentKartAIBehaviour = &gCoursesKartAIBehaviour[gCurrentCourseId][gCurrentKartAIBehaviourId[playerId]];
|
||||
|
||||
sp2E = gNearestWaypointByPlayerId[playerId];
|
||||
playerWaypoint = gNearestWaypointByPlayerId[playerId];
|
||||
|
||||
temp_t1 = D_801632B0->waypointId1;
|
||||
temp_t2 = D_801632B0->waypointId2;
|
||||
temp_t3 = D_801632B0->unk4;
|
||||
waypointStart = sCurrentKartAIBehaviour->waypointStart;
|
||||
waypointEnd = sCurrentKartAIBehaviour->waypointEnd;
|
||||
behaviourType = sCurrentKartAIBehaviour->type;
|
||||
|
||||
if ((temp_t1 == -1) && (temp_t2 == -1)) {
|
||||
D_801632B0 = D_80162EB8[gCurrentCourseId];
|
||||
func_80011AB8(playerId);
|
||||
if ((waypointStart == -1) && (waypointEnd == -1)) {
|
||||
sCurrentKartAIBehaviour = &gCoursesKartAIBehaviour[gCurrentCourseId][0];
|
||||
reset_kart_ai_behaviour_none(playerId);
|
||||
return;
|
||||
}
|
||||
if ((u32)sp2E == temp_t1) {
|
||||
D_801632E8[playerId] = 2;
|
||||
D_801632D0[playerId] = D_801632B8[playerId];
|
||||
D_801632B8[playerId] += 1;
|
||||
switch (temp_t3) {
|
||||
case 1:
|
||||
func_80011EC0(playerId, player, player->unk_07C >> 0x10, sp2E);
|
||||
if ((u32)playerWaypoint == waypointStart) {
|
||||
gKartAIBehaviourState[playerId] = KART_AI_BEHAVIOUR_STATE_RUNNING;
|
||||
gPreviousKartAIBehaviourId[playerId] = gCurrentKartAIBehaviourId[playerId];
|
||||
gCurrentKartAIBehaviourId[playerId]++;
|
||||
switch (behaviourType) {
|
||||
case BEHAVIOUR_1:
|
||||
func_80011EC0(playerId, player, player->unk_07C >> 0x10, playerWaypoint);
|
||||
break;
|
||||
case 2:
|
||||
func_8002AA50(player);
|
||||
case BEHAVIOUR_HOP:
|
||||
kart_hop(player);
|
||||
player->effects &= ~0x10;
|
||||
D_801630E8[playerId] = 0;
|
||||
break;
|
||||
case 3:
|
||||
case BEHAVIOUR_3:
|
||||
D_801634F8[playerId].unk4 = 0.0f;
|
||||
break;
|
||||
case 4:
|
||||
case BEHAVIOUR_4:
|
||||
D_801634F8[playerId].unk4 = -0.6f;
|
||||
break;
|
||||
case 5:
|
||||
case BEHAVIOUR_5:
|
||||
D_801634F8[playerId].unk4 = 0.6f;
|
||||
break;
|
||||
case 6:
|
||||
D_80163350[playerId] = 0;
|
||||
case BEHAVIOUR_NORMAL_SPEED:
|
||||
gSpeedKartAIBehaviour[playerId] = SPEED_KART_AI_BEHAVIOUR_NORMAL;
|
||||
break;
|
||||
case 7:
|
||||
D_80163350[playerId] = 1;
|
||||
case BEHAVIOUR_FAST_SPEED:
|
||||
gSpeedKartAIBehaviour[playerId] = SPEED_KART_AI_BEHAVIOUR_FAST;
|
||||
break;
|
||||
case 8:
|
||||
D_80163350[playerId] = 2;
|
||||
case BEHAVIOUR_SLOW_SPEED:
|
||||
gSpeedKartAIBehaviour[playerId] = SPEED_KART_AI_BEHAVIOUR_SLOW;
|
||||
break;
|
||||
case 11:
|
||||
D_80163350[playerId] = 3;
|
||||
case BEHAVIOUR_MAX_SPEED:
|
||||
gSpeedKartAIBehaviour[playerId] = SPEED_KART_AI_BEHAVIOUR_MAX;
|
||||
break;
|
||||
case 9:
|
||||
case BEHAVIOUR_9:
|
||||
D_801633F8[playerId] = 1;
|
||||
D_801631E0[playerId] = 0;
|
||||
gPlayers[playerId].effects &= ~0x1000;
|
||||
break;
|
||||
case 10:
|
||||
case BEHAVIOUR_10:
|
||||
D_801633F8[playerId] = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_80011D48(s32 playerIndex, Player *player) {
|
||||
void kart_ai_behaviour_end(s32 playerIndex, Player *player) {
|
||||
u16 nearestWaypoint;
|
||||
u32 thing;
|
||||
s32 temp_a2;
|
||||
u32 waypointEnd;
|
||||
s32 behaviourType;
|
||||
|
||||
D_801632B0 = &D_80162EB8[gCurrentCourseId][D_801632D0[playerIndex]];
|
||||
sCurrentKartAIBehaviour = &gCoursesKartAIBehaviour[gCurrentCourseId][gPreviousKartAIBehaviourId[playerIndex]];
|
||||
nearestWaypoint = gNearestWaypointByPlayerId[playerIndex];
|
||||
temp_a2 = D_801632B0->unk4;
|
||||
thing = D_801632B0->waypointId2;
|
||||
if (nearestWaypoint >= thing) {
|
||||
switch (temp_a2) {
|
||||
case 1:
|
||||
behaviourType = sCurrentKartAIBehaviour->type;
|
||||
waypointEnd = sCurrentKartAIBehaviour->waypointEnd;
|
||||
if (nearestWaypoint >= waypointEnd) {
|
||||
switch (behaviourType) {
|
||||
case BEHAVIOUR_1:
|
||||
player->effects &= ~0x10;
|
||||
D_801630E8[playerIndex] = 0;
|
||||
D_801632E8[playerIndex] = 1;
|
||||
gKartAIBehaviourState[playerIndex] = KART_AI_BEHAVIOUR_STATE_START;
|
||||
break;
|
||||
case 3:
|
||||
case 4:
|
||||
case 5:
|
||||
case BEHAVIOUR_3:
|
||||
case BEHAVIOUR_4:
|
||||
case BEHAVIOUR_5:
|
||||
D_801634F8[playerIndex].unk4 = D_801634F8[playerIndex].unkC;
|
||||
D_801632E8[playerIndex] = 1;
|
||||
gKartAIBehaviourState[playerIndex] = KART_AI_BEHAVIOUR_STATE_START;
|
||||
break;
|
||||
case 2:
|
||||
case 6:
|
||||
case 7:
|
||||
case 8:
|
||||
case 9:
|
||||
case 10:
|
||||
case 11:
|
||||
D_801632E8[playerIndex] = 1;
|
||||
case BEHAVIOUR_HOP:
|
||||
case BEHAVIOUR_NORMAL_SPEED:
|
||||
case BEHAVIOUR_FAST_SPEED:
|
||||
case BEHAVIOUR_SLOW_SPEED:
|
||||
case BEHAVIOUR_9:
|
||||
case BEHAVIOUR_10:
|
||||
case BEHAVIOUR_MAX_SPEED:
|
||||
gKartAIBehaviourState[playerIndex] = KART_AI_BEHAVIOUR_STATE_START;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@@ -4288,17 +4288,17 @@ void func_80011D48(s32 playerIndex, Player *player) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_80011E38(s32 playerIndex) {
|
||||
void kart_ai_behaviour(s32 playerIndex) {
|
||||
Player *player = gPlayerOne + playerIndex;
|
||||
|
||||
switch(D_801632E8[playerIndex]) {
|
||||
case 0:
|
||||
switch(gKartAIBehaviourState[playerIndex]) {
|
||||
case KART_AI_BEHAVIOUR_STATE_NONE:
|
||||
break;
|
||||
case 1:
|
||||
func_80011B14(playerIndex, player);
|
||||
case KART_AI_BEHAVIOUR_STATE_START:
|
||||
kart_ai_behaviour_start(playerIndex, player);
|
||||
break;
|
||||
case 2:
|
||||
func_80011D48(playerIndex, player);
|
||||
case KART_AI_BEHAVIOUR_STATE_RUNNING:
|
||||
kart_ai_behaviour_end(playerIndex, player);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -4310,7 +4310,7 @@ void func_80011EC0(s32 arg0, Player *player, s32 arg2, u16 arg3) {
|
||||
case 2:
|
||||
if ((arg2 >= -9) && (D_80162FF8[arg0] == 0)) {
|
||||
if ((D_80163068[arg0] > -0.8) && (D_80163068[arg0] < 0.5)) {
|
||||
func_8002AA50(player);
|
||||
kart_hop(player);
|
||||
player->effects |= 0x10;
|
||||
D_801630E8[arg0] = 1;
|
||||
break;
|
||||
@@ -4322,7 +4322,7 @@ void func_80011EC0(s32 arg0, Player *player, s32 arg2, u16 arg3) {
|
||||
case 3:
|
||||
if ((arg2 < 0xA) && (D_80162FF8[arg0] == 0)) {
|
||||
if ((D_80163068[arg0] > -0.5) && (D_80163068[arg0] < 0.8)) {
|
||||
func_8002AA50(player);
|
||||
kart_hop(player);
|
||||
player->effects |= 0x10;
|
||||
D_801630E8[arg0] = -1;
|
||||
break;
|
||||
@@ -5074,7 +5074,7 @@ void func_80013F7C(s32 playerId, Player *player, VehicleStuff *vehicle, f32 arg3
|
||||
f32 spBC;
|
||||
|
||||
if (((D_801631E0[playerId] != 1) || ((
|
||||
((player->type & PLAYER_HUMAN) != 0)) && !(player->type & PLAYER_CPU))) && !(player->effects & 0x01000000)) {
|
||||
((player->type & PLAYER_HUMAN) != 0)) && !(player->type & PLAYER_KART_AI))) && !(player->effects & 0x01000000)) {
|
||||
|
||||
spC4 = player->pos[0];
|
||||
spC0 = player->pos[1];
|
||||
@@ -5095,7 +5095,7 @@ void func_80013F7C(s32 playerId, Player *player, VehicleStuff *vehicle, f32 arg3
|
||||
}
|
||||
}
|
||||
}
|
||||
if ((player->type & PLAYER_HUMAN) && !(player->type & PLAYER_CPU)) {
|
||||
if ((player->type & PLAYER_HUMAN) && !(player->type & PLAYER_KART_AI)) {
|
||||
if (((temp_f12) > -300.0) && ((temp_f12) < 300.0) && (
|
||||
(temp_f22 > -20.0)) && (temp_f22 < 20.0) && (((temp_f14) > -300.0)) && ((temp_f14) < 300.0)) {
|
||||
if ((D_801631C8 > 0) && (vehicle->someFlags == 0)) {
|
||||
@@ -6999,7 +6999,7 @@ void func_8001AB00(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void cpu_decisions_branch_item(s32 arg0, s16 *arg1, s32 arg2) {
|
||||
void kart_ai_decisions_branch_item(s32 arg0, s16 *arg1, s32 arg2) {
|
||||
s32 value = -1;
|
||||
switch (arg2) {
|
||||
case ITEM_FAKE_ITEM_BOX:
|
||||
@@ -7044,11 +7044,11 @@ void func_8001ABEC(struct struct_801642D8 *arg0) {
|
||||
}
|
||||
|
||||
#ifdef NON_MATCHING
|
||||
// By the looks of this function is probably something like `cpu_player_use_item`
|
||||
// By the looks of this function is probably something like `kart_ai_use_item_strategy`
|
||||
// The use of several different actor types might make getting a match hard(er),
|
||||
// might have to get creative/ugly with just a single generic `Actor` variable.
|
||||
// https://decomp.me/scratch/FOlbG
|
||||
void cpu_use_item_strategy(s32 playerId) {
|
||||
void kart_ai_use_item_strategy(s32 playerId) {
|
||||
s32 var_v0;
|
||||
Player *player;
|
||||
TrackWaypoint *waypoint;
|
||||
@@ -7066,7 +7066,7 @@ void cpu_use_item_strategy(s32 playerId) {
|
||||
case 0:
|
||||
temp_s0->actorIndex = -1;
|
||||
if ((((playerId * 0x14) + 0x64) < D_80164450[playerId]) && (temp_s0->unk_04 >= 0x259) && (temp_s0->unk_06 < 3) && (gLapCountByPlayerId[playerId] < 3)) {
|
||||
cpu_decisions_branch_item(playerId, &temp_s0->unk_00, gen_random_item_cpu((s16)gLapCountByPlayerId[playerId], gGPCurrentRaceRankByPlayerId[playerId]));
|
||||
kart_ai_decisions_branch_item(playerId, &temp_s0->unk_00, kart_ai_gen_random_item((s16)gLapCountByPlayerId[playerId], gGPCurrentRaceRankByPlayerId[playerId]));
|
||||
} else {
|
||||
func_8001ABE0(playerId, temp_s0);
|
||||
}
|
||||
@@ -7497,7 +7497,7 @@ void cpu_use_item_strategy(s32 playerId) {
|
||||
}
|
||||
}
|
||||
#else
|
||||
GLOBAL_ASM("asm/non_matchings/code_80005FD0/cpu_use_item_strategy.s")
|
||||
GLOBAL_ASM("asm/non_matchings/code_80005FD0/kart_ai_use_item_strategy.s")
|
||||
#endif
|
||||
|
||||
void func_8001BE78(void) {
|
||||
|
||||
+30
-15
@@ -4,7 +4,7 @@
|
||||
#include "vehicles.h"
|
||||
#include "camera.h"
|
||||
#include "waypoints.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
|
||||
struct struct_801642D8 {
|
||||
/* 0x0 */ u16 unk0;
|
||||
@@ -144,12 +144,12 @@ f32 func_80010FA0(f32, f32, f32, s32, s32);
|
||||
s32 func_80011014(TrackWaypoint *, TrackWaypoint *, s32, s32);
|
||||
s32 process_path_data(TrackWaypoint*, TrackWaypoint*);
|
||||
s32 func_8001168C(PathNoY*, TrackWaypoint*, s32);
|
||||
void func_80011A5C(void);
|
||||
void func_80011AB8(s32);
|
||||
void func_80011AE4(s32);
|
||||
void func_80011B14(s32, Player*);
|
||||
void func_80011D48(s32, Player*);
|
||||
void func_80011E38(s32);
|
||||
void copy_courses_kart_ai_behaviour(void);
|
||||
void reset_kart_ai_behaviour_none(s32);
|
||||
void reset_kart_ai_behaviour(s32);
|
||||
void kart_ai_behaviour_start(s32, Player*);
|
||||
void kart_ai_behaviour_end(s32, Player*);
|
||||
void kart_ai_behaviour(s32);
|
||||
void func_80011EC0(s32, Player*, s32, u16);
|
||||
|
||||
void func_800120C8(void);
|
||||
@@ -241,10 +241,10 @@ void func_8001A518(s32, s32, s32);
|
||||
void func_8001A588(u16*, Camera*, Player*, s8, s32);
|
||||
void func_8001AAAC(s16, s16, s16);
|
||||
void func_8001AB00(void);
|
||||
void cpu_decisions_branch_item(s32, s16*, s32);
|
||||
void kart_ai_decisions_branch_item(s32, s16*, s32);
|
||||
void func_8001ABE0(s32, D_801642D8_entry*);
|
||||
void func_8001ABEC(struct struct_801642D8*);
|
||||
void cpu_use_item_strategy(s32);
|
||||
void kart_ai_use_item_strategy(s32);
|
||||
|
||||
void func_8001BE78(void);
|
||||
|
||||
@@ -258,7 +258,7 @@ void func_8001C42C(void);
|
||||
extern Collision D_80162E70;
|
||||
extern s16 D_80162EB0; // Possibly a float.
|
||||
extern s16 D_80162EB2; // possibly [3]
|
||||
extern UnkCommonTextureStruct0 *D_80162EB8[];
|
||||
extern KartAIBehaviour *gCoursesKartAIBehaviour[];
|
||||
extern s16 D_80162F10[];
|
||||
extern s16 D_80162F50[];
|
||||
extern Vec3f D_80162FA0;
|
||||
@@ -298,17 +298,32 @@ extern u16 D_80163258[];
|
||||
extern u16 D_80163270[];
|
||||
extern s32 D_80163288[];
|
||||
// Exact pointer type unknown
|
||||
extern UnkCommonTextureStruct0 *D_801632B0;
|
||||
extern u16 D_801632B8[];
|
||||
extern u16 D_801632D0[];
|
||||
extern u16 D_801632E8[];
|
||||
extern KartAIBehaviour *sCurrentKartAIBehaviour;
|
||||
extern u16 gCurrentKartAIBehaviourId[];
|
||||
extern u16 gPreviousKartAIBehaviourId[];
|
||||
extern u16 gKartAIBehaviourState[];
|
||||
|
||||
enum {
|
||||
KART_AI_BEHAVIOUR_STATE_NONE,
|
||||
KART_AI_BEHAVIOUR_STATE_START,
|
||||
KART_AI_BEHAVIOUR_STATE_RUNNING,
|
||||
};
|
||||
|
||||
extern s16 D_80163300[];
|
||||
extern u16 D_80163318[];
|
||||
extern u16 D_80163330[];
|
||||
extern u16 D_80163344[];
|
||||
extern u16 D_80163348[];
|
||||
extern u16 D_8016334C[];
|
||||
extern u16 D_80163350[];
|
||||
extern u16 gSpeedKartAIBehaviour[];
|
||||
|
||||
enum {
|
||||
SPEED_KART_AI_BEHAVIOUR_NORMAL,
|
||||
SPEED_KART_AI_BEHAVIOUR_FAST,
|
||||
SPEED_KART_AI_BEHAVIOUR_SLOW,
|
||||
SPEED_KART_AI_BEHAVIOUR_MAX
|
||||
};
|
||||
|
||||
extern s32 D_80163368[];
|
||||
extern s32 D_80163378;
|
||||
extern s32 D_8016337C;
|
||||
|
||||
+2
-2
@@ -23,9 +23,9 @@
|
||||
#include "update_objects.h"
|
||||
#include "code_80086E70.h"
|
||||
#include "effects.h"
|
||||
#include "src/data/data_800E8700.h"
|
||||
#include <assets/data_800E8700.h>
|
||||
#include "skybox_and_splitscreen.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "audio/external.h"
|
||||
#include "objects.h"
|
||||
#include "bomb_kart.h"
|
||||
|
||||
+1
-1
@@ -12,7 +12,7 @@
|
||||
#include "objects.h"
|
||||
#include "bomb_kart.h"
|
||||
#include "save.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include <sounds.h>
|
||||
#include <decode.h>
|
||||
#include "audio/external.h"
|
||||
|
||||
+3
-3
@@ -1041,7 +1041,7 @@ void func_80089474(s32 objectIndex, s32 playerId, f32 arg2, f32 arg3, u32 soundB
|
||||
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
|
||||
func_80072180();
|
||||
}
|
||||
if ((func_8008933C(player, objectIndex, arg2, arg3) >= 4.0) && ((player->type & PLAYER_CPU) != PLAYER_CPU)) {
|
||||
if ((func_8008933C(player, objectIndex, arg2, arg3) >= 4.0) && ((player->type & PLAYER_KART_AI) != PLAYER_KART_AI)) {
|
||||
func_800C9060(playerId, soundBits);
|
||||
}
|
||||
}
|
||||
@@ -1051,7 +1051,7 @@ void func_80089538(s32 objectIndex, s32 playerId, f32 arg2, f32 arg3, u32 soundB
|
||||
Player *player;
|
||||
|
||||
player = &gPlayerOne[playerId];
|
||||
if ((func_8008933C(player, objectIndex, arg2, arg3) >= 4.0) && ((player->type & PLAYER_CPU) != PLAYER_CPU)) {
|
||||
if ((func_8008933C(player, objectIndex, arg2, arg3) >= 4.0) && ((player->type & PLAYER_KART_AI) != PLAYER_KART_AI)) {
|
||||
func_800C9060((u8) playerId, soundBits);
|
||||
}
|
||||
}
|
||||
@@ -1109,7 +1109,7 @@ void func_80089820(s32 objectIndex, f32 arg1, f32 arg2, u32 arg3) {
|
||||
if (is_obj_flag_status_active(objectIndex, 0x04000000) != 0) {
|
||||
func_80072180();
|
||||
}
|
||||
if ((func_8008933C(player, objectIndex, arg1, arg2 * 1.1) >= 4.0) && ((player->type & PLAYER_CPU) != PLAYER_CPU)) {
|
||||
if ((func_8008933C(player, objectIndex, arg1, arg2 * 1.1) >= 4.0) && ((player->type & PLAYER_KART_AI) != PLAYER_KART_AI)) {
|
||||
func_800C9060(var_s1, arg3);
|
||||
}
|
||||
}
|
||||
|
||||
+34
-134
@@ -20,13 +20,13 @@
|
||||
#include "audio/external.h"
|
||||
#include "render_objects.h"
|
||||
#include "staff_ghosts.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "textures.h"
|
||||
#include "math_util.h"
|
||||
#include "save_data.h"
|
||||
#include "podium_ceremony_actors.h"
|
||||
#include "skybox_and_splitscreen.h"
|
||||
#include "src/data/startup_logo.h"
|
||||
#include <assets/startup_logo.h>
|
||||
#include "buffers.h"
|
||||
#include "racing/race_logic.h"
|
||||
#include "ending/code_80281C40.h"
|
||||
@@ -393,115 +393,34 @@ char *gCupNames[] = {
|
||||
"special cup",
|
||||
};
|
||||
|
||||
char *D_800E7524[] = {
|
||||
"mario raceway",
|
||||
"choco mountain",
|
||||
"bowser's castle",
|
||||
"banshee boardwalk",
|
||||
"yoshi valley",
|
||||
"frappe snowland",
|
||||
"koopa troopa beach",
|
||||
"royal raceway",
|
||||
"luigi raceway",
|
||||
"moo moo farm",
|
||||
"toad's turnpike",
|
||||
"kalimari desert",
|
||||
"sherbet land",
|
||||
"rainbow road",
|
||||
"wario stadium",
|
||||
"block fort",
|
||||
"skyscraper",
|
||||
"double deck",
|
||||
"d.k.'s jungle parkway",
|
||||
"big donut",
|
||||
// Displays at beginning of course
|
||||
char *gCourseNames[] = {
|
||||
#include "assets/course_metadata/gCourseNames.inc.c"
|
||||
};
|
||||
|
||||
char *D_800E7574[] = {
|
||||
"mario raceway",
|
||||
"choco mountain",
|
||||
"bowser's castle",
|
||||
"banshee boardwalk",
|
||||
"yoshi valley",
|
||||
"frappe snowland",
|
||||
"koopa troopa beach",
|
||||
"royal raceway",
|
||||
"luigi raceway",
|
||||
"moo moo farm",
|
||||
"toad's turnpike",
|
||||
"kalimari desert",
|
||||
"sherbet land",
|
||||
"rainbow road",
|
||||
"wario stadium",
|
||||
"block fort",
|
||||
"skyscraper",
|
||||
"double deck",
|
||||
"d.k.'s jungle parkway",
|
||||
"big donut",
|
||||
char *gCourseNamesDup[] = {
|
||||
#include "assets/course_metadata/gCourseNames.inc.c"
|
||||
};
|
||||
|
||||
char *D_800E75C4[] = {
|
||||
"mario raceway",
|
||||
"choco mountain",
|
||||
"bowser's castle",
|
||||
"banshee boardwalk",
|
||||
"yoshi valley",
|
||||
"frappe snowland",
|
||||
"koopa troopa beach",
|
||||
"royal raceway",
|
||||
"luigi raceway",
|
||||
"moo moo farm",
|
||||
"toad's turnpike",
|
||||
"kalimari desert",
|
||||
"sherbet land",
|
||||
"rainbow road",
|
||||
"wario stadium",
|
||||
"block fort",
|
||||
"skyscraper",
|
||||
"double deck",
|
||||
"d.k.'s jungle parkway",
|
||||
"big donut",
|
||||
char *gCourseNamesDup2[] = {
|
||||
#include "assets/course_metadata/gCourseNames.inc.c"
|
||||
};
|
||||
|
||||
// Used in debug menu at splash screen
|
||||
char *gDebugCourseNames[] = {
|
||||
"m circuit",
|
||||
"mountain",
|
||||
"castle",
|
||||
"ghost",
|
||||
"maze",
|
||||
"snow",
|
||||
"beach",
|
||||
"p circuit",
|
||||
"l circuit",
|
||||
"farm",
|
||||
"highway",
|
||||
"desert",
|
||||
"sherbet",
|
||||
"rainbow",
|
||||
"stadium",
|
||||
"block",
|
||||
"skyscraper",
|
||||
"deck",
|
||||
"jungle",
|
||||
"doughnut",
|
||||
#include "assets/course_metadata/gCourseDebugNames.inc.c"
|
||||
};
|
||||
|
||||
const s8 gPerCupIndexByCourseId[] = {
|
||||
3, 2, 3, 2,
|
||||
1, 1, 2, 2,
|
||||
0, 1, 0, 3,
|
||||
1, 3, 0, 1,
|
||||
3, 2, 0, 0,
|
||||
#include "assets/course_metadata/gPerCupIndexByCourseId.inc.c"
|
||||
};
|
||||
|
||||
// @todo Increase this array for more than eight players
|
||||
const s8 D_800EFD64[] = { 0, 1, 4, 3, 5, 6, 2, 7 };
|
||||
|
||||
// Maps course IDs (as defined in the COURSES enum) to the cup they belong to
|
||||
s8 gCupSelectionByCourseId[] = {
|
||||
FLOWER_CUP, FLOWER_CUP, STAR_CUP, SPECIAL_CUP,
|
||||
SPECIAL_CUP, FLOWER_CUP, MUSHROOM_CUP, STAR_CUP,
|
||||
MUSHROOM_CUP, MUSHROOM_CUP, FLOWER_CUP, MUSHROOM_CUP,
|
||||
STAR_CUP, SPECIAL_CUP, STAR_CUP, BATTLE_CUP,
|
||||
BATTLE_CUP, BATTLE_CUP, SPECIAL_CUP, BATTLE_CUP,
|
||||
#include "assets/course_metadata/gCupSelectionByCourseId.inc.c"
|
||||
};
|
||||
|
||||
char *D_800E7678[] = {
|
||||
@@ -636,27 +555,8 @@ char D_800E77B4[] = "a BUTTON*SEE DATA B BUTTON*EXIT";
|
||||
// This is plain data, it should not end up in rodata
|
||||
char D_800E77D8[] = "distance";
|
||||
|
||||
char *D_800E77E4[] = {
|
||||
"567m",
|
||||
"687m",
|
||||
"777m",
|
||||
"747m",
|
||||
"772m",
|
||||
"734m",
|
||||
"691m",
|
||||
"1025m",
|
||||
"717m",
|
||||
"527m",
|
||||
"1036m",
|
||||
"753m",
|
||||
"756m",
|
||||
"2000m",
|
||||
"1591m",
|
||||
"",
|
||||
"",
|
||||
"",
|
||||
"893m",
|
||||
"",
|
||||
char *sCourseLengths[] = {
|
||||
#include "assets/course_metadata/sCourseLengths.inc.c"
|
||||
};
|
||||
|
||||
char *D_800E7834[] = {
|
||||
@@ -2815,7 +2715,7 @@ void func_80095574(void) {
|
||||
} else {
|
||||
debug_print_str2(0x000000AA, 0x00000064, "off");
|
||||
}
|
||||
if ((gCurrentCourseId >= 0x14) || (gCurrentCourseId < 0)) {
|
||||
if ((gCurrentCourseId >= (NUM_COURSES - 1)) || (gCurrentCourseId < 0)) {
|
||||
gCurrentCourseId = 0;
|
||||
}
|
||||
print_str_num(0x00000050, 0x0000006E, "map_number", gCurrentCourseId);
|
||||
@@ -6616,10 +6516,10 @@ void func_8009F5E0(struct_8018D9E0_entry *arg0) {
|
||||
}
|
||||
break;
|
||||
case 0x5: /* switch 6 */
|
||||
var_t0 = (s32) ((f32) (get_string_width(D_800E7574[0]) + 5) * 0.9f) / 2;
|
||||
var_t0 = (s32) ((f32) (get_string_width(gCourseNamesDup[0]) + 5) * 0.9f) / 2;
|
||||
gDisplayListHead = draw_box(gDisplayListHead, 0xA0 - var_t0, 0x0000007B, var_t0 + 0xA0, 0x000000A4, 0, 0, 0, 0x00000096);
|
||||
set_text_color(1);
|
||||
draw_text(0x0000009B, 0x0000008C, D_800E7574[0], 0, 0.9f, 0.9f);
|
||||
draw_text(0x0000009B, 0x0000008C, gCourseNamesDup[0], 0, 0.9f, 0.9f);
|
||||
temp_v1 = func_800B4EB4(0, 7) & 0xFFFFF;
|
||||
if (temp_v1 < 0x1EAA) {
|
||||
set_text_color((s32) gGlobalTimer % 2);
|
||||
@@ -6886,7 +6786,7 @@ void func_8009F5E0(struct_8018D9E0_entry *arg0) {
|
||||
break;
|
||||
case 0x97: /* switch 6 */
|
||||
set_text_color(5);
|
||||
func_80093324(arg0->column, arg0->row, D_800E7524[gCurrentCourseId], arg0->unk1C, arg0->unk24, 1.0f);
|
||||
func_80093324(arg0->column, arg0->row, gCourseNames[gCurrentCourseId], arg0->unk1C, arg0->unk24, 1.0f);
|
||||
break;
|
||||
case 0x98: /* switch 6 */
|
||||
func_800A2D1C(arg0);
|
||||
@@ -7368,10 +7268,10 @@ void func_800A1A20(struct_8018D9E0_entry *arg0) {
|
||||
courseId = gCupCourseOrder[gTimeTrialDataCourseIndex / 4][gTimeTrialDataCourseIndex % 4];
|
||||
arg0->column = 0x14;
|
||||
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1);
|
||||
draw_text(0x69, arg0->row + 0x19, D_800E7574[courseId], 0, 0.75f, 0.75f);
|
||||
draw_text(0x69, arg0->row + 0x19, gCourseNamesDup[courseId], 0, 0.75f, 0.75f);
|
||||
set_text_color(TEXT_RED);
|
||||
func_80093324(0x2D, arg0->row + 0x28, (char *)&D_800E77D8, 0, 0.75f, 0.75f);
|
||||
func_800936B8(0xA5, arg0->row + 0x28, D_800E77E4[courseId], 1, 0.75f, 0.75f);
|
||||
func_800936B8(0xA5, arg0->row + 0x28, sCourseLengths[courseId], 1, 0.75f, 0.75f);
|
||||
set_text_color(TEXT_YELLOW);
|
||||
func_80093324(0xA0, arg0->row + 0x86, D_800E7728[0], 0, 0.75f, 0.75f);
|
||||
// Print the 3 Lap Time Trial records
|
||||
@@ -7621,7 +7521,7 @@ void func_800A1FB0(struct_8018D9E0_entry *arg0) {
|
||||
if (var_v1->ghostDataSaved == 0) {
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E7A44, 0, 0.5f, 0.5f);
|
||||
} else {
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E75C4[gCupCourseOrder[var_v1->courseIndex / 4][var_v1->courseIndex % 4]], 0, 0.5f, 0.5f);
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), gCourseNamesDup2[gCupCourseOrder[var_v1->courseIndex / 4][var_v1->courseIndex % 4]], 0, 0.5f, 0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7657,7 +7557,7 @@ void func_800A1FB0(struct_8018D9E0_entry *arg0) {
|
||||
if (var_v1->ghostDataSaved == 0) {
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E7A44, 0, 0.5f, 0.5f);
|
||||
} else {
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E75C4[gCupCourseOrder[var_v1->courseIndex / 4][var_v1->courseIndex % 4]], 0, 0.5f, 0.5f);
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), gCourseNamesDup2[gCupCourseOrder[var_v1->courseIndex / 4][var_v1->courseIndex % 4]], 0, 0.5f, 0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7705,7 +7605,7 @@ void func_800A1FB0(struct_8018D9E0_entry *arg0) {
|
||||
if (var_v1->ghostDataSaved == 0) {
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E7A44, 0, 0.5f, 0.5f);
|
||||
} else {
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), D_800E75C4[gCupCourseOrder[var_v1->courseIndex / 4][var_v1->courseIndex % 4]], 0, 0.5f, 0.5f);
|
||||
func_80093324(0x2A + (var_s1 * 0x89), 0x96 + (0x1E * var_s2), gCourseNamesDup2[gCupCourseOrder[var_v1->courseIndex / 4][var_v1->courseIndex % 4]], 0, 0.5f, 0.5f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -7984,7 +7884,7 @@ void func_800A3C84(struct_8018D9E0_entry *arg0) {
|
||||
s32 rowOffset;
|
||||
|
||||
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_1);
|
||||
draw_text(arg0->column + 0x43, arg0->row + 0x19, D_800E7574[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f);
|
||||
draw_text(arg0->column + 0x43, arg0->row + 0x19, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f);
|
||||
set_text_color(TEXT_YELLOW);
|
||||
draw_text(arg0->column + 0x46, arg0->row + 0x28, D_800E7730, 0, 0.75f, 0.75f);
|
||||
for(recordType = 0, rowOffset = 0; recordType < TIME_TRIAL_3LAP_RECORD_5; recordType += 1, rowOffset += 0xF) {
|
||||
@@ -8019,7 +7919,7 @@ void func_800A3E60(struct_8018D9E0_entry *arg0) {
|
||||
if (var_v0 == 0x0000001F) return;
|
||||
|
||||
set_text_color(4);
|
||||
draw_text(arg0->column + 0x55, 0x19 - arg0->row, D_800E7574[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f);
|
||||
draw_text(arg0->column + 0x55, 0x19 - arg0->row, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 0.6f, 0.6f);
|
||||
set_text_color(3);
|
||||
draw_text(arg0->column + 0x55, 0x28 - arg0->row, D_800E7730, 0, 0.75f, 0.75f);
|
||||
for (var_s1 = 0; var_s1 < 4; var_s1++) {
|
||||
@@ -8083,7 +7983,7 @@ void func_800A3E60(struct_8018D9E0_entry *arg0) {
|
||||
if (D_8018EE10[var_s1].ghostDataSaved == 0) {
|
||||
func_80093324(0xBB - arg0->column, 0xAA + (0x1E * var_s1), D_800E7A44, 0, 0.45f, 0.45f);
|
||||
} else {
|
||||
func_80093324(0xBB - arg0->column, 0xAA + (0x1E * var_s1), D_800E75C4[gCupCourseOrder[D_8018EE10[var_s1].courseIndex / 4][D_8018EE10[var_s1].courseIndex % 4]], 0, 0.45f, 0.45f);
|
||||
func_80093324(0xBB - arg0->column, 0xAA + (0x1E * var_s1), gCourseNamesDup2[gCupCourseOrder[D_8018EE10[var_s1].courseIndex / 4][D_8018EE10[var_s1].courseIndex % 4]], 0, 0.45f, 0.45f);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -8306,7 +8206,7 @@ void render_pause_menu_time_trials(struct_8018D9E0_entry *arg0) {
|
||||
|
||||
gDisplayListHead = draw_box(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, 0x0000008C);
|
||||
set_text_color(TEXT_YELLOW);
|
||||
draw_text(0x000000A0, 0x00000050, D_800E7574[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, 1.0f);
|
||||
draw_text(0x000000A0, 0x00000050, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, 1.0f);
|
||||
set_text_color(TEXT_RED);
|
||||
draw_text(0x0000009D, 0x00000060, D_800E7728[0], 0, 0.8f, 0.8f);
|
||||
temp_a0 = func_800B4E24(TIME_TRIAL_3LAP_RECORD_1);
|
||||
@@ -8390,7 +8290,7 @@ void render_pause_grand_prix(struct_8018D9E0_entry *arg0) {
|
||||
set_text_color(TEXT_YELLOW);
|
||||
draw_text(160 + temp_s0, temp_s3->row - 50, D_800E76CC[gCCSelection], 0, 1.0f, 1.0f);
|
||||
set_text_color(TEXT_YELLOW);
|
||||
draw_text(160, temp_s3->row - 30, D_800E7574[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, 1.0f);
|
||||
draw_text(160, temp_s3->row - 30, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, 1.0f);
|
||||
for (var_s0 = 0; var_s0 < 2; var_s0++) {
|
||||
text_rainbow_effect(arg0->cursor - 31, var_s0, TEXT_YELLOW);
|
||||
func_80093324(temp_s3->column, temp_s3->row + (var_s0 * 13), gTextPauseButton[var_s0 * 4], 0, 0.75f, 0.75f);
|
||||
@@ -8499,7 +8399,7 @@ void func_800A5738(struct_8018D9E0_entry *arg0) {
|
||||
gDisplayListHead = draw_box(gDisplayListHead, 0, 0, 0x0000013F, 0x000000EF, 0, 0, 0, var_s1);
|
||||
gDPSetPrimColor(gDisplayListHead++, 0, 0, 0x00, 0x00, 0x00, var_s2);
|
||||
set_text_color(3);
|
||||
func_80093754(0x000000A0, 0x00000050, D_800E7574[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, 1.0f);
|
||||
func_80093754(0x000000A0, 0x00000050, gCourseNamesDup[gCupCourseOrder[gCupSelection][gCupCourseSelection]], 0, 1.0f, 1.0f);
|
||||
switch (arg0->cursor) { /* switch 1 */
|
||||
case 1: /* switch 1 */
|
||||
case 11: /* switch 1 */
|
||||
@@ -8561,7 +8461,7 @@ void func_800A5738(struct_8018D9E0_entry *arg0) {
|
||||
if (D_8018EE10[var_s1].ghostDataSaved == 0) {
|
||||
func_80093324(0x69 - arg0->column, (0x96 + (0x14 * var_s1)), D_800E7A44, 0, 0.75f, 0.75f);
|
||||
} else {
|
||||
func_80093324(0x69 - arg0->column, (0x96 + (0x14 * var_s1)), D_800E75C4[gCupCourseOrder[D_8018EE10[var_s1].courseIndex / 4][D_8018EE10[var_s1].courseIndex % 4]], 0, 0.75f, 0.75f);
|
||||
func_80093324(0x69 - arg0->column, (0x96 + (0x14 * var_s1)), gCourseNamesDup2[gCupCourseOrder[D_8018EE10[var_s1].courseIndex / 4][D_8018EE10[var_s1].courseIndex % 4]], 0, 0.75f, 0.75f);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -8630,7 +8530,7 @@ void func_800A6034(struct_8018D9E0_entry *arg0) {
|
||||
text = gCupNames[D_800DC540];
|
||||
set_text_color(TEXT_BLUE_GREEN_RED_CYCLE_2);
|
||||
func_80093754(arg0->column + 0x41, arg0->row + 0xA0, text, 0, 0.85f, 1.0f);
|
||||
text = D_800E7524[gCurrentCourseId];
|
||||
text = gCourseNames[gCurrentCourseId];
|
||||
set_text_color((s32) gCurrentCourseId % 4);
|
||||
func_80093754(arg0->column + 0x41, arg0->row + 0xC3, text, 0, 0.65f, 0.85f);
|
||||
}
|
||||
@@ -11263,7 +11163,7 @@ void func_800ABF68(struct_8018D9E0_entry *arg0) {
|
||||
case 0:
|
||||
arg0->column = 0x140;
|
||||
arg0->cursor = 1;
|
||||
arg0->unk20 = 0xA0 - (get_string_width(D_800E7524[gCurrentCourseId]) / 2);
|
||||
arg0->unk20 = 0xA0 - (get_string_width(gCourseNames[gCurrentCourseId]) / 2);
|
||||
/* fallthrough */
|
||||
case 1:
|
||||
func_800A9208(arg0, arg0->unk20);
|
||||
|
||||
+4
-4
@@ -492,9 +492,9 @@ extern RGBA16 D_800E74D0[];
|
||||
extern RGBA16 D_800E74E8[];
|
||||
extern const s16 gGlyphDisplayWidth[];
|
||||
extern char *gCupNames[];
|
||||
extern char *D_800E7524[];
|
||||
extern char *D_800E7574[];
|
||||
extern char *D_800E75C4[];
|
||||
extern char *gCourseNames[];
|
||||
extern char *gCourseNamesDup[];
|
||||
extern char *gCourseNamesDup2[];
|
||||
extern char *gDebugCourseNames[];
|
||||
// Maps course IDs (as defined in the COURSES enum) to an index in a given cup's track order
|
||||
extern const s8 gPerCupIndexByCourseId[]; // D_800EFD50
|
||||
@@ -520,7 +520,7 @@ extern char *D_800E77A0[];
|
||||
extern char *D_800E77A8[];
|
||||
extern char D_800E77B4[];
|
||||
extern char D_800E77D8[];
|
||||
extern char *D_800E77E4[];
|
||||
extern char *sCourseLengths[];
|
||||
extern char *D_800E7834[];
|
||||
extern char *D_800E7840[];
|
||||
extern char *D_800E7848[];
|
||||
|
||||
@@ -1,375 +0,0 @@
|
||||
#ifndef COMMON_TEXTURES_H
|
||||
#define COMMON_TEXTURES_H
|
||||
|
||||
#include <types.h>
|
||||
#include <PR/gbi.h>
|
||||
|
||||
typedef struct {
|
||||
/* 0x0 */ s16 waypointId1;
|
||||
/* 0x2 */ s16 waypointId2;
|
||||
/* 0x4 */ s32 unk4;
|
||||
} UnkCommonTextureStruct0; // size = 0x8
|
||||
|
||||
/** @cond */
|
||||
|
||||
extern u8 common_tlut_finish_line_banner[];
|
||||
extern u8 common_texture_particle_fire[];
|
||||
extern Vtx D_0D001200[];
|
||||
extern Vtx D_0D001210[];
|
||||
extern Vtx D_0D001240[];
|
||||
extern Vtx D_0D001270[];
|
||||
extern Vtx D_0D0012A0[];
|
||||
extern Vtx D_0D0012D0[];
|
||||
extern Vtx D_0D001300[];
|
||||
extern Vtx D_0D001330[];
|
||||
extern Vtx D_0D001360[];
|
||||
extern Vtx D_0D001390[];
|
||||
extern Vtx common_vertex_finish_post[];
|
||||
extern Vtx D_0D001710[];
|
||||
extern Gfx D_0D001750[];
|
||||
extern Gfx D_0D001780[];
|
||||
extern Gfx D_0D001798[];
|
||||
extern Gfx D_0D0017B0[];
|
||||
extern Gfx D_0D0017C8[];
|
||||
extern Gfx D_0D0017E0[];
|
||||
extern Gfx D_0D0017F8[];
|
||||
extern Gfx D_0D001810[];
|
||||
extern Gfx D_0D001828[];
|
||||
extern Gfx D_0D001840[];
|
||||
extern Gfx common_model_finish_post[];
|
||||
extern Gfx D_0D001B68[];
|
||||
extern Gfx D_0D001B90[];
|
||||
extern Gfx D_0D001BD8[];
|
||||
extern Gfx D_0D001C20[];
|
||||
extern Gfx D_0D001C88[];
|
||||
extern Vtx D_0D001CE8[];
|
||||
extern Vtx common_vtx_itembox_question_mark[];
|
||||
extern Vtx D_0D001D68[];
|
||||
extern Vtx D_0D001D98[];
|
||||
extern Vtx D_0D001DC8[];
|
||||
extern Vtx D_0D001DF8[];
|
||||
extern Vtx D_0D001E28[];
|
||||
extern Vtx D_0D001E58[];
|
||||
extern Vtx D_0D001E88[];
|
||||
extern Vtx D_0D001EB8[];
|
||||
extern u8 common_texture_item_box_question_mark[];
|
||||
extern Gfx D_0D002EE8[];
|
||||
extern Vtx common_fake_item_box_question_mark_vertices[];
|
||||
extern Gfx common_model_fake_itembox[];
|
||||
extern Gfx itemBoxQuestionMarkModel[];
|
||||
extern Gfx D_0D003090[];
|
||||
extern Gfx D_0D0030F8[];
|
||||
extern Gfx D_0D003128[];
|
||||
extern Gfx D_0D003158[];
|
||||
extern Gfx D_0D003188[];
|
||||
extern Gfx D_0D0031B8[];
|
||||
extern Gfx D_0D0031E8[];
|
||||
extern Gfx D_0D003218[];
|
||||
extern Gfx D_0D003248[];
|
||||
extern Gfx D_0D003278[];
|
||||
extern Gfx D_0D003288[];
|
||||
extern Vtx common_vtx_banana[];
|
||||
extern Vtx common_vtx_flat_banana[];
|
||||
extern u8 common_texture_banana[];
|
||||
extern u8 common_texture_flat_banana[];
|
||||
extern Gfx common_model_banana[];
|
||||
extern Gfx common_model_flat_banana[];
|
||||
extern u8 common_tlut_trees_import[];
|
||||
extern u8 common_tlut_green_shell[];
|
||||
extern u8 common_tlut_blue_shell[];
|
||||
extern Vtx D_0D005238[];
|
||||
extern Vtx D_0D005278[];
|
||||
extern Gfx D_0D0052B8[];
|
||||
extern Gfx D_0D005308[];
|
||||
extern Gfx D_0D005338[];
|
||||
extern Gfx D_0D005368[];
|
||||
extern Gfx D_toads_turnpike_0D005398[];
|
||||
extern Gfx D_toads_turnpike_0D0053B0[];
|
||||
extern Gfx D_toads_turnpike_0D0053C8[];
|
||||
extern Gfx D_toads_turnpike_0D0053F0[];
|
||||
extern Gfx D_toads_turnpike_0D005418[];
|
||||
extern Vtx D_0D005430[];
|
||||
extern Vtx common_vtx_player_minimap_icon[];
|
||||
extern Vtx D_0D0054B0[];
|
||||
extern Vtx common_vtx_rectangle[];
|
||||
extern Vtx D_0D0057B0[];
|
||||
extern Vtx D_0D0057F0[];
|
||||
extern Vtx D_0D0058E0[];
|
||||
extern Vtx D_0D005920[];
|
||||
extern Vtx D_0D005AA0[];
|
||||
extern Vtx D_0D005AE0[];
|
||||
extern Vtx D_0D005B20[];
|
||||
extern Vtx D_0D005B60[];
|
||||
extern Vtx D_0D005BA0[];
|
||||
extern Vtx D_0D005BD0[];
|
||||
extern Vtx D_0D005C00[];
|
||||
extern Vtx D_0D005C30[];
|
||||
extern Vtx D_0D005E80[];
|
||||
extern Vtx D_0D005EB0[];
|
||||
extern Vtx D_0D005F00[];
|
||||
extern Vtx D_0D005F30[];
|
||||
extern Vtx D_0D005F80[];
|
||||
extern Vtx D_0D005FB0;
|
||||
extern Vtx D_0D005FC0[];
|
||||
extern Vtx D_0D005FF0;
|
||||
extern Vtx D_0D006000[];
|
||||
extern Vtx D_0D006030[];
|
||||
extern Vtx D_0D006080[];
|
||||
extern Vtx D_0D0060B0[];
|
||||
extern Vtx D_0D006100[];
|
||||
extern Vtx D_0D006130[];
|
||||
extern Vtx D_0D006180[];
|
||||
extern Vtx D_0D0061B0[];
|
||||
extern Vtx D_0D006280[];
|
||||
extern Vtx D_0D0062B0[];
|
||||
extern Vtx D_0D006480[];
|
||||
extern Vtx D_0D0064B0[];
|
||||
extern Vtx D_0D006700[];
|
||||
extern Vtx D_0D006730[];
|
||||
extern Vtx D_0D0068C0[];
|
||||
extern Vtx D_0D0068F0[];
|
||||
extern Gfx D_0D006930[];
|
||||
extern Gfx common_rectangle_display[];
|
||||
extern Gfx D_0D006950[];
|
||||
extern Gfx D_0D006968[];
|
||||
extern Gfx D_0D006980[];
|
||||
extern Gfx D_0D006998[];
|
||||
extern Gfx D_0D0069B0[];
|
||||
extern Gfx D_0D0069C8[];
|
||||
extern Gfx D_0D0069E0[];
|
||||
extern Gfx D_0D0069F8[];
|
||||
extern Gfx D_0D006A10[];
|
||||
extern Gfx D_0D006A28[];
|
||||
extern Gfx D_0D006A40[];
|
||||
extern u8 D_0D006A58[];
|
||||
extern u8 D_0D006AD8[];
|
||||
extern u8 common_tlut_debug_font[];
|
||||
extern u8 common_texture_debug_font[];
|
||||
extern Gfx D_0D0076F8[];
|
||||
extern Gfx D_0D007780[];
|
||||
extern Gfx D_0D0077A0[];
|
||||
extern Gfx D_0D0077D0[];
|
||||
extern Gfx D_0D0077F8[];
|
||||
extern Gfx D_0D007828[];
|
||||
extern Gfx D_0D007850[];
|
||||
extern Gfx D_0D007878[];
|
||||
extern Gfx D_0D0078A0[];
|
||||
extern Gfx D_0D0078D0[];
|
||||
extern Gfx D_0D0078F8[];
|
||||
extern Gfx D_0D007928[];
|
||||
extern Gfx D_0D007948[];
|
||||
extern Gfx D_0D007968[];
|
||||
extern Gfx D_0D007988[];
|
||||
extern Gfx D_0D0079A8[];
|
||||
extern Gfx D_0D0079C8[];
|
||||
extern Gfx D_0D0079E8[];
|
||||
extern Gfx D_0D007A08[];
|
||||
extern Gfx D_0D007A40[];
|
||||
extern Gfx D_0D007A60[];
|
||||
extern Gfx D_0D007A80[];
|
||||
extern Gfx D_0D007AA0[];
|
||||
extern Gfx D_0D007AC0[];
|
||||
extern Gfx D_0D007AE0[];
|
||||
extern Gfx D_0D007B00[];
|
||||
extern Gfx D_0D007B20[];
|
||||
extern Gfx D_0D007B98[];
|
||||
extern Gfx D_0D007C10[];
|
||||
extern Gfx D_0D007C88[];
|
||||
extern Gfx D_0D007CB8[];
|
||||
extern Gfx D_0D007CD8[];
|
||||
extern Gfx D_0D007CF8[];
|
||||
extern Gfx D_0D007D18[];
|
||||
extern Gfx D_0D007D38[];
|
||||
extern Gfx D_0D007D58[];
|
||||
extern Gfx D_0D007D78[];
|
||||
extern Gfx D_0D007D98[];
|
||||
extern Gfx D_0D007DB8[];
|
||||
extern Gfx D_0D007DD8[];
|
||||
extern Gfx D_0D007DF8[];
|
||||
extern Gfx D_0D007E18[];
|
||||
extern Gfx D_0D007E38[];
|
||||
extern Gfx D_0D007E58[];
|
||||
extern Gfx D_0D007E78[];
|
||||
extern Gfx D_0D007E98[];
|
||||
extern Gfx D_0D007EB8[];
|
||||
extern Gfx D_0D007ED8[];
|
||||
extern Gfx D_0D007EF8[];
|
||||
extern Gfx D_0D007F18[];
|
||||
extern Gfx D_0D007F38[];
|
||||
extern Gfx D_0D007F58[];
|
||||
extern Gfx D_0D007F78[];
|
||||
extern Gfx D_0D007F98[];
|
||||
extern Gfx D_0D007FB8[];
|
||||
extern Gfx D_0D007FE0[];
|
||||
extern Gfx D_0D008000[];
|
||||
extern Gfx D_0D008020[];
|
||||
extern Gfx D_0D008040[];
|
||||
extern Gfx D_0D008060[];
|
||||
extern Gfx D_0D008080[];
|
||||
extern Gfx D_0D008108[];
|
||||
extern Gfx D_0D008120[];
|
||||
extern Gfx D_0D008138[];
|
||||
extern u8 common_grand_prix_human_item_curve[][100];
|
||||
extern u8 common_grand_prix_cpu_item_curve[][100];
|
||||
extern u8 common_versus_2_player_item_curve[][100];
|
||||
extern u8 common_versus_3_player_item_curve[][100];
|
||||
extern u8 common_versus_4_player_item_curve[][100];
|
||||
extern u8 common_battle_item_curve[][100];
|
||||
extern Vtx D_0D008B78[];
|
||||
extern Vtx D_0D008BB8[];
|
||||
extern Vtx D_0D008BF8[];
|
||||
extern Vtx D_0D008C38[];
|
||||
extern Gfx common_square_plain_render[];
|
||||
extern Gfx D_0D008C90[];
|
||||
extern Gfx common_setting_render_character[];
|
||||
extern Gfx D_0D008D10[];
|
||||
extern Gfx D_0D008D58[];
|
||||
extern Gfx D_0D008DA0[];
|
||||
extern Gfx D_0D008DB8[];
|
||||
extern Gfx D_0D008DF8[];
|
||||
extern Gfx D_0D008E20[];
|
||||
extern Gfx D_0D008E48[];
|
||||
extern Gfx D_0D008E70[];
|
||||
extern Mtx D_0D008E98;
|
||||
extern Vtx D_0D008ED8[];
|
||||
extern UnkCommonTextureStruct0 D_0D008F18[];
|
||||
extern UnkCommonTextureStruct0 D_0D008F28[];
|
||||
extern UnkCommonTextureStruct0 D_0D008F80[];
|
||||
extern UnkCommonTextureStruct0 D_0D008FB8[];
|
||||
extern UnkCommonTextureStruct0 D_0D009058[];
|
||||
extern UnkCommonTextureStruct0 D_0D0090B8[];
|
||||
extern UnkCommonTextureStruct0 D_0D0090F8[];
|
||||
extern UnkCommonTextureStruct0 D_0D009158[];
|
||||
extern UnkCommonTextureStruct0 D_0D009188[];
|
||||
extern UnkCommonTextureStruct0 D_0D0091E8[];
|
||||
extern UnkCommonTextureStruct0 D_0D009210[];
|
||||
extern UnkCommonTextureStruct0 D_0D009238[];
|
||||
extern UnkCommonTextureStruct0 D_0D009260[];
|
||||
extern UnkCommonTextureStruct0 D_0D009280[];
|
||||
extern UnkCommonTextureStruct0 D_0D0092C8[];
|
||||
extern UnkCommonTextureStruct0 D_0D009310[];
|
||||
extern UnkCommonTextureStruct0 D_0D0093C0[];
|
||||
extern f32 D_0D009418[][4];
|
||||
extern f32 D_0D009568[][4];
|
||||
extern f32 D_0D0096B8[][4];
|
||||
extern f32 D_0D009808[][4];
|
||||
extern s32 unkPad;
|
||||
extern u8 common_texture_speedometer[];
|
||||
extern u8 common_texture_speedometer_needle[];
|
||||
extern u8 common_texture_hud_lap[];
|
||||
extern u8 common_texture_hud_123[];
|
||||
extern u8 common_texture_hud_lap_time[];
|
||||
extern u8 common_texture_hud_lap_1_on_3[];
|
||||
extern u8 common_texture_hud_lap_2_on_3[];
|
||||
extern u8 common_texture_hud_lap_3_on_3[];
|
||||
extern u8 common_texture_hud_total_time[];
|
||||
extern u8 common_texture_hud_time[];
|
||||
extern u8 common_texture_hud_normal_digit[];
|
||||
extern u8 common_texture_hud_place[][4096];
|
||||
extern u8 D_0D00E258[];
|
||||
extern u8 D_0D00F258[];
|
||||
extern u8 D_0D010258[];
|
||||
extern u8 D_0D011258[];
|
||||
extern u8 D_0D012258[];
|
||||
extern u8 D_0D013258[];
|
||||
extern u8 D_0D014258[];
|
||||
extern u8 D_0D015258[][2048];
|
||||
extern u8 D_0D015A58[];
|
||||
extern u8 D_0D016258[];
|
||||
extern u8 D_0D016A58[];
|
||||
extern u8 common_tlut_player_emblem[];
|
||||
extern s16 tlutPad[];
|
||||
extern u8 common_texture_player_emblem[][2048];
|
||||
extern u8 common_tlut_hud_type_C_rank_font[];
|
||||
extern u8 common_texture_hud_type_C_rank_font[][256];
|
||||
extern u8 common_tlut_hud_type_C_rank_tiny_font[];
|
||||
extern u8 common_texture_hud_type_C_rank_tiny_font[][64];
|
||||
extern u8 common_texture_character_portrait_border[];
|
||||
extern u8 common_tlut_portrait_mario[];
|
||||
extern u8 common_tlut_portrait_luigi[];
|
||||
extern u8 common_tlut_portrait_peach[];
|
||||
extern u8 common_tlut_portrait_toad[];
|
||||
extern u8 common_tlut_portrait_yoshi[];
|
||||
extern u8 common_tlut_portrait_donkey_kong[];
|
||||
extern u8 common_tlut_portrait_wario[];
|
||||
extern u8 common_tlut_portrait_bowser[];
|
||||
extern u8 common_tlut_portrait_bomb_kart_and_question_mark[];
|
||||
extern u8 common_texture_portrait_mario[];
|
||||
extern u8 common_texture_portrait_luigi[];
|
||||
extern u8 common_texture_portrait_peach[];
|
||||
extern u8 common_texture_portrait_toad[];
|
||||
extern u8 common_texture_portrait_yoshi[];
|
||||
extern u8 common_texture_portrait_donkey_kong[];
|
||||
extern u8 common_texture_portrait_wario[];
|
||||
extern u8 common_texture_portrait_bowser[];
|
||||
extern u8 common_texture_portrait_bomb_kart[];
|
||||
extern u8 common_texture_portrait_question_mark[];
|
||||
extern u8 common_tlut_item_window_none[];
|
||||
extern u8 common_tlut_item_window_banana[];
|
||||
extern u8 common_tlut_item_window_banana_bunch[];
|
||||
extern u8 common_tlut_item_window_mushroom[];
|
||||
extern u8 common_tlut_item_window_double_mushroom[];
|
||||
extern u8 common_tlut_item_window_triple_mushroom[];
|
||||
extern u8 common_tlut_item_window_super_mushroom[];
|
||||
extern u8 common_tlut_item_window_blue_shell[];
|
||||
extern u8 common_tlut_item_window_boo[];
|
||||
extern u8 common_tlut_item_window_green_shell[];
|
||||
extern u8 common_tlut_item_window_triple_green_shell[];
|
||||
extern u8 common_tlut_item_window_red_shell[];
|
||||
extern u8 common_tlut_item_window_triple_red_shell[];
|
||||
extern u8 common_tlut_item_window_star[];
|
||||
extern u8 common_tlut_item_window_thunder_bolt[];
|
||||
extern u8 common_tlut_item_window_fake_item_box[];
|
||||
extern u8 common_texture_item_window_none[];
|
||||
extern u8 common_texture_item_window_banana[];
|
||||
extern u8 common_texture_item_window_banana_bunch[];
|
||||
extern u8 common_texture_item_window_mushroom[];
|
||||
extern u8 common_texture_item_window_double_mushroom[];
|
||||
extern u8 common_texture_item_window_triple_mushroom[];
|
||||
extern u8 common_texture_item_window_super_mushroom[];
|
||||
extern u8 common_texture_item_window_blue_shell[];
|
||||
extern u8 common_texture_item_window_boo[];
|
||||
extern u8 common_texture_item_window_green_shell[];
|
||||
extern u8 common_texture_item_window_triple_green_shell[];
|
||||
extern u8 common_texture_item_window_red_shell[];
|
||||
extern u8 common_texture_item_window_triple_red_shell[];
|
||||
extern u8 common_texture_item_window_star[];
|
||||
extern u8 common_texture_item_window_thunder_bolt[];
|
||||
extern u8 common_texture_item_window_fake_item_box[];
|
||||
extern u8 common_tlut_lakitu_countdown[][512];
|
||||
extern u8 common_tlut_lakitu_checkered_flag[];
|
||||
extern u8 common_tlut_lakitu_second_lap[];
|
||||
extern u8 common_tlut_lakitu_final_lap[];
|
||||
extern u8 common_tlut_lakitu_reverse[];
|
||||
extern u8 common_tlut_lakitu_fishing[];
|
||||
|
||||
extern u8 common_texture_particle_leaf[];
|
||||
extern u8 common_tlut_traffic_light[];
|
||||
extern u8 common_texture_traffic_light_01[];
|
||||
extern u8 common_texture_traffic_light_02[];
|
||||
extern u8 common_texture_traffic_light_03[];
|
||||
extern u8 common_texture_traffic_light_04[];
|
||||
extern u8 common_texture_traffic_light_05[];
|
||||
extern u8 common_texture_traffic_light_06[];
|
||||
extern u8 common_texture_traffic_light_07[];
|
||||
extern u8 common_texture_traffic_light_08[];
|
||||
extern u8 common_texture_traffic_light_09[];
|
||||
extern u8 common_texture_traffic_light_10[];
|
||||
extern u8 common_texture_unused_particle_leaf[];
|
||||
extern u8 D_0D0293D8[];
|
||||
extern u8 D_0D029458[];
|
||||
extern u8 common_texture_bomb[][1024];
|
||||
extern u8 D_0D029C58[];
|
||||
extern u8 D_0D02A058[];
|
||||
extern u8 D_0D02A458[];
|
||||
extern u8 common_tlut_bomb[];
|
||||
extern u8 D_0D02AA58[];
|
||||
extern u8 common_texture_particle_spark[][1024];
|
||||
extern u8 common_texture_particle_smoke[][1024];
|
||||
extern u8 common_texture_minimap_finish_line[];
|
||||
extern u8 common_texture_minimap_kart_character[][128];
|
||||
extern u8 common_texture_minimap_progress_dot[];
|
||||
|
||||
/** @endcond */
|
||||
|
||||
#endif
|
||||
@@ -1,32 +0,0 @@
|
||||
#include <ultra64.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "buffers.h"
|
||||
|
||||
u16 gRandomSeed16;
|
||||
|
||||
u8 randomSeedPadding[216];
|
||||
|
||||
#ifdef VERSION_EU
|
||||
u8 frameBufferPadding[0x5750];
|
||||
#else
|
||||
u8 frameBufferPadding[0x5810];
|
||||
#endif
|
||||
|
||||
union_D_802BFB80 D_802BFB80;
|
||||
struct_D_802DFB80 D_802DFB80[2][2][8];
|
||||
#ifdef AVOID_UB
|
||||
struct_D_802F1F80 D_802F1F80[2][4][8];
|
||||
#else
|
||||
u16 D_802F1F80[2][4][0x100 * 8];
|
||||
#endif
|
||||
|
||||
u16 gZBuffer[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
|
||||
#ifdef AVOID_UB
|
||||
u16 gFramebuffers[3][SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
#else
|
||||
u16 gFramebuffer0[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u16 gFramebuffer1[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
u16 gFramebuffer2[SCREEN_WIDTH * SCREEN_HEIGHT];
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,73 +0,0 @@
|
||||
#include "data_800E45C0.h"
|
||||
|
||||
Lights1 D_800E45C0[] = {
|
||||
gdSPDefLights1(
|
||||
0x64, 0x00, 0x00,
|
||||
0x64, 0x00, 0x00, 0x00, 0x88, 0x00
|
||||
),
|
||||
gdSPDefLights1(
|
||||
0x64, 0x64, 0x00,
|
||||
0xff, 0xff, 0x00, 0x00, 0x88, 0x00
|
||||
),
|
||||
gdSPDefLights1(
|
||||
0x64, 0x64, 0x64,
|
||||
0xff, 0xff, 0xff, 0x00, 0x88, 0x00
|
||||
),
|
||||
gdSPDefLights1(
|
||||
0x64, 0x00, 0x00,
|
||||
0x64, 0x00, 0x00, 0x00, 0x88, 0x00
|
||||
),
|
||||
};
|
||||
|
||||
Lights1 D_800E4620 = gdSPDefLights1(
|
||||
0x96, 0xb4, 0xfa,
|
||||
0xff, 0xff, 0xff, 0x00, 0x00, 0x00
|
||||
);
|
||||
|
||||
Lights1 D_800E4638 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x55,
|
||||
0xff, 0xff, 0xff, 0x00, 0x88, 0x00
|
||||
);
|
||||
|
||||
Lights1 D_800E4650 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x00,
|
||||
0xff, 0xff, 0x00, 0x00, 0x78, 0x00
|
||||
);
|
||||
|
||||
Lights1 D_800E4668 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x55,
|
||||
0xff, 0xff, 0xff, 0xbe, 0x52, 0xc9
|
||||
);
|
||||
|
||||
Lights1 D_800E4680 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x55,
|
||||
0xff, 0xff, 0xff, 0x00, 0x00, 0x78
|
||||
);
|
||||
|
||||
Lights1 D_800E4698 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x55,
|
||||
0xff, 0xff, 0xff, 0x00, 0x00, 0x78
|
||||
);
|
||||
|
||||
Lights1 D_800E46B0 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x55,
|
||||
0xff, 0xff, 0xff, 0x00, 0x00, 0x78
|
||||
);
|
||||
|
||||
Lights1 D_800E46C8 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x55,
|
||||
0xff, 0xff, 0xff, 0x00, 0x00, 0x78
|
||||
);
|
||||
|
||||
Lights1 D_800E46E0 = gdSPDefLights1(
|
||||
0x55, 0x55, 0x55,
|
||||
0xff, 0xff, 0xff, 0x00, 0x00, 0x78
|
||||
);
|
||||
|
||||
Vec3u32 D_800E46F8[] = {
|
||||
{0x000000ff, 0x000000ff, 0x000000ff},
|
||||
{0x000000ff, 0x000000ff, 0x00000000},
|
||||
{0x000000ff, 0x00000000, 0x00000000},
|
||||
};
|
||||
|
||||
u8 D_800E471C[] = { 0x00, 0x01, 0x02, 0x03, 0x02, 0x01, 0x00 };
|
||||
@@ -1,24 +0,0 @@
|
||||
#ifndef DATA_800E45C0_H
|
||||
#define DATA_800E45C0_H
|
||||
|
||||
#include <ultra64.h>
|
||||
|
||||
typedef u32 Vec3u32[3];
|
||||
|
||||
extern Lights1 D_800E45C0[];
|
||||
extern Lights1 D_800E45D8;
|
||||
extern Lights1 D_800E45F0;
|
||||
extern Lights1 D_800E4608;
|
||||
extern Lights1 D_800E4620;
|
||||
extern Lights1 D_800E4638;
|
||||
extern Lights1 D_800E4650;
|
||||
extern Lights1 D_800E4668;
|
||||
extern Lights1 D_800E4680;
|
||||
extern Lights1 D_800E4698;
|
||||
extern Lights1 D_800E46B0;
|
||||
extern Lights1 D_800E46C8;
|
||||
extern Lights1 D_800E46E0;
|
||||
extern Vec3u32 D_800E46F8[];
|
||||
extern u8 D_800E471C[];
|
||||
|
||||
#endif
|
||||
@@ -1,215 +0,0 @@
|
||||
#include <ultra64.h>
|
||||
#include "data_800E8700.h"
|
||||
|
||||
Vtx D_800E8700[] = {
|
||||
{{{ 8, 8, 0}, 0, {960, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 8, -8, 0}, 0, {960, 960}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -8, -8, 0}, 0, {0, 960}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -8, 8, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8740[] = {
|
||||
{{{ 1, 2, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 2, -2, 0}, 0, {0, 960}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, -2, 0}, 0, {960, 960}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -1, 2, 0}, 0, {960, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8780[] = {
|
||||
{{{ 2, 4, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 2, 0, 0}, 0, {4032, 4032}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 0, 0}, 0, {0, 4032}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 4, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E87C0[] = {
|
||||
{{{ 2, 2, 0}, 0, {1984, 0}, {0x00, 0x00, 0x7F, 0xFF}}},
|
||||
{{{ 2, -2, 0}, 0, {1984, 1984}, {0x00, 0x00, 0x7F, 0xFF}}},
|
||||
{{{ -2, -2, 0}, 0, {0, 1984}, {0x00, 0x00, 0x7F, 0xFF}}},
|
||||
{{{ -2, 2, 0}, 0, {0, 0}, {0x00, 0x00, 0x7F, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8800[] = {
|
||||
{{{ 0, 4, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 0, 0, 0}, 0, {0, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -4, 0, 0}, 0, {4032, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -4, 4, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8840[] = {
|
||||
{{{ 4, 4, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 4, 0, 0}, 0, {0, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 0, 0, 0}, 0, {4032, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 0, 4, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8880[] = {
|
||||
{{{ 2, 2, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 2, 0, 0}, 0, {0, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 0, 0}, 0, {4032, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 2, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E88C0[] = {
|
||||
{{{ 2, 0, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 2, -2, 0}, 0, {0, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, -2, 0}, 0, {4032, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 0, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8900[][4] = {
|
||||
{
|
||||
{{{ 2, 4, 0}, 0, {0, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ 2, 0, 0}, 0, {0, 4032}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ 0, 0, 0}, 0, {1984, 4032}, {0xFF, 0xFF, 0x00, 0x70}}},
|
||||
{{{ 0, 4, 0}, 0, {1984, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
},
|
||||
|
||||
{
|
||||
{{{ 0, 4, 0}, 0, {0, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ 0, 0, 0}, 0, {0, 4032}, {0xFF, 0xFF, 0x00, 0x70}}},
|
||||
{{{ -2, 0, 0}, 0, {1984, 4032}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ -2, 4, 0}, 0, {1984, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
},
|
||||
|
||||
{
|
||||
{{{ 2, 4, 0}, 0, {1984, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ 2, 0, 0}, 0, {1984, 4032}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ 0, 0, 0}, 0, {0, 4032}, {0xFF, 0xFF, 0x00, 0x70}}},
|
||||
{{{ 0, 4, 0}, 0, {0, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
},
|
||||
|
||||
{
|
||||
{{{ 0, 4, 0}, 0, {1984, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ 0, 0, 0}, 0, {1984, 4032}, {0xFF, 0xFF, 0x00, 0x70}}},
|
||||
{{{ -2, 0, 0}, 0, {0, 4032}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
{{{ -2, 4, 0}, 0, {0, 0}, {0x00, 0xFF, 0xFF, 0x70}}},
|
||||
},
|
||||
};
|
||||
|
||||
Vtx D_800E8A00[] = {
|
||||
{{{ 2, 4, 0}, 0, {0, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ 2, 0, 0}, 0, {0, 4032}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ 0, 0, 0}, 0, {1984, 4032}, {0xFF, 0xFF, 0x14, 0x60}}},
|
||||
{{{ 0, 4, 0}, 0, {1984, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8A40[] = {
|
||||
{{{ 0, 4, 0}, 0, {0, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ 0, 0, 0}, 0, {0, 4032}, {0xFF, 0xFF, 0x14, 0x60}}},
|
||||
{{{ -2, 0, 0}, 0, {1984, 4032}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ -2, 4, 0}, 0, {1984, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8A80[] = {
|
||||
{{{ 2, 4, 0}, 0, {1984, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ 2, 0, 0}, 0, {1984, 4032}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ 0, 0, 0}, 0, {0, 4032}, {0xFF, 0xFF, 0x14, 0x60}}},
|
||||
{{{ 0, 4, 0}, 0, {0, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8AC0[] = {
|
||||
{{{ 0, 4, 0}, 0, {1984, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ 0, 0, 0}, 0, {1984, 4032}, {0xFF, 0xFF, 0x14, 0x60}}},
|
||||
{{{ -2, 0, 0}, 0, {0, 4032}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
{{{ -2, 4, 0}, 0, {0, 0}, {0xF0, 0x00, 0x00, 0x60}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8B00[] = {
|
||||
{{{ 1, 12, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xF0}}},
|
||||
{{{ 2, 0, 0}, 0, {0, 4032}, {0xFF, 0xFF, 0xFF, 0xF0}}},
|
||||
{{{ -2, 0, 0}, 0, {1984, 4032}, {0xFF, 0xFF, 0xFF, 0xF0}}},
|
||||
{{{ -1, 12, 0}, 0, {1984, 0}, {0xFF, 0xFF, 0xFF, 0xF0}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8B40[] = {
|
||||
{{{ 2, 1, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 2, -1, 0}, 0, {0, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, -1, 0}, 0, {4032, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 1, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8B80[] = {
|
||||
{{{ 4, 1, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 4, -1, 0}, 0, {0, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 0, -1, 0}, 0, {4032, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 0, 1, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8BC0[] = {
|
||||
{{{ 0, 1, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 0, -1, 0}, 0, {0, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -4, -1, 0}, 0, {4032, 1984}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -4, 1, 0}, 0, {4032, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8C00[] = {
|
||||
{{{ 2, 4, 0}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ 2, 0, 0}, 0, {0, 4032}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 0, 0}, 0, {1984, 4032}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
{{{ -2, 4, 0}, 0, {1984, 0}, {0xFF, 0xFF, 0xFF, 0xFF}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8C40[] = {
|
||||
{{{ 9, 18, -9}, 0, {0, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
{{{ 9, 0, -9}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 0, -9}, 0, {990, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 18, -9}, 0, {990, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
{{{ 9, 18, 9}, 0, {0, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
{{{ 9, 0, 9}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 0, 9}, 0, {990, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 18, 9}, 0, {990, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
};
|
||||
|
||||
Vtx D_800E8CC0[] = {
|
||||
{{{ 9, 70, -9}, 0, {0, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
{{{ 9, 0, -9}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 0, -9}, 0, {990, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 70, -9}, 0, {990, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
{{{ 9, 70, 9}, 0, {0, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
{{{ 9, 0, 9}, 0, {0, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 0, 9}, 0, {990, 0}, {0xFF, 0xFF, 0xFF, 0x9B}}},
|
||||
{{{ -9, 70, 9}, 0, {990, 990}, {0xFF, 0xFF, 0xFF, 0x37}}},
|
||||
};
|
||||
|
||||
Gfx D_800E8D40[] = {
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetAlphaCompare(G_AC_NONE),
|
||||
gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsSPVertex(D_800E8C40, 8, 0),
|
||||
gsSP1Triangle(0, 1, 2, 0),
|
||||
gsSP1Triangle(0, 2, 3, 0),
|
||||
gsSP1Triangle(4, 7, 6, 0),
|
||||
gsSP1Triangle(4, 6, 5, 0),
|
||||
gsSP1Triangle(0, 4, 5, 0),
|
||||
gsSP1Triangle(0, 5, 1, 0),
|
||||
gsSP1Triangle(3, 7, 4, 0),
|
||||
gsSP1Triangle(0, 3, 4, 0),
|
||||
gsSP1Triangle(7, 3, 6, 0),
|
||||
gsSP1Triangle(3, 2, 6, 0),
|
||||
gsSP1Triangle(1, 5, 6, 0),
|
||||
gsSP1Triangle(2, 1, 6, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
|
||||
Gfx D_800E8DD0[] = {
|
||||
gsSPClearGeometryMode(G_LIGHTING),
|
||||
gsDPSetAlphaCompare(G_AC_NONE),
|
||||
gsDPSetRenderMode(G_RM_AA_ZB_XLU_SURF, G_RM_AA_ZB_XLU_SURF2),
|
||||
gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
|
||||
gsSPVertex(D_800E8CC0, 8, 0),
|
||||
gsSP1Triangle(0, 1, 2, 0),
|
||||
gsSP1Triangle(0, 2, 3, 0),
|
||||
gsSP1Triangle(4, 7, 6, 0),
|
||||
gsSP1Triangle(4, 6, 5, 0),
|
||||
gsSP1Triangle(0, 4, 5, 0),
|
||||
gsSP1Triangle(0, 5, 1, 0),
|
||||
gsSP1Triangle(3, 7, 4, 0),
|
||||
gsSP1Triangle(0, 3, 4, 0),
|
||||
gsSP1Triangle(7, 3, 6, 0),
|
||||
gsSP1Triangle(3, 2, 6, 0),
|
||||
gsSP1Triangle(1, 5, 6, 0),
|
||||
gsSP1Triangle(2, 1, 6, 0),
|
||||
gsSPEndDisplayList(),
|
||||
};
|
||||
@@ -1,29 +0,0 @@
|
||||
#ifndef DATA_800E8700_H
|
||||
#define DATA_800E8700_H
|
||||
|
||||
#include <ultra64.h>
|
||||
|
||||
extern Vtx D_800E8700[];
|
||||
extern Vtx D_800E8740[];
|
||||
extern Vtx D_800E8780[];
|
||||
extern Vtx D_800E87C0[];
|
||||
extern Vtx D_800E8800[];
|
||||
extern Vtx D_800E8840[];
|
||||
extern Vtx D_800E8880[];
|
||||
extern Vtx D_800E88C0[];
|
||||
extern Vtx D_800E8900[][4];
|
||||
extern Vtx D_800E8A00[];
|
||||
extern Vtx D_800E8A40[];
|
||||
extern Vtx D_800E8A80[];
|
||||
extern Vtx D_800E8AC0[];
|
||||
extern Vtx D_800E8B00[];
|
||||
extern Vtx D_800E8B40[];
|
||||
extern Vtx D_800E8B80[];
|
||||
extern Vtx D_800E8BC0[];
|
||||
extern Vtx D_800E8C00[];
|
||||
extern Vtx D_800E8C40[];
|
||||
extern Vtx D_800E8CC0[];
|
||||
extern Gfx D_800E8D40[];
|
||||
extern Gfx D_800E8DD0[];
|
||||
|
||||
#endif
|
||||
@@ -3,7 +3,7 @@
|
||||
#include <PR/ultratypes.h>
|
||||
#include <PR/gbi.h>
|
||||
#include "data_segment2.h"
|
||||
#include "src/data/startup_logo.h"
|
||||
#include <assets/startup_logo.h>"
|
||||
|
||||
Gfx D_02007650[] = {
|
||||
gsDPPipeSync(),
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
#include <ultra64.h>
|
||||
#include "gfx_output_buffer.h"
|
||||
|
||||
u64 gGfxSPTaskOutputBuffer[GFX_OUTPUT_BUFFER_SIZE];
|
||||
|
||||
u32 gGfxSPTaskOutputBufferSize;
|
||||
@@ -1,377 +0,0 @@
|
||||
#include "data/path_spawn_data.h"
|
||||
#include "courses/all_course_data.h"
|
||||
#include "ending/ceremony_data.h"
|
||||
|
||||
UnkCommonTextureStruct0 *D_800DC720[] = {
|
||||
D_0D008F28, D_0D008F80, D_0D008FB8, D_0D009058,
|
||||
D_0D0090B8, D_0D0090F8, D_0D009158, D_0D009188,
|
||||
D_0D0091E8, D_0D009210, D_0D009238, D_0D009260,
|
||||
D_0D009280, D_0D0092C8, D_0D009310, D_0D008F18,
|
||||
D_0D008F18, D_0D008F18, D_0D0093C0, D_0D008F18,
|
||||
D_0D008F18, NULL,
|
||||
};
|
||||
|
||||
TrackWaypoint nullPath = { 0x8000, 0x0000, 0x0000, 0x0000 };
|
||||
|
||||
TrackWaypoint *gCoursePathTable[][4] = {
|
||||
{ d_course_mario_raceway_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_choco_mountain_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_bowsers_castle_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_banshee_boardwalk_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_yoshi_valley_unknown_waypoints0, d_course_yoshi_valley_unknown_waypoints1, d_course_yoshi_valley_unknown_waypoints2, d_course_yoshi_valley_unknown_waypoints3 },
|
||||
{ d_course_frappe_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_koopa_troopa_beach_unknown_waypoints0, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_royal_raceway_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_luigi_raceway_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_moo_moo_farm_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_toads_turnpike_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_kalimari_desert_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_sherbet_land_uknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_rainbow_road_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_wario_stadium_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_dks_jungle_parkway_unknown_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ ending_sequence, ending_sequence2, ending_sequence3, ending_sequence4 },
|
||||
};
|
||||
|
||||
TrackWaypoint *D_800DC8D0[][4] = {
|
||||
{ d_course_mario_raceway_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_choco_mountain_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_bowsers_castle_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_banshee_boardwalk_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_yoshi_valley_track_waypoints0, d_course_yoshi_valley_track_waypoints1, d_course_yoshi_valley_track_waypoints2, d_course_yoshi_valley_track_waypoints3 },
|
||||
{ d_course_frappe_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_koopa_troopa_beach_track_waypoints0, d_course_koopa_troopa_beach_track_waypoints1, &nullPath, &nullPath },
|
||||
{ d_course_royal_raceway_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_luigi_raceway_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_moo_moo_farm_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_toads_turnpike_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_kalimari_desert_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_sherbet_land_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_rainbow_road_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_wario_staduim_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ d_course_dks_jungle_parkway_track_waypoints, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
{ &nullPath, &nullPath, &nullPath, &nullPath },
|
||||
};
|
||||
|
||||
s16 D_800DCA20[] = {
|
||||
0x0030, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035, 0x0035,
|
||||
0x0030, 0x0030, 0x0028, 0x0035, 0x0035, 0x0026, 0x0035, 0x0035,
|
||||
0x0035, 0x0035, 0x0035, 0x0028, 0x0035, 0x0000,
|
||||
};
|
||||
|
||||
f32 D_800DCA4C[] = {
|
||||
50.0, 35.0, 35.0, 40.0,
|
||||
35.0, 50.0, 50.0, 50.0,
|
||||
50.0, 50.0, 50.0, 50.0,
|
||||
50.0, 50.0, 50.0, -1.0,
|
||||
-1.0, -1.0, 40.0, -1.0,
|
||||
40.0,
|
||||
};
|
||||
|
||||
f32 D_800DCAA0[] = {
|
||||
0.3, 0.3, 0.2, 0.4,
|
||||
0.0, 0.3, 0.5, 0.4,
|
||||
0.7, 0.5, 0.5, 0.3,
|
||||
0.3, 0.4, 0.6, 0.1,
|
||||
0.5, 0.5, 0.1, 0.5,
|
||||
0.5,
|
||||
};
|
||||
|
||||
// I think the types for D_800DCAF4, D_800DCB34, and D_800DCBB4 are all
|
||||
// wrong in some way based on their usage in func_800088D8
|
||||
// But I cannot be bothered to figure it out
|
||||
s16 D_800DCAF4[] = {
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x001e, 0x0019, 0x0032, 0x004b, 0x0064, 0x007d, 0x0096, 0x00af,
|
||||
0x0028, 0x001e, 0x003c, 0x005a, 0x0078, 0x0096, 0x00b4, 0x00d2,
|
||||
0x0032, 0x0028, 0x0050, 0x0078, 0x00a0, 0x00c8, 0x00f0, 0x0118,
|
||||
};
|
||||
|
||||
s16 D_800DCB34[] = {
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x001e, 0x0019, 0x002d, 0x0041, 0x005a, 0x0073, 0x008c, 0x00a5,
|
||||
0x0028, 0x0003, 0x0006, 0x0010, 0x002e, 0x0031, 0x003b, 0x0059,
|
||||
0x0032, 0x001e, 0x003c, 0x003f, 0x0049, 0x004e, 0x006c, 0x008a,
|
||||
0x000a, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
};
|
||||
|
||||
s16 *D_800DCBB4[] = {
|
||||
D_800DCB34, D_800DCAF4, D_800DCAF4, D_800DCAF4,
|
||||
D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4,
|
||||
D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4,
|
||||
D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4,
|
||||
D_800DCAF4, D_800DCAF4, D_800DCAF4, D_800DCAF4,
|
||||
D_800DCAF4,
|
||||
};
|
||||
|
||||
BombKartSpawn D_800DCC08[][NUM_BOMB_KARTS_MAX] = {
|
||||
{
|
||||
// Mario Raceway Bomb Kart spawns
|
||||
{ 0x0028, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0109, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x011d, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x01a4, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Choco Mountain Bomb Kart spawns
|
||||
{ 0x008c, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00a5, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x014a, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0226, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0253, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Bowser Castle Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0096, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00c8, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0104, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x01b3, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Banshee Boardwalk Bomb Kart spawns
|
||||
{ 0x006e, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00be, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00fa, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x01db, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0262, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Yoshi Valley Bomb Kart spawns
|
||||
{ 0x0000, 0x0000, 0.8333333, -1533.0, -682.0, -103.0, 0.0 },
|
||||
{ 0x000a, 0x0000, 0.8333333, -1565.0, -619.0, -109.0, 0.0 },
|
||||
{ 0x0014, 0x0000, 0.8333333, -1529.0, -579.0, -109.0, 0.0 },
|
||||
{ 0x001e, 0x0000, 0.8333333, -1588.0, -534.0, -106.0, 0.0 },
|
||||
{ 0x0028, 0x0000, 0.8333333, -1598.0, -207.0, -105.0, 0.0 },
|
||||
{ 0x0032, 0x0000, 0.8333333, -1646.0, -147.0, -93.0, 0.0 },
|
||||
{ 0x003c, 0x0000, 0.8333333, -2532.0, -445.0, -90.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Frappe Snowland Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0096, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0122, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x015e, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Koopa Troopa Beach Bomb Kart spawns
|
||||
{ 0x003c, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0078, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00c8, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0118, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x01b3, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Royal Raceway Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0128, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0190, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x02ea, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Luigi Raceway Bomb Kart spawns
|
||||
{ 0x0032, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00c8, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0131, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x01b8, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0203, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Moo Moo Farm Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x008c, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00e1, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x013c, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x01b2, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Toads Turnpike Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0096, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00c8, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00fa, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Kalamari Desert Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x008a, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0118, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0194, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x01fe, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Sherbet Land Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0096, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00c8, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00fa, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Rainbow Road Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0096, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00c8, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00fa, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Wario Stadium Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0096, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00c8, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00fa, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Block Fort Bomb Kart spawns
|
||||
{ 0x0014, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0028, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x003c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0050, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0078, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x008c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Skyscraper Bomb Kart spawns
|
||||
{ 0x0014, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0028, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x003c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0050, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0078, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x008c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Double Deck Bomb Kart spawns
|
||||
{ 0x0014, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0028, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x003c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0050, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0078, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x008c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// DK Jungle Bomb Kart spawns
|
||||
{ 0x0032, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0096, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00be, 0x0001, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x00fa, 0x0003, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0000, 0x0000, 0.8333333, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Big Donut Bomb Kart spawns
|
||||
{ 0x0014, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0028, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x003c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0050, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0078, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x008c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
|
||||
{
|
||||
// Award Ceremony Bomb Kart spawns
|
||||
{ 0x0003, 0x0005, 1.250000, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0028, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x003c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0050, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0064, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x0078, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
{ 0x008c, 0x0000, 1.0, 0.0, 0.0, 0.0, 0.0 },
|
||||
},
|
||||
};
|
||||
|
||||
struct _struct_D_800DD9D0_0x10 D_800DD9D0[] = {
|
||||
{ 0x0258, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02bc, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x030c, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02ee, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02b2, 0x02a8, 0x02b2, 0x0320, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02ee, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02bc, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x03e8, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02da, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x0230, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x03e8, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02bc, 0x0001, 0x0001, 0x0001, 0x0226, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x02bc, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x076c, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x0640, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x0370, 0x0001, 0x0001, 0x0001, 0x01f4, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
{ 0x01f4, 0x01f4, 0x01f4, 0x01f4, 0x0001, { 0x0000, 0x0000, 0x0000}},
|
||||
};
|
||||
|
||||
s32 D_800DDB20 = 0x00000000;
|
||||
|
||||
s32 D_800DDB24 = 0x00000001;
|
||||
@@ -1,33 +0,0 @@
|
||||
#ifndef PATH_SPAWN_DATA_H
|
||||
#define PATH_SPAWN_DATA_H
|
||||
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include "common_textures.h"
|
||||
#include "include/bomb_kart.h"
|
||||
|
||||
struct _struct_D_800DD9D0_0x10 {
|
||||
/* 0x00 */ u16 unk0;
|
||||
/* 0x02 */ u16 unk2;
|
||||
/* 0x04 */ u16 unk4;
|
||||
/* 0x06 */ u16 unk6;
|
||||
/* 0x08 */ u16 unk8;
|
||||
/* 0x0A */ char padA[6];
|
||||
}; // size 0x10
|
||||
|
||||
extern UnkCommonTextureStruct0 *D_800DC720[];
|
||||
extern TrackWaypoint nullPath;
|
||||
extern TrackWaypoint *gCoursePathTable[][4];
|
||||
extern TrackWaypoint *D_800DC8D0[][4];
|
||||
extern s16 D_800DCA20[];
|
||||
extern f32 D_800DCA4C[];
|
||||
extern f32 D_800DCAA0[];
|
||||
extern s16 D_800DCAF4[];
|
||||
extern s16 D_800DCB34[];
|
||||
extern s16 *D_800DCBB4[];
|
||||
extern BombKartSpawn D_800DCC08[][NUM_BOMB_KARTS_MAX];
|
||||
extern struct _struct_D_800DD9D0_0x10 D_800DD9D0[];
|
||||
extern s32 D_800DDB20;
|
||||
extern s32 D_800DDB24;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,73 @@
|
||||
#include "data/path_spawn_metadata.h"
|
||||
#include "courses/all_course_data.h"
|
||||
#include <assets/ceremony_data.h>
|
||||
|
||||
// @warning Array contains an extra zero element at the end.
|
||||
KartAIBehaviour *gKartAIBehaviourLUT[] = {
|
||||
#include "assets/course_metadata/gKartAIBehaviourLUT.inc.c"
|
||||
|
||||
};
|
||||
|
||||
TrackWaypoint nullPath = { 0x8000, 0x0000, 0x0000, 0x0000 };
|
||||
|
||||
TrackWaypoint *gCoursePathTable[][4] = {
|
||||
#include "assets/course_metadata/gCoursePathTableUnknown.inc.c"
|
||||
};
|
||||
|
||||
TrackWaypoint *gCoursePathTable2[][4] = {
|
||||
#include "assets/course_metadata/gCoursePathTable.inc.c"
|
||||
};
|
||||
|
||||
// @warning Array contains an extra zero element at the end.
|
||||
s16 gKartAISteeringSensitivity[] = {
|
||||
#include "assets/course_metadata/gCPUSteeringSensitivity.inc.c"
|
||||
};
|
||||
|
||||
// Possibly maximum cpu separation
|
||||
f32 gKartAICourseMaximumSeparation[] = {
|
||||
#include "assets/course_metadata/gKartAICourseMaximumSeparation.inc.c"
|
||||
};
|
||||
|
||||
// Possibly minimum cpu separation
|
||||
f32 gKartAICourseMinimumSeparation[] = {
|
||||
#include "assets/course_metadata/gKartAICourseMinimumSeparation.inc.c"
|
||||
};
|
||||
|
||||
// I think the types for D_800DCAF4, D_800DCB34, and D_800DCBB4 are all
|
||||
// wrong in some way based on their usage in func_800088D8
|
||||
// But I cannot be bothered to figure it out
|
||||
// Used as a ptr in D_800DCBB4
|
||||
s16 D_800DCAF4[] = {
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x001e, 0x0019, 0x0032, 0x004b, 0x0064, 0x007d, 0x0096, 0x00af,
|
||||
0x0028, 0x001e, 0x003c, 0x005a, 0x0078, 0x0096, 0x00b4, 0x00d2,
|
||||
0x0032, 0x0028, 0x0050, 0x0078, 0x00a0, 0x00c8, 0x00f0, 0x0118,
|
||||
};
|
||||
|
||||
// Used as a ptr in D_800DCBB4
|
||||
s16 D_800DCB34[] = {
|
||||
0x0014, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x001e, 0x0019, 0x002d, 0x0041, 0x005a, 0x0073, 0x008c, 0x00a5,
|
||||
0x0028, 0x0003, 0x0006, 0x0010, 0x002e, 0x0031, 0x003b, 0x0059,
|
||||
0x0032, 0x001e, 0x003c, 0x003f, 0x0049, 0x004e, 0x006c, 0x008a,
|
||||
0x000a, 0x0005, 0x000a, 0x000f, 0x0014, 0x0019, 0x001e, 0x0023,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
0x000a, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005, 0x0005,
|
||||
};
|
||||
|
||||
s16 *D_800DCBB4[] = {
|
||||
#include "assets/course_metadata/D_800DCBB4.inc.c"
|
||||
};
|
||||
|
||||
BombKartSpawn gBombKartSpawns[][NUM_BOMB_KARTS_MAX] = {
|
||||
#include "assets/course_metadata/gBombKartSpawns.inc.c"
|
||||
};
|
||||
|
||||
struct _struct_gCoursePathSizes_0x10 gCoursePathSizes[] = {
|
||||
#include "assets/course_metadata/gCoursePathSizes.inc.c"
|
||||
};
|
||||
|
||||
s32 D_800DDB20 = 0x00000000;
|
||||
|
||||
s32 D_800DDB24 = 0x00000001;
|
||||
@@ -0,0 +1,33 @@
|
||||
#ifndef PATH_SPAWN_METADATA_H
|
||||
#define PATH_SPAWN_METADATA_H
|
||||
|
||||
#include "waypoints.h"
|
||||
#include "common_structs.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "include/bomb_kart.h"
|
||||
|
||||
struct _struct_gCoursePathSizes_0x10 {
|
||||
/* 0x00 */ u16 unk0;
|
||||
/* 0x02 */ u16 unk2;
|
||||
/* 0x04 */ u16 unk4;
|
||||
/* 0x06 */ u16 unk6;
|
||||
/* 0x08 */ u16 unk8;
|
||||
/* 0x0A */ char padA[6];
|
||||
}; // size 0x10
|
||||
|
||||
extern KartAIBehaviour *gKartAIBehaviourLUT[];
|
||||
extern TrackWaypoint nullPath;
|
||||
extern TrackWaypoint *gCoursePathTable[][4];
|
||||
extern TrackWaypoint *gCoursePathTable2[][4];
|
||||
extern s16 gKartAISteeringSensitivity[];
|
||||
extern f32 gKartAICourseMaximumSeparation[];
|
||||
extern f32 gKartAICourseMinimumSeparation[];
|
||||
extern s16 D_800DCAF4[];
|
||||
extern s16 D_800DCB34[];
|
||||
extern s16 *D_800DCBB4[];
|
||||
extern BombKartSpawn gBombKartSpawns[][NUM_BOMB_KARTS_MAX];
|
||||
extern struct _struct_gCoursePathSizes_0x10 gCoursePathSizes[];
|
||||
extern s32 D_800DDB20;
|
||||
extern s32 D_800DDB24;
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,33 +0,0 @@
|
||||
#ifndef STARTUP_LOGO_H
|
||||
#define STARTUP_LOGO_H
|
||||
|
||||
extern Vtx startup_logo[];
|
||||
extern Gfx startup_logo_dl[];
|
||||
extern Gfx startup_logo_dl2[];
|
||||
extern Gfx startup_logo_dl3[];
|
||||
extern Gfx startup_logo_dl4[];
|
||||
extern Gfx startup_logo_dl5[];
|
||||
extern Gfx startup_logo_dl6[];
|
||||
extern Gfx startup_logo_dl7[];
|
||||
extern Gfx startup_logo_dl8[];
|
||||
extern Vtx startup_logo2[];
|
||||
extern Gfx startup_logo_dl9[];
|
||||
extern Gfx startup_logo_dl10[];
|
||||
extern Gfx startup_logo_dl11[];
|
||||
extern Gfx startup_logo_dl12[];
|
||||
extern Gfx startup_logo_dl13[];
|
||||
extern Gfx startup_logo_dl14[];
|
||||
extern Gfx startup_logo_dl15[];
|
||||
extern Gfx startup_logo_dl16[];
|
||||
extern Gfx startup_logo_dl17[];
|
||||
extern Gfx startup_logo_dl18[];
|
||||
extern Gfx startup_logo_dl19[];
|
||||
extern Gfx startup_logo_dl20[];
|
||||
extern u8 reflection_map_gold[2048];
|
||||
extern Gfx startup_texture_dl1[];
|
||||
extern Lights1 lights;
|
||||
extern Gfx startup_texture_dl2[];
|
||||
extern Gfx startup_texture_dl3[];
|
||||
extern Gfx startup_texture_dl4[];
|
||||
|
||||
#endif
|
||||
@@ -30,7 +30,7 @@
|
||||
#include <code_80281780.h>
|
||||
#include <code_80281C40.h>
|
||||
#include <collision.h>
|
||||
#include <common_textures.h>
|
||||
#include <assets/common_data.h>
|
||||
#include <credits.h>
|
||||
#include <data_segment2.h>
|
||||
#include <buffers.h>
|
||||
@@ -63,7 +63,7 @@
|
||||
#include <objects.h>
|
||||
#include <segments.h>
|
||||
#include <sounds.h>
|
||||
#include "data/trig_tables.h"
|
||||
#include "buffers/trig_tables.h"
|
||||
#include <types.h>
|
||||
#include <ultra64.h>
|
||||
#include <vehicles.h>
|
||||
|
||||
+5
-5
@@ -342,7 +342,7 @@ void func_8008C8C4(Player* player, s8 playerId) {
|
||||
if ((gIsPlayerTripleAButtonCombo[playerId] == TRUE) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN)) {
|
||||
player->currentSpeed = (f32) (player->currentSpeed + 100.0f);
|
||||
}
|
||||
if ((gModeSelection == VERSUS) && ((player->type & PLAYER_CPU) == PLAYER_CPU) && (!gDemoMode) && ((player->unk_0CA & 2) == 0) && (gGPCurrentRaceRankByPlayerId[playerId] != 0)) {
|
||||
if ((gModeSelection == VERSUS) && ((player->type & PLAYER_KART_AI) == PLAYER_KART_AI) && (!gDemoMode) && ((player->unk_0CA & 2) == 0) && (gGPCurrentRaceRankByPlayerId[playerId] != 0)) {
|
||||
player->soundEffects = (s32) (player->soundEffects | REVERSE_SOUND_EFFECT);
|
||||
}
|
||||
}
|
||||
@@ -1035,7 +1035,7 @@ void apply_reverse_sound_effect(Player *player, s8 arg1)
|
||||
player->unk_0E0 = 0;
|
||||
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
if (((gModeSelection == VERSUS) && ((player->type & PLAYER_CPU) != 0)) && (!gDemoMode)) {
|
||||
if (((gModeSelection == VERSUS) && ((player->type & PLAYER_KART_AI) != 0)) && (!gDemoMode)) {
|
||||
func_800CA24C(arg1);
|
||||
}
|
||||
|
||||
@@ -1043,7 +1043,7 @@ void apply_reverse_sound_effect(Player *player, s8 arg1)
|
||||
}
|
||||
|
||||
func_800C90F4(arg1, (player->characterId * 0x10) + 0x29008005);
|
||||
if (((gModeSelection == VERSUS) && ((player->type & PLAYER_CPU) != 0)) && (!gDemoMode)) {
|
||||
if (((gModeSelection == VERSUS) && ((player->type & PLAYER_KART_AI) != 0)) && (!gDemoMode)) {
|
||||
func_800CA24C(arg1);
|
||||
}
|
||||
func_800C9060(arg1, SOUND_ACTION_EXPLOSION);
|
||||
@@ -1884,7 +1884,7 @@ void func_80090970(Player *player, s8 playerId, s8 arg2) {
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
if (((player->type & PLAYER_HUMAN) == 0x4000) && ((player->type & PLAYER_CPU) == 0)) {
|
||||
if (((player->type & PLAYER_HUMAN) == 0x4000) && ((player->type & PLAYER_KART_AI) == 0)) {
|
||||
func_8009E088(playerId, 0xA);
|
||||
}
|
||||
if ((player->unk_0CA & 1) == 1) {
|
||||
@@ -1916,7 +1916,7 @@ void func_80090970(Player *player, s8 playerId, s8 arg2) {
|
||||
break;
|
||||
case 3:
|
||||
D_80165330[playerId] = 0;
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_CPU) == 0)) {
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_KART_AI) == 0)) {
|
||||
func_8009E020(playerId, 0x14);
|
||||
}
|
||||
func_80090178(player, playerId, sp44, sp38);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,56 +0,0 @@
|
||||
#ifndef CEREMONY_DATA_H
|
||||
#define CEREMONY_DATA_H
|
||||
|
||||
#include <types.h>
|
||||
#include "waypoints.h"
|
||||
|
||||
extern Vtx silver_trophy_model[];
|
||||
extern Gfx silver_trophy_dl[];
|
||||
extern Gfx silver_trophy_dl2[];
|
||||
extern Gfx silver_trophy_dl3[];
|
||||
extern Gfx silver_trophy_dl4[];
|
||||
extern Gfx silver_trophy_dl5[];
|
||||
extern Gfx silver_trophy_dl6[];
|
||||
extern Vtx gold_trophy_model[];
|
||||
extern u8 reflection_map_brass[];
|
||||
extern u8 reflection_map_silver[];
|
||||
extern u8 reflection_map_gold[];
|
||||
extern Gfx gold_trophy_dl[];
|
||||
extern Gfx gold_trophy_dl2[];
|
||||
extern Gfx gold_trophy_dl3[];
|
||||
extern Gfx gold_trophy_dl4[];
|
||||
extern Gfx gold_trophy_dl5[];
|
||||
extern Gfx gold_trophy_dl6[];
|
||||
extern Gfx gold_trophy_dl7[];
|
||||
extern Gfx gold_trophy_dl8[];
|
||||
extern Gfx gold_trophy_dl9[];
|
||||
extern Gfx gold_trophy_dl10[];
|
||||
extern Gfx gold_trophy_dl11[];
|
||||
extern Gfx gold_trophy_dl12[];
|
||||
extern Gfx gold_trophy_dl13[];
|
||||
extern Gfx gold_trophy_dl14[];
|
||||
extern Gfx gold_trophy_dl15[];
|
||||
extern Lights1 light1;
|
||||
extern u8 texture_podium1[];
|
||||
extern Vtx tall_podium_model[];
|
||||
extern Gfx podium_dl[];
|
||||
extern Gfx podium_dl2[];
|
||||
extern Gfx podium_dl3[];
|
||||
extern Vtx short_podium_model[];
|
||||
extern Lights1 light2;
|
||||
extern u8 texture_podium2[];
|
||||
extern Gfx podium2_dl[];
|
||||
extern Gfx podium2_dl2[];
|
||||
extern Gfx podium2_dl3[];
|
||||
extern Lights1 light3;
|
||||
extern u8 texture_podium3[];
|
||||
extern Vtx short_podium_model2[];
|
||||
extern Gfx podium3_dl[];
|
||||
extern Gfx podium3_dl2[];
|
||||
extern Gfx podium3_dl3[];
|
||||
extern TrackWaypoint ending_sequence[];
|
||||
extern TrackWaypoint ending_sequence2[];
|
||||
extern TrackWaypoint ending_sequence3[];
|
||||
extern TrackWaypoint ending_sequence4[];
|
||||
|
||||
#endif
|
||||
@@ -7,7 +7,7 @@
|
||||
#include <common_structs.h>
|
||||
#include "main.h"
|
||||
#include "memory.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "render_player.h"
|
||||
#include "render_objects.h"
|
||||
#include "podium_ceremony_actors.h"
|
||||
|
||||
+7
-7
@@ -35,7 +35,7 @@
|
||||
#include "staff_ghosts.h"
|
||||
#include <debug.h>
|
||||
#include "crash_screen.h"
|
||||
#include "data/gfx_output_buffer.h"
|
||||
#include "buffers/gfx_output_buffer.h"
|
||||
|
||||
// Declarations (not in this file)
|
||||
void func_80091B78(void);
|
||||
@@ -53,9 +53,9 @@ struct VblankHandler *gVblankHandler2 = NULL;
|
||||
|
||||
struct SPTask *gActiveSPTask = NULL;
|
||||
struct SPTask *sCurrentAudioSPTask = NULL;
|
||||
struct SPTask* sCurrentDisplaySPTask = NULL;
|
||||
struct SPTask* sNextAudioSPTask = NULL;
|
||||
struct SPTask* sNextDisplaySPTask = NULL;
|
||||
struct SPTask *sCurrentDisplaySPTask = NULL;
|
||||
struct SPTask *sNextAudioSPTask = NULL;
|
||||
struct SPTask *sNextDisplaySPTask = NULL;
|
||||
|
||||
|
||||
struct Controller gControllers[NUM_PLAYERS];
|
||||
@@ -137,7 +137,7 @@ struct SPTask *gGfxSPTask;
|
||||
s32 D_801502A0;
|
||||
s32 D_801502A4;
|
||||
u16 *gPhysicalFramebuffers[3];
|
||||
u32 D_801502B4;
|
||||
uintptr_t gPhysicalZBuffer;
|
||||
UNUSED u32 D_801502B8;
|
||||
UNUSED u32 D_801502BC;
|
||||
Mat4 D_801502C0;
|
||||
@@ -368,7 +368,7 @@ void read_controllers(void) {
|
||||
}
|
||||
|
||||
void func_80000BEC(void) {
|
||||
D_801502B4 = VIRTUAL_TO_PHYSICAL(&gZBuffer);
|
||||
gPhysicalZBuffer = VIRTUAL_TO_PHYSICAL(&gZBuffer);
|
||||
}
|
||||
|
||||
void dispatch_audio_sptask(struct SPTask *spTask) {
|
||||
@@ -538,7 +538,7 @@ void setup_game_memory(void) {
|
||||
textureSegStart = (ptrdiff_t) SEG_RACING - commonCourseDataSize;
|
||||
#else
|
||||
textureSegStart = SEG_RACING - commonCourseDataSize;
|
||||
#endif
|
||||
#endif
|
||||
osPiStartDma(&gDmaIoMesg, 0, 0, COMMON_TEXTURES_ROM_START, (void *) textureSegStart, commonCourseDataSize, &gDmaMesgQueue);
|
||||
osRecvMesg(&gDmaMesgQueue, &gMainReceivedMesg, OS_MESG_BLOCK);
|
||||
|
||||
|
||||
+3
-8
@@ -22,12 +22,12 @@
|
||||
|
||||
//! @todo Verify with proper documentation
|
||||
// functions called by mtxShadow multiply by 8
|
||||
// 8 CPU Players * 4 real players in coop
|
||||
// 8 Kart AI Players * 4 real players in coop
|
||||
#define MTX_SHADOW_POOL_SIZE 8 * 4
|
||||
|
||||
//! @todo Verify with proper documentation
|
||||
// functions called by mtxKart multiply by 8
|
||||
// 8 CPU Players * 4 real players in coop
|
||||
// 8 Kart AI Players * 4 real players in coop
|
||||
#define MTX_KART_POOL_SIZE 8 * 4
|
||||
|
||||
#define MTX_EFFECT_POOL_SIZE 660
|
||||
@@ -182,7 +182,7 @@ extern struct SPTask *gGfxSPTask;
|
||||
extern s32 D_801502A0;
|
||||
extern s32 D_801502A4;
|
||||
extern u16 *gPhysicalFramebuffers[];
|
||||
extern u32 D_801502B4;
|
||||
extern uintptr_t gPhysicalZBuffer;
|
||||
extern Mat4 D_801502C0;
|
||||
|
||||
extern s32 padding[];
|
||||
@@ -231,9 +231,4 @@ extern f32 gCourseTimer;
|
||||
|
||||
// end of definition of main.c variables
|
||||
|
||||
extern u64 gGfxSPTaskOutputBuffer[];
|
||||
extern u32 gGfxSPTaskOutputBufferSize;
|
||||
|
||||
extern u32 *D_801978D0; // Segment? Keeps track of segmented addresses?
|
||||
|
||||
#endif
|
||||
|
||||
+2
-2
@@ -1047,7 +1047,7 @@ void splash_menu_act(struct Controller *controller, u16 arg1) {
|
||||
{
|
||||
if (btnAndStick & R_JPAD) {
|
||||
play_sound2(SOUND_MENU_CURSOR_MOVE);
|
||||
if (gCurrentCourseId < 0x13) {
|
||||
if (gCurrentCourseId < (NUM_COURSES - 2)) {
|
||||
gCurrentCourseId += 1;
|
||||
} else {
|
||||
gCurrentCourseId = 0;
|
||||
@@ -1058,7 +1058,7 @@ void splash_menu_act(struct Controller *controller, u16 arg1) {
|
||||
if (gCurrentCourseId > 0) {
|
||||
gCurrentCourseId -= 1;
|
||||
} else {
|
||||
gCurrentCourseId = 0x13;
|
||||
gCurrentCourseId = (NUM_COURSES - 2);
|
||||
}
|
||||
}
|
||||
if (btnAndStick & U_JPAD) {
|
||||
|
||||
+105
-105
@@ -23,310 +23,310 @@
|
||||
|
||||
extern s32 D_8018D168;
|
||||
|
||||
s16 gCPUforMario[] = {
|
||||
s16 gKartAIforMario[] = {
|
||||
LUIGI, YOSHI, TOAD, DK, WARIO, PEACH, BOWSER, 0
|
||||
};
|
||||
|
||||
s16 gCPUforLuigi[] = {
|
||||
s16 gKartAIforLuigi[] = {
|
||||
MARIO, YOSHI, TOAD, DK, WARIO, PEACH, BOWSER, 0
|
||||
};
|
||||
|
||||
s16 gCPUforYoshi[] = {
|
||||
s16 gKartAIforYoshi[] = {
|
||||
MARIO, LUIGI, TOAD, DK, WARIO, PEACH, BOWSER, 0
|
||||
};
|
||||
|
||||
s16 gCPUforToad[] = {
|
||||
s16 gKartAIforToad[] = {
|
||||
MARIO, LUIGI, YOSHI, DK, WARIO, PEACH, BOWSER, 0
|
||||
};
|
||||
|
||||
s16 gCPUforDk[] = {
|
||||
s16 gKartAIforDk[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, WARIO, PEACH, BOWSER, 0
|
||||
};
|
||||
|
||||
s16 gCPUforWario[] = {
|
||||
s16 gKartAIforWario[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, PEACH, BOWSER, 0
|
||||
};
|
||||
|
||||
s16 gCPUforPeach[] = {
|
||||
s16 gKartAIforPeach[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, WARIO, BOWSER, 0
|
||||
};
|
||||
|
||||
s16 gCPUforBowser[] = {
|
||||
s16 gKartAIforBowser[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, WARIO, PEACH, 0
|
||||
};
|
||||
|
||||
s16 *gCPUforPlayer[] = {
|
||||
gCPUforMario, gCPUforLuigi, gCPUforYoshi, gCPUforToad,
|
||||
gCPUforDk, gCPUforWario, gCPUforPeach, gCPUforBowser
|
||||
s16 *gKartAIforPlayer[] = {
|
||||
gKartAIforMario, gKartAIforLuigi, gKartAIforYoshi, gKartAIforToad,
|
||||
gKartAIforDk, gKartAIforWario, gKartAIforPeach, gKartAIforBowser
|
||||
};
|
||||
|
||||
s16 gCPUforMarioAndLuigi[] = {
|
||||
s16 gKartAIforMarioAndLuigi[] = {
|
||||
YOSHI, TOAD, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforMarioAndYoshi[] = {
|
||||
s16 gKartAIforMarioAndYoshi[] = {
|
||||
LUIGI, TOAD, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforMarioAndToad[] = {
|
||||
s16 gKartAIforMarioAndToad[] = {
|
||||
LUIGI, YOSHI, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforMarioAndDk[] = {
|
||||
s16 gKartAIforMarioAndDk[] = {
|
||||
LUIGI, YOSHI, TOAD, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforMarioAndWario[] = {
|
||||
s16 gKartAIforMarioAndWario[] = {
|
||||
LUIGI, YOSHI, TOAD, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforMarioAndPeach[] = {
|
||||
s16 gKartAIforMarioAndPeach[] = {
|
||||
LUIGI, YOSHI, TOAD, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforMarioAndBowser[] = {
|
||||
s16 gKartAIforMarioAndBowser[] = {
|
||||
LUIGI, YOSHI, TOAD, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforLuigiAndMario[] = {
|
||||
s16 gKartAIforLuigiAndMario[] = {
|
||||
YOSHI, TOAD, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforLuigiAndYoshi[] = {
|
||||
s16 gKartAIforLuigiAndYoshi[] = {
|
||||
MARIO, TOAD, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforLuigiAndToad[] = {
|
||||
s16 gKartAIforLuigiAndToad[] = {
|
||||
MARIO, YOSHI, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforLuigiAndDk[] = {
|
||||
s16 gKartAIforLuigiAndDk[] = {
|
||||
MARIO, YOSHI, TOAD, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforLuigiAndWario[] = {
|
||||
s16 gKartAIforLuigiAndWario[] = {
|
||||
MARIO, YOSHI, TOAD, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforLuigiAndPeach[] = {
|
||||
s16 gKartAIforLuigiAndPeach[] = {
|
||||
MARIO, YOSHI, TOAD, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforLuigiAndBowser[] = {
|
||||
s16 gKartAIforLuigiAndBowser[] = {
|
||||
MARIO, YOSHI, TOAD, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforYoshiAndMario[] = {
|
||||
s16 gKartAIforYoshiAndMario[] = {
|
||||
LUIGI, TOAD, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforYoshiAndLuigi[] = {
|
||||
s16 gKartAIforYoshiAndLuigi[] = {
|
||||
MARIO, TOAD, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforYoshiAndToad[] = {
|
||||
s16 gKartAIforYoshiAndToad[] = {
|
||||
MARIO, LUIGI, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforYoshiAndDk[] = {
|
||||
s16 gKartAIforYoshiAndDk[] = {
|
||||
MARIO, LUIGI, TOAD, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforYoshiAndWario[] = {
|
||||
s16 gKartAIforYoshiAndWario[] = {
|
||||
MARIO, LUIGI, TOAD, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforYoshiAndPeach[] = {
|
||||
s16 gKartAIforYoshiAndPeach[] = {
|
||||
MARIO, LUIGI, TOAD, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforYoshiAndBowser[] = {
|
||||
s16 gKartAIforYoshiAndBowser[] = {
|
||||
MARIO, LUIGI, TOAD, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforToadAndMario[] = {
|
||||
s16 gKartAIforToadAndMario[] = {
|
||||
LUIGI, YOSHI, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforToadAndLuigi[] = {
|
||||
s16 gKartAIforToadAndLuigi[] = {
|
||||
MARIO, YOSHI, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforToadAndYoshi[] = {
|
||||
s16 gKartAIforToadAndYoshi[] = {
|
||||
MARIO, LUIGI, DK, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforToadAndDk[] = {
|
||||
s16 gKartAIforToadAndDk[] = {
|
||||
MARIO, LUIGI, YOSHI, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforToadAndWario[] = {
|
||||
s16 gKartAIforToadAndWario[] = {
|
||||
MARIO, LUIGI, YOSHI, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforToadAndPeach[] = {
|
||||
s16 gKartAIforToadAndPeach[] = {
|
||||
MARIO, LUIGI, YOSHI, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforToadAndBowser[] = {
|
||||
s16 gKartAIforToadAndBowser[] = {
|
||||
MARIO, LUIGI, YOSHI, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforDkAndMario[] = {
|
||||
s16 gKartAIforDkAndMario[] = {
|
||||
LUIGI, YOSHI, TOAD, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforDkAndLuigi[] = {
|
||||
s16 gKartAIforDkAndLuigi[] = {
|
||||
MARIO, YOSHI, TOAD, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforDkAndToad[] = {
|
||||
s16 gKartAIforDkAndToad[] = {
|
||||
MARIO, LUIGI, TOAD, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforDkAndYoshi[] = {
|
||||
s16 gKartAIforDkAndYoshi[] = {
|
||||
MARIO, LUIGI, YOSHI, WARIO, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforDkAndWario[] = {
|
||||
s16 gKartAIforDkAndWario[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforDkAndPeach[] = {
|
||||
s16 gKartAIforDkAndPeach[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforDkAndBowser[] = {
|
||||
s16 gKartAIforDkAndBowser[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforWarioAndMario[] = {
|
||||
s16 gKartAIforWarioAndMario[] = {
|
||||
LUIGI, YOSHI, TOAD, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforWarioAndLuigi[] = {
|
||||
s16 gKartAIforWarioAndLuigi[] = {
|
||||
MARIO, YOSHI, TOAD, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforWarioAndYoshi[] = {
|
||||
s16 gKartAIforWarioAndYoshi[] = {
|
||||
MARIO, LUIGI, TOAD, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforWarioAndDk[] = {
|
||||
s16 gKartAIforWarioAndDk[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforWarioAndToad[] = {
|
||||
s16 gKartAIforWarioAndToad[] = {
|
||||
MARIO, LUIGI, YOSHI, DK, PEACH, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforWarioAndPeach[] = {
|
||||
s16 gKartAIforWarioAndPeach[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforWarioAndBowser[] = {
|
||||
s16 gKartAIforWarioAndBowser[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforPeachAndMario[] = {
|
||||
s16 gKartAIforPeachAndMario[] = {
|
||||
LUIGI, YOSHI, TOAD, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforPeachAndLuigi[] = {
|
||||
s16 gKartAIforPeachAndLuigi[] = {
|
||||
MARIO, YOSHI, TOAD, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforPeachAndYoshi[] = {
|
||||
s16 gKartAIforPeachAndYoshi[] = {
|
||||
MARIO, LUIGI, TOAD, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforPeachAndDk[] = {
|
||||
s16 gKartAIforPeachAndDk[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforPeachAndWario[] = {
|
||||
s16 gKartAIforPeachAndWario[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforPeachAndToad[] = {
|
||||
s16 gKartAIforPeachAndToad[] = {
|
||||
MARIO, LUIGI, YOSHI, DK, WARIO, BOWSER
|
||||
};
|
||||
|
||||
s16 gCPUforPeachAndBowser[] = {
|
||||
s16 gKartAIforPeachAndBowser[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, WARIO
|
||||
};
|
||||
|
||||
s16 gCPUforBowserAndMario[] = {
|
||||
s16 gKartAIforBowserAndMario[] = {
|
||||
LUIGI, YOSHI, TOAD, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforBowserAndLuigi[] = {
|
||||
s16 gKartAIforBowserAndLuigi[] = {
|
||||
MARIO, YOSHI, TOAD, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforBowserAndYoshi[] = {
|
||||
s16 gKartAIforBowserAndYoshi[] = {
|
||||
MARIO, LUIGI, TOAD, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforBowserAndDk[] = {
|
||||
s16 gKartAIforBowserAndDk[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforBowserAndWario[] = {
|
||||
s16 gKartAIforBowserAndWario[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforBowserAndToad[] = {
|
||||
s16 gKartAIforBowserAndToad[] = {
|
||||
MARIO, LUIGI, YOSHI, DK, WARIO, PEACH
|
||||
};
|
||||
|
||||
s16 gCPUforBowserAndPeach[] = {
|
||||
s16 gKartAIforBowserAndPeach[] = {
|
||||
MARIO, LUIGI, YOSHI, TOAD, DK, WARIO
|
||||
};
|
||||
|
||||
s16 *gListCPUforMario[] = {
|
||||
gCPUforMarioAndLuigi, gCPUforMarioAndLuigi, gCPUforMarioAndYoshi, gCPUforMarioAndToad,
|
||||
gCPUforMarioAndDk, gCPUforMarioAndWario, gCPUforMarioAndPeach, gCPUforMarioAndBowser
|
||||
s16 *gListKartAIforMario[] = {
|
||||
gKartAIforMarioAndLuigi, gKartAIforMarioAndLuigi, gKartAIforMarioAndYoshi, gKartAIforMarioAndToad,
|
||||
gKartAIforMarioAndDk, gKartAIforMarioAndWario, gKartAIforMarioAndPeach, gKartAIforMarioAndBowser
|
||||
};
|
||||
|
||||
s16 *gListCPUforLuigi[] = {
|
||||
gCPUforLuigiAndMario, gCPUforLuigiAndMario, gCPUforLuigiAndYoshi, gCPUforLuigiAndToad,
|
||||
gCPUforLuigiAndDk, gCPUforLuigiAndWario, gCPUforLuigiAndPeach, gCPUforLuigiAndBowser
|
||||
s16 *gListKartAIforLuigi[] = {
|
||||
gKartAIforLuigiAndMario, gKartAIforLuigiAndMario, gKartAIforLuigiAndYoshi, gKartAIforLuigiAndToad,
|
||||
gKartAIforLuigiAndDk, gKartAIforLuigiAndWario, gKartAIforLuigiAndPeach, gKartAIforLuigiAndBowser
|
||||
};
|
||||
|
||||
s16 *gListCPUforYoshi[] = {
|
||||
gCPUforYoshiAndMario, gCPUforYoshiAndLuigi, gCPUforYoshiAndLuigi, gCPUforYoshiAndToad,
|
||||
gCPUforYoshiAndDk, gCPUforYoshiAndWario, gCPUforYoshiAndPeach, gCPUforYoshiAndBowser
|
||||
s16 *gListKartAIforYoshi[] = {
|
||||
gKartAIforYoshiAndMario, gKartAIforYoshiAndLuigi, gKartAIforYoshiAndLuigi, gKartAIforYoshiAndToad,
|
||||
gKartAIforYoshiAndDk, gKartAIforYoshiAndWario, gKartAIforYoshiAndPeach, gKartAIforYoshiAndBowser
|
||||
};
|
||||
|
||||
s16 *gListCPUforToad[] = {
|
||||
gCPUforToadAndMario, gCPUforToadAndLuigi, gCPUforToadAndYoshi, gCPUforToadAndYoshi,
|
||||
gCPUforToadAndDk, gCPUforToadAndWario, gCPUforToadAndPeach, gCPUforToadAndBowser
|
||||
s16 *gListKartAIforToad[] = {
|
||||
gKartAIforToadAndMario, gKartAIforToadAndLuigi, gKartAIforToadAndYoshi, gKartAIforToadAndYoshi,
|
||||
gKartAIforToadAndDk, gKartAIforToadAndWario, gKartAIforToadAndPeach, gKartAIforToadAndBowser
|
||||
};
|
||||
|
||||
s16 *gListCPUforDk[] = {
|
||||
gCPUforDkAndMario, gCPUforDkAndLuigi, gCPUforDkAndToad, gCPUforDkAndYoshi,
|
||||
gCPUforDkAndYoshi, gCPUforDkAndWario, gCPUforDkAndPeach, gCPUforDkAndBowser
|
||||
s16 *gListKartAIforDk[] = {
|
||||
gKartAIforDkAndMario, gKartAIforDkAndLuigi, gKartAIforDkAndToad, gKartAIforDkAndYoshi,
|
||||
gKartAIforDkAndYoshi, gKartAIforDkAndWario, gKartAIforDkAndPeach, gKartAIforDkAndBowser
|
||||
};
|
||||
|
||||
s16 *gListCPUforWario[] = {
|
||||
gCPUforWarioAndMario, gCPUforWarioAndLuigi, gCPUforWarioAndYoshi, gCPUforWarioAndToad,
|
||||
gCPUforWarioAndDk, gCPUforWarioAndDk, gCPUforWarioAndPeach, gCPUforWarioAndBowser
|
||||
s16 *gListKartAIforWario[] = {
|
||||
gKartAIforWarioAndMario, gKartAIforWarioAndLuigi, gKartAIforWarioAndYoshi, gKartAIforWarioAndToad,
|
||||
gKartAIforWarioAndDk, gKartAIforWarioAndDk, gKartAIforWarioAndPeach, gKartAIforWarioAndBowser
|
||||
};
|
||||
|
||||
s16 *gListCPUforPeach[] = {
|
||||
gCPUforPeachAndMario, gCPUforPeachAndLuigi, gCPUforPeachAndYoshi, gCPUforPeachAndToad,
|
||||
gCPUforPeachAndDk, gCPUforPeachAndWario, gCPUforPeachAndDk, gCPUforPeachAndBowser
|
||||
s16 *gListKartAIforPeach[] = {
|
||||
gKartAIforPeachAndMario, gKartAIforPeachAndLuigi, gKartAIforPeachAndYoshi, gKartAIforPeachAndToad,
|
||||
gKartAIforPeachAndDk, gKartAIforPeachAndWario, gKartAIforPeachAndDk, gKartAIforPeachAndBowser
|
||||
};
|
||||
|
||||
s16 *gListCPUforBowser[] = {
|
||||
gCPUforBowserAndMario, gCPUforBowserAndLuigi, gCPUforBowserAndYoshi, gCPUforBowserAndToad,
|
||||
gCPUforBowserAndDk, gCPUforBowserAndWario, gCPUforBowserAndPeach, gCPUforBowserAndPeach
|
||||
s16 *gListKartAIforBowser[] = {
|
||||
gKartAIforBowserAndMario, gKartAIforBowserAndLuigi, gKartAIforBowserAndYoshi, gKartAIforBowserAndToad,
|
||||
gKartAIforBowserAndDk, gKartAIforBowserAndWario, gKartAIforBowserAndPeach, gKartAIforBowserAndPeach
|
||||
};
|
||||
|
||||
s16 **gCPUforTwoPlayer[] = {
|
||||
gListCPUforMario, gListCPUforLuigi, gListCPUforYoshi, gListCPUforToad,
|
||||
gListCPUforDk, gListCPUforWario, gListCPUforPeach, gListCPUforBowser
|
||||
s16 **gKartAIforTwoPlayer[] = {
|
||||
gListKartAIforMario, gListKartAIforLuigi, gListKartAIforYoshi, gListKartAIforToad,
|
||||
gListKartAIforDk, gListKartAIforWario, gListKartAIforPeach, gListKartAIforBowser
|
||||
};
|
||||
|
||||
// func_80027D00
|
||||
@@ -665,7 +665,7 @@ void func_80028864(Player *player, Camera *camera, s8 arg2, s8 arg3) {
|
||||
func_8002D268(player, camera, arg3, arg2);
|
||||
}
|
||||
} else {
|
||||
control_cpu_movement(player, camera, arg3, arg2);
|
||||
control_kart_ai_movement(player, camera, arg3, arg2);
|
||||
}
|
||||
} else if ((player->type & PLAYER_STAGING) == PLAYER_STAGING) {
|
||||
func_8002D028(player, arg2);
|
||||
@@ -1308,7 +1308,7 @@ void func_8002A8A4(Player *player, s8 arg1) {
|
||||
}
|
||||
}
|
||||
|
||||
void func_8002AA50(Player *player) {
|
||||
void kart_hop(Player *player) {
|
||||
player->kartHopJerk = gKartHopJerkTable[player->characterId];
|
||||
player->kartHopAcceleration = 0.0f;
|
||||
player->kartHopVelocity = gKartHopInitialVelocityTable[player->characterId];
|
||||
@@ -1504,7 +1504,7 @@ void func_8002B218(Player *player) {
|
||||
for (someIndex = 0; someIndex < 10; someIndex++) {
|
||||
if (player->unk_006 == sp38[someIndex]) {
|
||||
player->effects |= 0x10;
|
||||
func_8002AA50(player);
|
||||
kart_hop(player);
|
||||
player->unk_204 = 0;
|
||||
break;
|
||||
}
|
||||
@@ -1957,13 +1957,13 @@ void func_8002C4F8(Player *player, s8 arg1) {
|
||||
} else if ((player->effects & 8) != 8) {
|
||||
player->unk_0CA &= ~0x0100;
|
||||
}
|
||||
if ((player->type & PLAYER_CPU) && ((func_802ABDF4(player->unk_110.unk3A) != 0) || (player->unk_0CA & 1))) {
|
||||
if ((player->type & PLAYER_KART_AI) && ((func_802ABDF4(player->unk_110.unk3A) != 0) || (player->unk_0CA & 1))) {
|
||||
if (!(player->unk_0CA & 2) && !(player->unk_0CA & 8) && !(player->effects & 0x1000)) {
|
||||
func_80090778(player);
|
||||
func_80090868(player);
|
||||
}
|
||||
}
|
||||
if ((player->type & PLAYER_CPU) && (player->surfaceType == OUT_OF_BOUNDS) && !(player->effects & 8)) {
|
||||
if ((player->type & PLAYER_KART_AI) && (player->surfaceType == OUT_OF_BOUNDS) && !(player->effects & 8)) {
|
||||
func_80090778(player);
|
||||
func_80090868(player);
|
||||
}
|
||||
@@ -2460,7 +2460,7 @@ void func_8002D268(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId)
|
||||
player->pos[2] = spF4;
|
||||
}
|
||||
player->pos[1] = spF8;
|
||||
if ((player->type & PLAYER_HUMAN) && (!(player->type & PLAYER_CPU))) {
|
||||
if ((player->type & PLAYER_HUMAN) && (!(player->type & PLAYER_KART_AI))) {
|
||||
func_8002BB9C(player, &spFC, &spF4, arg2, playerId, sp98);
|
||||
}
|
||||
player->unk_064[0] = sp178[0];
|
||||
@@ -2752,7 +2752,7 @@ void func_8002E594(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId)
|
||||
func_8002C4F8(player, playerId);
|
||||
}
|
||||
|
||||
void control_cpu_movement(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) {
|
||||
void control_kart_ai_movement(Player *player, UNUSED Camera *camera, s8 arg2, s8 playerId) {
|
||||
Vec3f spF4 = {0.0f, 0.0f, 1.0f};
|
||||
UNUSED Vec3f spE8 = {0.0f, 0.0f, 0.0f};
|
||||
Vec3f spDC = {0.0f, 0.0f, 0.0f};
|
||||
@@ -4604,7 +4604,7 @@ void func_80037BB4(Player *player, Vec3f arg1) {
|
||||
if (((player->effects & 0x20000000) != 0x20000000) || (player->unk_228 >= 0x64)) {
|
||||
player->rotation[1] += player->unk_078;
|
||||
}
|
||||
if (!(player->type & PLAYER_CPU)) {
|
||||
if (!(player->type & PLAYER_KART_AI)) {
|
||||
if (gModeSelection == BATTLE) {
|
||||
func_800378E8(player, sp20, arg1);
|
||||
} else {
|
||||
@@ -4617,7 +4617,7 @@ void func_80037BB4(Player *player, Vec3f arg1) {
|
||||
if (((player->effects & 0x20000000) != 0x20000000) || (player->unk_228 >= 0x64)) {
|
||||
player->rotation[1] += player->unk_078;
|
||||
}
|
||||
if (!(player->type & PLAYER_CPU)) {
|
||||
if (!(player->type & PLAYER_KART_AI)) {
|
||||
if (gModeSelection == BATTLE) {
|
||||
func_80037A4C(player, sp20, arg1);
|
||||
} else {
|
||||
@@ -4643,7 +4643,7 @@ void func_80037CFC(Player *player, struct Controller *controller, s8 arg2) {
|
||||
((player->effects & 2) != 2) &&
|
||||
((player->effects & 0x10) != 0x10) &&
|
||||
(controller->buttonPressed & R_TRIG)) {
|
||||
func_8002AA50(player);
|
||||
kart_hop(player);
|
||||
if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
func_800C9060(arg2, 0x19008000);
|
||||
}
|
||||
@@ -4736,7 +4736,7 @@ void func_80037CFC(Player *player, struct Controller *controller, s8 arg2) {
|
||||
void func_800381AC(Player *player, struct Controller *controller, s8 arg2) {
|
||||
if (((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) &&
|
||||
((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) &&
|
||||
((player->type & PLAYER_CPU) != PLAYER_CPU)) {
|
||||
((player->type & PLAYER_KART_AI) != PLAYER_KART_AI)) {
|
||||
if ((player->type & PLAYER_START_SEQUENCE) != PLAYER_START_SEQUENCE) {
|
||||
if (((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8)) {
|
||||
if (controller->button & A_BUTTON) {
|
||||
|
||||
+76
-76
@@ -36,7 +36,7 @@ void func_8002A5F4(Vec3f, f32, Vec3f, f32, f32);
|
||||
void func_8002A704(Player*, s8);
|
||||
void func_8002A79C(Player*, s8);
|
||||
void func_8002A8A4(Player*, s8);
|
||||
void func_8002AA50(Player*);
|
||||
void kart_hop(Player*);
|
||||
void func_8002AAC0(Player*);
|
||||
void func_8002AB70(Player*);
|
||||
void func_8002AE20(void);
|
||||
@@ -64,7 +64,7 @@ void func_8002D028(Player*, s8);
|
||||
void func_8002D268(Player*, Camera*, s8, s8);
|
||||
|
||||
void func_8002E4C4(Player*);
|
||||
void control_cpu_movement(Player*,Camera*, s8, s8);
|
||||
void control_kart_ai_movement(Player*,Camera*, s8, s8);
|
||||
|
||||
void func_8002FCA8(Player*, s8);
|
||||
void func_8002FE84(Player*, f32);
|
||||
@@ -113,81 +113,81 @@ void func_80038C6C(Player*, Camera*, s8, s8);
|
||||
|
||||
/* This is where I'd put my static data, if I had any */
|
||||
|
||||
extern s16 gCPUforMario[];
|
||||
extern s16 gCPUforLuigi[];
|
||||
extern s16 gCPUforYoshi[];
|
||||
extern s16 gCPUforToad[];
|
||||
extern s16 gCPUforDk[];
|
||||
extern s16 gCPUforWario[];
|
||||
extern s16 gCPUforPeach[];
|
||||
extern s16 gCPUforBowser[];
|
||||
extern s16 *gCPUforPlayer[];
|
||||
extern s16 gKartAIforMario[];
|
||||
extern s16 gKartAIforLuigi[];
|
||||
extern s16 gKartAIforYoshi[];
|
||||
extern s16 gKartAIforToad[];
|
||||
extern s16 gKartAIforDk[];
|
||||
extern s16 gKartAIforWario[];
|
||||
extern s16 gKartAIforPeach[];
|
||||
extern s16 gKartAIforBowser[];
|
||||
extern s16 *gKartAIforPlayer[];
|
||||
|
||||
extern s16 gCPUforMarioAndLuigi[];
|
||||
extern s16 gCPUforMarioAndYoshi[];
|
||||
extern s16 gCPUforMarioAndToad[];
|
||||
extern s16 gCPUforMarioAndDk[];
|
||||
extern s16 gCPUforMarioAndWario[];
|
||||
extern s16 gCPUforMarioAndPeach[];
|
||||
extern s16 gCPUforMarioAndBowser[];
|
||||
extern s16 gCPUforLuigiAndMario[];
|
||||
extern s16 gCPUforLuigiAndYoshi[];
|
||||
extern s16 gCPUforLuigiAndToad[];
|
||||
extern s16 gCPUforLuigiAndDk[];
|
||||
extern s16 gCPUforLuigiAndWario[];
|
||||
extern s16 gCPUforLuigiAndPeach[];
|
||||
extern s16 gCPUforLuigiAndBowser[];
|
||||
extern s16 gCPUforYoshiAndMario[];
|
||||
extern s16 gCPUforYoshiAndLuigi[];
|
||||
extern s16 gCPUforYoshiAndToad[];
|
||||
extern s16 gCPUforYoshiAndDk[];
|
||||
extern s16 gCPUforYoshiAndWario[];
|
||||
extern s16 gCPUforYoshiAndPeach[];
|
||||
extern s16 gCPUforYoshiAndBowser[];
|
||||
extern s16 gCPUforToadAndMario[];
|
||||
extern s16 gCPUforToadAndLuigi[];
|
||||
extern s16 gCPUforToadAndYoshi[];
|
||||
extern s16 gCPUforToadAndDk[];
|
||||
extern s16 gCPUforToadAndWario[];
|
||||
extern s16 gCPUforToadAndPeach[];
|
||||
extern s16 gCPUforToadAndBowser[];
|
||||
extern s16 gCPUforDkAndMario[];
|
||||
extern s16 gCPUforDkAndLuigi[];
|
||||
extern s16 gCPUforDkAndToad[];
|
||||
extern s16 gCPUforDkAndYoshi[];
|
||||
extern s16 gCPUforDkAndWario[];
|
||||
extern s16 gCPUforDkAndPeach[];
|
||||
extern s16 gCPUforDkAndBowser[];
|
||||
extern s16 gCPUforWarioAndMario[];
|
||||
extern s16 gCPUforWarioAndLuigi[];
|
||||
extern s16 gCPUforWarioAndYoshi[];
|
||||
extern s16 gCPUforWarioAndDk[];
|
||||
extern s16 gCPUforWarioAndToad[];
|
||||
extern s16 gCPUforWarioAndPeach[];
|
||||
extern s16 gCPUforWarioAndBowser[];
|
||||
extern s16 gCPUforPeachAndMario[];
|
||||
extern s16 gCPUforPeachAndLuigi[];
|
||||
extern s16 gCPUforPeachAndYoshi[];
|
||||
extern s16 gCPUforPeachAndDk[];
|
||||
extern s16 gCPUforPeachAndWario[];
|
||||
extern s16 gCPUforPeachAndToad[];
|
||||
extern s16 gCPUforPeachAndBowser[];
|
||||
extern s16 gCPUforBowserAndMario[];
|
||||
extern s16 gCPUforBowserAndLuigi[];
|
||||
extern s16 gCPUforBowserAndYoshi[];
|
||||
extern s16 gCPUforBowserAndDk[];
|
||||
extern s16 gCPUforBowserAndWario[];
|
||||
extern s16 gCPUforBowserAndToad[];
|
||||
extern s16 gCPUforBowserAndPeach[];
|
||||
extern s16 *gListCPUforMario[];
|
||||
extern s16 *gListCPUforLuigi[];
|
||||
extern s16 *gListCPUforYoshi[];
|
||||
extern s16 *gListCPUforToad[];
|
||||
extern s16 *gListCPUforDk[];
|
||||
extern s16 *gListCPUforWario[];
|
||||
extern s16 *gListCPUforPeach[];
|
||||
extern s16 *gListCPUforBowser[];
|
||||
extern s16 **gCPUforTwoPlayer[];
|
||||
extern s16 gKartAIforMarioAndLuigi[];
|
||||
extern s16 gKartAIforMarioAndYoshi[];
|
||||
extern s16 gKartAIforMarioAndToad[];
|
||||
extern s16 gKartAIforMarioAndDk[];
|
||||
extern s16 gKartAIforMarioAndWario[];
|
||||
extern s16 gKartAIforMarioAndPeach[];
|
||||
extern s16 gKartAIforMarioAndBowser[];
|
||||
extern s16 gKartAIforLuigiAndMario[];
|
||||
extern s16 gKartAIforLuigiAndYoshi[];
|
||||
extern s16 gKartAIforLuigiAndToad[];
|
||||
extern s16 gKartAIforLuigiAndDk[];
|
||||
extern s16 gKartAIforLuigiAndWario[];
|
||||
extern s16 gKartAIforLuigiAndPeach[];
|
||||
extern s16 gKartAIforLuigiAndBowser[];
|
||||
extern s16 gKartAIforYoshiAndMario[];
|
||||
extern s16 gKartAIforYoshiAndLuigi[];
|
||||
extern s16 gKartAIforYoshiAndToad[];
|
||||
extern s16 gKartAIforYoshiAndDk[];
|
||||
extern s16 gKartAIforYoshiAndWario[];
|
||||
extern s16 gKartAIforYoshiAndPeach[];
|
||||
extern s16 gKartAIforYoshiAndBowser[];
|
||||
extern s16 gKartAIforToadAndMario[];
|
||||
extern s16 gKartAIforToadAndLuigi[];
|
||||
extern s16 gKartAIforToadAndYoshi[];
|
||||
extern s16 gKartAIforToadAndDk[];
|
||||
extern s16 gKartAIforToadAndWario[];
|
||||
extern s16 gKartAIforToadAndPeach[];
|
||||
extern s16 gKartAIforToadAndBowser[];
|
||||
extern s16 gKartAIforDkAndMario[];
|
||||
extern s16 gKartAIforDkAndLuigi[];
|
||||
extern s16 gKartAIforDkAndToad[];
|
||||
extern s16 gKartAIforDkAndYoshi[];
|
||||
extern s16 gKartAIforDkAndWario[];
|
||||
extern s16 gKartAIforDkAndPeach[];
|
||||
extern s16 gKartAIforDkAndBowser[];
|
||||
extern s16 gKartAIforWarioAndMario[];
|
||||
extern s16 gKartAIforWarioAndLuigi[];
|
||||
extern s16 gKartAIforWarioAndYoshi[];
|
||||
extern s16 gKartAIforWarioAndDk[];
|
||||
extern s16 gKartAIforWarioAndToad[];
|
||||
extern s16 gKartAIforWarioAndPeach[];
|
||||
extern s16 gKartAIforWarioAndBowser[];
|
||||
extern s16 gKartAIforPeachAndMario[];
|
||||
extern s16 gKartAIforPeachAndLuigi[];
|
||||
extern s16 gKartAIforPeachAndYoshi[];
|
||||
extern s16 gKartAIforPeachAndDk[];
|
||||
extern s16 gKartAIforPeachAndWario[];
|
||||
extern s16 gKartAIforPeachAndToad[];
|
||||
extern s16 gKartAIforPeachAndBowser[];
|
||||
extern s16 gKartAIforBowserAndMario[];
|
||||
extern s16 gKartAIforBowserAndLuigi[];
|
||||
extern s16 gKartAIforBowserAndYoshi[];
|
||||
extern s16 gKartAIforBowserAndDk[];
|
||||
extern s16 gKartAIforBowserAndWario[];
|
||||
extern s16 gKartAIforBowserAndToad[];
|
||||
extern s16 gKartAIforBowserAndPeach[];
|
||||
extern s16 *gListKartAIforMario[];
|
||||
extern s16 *gListKartAIforLuigi[];
|
||||
extern s16 *gListKartAIforYoshi[];
|
||||
extern s16 *gListKartAIforToad[];
|
||||
extern s16 *gListKartAIforDk[];
|
||||
extern s16 *gListKartAIforWario[];
|
||||
extern s16 *gListKartAIforPeach[];
|
||||
extern s16 *gListKartAIforBowser[];
|
||||
extern s16 **gKartAIforTwoPlayer[];
|
||||
|
||||
extern s16 D_801656F0;
|
||||
|
||||
|
||||
+3
-3
@@ -21,7 +21,7 @@
|
||||
#include "effects.h"
|
||||
#include "collision.h"
|
||||
#include "audio/external.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "courses/all_course_data.h"
|
||||
#include "main.h"
|
||||
#include "data/other_textures.h"
|
||||
@@ -1626,7 +1626,7 @@ bool collision_yoshi_egg(Player *player, struct YoshiValleyEgg *egg) {
|
||||
func_800C90F4(player - gPlayerOne, (player->characterId * 0x10) + SOUND_ARG_LOAD(0x29, 0x00, 0x80, 0x0D));
|
||||
} else {
|
||||
apply_hit_sound_effect(player, player - gPlayerOne);
|
||||
if ((gModeSelection == TIME_TRIALS) && ((player->type & PLAYER_CPU) == 0)) {
|
||||
if ((gModeSelection == TIME_TRIALS) && ((player->type & PLAYER_KART_AI) == 0)) {
|
||||
D_80162DF8 = 1;
|
||||
}
|
||||
}
|
||||
@@ -2138,7 +2138,7 @@ void evaluate_collision_between_player_actor(Player *player, struct Actor *actor
|
||||
if (!(player->effects & BOO_EFFECT) && !(player->type & PLAYER_INVISIBLE_OR_BOMB)) {
|
||||
if (query_collision_player_vs_actor_item(player, actor) == COLLISION) {
|
||||
func_800C98B8(actor->pos, actor->velocity, SOUND_ACTION_EXPLOSION);
|
||||
if ((gModeSelection == TIME_TRIALS) && !(player->type & PLAYER_CPU)) {
|
||||
if ((gModeSelection == TIME_TRIALS) && !(player->type & PLAYER_KART_AI)) {
|
||||
D_80162DF8 = 1;
|
||||
}
|
||||
if (player->effects & STAR_EFFECT) {
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
#include <main.h>
|
||||
#include "buffers.h"
|
||||
#include <PR/rcp.h>
|
||||
#include "data/trig_tables.h"
|
||||
#include "buffers/trig_tables.h"
|
||||
#include "math.h"
|
||||
|
||||
#pragma intrinsic (sqrtf,fabs)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
// Here to appease the pragma gods
|
||||
double fabs(double x);
|
||||
|
||||
void func_802B5794(Mat4, Vec3f, Vec3f);
|
||||
s32 func_802B4F60(s32, Vec3f, s32, f32, f32);
|
||||
s32 render_set_position(Mat4, s32);
|
||||
f32 func_802B51E8(Vec3f, Vec3f);
|
||||
@@ -69,8 +70,4 @@ f32 is_within_render_distance(Vec3f, Vec3f, u16, f32, f32, f32);
|
||||
extern s32 D_802B91C0[];
|
||||
extern Vec3f D_802B91C8;
|
||||
|
||||
// end of math_util.c variables
|
||||
|
||||
extern u16 gRandomSeed16;
|
||||
|
||||
#endif // MATH_UTIL_H
|
||||
|
||||
@@ -534,7 +534,7 @@ void func_8028EF28(void) {
|
||||
func_8028EEF0(i);
|
||||
|
||||
currentPosition = gPlayers[i].currentRank;
|
||||
gPlayers[i].type |= PLAYER_CPU;
|
||||
gPlayers[i].type |= PLAYER_KART_AI;
|
||||
|
||||
if (currentPosition < 4) {
|
||||
D_80150120 = 1;
|
||||
@@ -573,7 +573,7 @@ void func_8028EF28(void) {
|
||||
D_800DC510 = 5;
|
||||
i = gPlayerPositionLUT[1];
|
||||
gPlayers[i].soundEffects |= 0x200000;
|
||||
gPlayers[i].type |= PLAYER_CPU;
|
||||
gPlayers[i].type |= PLAYER_KART_AI;
|
||||
func_800CA118((u8)i);
|
||||
break;
|
||||
case 3:
|
||||
@@ -591,7 +591,7 @@ void func_8028EF28(void) {
|
||||
*(gNmiUnknown2 + i * 3 + 2) = 99;
|
||||
}
|
||||
gPlayers[i].soundEffects |= 0x200000;
|
||||
gPlayers[i].type |= PLAYER_CPU;
|
||||
gPlayers[i].type |= PLAYER_KART_AI;
|
||||
func_800CA118((u8)i);
|
||||
}
|
||||
break;
|
||||
@@ -606,7 +606,7 @@ void func_8028EF28(void) {
|
||||
D_800DC510 = 5;
|
||||
i = gPlayerPositionLUT[3];
|
||||
gPlayers[i].soundEffects |= 0x200000;
|
||||
gPlayers[i].type |= PLAYER_CPU;
|
||||
gPlayers[i].type |= PLAYER_KART_AI;
|
||||
func_800CA118((u8)i);
|
||||
}
|
||||
break;
|
||||
@@ -801,7 +801,7 @@ void func_8028F970(void) {
|
||||
struct Controller *controller = &gControllers[i];
|
||||
|
||||
if (!(player->type & PLAYER_HUMAN)) { continue; }
|
||||
if (player->type & PLAYER_CPU) { continue; }
|
||||
if (player->type & PLAYER_KART_AI) { continue; }
|
||||
|
||||
if (gActiveScreenMode != SCREEN_MODE_3P_4P_SPLITSCREEN) {
|
||||
if ((controller->buttonPressed & L_TRIG) && !(controller->button & R_TRIG)) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
#include <common_structs.h>
|
||||
#include "memory.h"
|
||||
#include "camera.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "render_player.h"
|
||||
#include "code_80057C60.h"
|
||||
#include "code_80091750.h"
|
||||
@@ -177,8 +177,8 @@ void func_802A39E0(struct UnkStruct_800DC5EC *arg0) {
|
||||
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||
gDPSetDepthImage(gDisplayListHead++, D_801502B4);
|
||||
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, D_801502B4);
|
||||
gDPSetDepthImage(gDisplayListHead++, gPhysicalZBuffer);
|
||||
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
|
||||
gDPSetFillColor(gDisplayListHead++, 0xFFFCFFFC);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, ulx, uly, lrx, lry);
|
||||
@@ -197,8 +197,8 @@ void func_802A39E0(struct UnkStruct_800DC5EC *arg0) {
|
||||
void init_z_buffer(void) {
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetCycleType(gDisplayListHead++, G_CYC_FILL);
|
||||
gDPSetDepthImage(gDisplayListHead++, D_801502B4);
|
||||
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, D_801502B4);
|
||||
gDPSetDepthImage(gDisplayListHead++, gPhysicalZBuffer);
|
||||
gDPSetColorImage(gDisplayListHead++, G_IM_FMT_RGBA, G_IM_SIZ_16b, SCREEN_WIDTH, gPhysicalZBuffer);
|
||||
gDPSetFillColor(gDisplayListHead++, 0xFFFCFFFC);
|
||||
gDPPipeSync(gDisplayListHead++);
|
||||
gDPSetScissor(gDisplayListHead++, G_SC_NON_INTERLACE, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
|
||||
@@ -318,52 +318,37 @@ s32 D_802B8A90[] = {
|
||||
0xba001402, 0x00000000, 0xb8000000, 0x00000000,
|
||||
};
|
||||
|
||||
struct Skybox sSkyColors[21] = {
|
||||
{128, 4280, 6136, 216, 7144, 32248},
|
||||
{255, 255, 255, 255, 255, 255},
|
||||
{48, 1544, 49528, 0, 0, 0},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{113, 70, 255, 255, 184, 99},
|
||||
{28, 11, 90, 0, 99, 164},
|
||||
{48, 1688, 54136, 216, 7144, 32248},
|
||||
{238, 144, 255, 255, 224, 240},
|
||||
{128, 4280, 6136, 216, 7144, 32248},
|
||||
{0, 18, 255, 197, 211, 255},
|
||||
{0, 2, 94, 209, 65, 23},
|
||||
{195, 231, 255, 255, 0xc0, 0},
|
||||
{128, 4280, 6136, 216, 7144, 32248},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{20, 30, 56, 40, 60, 110},
|
||||
{128, 4280, 6136, 216, 7144, 32248},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{113, 70, 255, 255, 184, 99},
|
||||
{255, 174, 0, 255, 229, 124},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{238, 144, 255, 255, 224, 240},
|
||||
struct Skybox sSkyColors[] = {
|
||||
#include "assets/course_metadata/sSkyColors.inc.c"
|
||||
|
||||
};
|
||||
|
||||
struct Skybox D_802B8BCC[21] = {
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{255, 255, 255, 255, 255, 255},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{95, 40, 15, 0, 0, 0},
|
||||
{0, 99, 164, 0, 0, 0},
|
||||
{48, 1688, 54136, 0, 0, 0},
|
||||
{255, 224, 240, 0, 0, 0},
|
||||
{216, 7144, 32248, 0, 0, 0},
|
||||
{255, 184, 99, 0, 0, 0},
|
||||
{209, 65, 23, 0, 0, 0},
|
||||
{255, 192, 0, 0, 0, 0},
|
||||
{216, 7144, 32248, 128, 4280, 6136},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{216, 7144, 32248, 0, 0, 0},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{255, 224, 240, 0, 0, 0},
|
||||
{22, 145, 22, 0, 0, 0},
|
||||
{0, 0, 0, 0, 0, 0},
|
||||
{255, 224, 240, 0, 0, 0},
|
||||
// struct Skybox sSkyColors[] = {
|
||||
// {128, 4280, 6136, 216, 7144, 32248},
|
||||
// {255, 255, 255, 255, 255, 255},
|
||||
// {48, 1544, 49528, 0, 0, 0},
|
||||
// {0, 0, 0, 0, 0, 0},
|
||||
// {113, 70, 255, 255, 184, 99},
|
||||
// {28, 11, 90, 0, 99, 164},
|
||||
// {48, 1688, 54136, 216, 7144, 32248},
|
||||
// {238, 144, 255, 255, 224, 240},
|
||||
// {128, 4280, 6136, 216, 7144, 32248},
|
||||
// {0, 18, 255, 197, 211, 255},
|
||||
// {0, 2, 94, 209, 65, 23},
|
||||
// {195, 231, 255, 255, 0xc0, 0},
|
||||
// {128, 4280, 6136, 216, 7144, 32248},
|
||||
// {0, 0, 0, 0, 0, 0},
|
||||
// {20, 30, 56, 40, 60, 110},
|
||||
// {128, 4280, 6136, 216, 7144, 32248},
|
||||
// {0, 0, 0, 0, 0, 0},
|
||||
// {113, 70, 255, 255, 184, 99},
|
||||
// {255, 174, 0, 255, 229, 124},
|
||||
// {0, 0, 0, 0, 0, 0},
|
||||
// {238, 144, 255, 255, 224, 240},
|
||||
// };
|
||||
|
||||
struct Skybox sSkyColors2[] = {
|
||||
#include "assets/course_metadata/sSkyColors2.inc.c"
|
||||
};
|
||||
|
||||
void func_802A450C(Vtx *skybox) {
|
||||
@@ -415,18 +400,18 @@ void func_802A450C(Vtx *skybox) {
|
||||
skybox[3].v.cn[0] = sSkyColors[gCurrentCourseId].unk0;
|
||||
skybox[3].v.cn[1] = sSkyColors[gCurrentCourseId].unk2;
|
||||
skybox[3].v.cn[2] = sSkyColors[gCurrentCourseId].unk4;
|
||||
skybox[4].v.cn[0] = D_802B8BCC[gCurrentCourseId].unk0;
|
||||
skybox[4].v.cn[1] = D_802B8BCC[gCurrentCourseId].unk2;
|
||||
skybox[4].v.cn[2] = D_802B8BCC[gCurrentCourseId].unk4;
|
||||
skybox[5].v.cn[0] = D_802B8BCC[gCurrentCourseId].unk6;
|
||||
skybox[5].v.cn[1] = D_802B8BCC[gCurrentCourseId].unk8;
|
||||
skybox[5].v.cn[2] = D_802B8BCC[gCurrentCourseId].unkA;
|
||||
skybox[6].v.cn[0] = D_802B8BCC[gCurrentCourseId].unk6;
|
||||
skybox[6].v.cn[1] = D_802B8BCC[gCurrentCourseId].unk8;
|
||||
skybox[6].v.cn[2] = D_802B8BCC[gCurrentCourseId].unkA;
|
||||
skybox[7].v.cn[0] = D_802B8BCC[gCurrentCourseId].unk0;
|
||||
skybox[7].v.cn[1] = D_802B8BCC[gCurrentCourseId].unk2;
|
||||
skybox[7].v.cn[2] = D_802B8BCC[gCurrentCourseId].unk4;
|
||||
skybox[4].v.cn[0] = sSkyColors2[gCurrentCourseId].unk0;
|
||||
skybox[4].v.cn[1] = sSkyColors2[gCurrentCourseId].unk2;
|
||||
skybox[4].v.cn[2] = sSkyColors2[gCurrentCourseId].unk4;
|
||||
skybox[5].v.cn[0] = sSkyColors2[gCurrentCourseId].unk6;
|
||||
skybox[5].v.cn[1] = sSkyColors2[gCurrentCourseId].unk8;
|
||||
skybox[5].v.cn[2] = sSkyColors2[gCurrentCourseId].unkA;
|
||||
skybox[6].v.cn[0] = sSkyColors2[gCurrentCourseId].unk6;
|
||||
skybox[6].v.cn[1] = sSkyColors2[gCurrentCourseId].unk8;
|
||||
skybox[6].v.cn[2] = sSkyColors2[gCurrentCourseId].unkA;
|
||||
skybox[7].v.cn[0] = sSkyColors2[gCurrentCourseId].unk0;
|
||||
skybox[7].v.cn[1] = sSkyColors2[gCurrentCourseId].unk2;
|
||||
skybox[7].v.cn[2] = sSkyColors2[gCurrentCourseId].unk4;
|
||||
}
|
||||
|
||||
void func_802A487C(Vtx *arg0, UNUSED struct UnkStruct_800DC5EC *arg1, UNUSED s32 arg2, UNUSED s32 arg3, UNUSED f32 *arg4) {
|
||||
@@ -831,7 +816,11 @@ void render_player_one_2p_screen_vertical(void) {
|
||||
UNUSED s32 pad[2];
|
||||
u16 perspNorm;
|
||||
Mat4 matrix;
|
||||
#ifdef VERSION_EU
|
||||
f32 sp9C;
|
||||
#else
|
||||
UNUSED f32 sp9C;
|
||||
#endif
|
||||
|
||||
func_802A50EC();
|
||||
#ifdef VERSION_EU
|
||||
@@ -888,7 +877,11 @@ void render_player_two_2p_screen_vertical(void) {
|
||||
UNUSED s32 pad[2];
|
||||
u16 perspNorm;
|
||||
Mat4 matrix;
|
||||
#ifdef VERSION_EU
|
||||
f32 sp9C;
|
||||
#else
|
||||
UNUSED f32 sp9C;
|
||||
#endif
|
||||
|
||||
func_802A5004();
|
||||
init_rdp();
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
#include "objects.h"
|
||||
#include "waypoints.h"
|
||||
#include "bomb_kart.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "render_player.h"
|
||||
#include "code_80004740.h"
|
||||
#include "code_80005FD0.h"
|
||||
@@ -30,7 +30,7 @@
|
||||
#include "menus.h"
|
||||
#include "code_80086E70.h"
|
||||
#include "code_800029B0.h"
|
||||
#include "src/data/data_800E45C0.h"
|
||||
#include <assets/data_800E45C0.h>
|
||||
#include "courses/all_course_data.h"
|
||||
#include <vehicles.h>
|
||||
#include "data/some_data.h"
|
||||
@@ -2373,13 +2373,13 @@ void func_8004F3E4(s32 arg0) {
|
||||
case GRAND_PRIX:
|
||||
for (idx = D_8018D158 - 1; idx >= 0; idx--) {
|
||||
playerId = gGPCurrentRacePlayerIdByRank[idx];
|
||||
if ((gPlayerOne + playerId)->type & PLAYER_CPU) {
|
||||
if ((gPlayerOne + playerId)->type & PLAYER_KART_AI) {
|
||||
func_8004F168(arg0, playerId, 8);
|
||||
}
|
||||
}
|
||||
for (idx = D_8018D158 - 1; idx >= 0; idx--) {
|
||||
playerId = gGPCurrentRacePlayerIdByRank[idx];
|
||||
if (((gPlayerOne + playerId)->type & PLAYER_CPU) != PLAYER_CPU) {
|
||||
if (((gPlayerOne + playerId)->type & PLAYER_KART_AI) != PLAYER_KART_AI) {
|
||||
func_8004F168(arg0, playerId, (gPlayerOne + playerId)->characterId);
|
||||
}
|
||||
}
|
||||
|
||||
+60
-37
@@ -17,7 +17,7 @@
|
||||
#include "waypoints.h"
|
||||
#include "player_controller.h"
|
||||
#include "render_objects.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "skybox_and_splitscreen.h"
|
||||
#include "spawn_players.h"
|
||||
|
||||
@@ -705,44 +705,67 @@ void mtxf_scale2(Mat4 arg0, f32 scale) {
|
||||
arg0[2][2] *= scale;
|
||||
}
|
||||
|
||||
UNUSED void func_80021FF8(Mtx *arg0, Mat4 arg1) {
|
||||
f32 someMultiplier = 65536.0f;
|
||||
arg0->m[0][0] = arg1[0][0] * someMultiplier;
|
||||
arg0->m[0][1] = arg1[0][1] * someMultiplier;
|
||||
arg0->m[0][2] = arg1[0][2] * someMultiplier;
|
||||
arg0->m[0][3] = arg1[0][3] * someMultiplier;
|
||||
arg0->m[1][0] = arg1[1][0] * someMultiplier;
|
||||
arg0->m[1][1] = arg1[1][1] * someMultiplier;
|
||||
arg0->m[1][2] = arg1[1][2] * someMultiplier;
|
||||
arg0->m[1][3] = arg1[1][3] * someMultiplier;
|
||||
arg0->m[2][0] = arg1[2][0] * someMultiplier;
|
||||
arg0->m[2][1] = arg1[2][1] * someMultiplier;
|
||||
arg0->m[2][2] = arg1[2][2] * someMultiplier;
|
||||
arg0->m[2][3] = arg1[2][3] * someMultiplier;
|
||||
arg0->m[3][0] = arg1[3][0] * someMultiplier;
|
||||
arg0->m[3][1] = arg1[3][1] * someMultiplier;
|
||||
arg0->m[3][2] = arg1[3][2] * someMultiplier;
|
||||
arg0->m[3][3] = arg1[3][3] * someMultiplier;
|
||||
/**
|
||||
* This function writes a fixed-point value to each Mtx entry. This is not how the Mtx struct works.
|
||||
* The first half of Mtx only holds s16 whole numbers and the second half holds the s16 decimal (fractional) parts.
|
||||
* See convert_to_fixed_point_matrix() for correct calculations. Note that each Mtx entry is the size of s32.
|
||||
* This means each Mtx entry holds two s16 values.
|
||||
* The first sixteen entries contain only the integer parts and the second sixteen entries hold only the decimal (fractional) parts.
|
||||
*/
|
||||
UNUSED void failed_fixed_point_matrix_conversion(Mtx *dest, Mat4 src) {
|
||||
f32 toFixed = 65536.0f;
|
||||
dest->m[0][0] = src[0][0] * toFixed;
|
||||
dest->m[0][1] = src[0][1] * toFixed;
|
||||
dest->m[0][2] = src[0][2] * toFixed;
|
||||
dest->m[0][3] = src[0][3] * toFixed;
|
||||
dest->m[1][0] = src[1][0] * toFixed;
|
||||
dest->m[1][1] = src[1][1] * toFixed;
|
||||
dest->m[1][2] = src[1][2] * toFixed;
|
||||
dest->m[1][3] = src[1][3] * toFixed;
|
||||
dest->m[2][0] = src[2][0] * toFixed;
|
||||
dest->m[2][1] = src[2][1] * toFixed;
|
||||
dest->m[2][2] = src[2][2] * toFixed;
|
||||
dest->m[2][3] = src[2][3] * toFixed;
|
||||
dest->m[3][0] = src[3][0] * toFixed;
|
||||
dest->m[3][1] = src[3][1] * toFixed;
|
||||
dest->m[3][2] = src[3][2] * toFixed;
|
||||
dest->m[3][3] = src[3][3] * toFixed;
|
||||
}
|
||||
|
||||
void convert_to_fixed_point_matrix(Mtx *fixedPointMatrix, Mat4 arg1) {
|
||||
f32 someMultiplier = 65536.0f;
|
||||
fixedPointMatrix->m[0][0] = ((s32) (arg1[0][0] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[0][1] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[0][1] = ((s32) (arg1[0][2] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[0][3] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[0][2] = ((s32) (arg1[1][0] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[1][1] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[0][3] = ((s32) (arg1[1][2] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[1][3] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[1][0] = ((s32) (arg1[2][0] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[2][1] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[1][1] = ((s32) (arg1[2][2] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[2][3] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[1][2] = ((s32) (arg1[3][0] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[3][1] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[1][3] = ((s32) (arg1[3][2] * someMultiplier) & 0xFFFF0000) | (((s32) (arg1[3][3] * someMultiplier) >> 0x10) & 0xFFFF);
|
||||
fixedPointMatrix->m[2][0] = ((s32) (arg1[0][0] * someMultiplier) << 0x10) | ((s32) (arg1[0][1] * someMultiplier) & 0xFFFF);
|
||||
fixedPointMatrix->m[2][1] = ((s32) (arg1[0][2] * someMultiplier) << 0x10) | ((s32) (arg1[0][3] * someMultiplier) & 0xFFFF);
|
||||
fixedPointMatrix->m[2][2] = ((s32) (arg1[1][0] * someMultiplier) << 0x10) | ((s32) (arg1[1][1] * someMultiplier) & 0xFFFF);
|
||||
fixedPointMatrix->m[2][3] = ((s32) (arg1[1][2] * someMultiplier) << 0x10) | ((s32) (arg1[1][3] * someMultiplier) & 0xFFFF);
|
||||
fixedPointMatrix->m[3][0] = ((s32) (arg1[2][0] * someMultiplier) << 0x10) | ((s32) (arg1[2][1] * someMultiplier) & 0xFFFF);
|
||||
fixedPointMatrix->m[3][1] = ((s32) (arg1[2][2] * someMultiplier) << 0x10) | ((s32) (arg1[2][3] * someMultiplier) & 0xFFFF);
|
||||
fixedPointMatrix->m[3][2] = ((s32) (arg1[3][0] * someMultiplier) << 0x10) | ((s32) (arg1[3][1] * someMultiplier) & 0xFFFF);
|
||||
fixedPointMatrix->m[3][3] = ((s32) (arg1[3][2] * someMultiplier) << 0x10) | ((s32) (arg1[3][3] * someMultiplier) & 0xFFFF);
|
||||
/**
|
||||
* Takes a floating-point matrix and converts it to an s15.16 internal matrix.
|
||||
* Each Mtx entry is a size of s32 that holds two values.
|
||||
* The first 16 entries hold only the integer values and the second 16 entries hold only the decimal (fractional) parts.
|
||||
* In simpler words, the integer and decimal gets split up and stored in their own section.
|
||||
* Mtx is setup this way due to hardware restrictions of the n64 or as an optimization.
|
||||
*
|
||||
* @param Mtx A new internal fixed-point matrix.
|
||||
* @param Mat4 An array of f32
|
||||
* Mat4 to Mtx explanation: https://blarg.ca/2020/10/11/fixed-point-math.
|
||||
*/
|
||||
void convert_to_fixed_point_matrix(Mtx *dest, Mat4 src) {
|
||||
#ifdef AVOID_UB
|
||||
// Use os function guMtxF2L instead. This helps little-endian systems.
|
||||
guMtxF2L(src, dest);
|
||||
#else
|
||||
f32 toFixed = 65536.0f; // 2 ^ 16
|
||||
dest->m[0][0] = ((s32) (src[0][0] * toFixed) & 0xFFFF0000) | (((s32) (src[0][1] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[0][1] = ((s32) (src[0][2] * toFixed) & 0xFFFF0000) | (((s32) (src[0][3] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[0][2] = ((s32) (src[1][0] * toFixed) & 0xFFFF0000) | (((s32) (src[1][1] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[0][3] = ((s32) (src[1][2] * toFixed) & 0xFFFF0000) | (((s32) (src[1][3] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[1][0] = ((s32) (src[2][0] * toFixed) & 0xFFFF0000) | (((s32) (src[2][1] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[1][1] = ((s32) (src[2][2] * toFixed) & 0xFFFF0000) | (((s32) (src[2][3] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[1][2] = ((s32) (src[3][0] * toFixed) & 0xFFFF0000) | (((s32) (src[3][1] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[1][3] = ((s32) (src[3][2] * toFixed) & 0xFFFF0000) | (((s32) (src[3][3] * toFixed) >> 0x10) & 0xFFFF);
|
||||
dest->m[2][0] = ((s32) (src[0][0] * toFixed) << 0x10) | ((s32) (src[0][1] * toFixed) & 0xFFFF);
|
||||
dest->m[2][1] = ((s32) (src[0][2] * toFixed) << 0x10) | ((s32) (src[0][3] * toFixed) & 0xFFFF);
|
||||
dest->m[2][2] = ((s32) (src[1][0] * toFixed) << 0x10) | ((s32) (src[1][1] * toFixed) & 0xFFFF);
|
||||
dest->m[2][3] = ((s32) (src[1][2] * toFixed) << 0x10) | ((s32) (src[1][3] * toFixed) & 0xFFFF);
|
||||
dest->m[3][0] = ((s32) (src[2][0] * toFixed) << 0x10) | ((s32) (src[2][1] * toFixed) & 0xFFFF);
|
||||
dest->m[3][1] = ((s32) (src[2][2] * toFixed) << 0x10) | ((s32) (src[2][3] * toFixed) & 0xFFFF);
|
||||
dest->m[3][2] = ((s32) (src[3][0] * toFixed) << 0x10) | ((s32) (src[3][1] * toFixed) & 0xFFFF);
|
||||
dest->m[3][3] = ((s32) (src[3][2] * toFixed) << 0x10) | ((s32) (src[3][3] * toFixed) & 0xFFFF);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool adjust_angle(s16 *angle, s16 targetAngle, s16 step) {
|
||||
|
||||
+1
-1
@@ -30,7 +30,7 @@ void func_80021DA8(void);
|
||||
void mtxf_translate_rotate(Mat4, Vec3f, Vec3s);
|
||||
void func_80021F50(Mat4, Vec3f);
|
||||
void mtxf_scale2(Mat4, f32);
|
||||
void func_80021FF8(Mtx*, Mat4);
|
||||
void failed_fixed_point_matrix_conversion(Mtx*, Mat4);
|
||||
void convert_to_fixed_point_matrix(Mtx*, Mat4);
|
||||
s32 adjust_angle(s16*, s16, s16);
|
||||
void move_s32_towards(s32*, s32, f32);
|
||||
|
||||
+93
-93
@@ -55,7 +55,7 @@ s32 gCountBChangement[8];
|
||||
bool gIsPlayerTripleBButtonCombo[8];
|
||||
s32 gTimerBoostTripleBCombo[8];
|
||||
|
||||
s16 chooseCPUPlayers[7];
|
||||
s16 chooseKartAIPlayers[7];
|
||||
|
||||
s16 D_8016556E;
|
||||
s16 D_80165570;
|
||||
@@ -495,78 +495,78 @@ void spawn_players_gp_one_player(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
} while(rand == gCharacterSelections[0]);
|
||||
|
||||
// Randomize gPlayerTwo
|
||||
chooseCPUPlayers[0] = rand;
|
||||
chooseKartAIPlayers[0] = rand;
|
||||
|
||||
// Chooses arr[0] as a fallback to prevent duplicating characters.
|
||||
// If it doesn't find the if, it will grab the final index as a fallback.
|
||||
for (i = 1; i < 7; i++) {
|
||||
u16* arr = (u16 *) gCPUforPlayer[gCharacterSelections[0]];
|
||||
u16* arr = (u16 *) gKartAIforPlayer[gCharacterSelections[0]];
|
||||
if (rand == arr[i]) {
|
||||
chooseCPUPlayers[i] = arr[0];
|
||||
chooseKartAIPlayers[i] = arr[0];
|
||||
} else {
|
||||
chooseCPUPlayers[i] = arr[i];
|
||||
chooseKartAIPlayers[i] = arr[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
D_8016556E = 0;
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]], arg2, 32768.0f, chooseCPUPlayers[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[2]], arg1[D_80165270[2]], arg2, 32768.0f, chooseCPUPlayers[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, chooseCPUPlayers[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, chooseCPUPlayers[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, chooseCPUPlayers[4], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[6]], arg1[D_80165270[6]], arg2, 32768.0f, chooseCPUPlayers[5], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, chooseCPUPlayers[6], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_KART_AI);
|
||||
spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]], arg2, 32768.0f, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[2]], arg1[D_80165270[2]], arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[6]], arg1[D_80165270[6]], arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
D_80164A28 = 0;
|
||||
} else {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]] + 250.0f, arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, chooseCPUPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, chooseCPUPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, chooseCPUPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, chooseCPUPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, chooseCPUPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, chooseCPUPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, chooseCPUPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[3]], arg1[D_80165270[2]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[2]], arg1[D_80165270[3]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[5]], arg1[D_80165270[4]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[4]], arg1[D_80165270[5]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[7]], arg1[D_80165270[6]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[6]], arg1[D_80165270[7]] + 250.0f, arg2, 32768.0f, chooseKartAIPlayers[6], PLAYER_EXISTS | PLAYER_STAGING | PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
D_80164A28 = 1;
|
||||
}
|
||||
func_80039AE4();
|
||||
}
|
||||
|
||||
void spawn_players_versus_one_player(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[5], arg1[5], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[6], arg1[6], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[5], arg1[5], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[6], arg1[6], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_KART_AI);
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
} else if (D_8015F890 != 1) {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
if (D_80162DD4 == 0) {
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, D_80162DE0, PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_START_SEQUENCE | PLAYER_INVISIBLE_OR_BOMB);
|
||||
} else {
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
}
|
||||
if (D_80162DD6 == 0) {
|
||||
spawn_player(gPlayerThree, 2, arg0[0], arg1[0], arg2, 32768.0f, D_80162DE4, PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_START_SEQUENCE | PLAYER_INVISIBLE_OR_BOMB);
|
||||
} else {
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
}
|
||||
} else {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, D_80162DE8, PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_START_SEQUENCE | PLAYER_INVISIBLE_OR_BOMB);
|
||||
if (D_80162DD8 == 0) {
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, D_80162DE0, PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_START_SEQUENCE | PLAYER_INVISIBLE_OR_BOMB);
|
||||
} else {
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
}
|
||||
if (D_80162DD6 == 0) {
|
||||
spawn_player(gPlayerThree, 2, arg0[0], arg1[0], arg2, 32768.0f, D_80162DE4, PLAYER_EXISTS | PLAYER_HUMAN | PLAYER_START_SEQUENCE | PLAYER_INVISIBLE_OR_BOMB);
|
||||
} else {
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
}
|
||||
}
|
||||
D_80164A28 = 0;
|
||||
@@ -587,32 +587,32 @@ getRand:
|
||||
if (gCharacterSelections[1] == rand)
|
||||
goto getRand;
|
||||
|
||||
chooseCPUPlayers[0] = rand;
|
||||
chooseKartAIPlayers[0] = rand;
|
||||
|
||||
for (i = 1; i < 6; i++) {
|
||||
u16* arr = (u16 *) gCPUforTwoPlayer[gCharacterSelections[0]][gCharacterSelections[1]];
|
||||
u16* arr = (u16 *) gKartAIforTwoPlayer[gCharacterSelections[0]][gCharacterSelections[1]];
|
||||
if (rand == arr[i]) {
|
||||
chooseCPUPlayers[i] = arr[0];
|
||||
chooseKartAIPlayers[i] = arr[0];
|
||||
} else {
|
||||
chooseCPUPlayers[i] = arr[i];
|
||||
chooseKartAIPlayers[i] = arr[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[2]], arg1[D_80165270[2]], arg2, 32768.0f, chooseCPUPlayers[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, chooseCPUPlayers[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, chooseCPUPlayers[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, chooseCPUPlayers[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[6]], arg1[D_80165270[6]], arg2, 32768.0f, chooseCPUPlayers[4], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, chooseCPUPlayers[5], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerThree, 2, arg0[D_80165270[2]], arg1[D_80165270[2]], arg2, 32768.0f, chooseKartAIPlayers[0], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, arg0[D_80165270[3]], arg1[D_80165270[3]], arg2, 32768.0f, chooseKartAIPlayers[1], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFive, 4, arg0[D_80165270[4]], arg1[D_80165270[4]], arg2, 32768.0f, chooseKartAIPlayers[2], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSix, 5, arg0[D_80165270[5]], arg1[D_80165270[5]], arg2, 32768.0f, chooseKartAIPlayers[3], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSeven, 6, arg0[D_80165270[6]], arg1[D_80165270[6]], arg2, 32768.0f, chooseKartAIPlayers[4], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerEight, 7, arg0[D_80165270[7]], arg1[D_80165270[7]], arg2, 32768.0f, chooseKartAIPlayers[5], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_KART_AI);
|
||||
} else {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[D_80165270[0]], arg1[D_80165270[0]], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
}
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
} else {
|
||||
spawn_player(gPlayerTwo, 1, arg0[D_80165270[1]], arg1[D_80165270[1]], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
}
|
||||
@@ -622,19 +622,19 @@ getRand:
|
||||
}
|
||||
|
||||
void spawn_players_versus_two_player(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[5], arg1[5], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[6], arg1[6], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerThree, 2, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFour, 3, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFive, 4, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[4], arg1[4], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[5], arg1[5], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[6], arg1[6], arg2, 32768.0f, gCharacterSelections[0], PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_KART_AI);
|
||||
} else {
|
||||
spawn_player(gPlayerOneCopy, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
}
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_KART_AI);
|
||||
} else {
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
}
|
||||
@@ -652,10 +652,10 @@ void spawn_players_2p_battle(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
}
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
D_80164A28 = 0;
|
||||
func_80039AE4();
|
||||
}
|
||||
@@ -665,16 +665,16 @@ void func_8003B318(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_KART_AI);
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_KART_AI);
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_HUMAN_AND_KART_AI);
|
||||
}
|
||||
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
D_80164A28 = 0;
|
||||
func_80039AE4();
|
||||
}
|
||||
@@ -689,11 +689,11 @@ void spawn_players_3p_battle(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 0.0f, gCharacterSelections[1], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, -16384.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
}
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, 3, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
D_80164A28 = 0;
|
||||
func_80039AE4();
|
||||
}
|
||||
@@ -704,15 +704,15 @@ void func_8003B870(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
if (gDemoMode == 1) {
|
||||
spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_HUMAN_AND_CPU);
|
||||
spawn_player(gPlayerOne, 0, arg0[0], arg1[0], arg2, 32768.0f, gCharacterSelections[0], PLAYER_HUMAN_AND_KART_AI);
|
||||
spawn_player(gPlayerTwo, 1, arg0[1], arg1[1], arg2, 32768.0f, gCharacterSelections[1], PLAYER_HUMAN_AND_KART_AI);
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, 32768.0f, gCharacterSelections[2], PLAYER_HUMAN_AND_KART_AI);
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 32768.0f, gCharacterSelections[3], PLAYER_HUMAN_AND_KART_AI);
|
||||
}
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
D_80164A28 = 0;
|
||||
func_80039AE4();
|
||||
}
|
||||
@@ -729,22 +729,22 @@ void spawn_players_4p_battle(f32 *arg0, f32 *arg1, f32 arg2) {
|
||||
spawn_player(gPlayerThree, 2, arg0[2], arg1[2], arg2, -16384.0f, gCharacterSelections[2], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerFour, 3, arg0[3], arg1[3], arg2, 16384.0f, gCharacterSelections[3], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
}
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_CPU);
|
||||
spawn_player(gPlayerFive, 4, arg0[4], arg1[4], arg2, 32768.0f, 4, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSix, 5, arg0[5], arg1[5], arg2, 32768.0f, 5, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerSeven, 6, arg0[6], arg1[6], arg2, 32768.0f, 6, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
spawn_player(gPlayerEight, 7, arg0[0], arg1[0], arg2, 32768.0f, 7, PLAYER_START_SEQUENCE | PLAYER_KART_AI);
|
||||
D_80164A28 = 0;
|
||||
func_80039AE4();
|
||||
}
|
||||
|
||||
void func_8003BE30(void) {
|
||||
spawn_player(gPlayerOne, 0, -2770.774f, -345.187f, -34.6f, 0.0f, gCharacterIdByGPOverallRank[0], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerTwo, 1, -3691.506f, -6.822f, -6.95f, 36400.0f, gCharacterIdByGPOverallRank[1], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerThree, 2, -3475.028f, -998.485f, -8.059f, 45500.0f, gCharacterIdByGPOverallRank[2], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerOne, 0, -2770.774f, -345.187f, -34.6f, 0.0f, gCharacterIdByGPOverallRank[0], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerTwo, 1, -3691.506f, -6.822f, -6.95f, 36400.0f, gCharacterIdByGPOverallRank[1], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerThree, 2, -3475.028f, -998.485f, -8.059f, 45500.0f, gCharacterIdByGPOverallRank[2], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
if (D_802874D8.unk1D >= 3) {
|
||||
spawn_player(gPlayerFour, 3, -3025.772f, 110.039f, -23.224f, 28210.0f, D_802874D8.unk1E, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, -3025.772f, 110.039f, -23.224f, 28210.0f, D_802874D8.unk1E, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
} else {
|
||||
spawn_player(gPlayerFour, 3, -3025.772f, 110.039f, -23.224f, 28210.0f, gCharacterIdByGPOverallRank[3], PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, -3025.772f, 110.039f, -23.224f, 28210.0f, gCharacterIdByGPOverallRank[3], PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
}
|
||||
spawn_player(gPlayerFive, 4, -2770.774f, -345.187f, -34.6f, 0.0f, 0, 0x7000);
|
||||
spawn_player(gPlayerSix, 5, -3691.506f, -6.822f, -6.95f, 36400.0f, 0, 0x7000);
|
||||
@@ -1048,13 +1048,13 @@ void func_8003C0F0(void) {
|
||||
D_80165230[6] = 150.0f;
|
||||
D_80165230[7] = 170.0f;
|
||||
spawn_player(gPlayerOneCopy, 0, D_80165210[0], D_80165230[0], sp5A, 32768.0f, gCharacterSelections[0], PLAYER_EXISTS | PLAYER_START_SEQUENCE | PLAYER_HUMAN);
|
||||
spawn_player(gPlayerTwo, 1, D_80165210[1], D_80165230[1], sp5A, 32768.0f, 1, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerThree, 2, D_80165210[2], D_80165230[2], sp5A, 32768.0f, 2, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, D_80165210[3], D_80165230[3], sp5A, 32768.0f, 3, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFive, 4, D_80165210[4], D_80165230[4], sp5A, 32768.0f, 4, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSix, 5, D_80165210[5], D_80165230[5], sp5A, 32768.0f, 5, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSeven, 6, D_80165210[6], D_80165230[6], sp5A, 32768.0f, 6, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerEight, 7, D_80165210[7], D_80165230[7], sp5A, 32768.0f, 7, PLAYER_EXISTS | PLAYER_CPU | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerTwo, 1, D_80165210[1], D_80165230[1], sp5A, 32768.0f, 1, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerThree, 2, D_80165210[2], D_80165230[2], sp5A, 32768.0f, 2, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFour, 3, D_80165210[3], D_80165230[3], sp5A, 32768.0f, 3, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerFive, 4, D_80165210[4], D_80165230[4], sp5A, 32768.0f, 4, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSix, 5, D_80165210[5], D_80165230[5], sp5A, 32768.0f, 5, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerSeven, 6, D_80165210[6], D_80165230[6], sp5A, 32768.0f, 6, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
spawn_player(gPlayerEight, 7, D_80165210[7], D_80165230[7], sp5A, 32768.0f, 7, PLAYER_EXISTS | PLAYER_KART_AI | PLAYER_START_SEQUENCE);
|
||||
D_80164A28 = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ extern s32 gFrameSinceLastBCombo[];
|
||||
extern s32 gCountBChangement[];
|
||||
extern s32 gIsPlayerTripleBButtonCombo[];
|
||||
extern s32 gTimerBoostTripleBCombo[];
|
||||
extern s16 chooseCPUPlayers[];
|
||||
extern s16 chooseKartAIPlayers[];
|
||||
extern s16 D_8016556E;
|
||||
extern s16 D_80165570;
|
||||
extern s16 D_80165572;
|
||||
|
||||
+2
-2
@@ -238,7 +238,7 @@ void func_8000546C(void) {
|
||||
s16 phi_v0 = 0;
|
||||
|
||||
if (D_80162DB0 >= 0x1000) {
|
||||
gPlayerOne->type = PLAYER_CINEMATIC_MODE | PLAYER_START_SEQUENCE | PLAYER_CPU;
|
||||
gPlayerOne->type = PLAYER_CINEMATIC_MODE | PLAYER_START_SEQUENCE | PLAYER_KART_AI;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -469,7 +469,7 @@ void func_8000599C(void) {
|
||||
// sets player to AI? (unconfirmed)
|
||||
void func_80005AE8(Player *ply) {
|
||||
if (((ply->type & PLAYER_INVISIBLE_OR_BOMB) != 0) && (ply != gPlayerOne)) {
|
||||
ply->type = PLAYER_CINEMATIC_MODE | PLAYER_START_SEQUENCE | PLAYER_CPU;
|
||||
ply->type = PLAYER_CINEMATIC_MODE | PLAYER_START_SEQUENCE | PLAYER_KART_AI;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
#include "code_80057C60.h"
|
||||
#include "code_8006E9C0.h"
|
||||
#include "code_80086E70.h"
|
||||
#include "common_textures.h"
|
||||
#include <assets/common_data.h>
|
||||
#include "audio/external.h"
|
||||
#include "sounds.h"
|
||||
#include <actors.h>
|
||||
@@ -28,7 +28,7 @@
|
||||
#include "code_80091750.h"
|
||||
#include "podium_ceremony_actors.h"
|
||||
#include "courses/all_course_data.h"
|
||||
#include "src/ending/ceremony_data.h"
|
||||
#include <assets/ceremony_data.h>
|
||||
#include "src/ending/ceremony_and_credits.h"
|
||||
#include "menus.h"
|
||||
#include "data/other_textures.h"
|
||||
@@ -190,7 +190,7 @@ void func_80072120(s32 *arg0, s32 arg1) {
|
||||
void func_80072180(void) {
|
||||
if (gModeSelection == TIME_TRIALS) {
|
||||
if (((gPlayerOne->type & PLAYER_EXISTS) != 0) &&
|
||||
((gPlayerOne->type & (PLAYER_INVISIBLE_OR_BOMB | PLAYER_CPU)) == 0)) {
|
||||
((gPlayerOne->type & (PLAYER_INVISIBLE_OR_BOMB | PLAYER_KART_AI)) == 0)) {
|
||||
D_80162DF8 = 1;
|
||||
}
|
||||
}
|
||||
@@ -3638,7 +3638,7 @@ u8 gen_random_item(s16 rank, s16 isCpu)
|
||||
curve = segmented_to_virtual((void *) common_grand_prix_human_item_curve);
|
||||
}
|
||||
else {
|
||||
curve = segmented_to_virtual((void *) common_grand_prix_cpu_item_curve);
|
||||
curve = segmented_to_virtual((void *) common_grand_prix_kart_ai_item_curve);
|
||||
}
|
||||
randomItem = *((rank * 100) + curve + sRandomItemIndex);
|
||||
}
|
||||
@@ -3649,7 +3649,7 @@ u8 gen_random_item_human(UNUSED s16 arg0, s16 rank) {
|
||||
return gen_random_item(rank, FALSE);
|
||||
}
|
||||
|
||||
u8 gen_random_item_cpu(UNUSED s32 arg0, s16 rank) {
|
||||
u8 kart_ai_gen_random_item(UNUSED s32 arg0, s16 rank) {
|
||||
return gen_random_item(rank, TRUE);
|
||||
}
|
||||
|
||||
@@ -5469,7 +5469,7 @@ void func_8007F8D8(void) {
|
||||
}
|
||||
if (var_s4 != 0) {
|
||||
for (var_s0 = 0; var_s0 < 4; var_s0++, player++){
|
||||
if ((player->type & PLAYER_EXISTS) && !(player->type & PLAYER_CPU)) {
|
||||
if ((player->type & PLAYER_EXISTS) && !(player->type & PLAYER_KART_AI)) {
|
||||
if (func_8007F75C(var_s0) != 0) break;
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user