Compare commits
154 Commits
Author | SHA1 | Date |
---|---|---|
Jack Garrard | ad79fe1732 | |
Jack Garrard | ca5cef2ff4 | |
Jack Garrard | f548de2117 | |
Jack Garrard | cdac0a8679 | |
Jack Garrard | 3570175752 | |
Jack Garrard | 89154d6c20 | |
Jack Garrard | cf97f2b214 | |
Jack Garrard | 6b81465197 | |
Jack Garrard | 800ade7842 | |
Jack Garrard | d0dfb63519 | |
Robin C. Ladiges | b4d90d1d85 | |
Jack Garrard | f27875f65f | |
Jack Garrard | 44f8ece7ce | |
Jack Garrard | 83a1d70e01 | |
Jack Garrard | 1da9626a44 | |
Jack Garrard | 8acb8700bf | |
Jack Garrard | d5b49b2ea9 | |
Jack Garrard | 7064122902 | |
Jack Garrard | 8d94cf7856 | |
Jack Garrard | 9bf07b3e0d | |
Jack Garrard | 125e2bdde2 | |
Robin C. Ladiges | 45cd4442c8 | |
Robin C. Ladiges | c736878df1 | |
Robin C. Ladiges | 366ad5e888 | |
Robin C. Ladiges | f810e8f07d | |
Robin C. Ladiges | 2bef6f796e | |
Robin C. Ladiges | 4835692672 | |
Robin C. Ladiges | 27b9a095f7 | |
Piplup | b86322f346 | |
piplup | 936e0fd49f | |
piplup | 4d242a5e44 | |
piplup | 41719e1f9f | |
piplup | f8a3deefc4 | |
piplup | cd8bf4e257 | |
Robin C. Ladiges | 4339847da5 | |
Robin C. Ladiges | f60fc956d6 | |
Robin C. Ladiges | 7f6df57f4a | |
Robin C. Ladiges | 6a5b5146b8 | |
Robin C. Ladiges | 36f9343f83 | |
Jack Garrard | 76d61a8067 | |
Jack Garrard | 8c992649fd | |
Jack Garrard | 477f1c9e7d | |
Jack Garrard | 4ab6b56598 | |
Jack Garrard | 158f782a2a | |
Jack Garrard | 7e128679ab | |
Jack Garrard | 1fc3a78943 | |
Jack Garrard | 627e07cd65 | |
Jack Garrard | 57333d71e9 | |
Jack Garrard | 4171390f42 | |
Jack Garrard | 5c04bb1006 | |
Jack Garrard | 04fc8cb309 | |
Jack Garrard | a58471c19f | |
Jack Garrard | 0147f4d738 | |
Jack Garrard | 000d24a7db | |
Jack Garrard | 78b532a316 | |
Jack Garrard | efef24fbbe | |
Jack Garrard | 3e5c0c89e5 | |
Jack Garrard | 64b56c32da | |
Jack Garrard | 89415e6f96 | |
Jack Garrard | e6871da878 | |
Jack Garrard | 24e724a824 | |
Jack Garrard | 28c7f92453 | |
Jack Garrard | 4a5a10f910 | |
Jack Garrard | bf646b2b3d | |
Jack Garrard | 53f91b8695 | |
Jack Garrard | a9c3ec4006 | |
Jack Garrard | 4655b0755e | |
Jack Garrard | 93c750ccf7 | |
Jack Garrard | 655368241f | |
Jack Garrard | ed83827cc1 | |
Jack Garrard | 2654650804 | |
Jack Garrard | 694c9e73d6 | |
Jack Garrard | 968f513bf2 | |
Jack Garrard | 7c17db2d93 | |
Jack Garrard | ba7612a304 | |
Jack Garrard | d666707e24 | |
Jack Garrard | 1fd02147b6 | |
Jack Garrard | f6408e2b1e | |
Jack Garrard | 2f5ed106fa | |
Jack Garrard | b163749c77 | |
Jack Garrard | 009755ceba | |
Jack Garrard | f417d39f3b | |
Jack Garrard | 66c8bb9e1b | |
CraftyBoss | 13c873aae0 | |
Robin C. Ladiges | 65d6ffb4fc | |
CraftyBoss | cc4c1d7c67 | |
CraftyBoss | d4eabffff1 | |
Jack Garrard | 19c6d800bd | |
Jack Garrard | 1204e27adb | |
Jack Garrard | b18671f113 | |
CraftyBoss | d4df8f030c | |
Robin C. Ladiges | 81a0726836 | |
Robin C. Ladiges | 2898a762d4 | |
Robin C. Ladiges | aff422a6e0 | |
Robin C. Ladiges | 89a76aedab | |
Robin C. Ladiges | 71ff477bb9 | |
Robin C. Ladiges | 3325c50c00 | |
Sanae | b3a30b09f7 | |
CraftyBoss | d3b1935899 | |
CraftyBoss | 261848fdd3 | |
CraftyBoss | 71a9da11bf | |
CraftyBoss | b245408ae6 | |
CraftyBoss | 550b82fc1f | |
CraftyBoss | dc0930063d | |
CraftyBoss | 8f4fac417f | |
Sanae | d18276d255 | |
Sanae | 34691affb0 | |
Sanae | 5f1a91161f | |
Robin C. Ladiges | ce5b799593 | |
Robin C. Ladiges | dd4f3202ae | |
Robin C. Ladiges | b1d026a42f | |
Robin C. Ladiges | b3b49bd547 | |
CraftyBoss | 3c4a20a6d4 | |
Robin C. Ladiges | 01426a8a7c | |
CraftyBoss | 4f2bb984f2 | |
CraftyBoss | 88de1dcecf | |
CraftyBoss | 1df21b2a3e | |
Link4565 | c9b1dfa911 | |
CraftyBoss | 2e2909e908 | |
CraftyBoss | 3ce0f03650 | |
CraftyBoss | b00540b1d9 | |
Nick Renieris | 0e9fde9289 | |
CraftyBoss | dc07fa96a2 | |
Nick Renieris | 951844e428 | |
Nick Renieris | a416458e73 | |
Nick Renieris | 740f562906 | |
Nick Renieris | 62cc2a5102 | |
Nick Renieris | 86de220619 | |
CraftyBoss | 4b83934a47 | |
Nick Renieris | 71b4237d84 | |
Nick Renieris | 90f09a8340 | |
Nick Renieris | 733f239d68 | |
Nick Renieris | d1e4466fba | |
Nick Renieris | 0bfd7a70b2 | |
Nick Renieris | 23cdf1442d | |
Nick Renieris | 8f21d43bc3 | |
Nick Renieris | 60a5179e4b | |
Nick Renieris | 7e4a80b934 | |
Nick Renieris | 9227e37623 | |
Nick Renieris | 5c71569545 | |
CraftyBoss | 063e20677f | |
CraftyBoss | cbadd82b21 | |
CraftyBoss | 52c3345633 | |
fruityloops1 | 3b3c5584d9 | |
Somebody Whoisbored | 9b275da22b | |
Somebody Whoisbored | f8b4bd690d | |
Somebody Whoisbored | a7715c15da | |
Somebody Whoisbored | 0657047d9c | |
Somebody Whoisbored | 8bddc5622c | |
Somebody Whoisbored | b25cad8812 | |
Somebody Whoisbored | 41746805c2 | |
Somebody Whoisbored | 2b7ca6d914 | |
Sanae | 7c7b06542b | |
CraftyBoss | b71a6fc27b |
|
@ -0,0 +1,45 @@
|
|||
name: Attach build artifacts to release
|
||||
|
||||
|
||||
inputs:
|
||||
filename:
|
||||
description : 'Filename of the build artifact'
|
||||
required : true
|
||||
upload_url:
|
||||
description : 'Upload URL of the release'
|
||||
required : true
|
||||
GITHUB_TOKEN:
|
||||
description : 'Secret GitHub token required for uploading to the release'
|
||||
required : true
|
||||
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
-
|
||||
name : Download artifacts
|
||||
uses : actions/download-artifact@v3
|
||||
with:
|
||||
name : ${{ inputs.filename }}
|
||||
path : ./starlight_patch_100/
|
||||
-
|
||||
name : Zip artifacts
|
||||
shell : bash
|
||||
run: |
|
||||
cd ./starlight_patch_100/
|
||||
zip -rmT9 "${{ inputs.filename }}.zip" ./*
|
||||
-
|
||||
name : Attach to release
|
||||
uses : actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url : ${{ inputs.upload_url }}
|
||||
asset_path : ./starlight_patch_100/${{ inputs.filename }}.zip
|
||||
asset_name : "${{ inputs.filename }}.zip"
|
||||
asset_content_type : application/zip
|
||||
-
|
||||
name : Cleanup artifacts
|
||||
shell : bash
|
||||
run: |
|
||||
rm -rf ./starlight_patch_100/
|
|
@ -0,0 +1,81 @@
|
|||
name: Build artifacts
|
||||
|
||||
|
||||
inputs:
|
||||
tag:
|
||||
description : 'version tag'
|
||||
required : false
|
||||
default : ''
|
||||
prefix:
|
||||
description : 'filename prefix'
|
||||
required : false
|
||||
default : ''
|
||||
emu:
|
||||
description : 'what system the build is for: Switch or Emulators'
|
||||
required : false
|
||||
default : 'Switch'
|
||||
|
||||
|
||||
outputs:
|
||||
filename:
|
||||
description : 'Filename for the build artifacts'
|
||||
value : ${{ steps.env.outputs.filename }}
|
||||
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
-
|
||||
name : Environment
|
||||
id : env
|
||||
shell : bash
|
||||
run: |
|
||||
VERS=${{ inputs.tag }}
|
||||
echo "version=${VERS:1}" >>$GITHUB_OUTPUT
|
||||
echo "filename=${{ inputs.prefix }}SMO_Online${{ (inputs.tag != '' && format('_{0}', inputs.tag)) || '' }}_for_${{ inputs.emu }}" >>$GITHUB_OUTPUT
|
||||
-
|
||||
name : Set up Docker Buildx
|
||||
uses : docker/setup-buildx-action@v2
|
||||
-
|
||||
name : Build environment
|
||||
uses : docker/build-push-action@v3
|
||||
with:
|
||||
pull : true
|
||||
push : false
|
||||
load : true
|
||||
context : .
|
||||
file : ./Dockerfile
|
||||
tags : smoo-build-env
|
||||
platforms : linux/amd64
|
||||
cache-from : type=gha,scope=smoo-build-env
|
||||
cache-to : type=gha,scope=smoo-build-env,mode=max
|
||||
-
|
||||
name : Build mod
|
||||
shell : bash
|
||||
run: |
|
||||
docker run --rm \
|
||||
-u `id -u`:`id -g` \
|
||||
-v "/$PWD/":/app/ \
|
||||
-e ISEMU=${{ (inputs.emu != 'Switch' && '1') || '0' }} \
|
||||
${{ (steps.env.outputs.version != '' && format('-e BUILDVER={0}', steps.env.outputs.version)) || '' }} \
|
||||
smoo-build-env \
|
||||
;
|
||||
cp -r ./romfs/ ./starlight_patch_100/atmosphere/contents/0100000000010000/.
|
||||
-
|
||||
name : Emulators
|
||||
shell : bash
|
||||
if : ${{ inputs.emu == 'Emulators' }}
|
||||
run: |
|
||||
cd ./starlight_patch_100/
|
||||
mkdir ./SMOO/
|
||||
mv ./atmosphere/contents/0100000000010000/exefs ./SMOO/exefs
|
||||
mv ./atmosphere/contents/0100000000010000/romfs ./SMOO/romfs
|
||||
mv ./atmosphere/exefs_patches/StarlightBase/3CA12DFAAF9C82DA064D1698DF79CDA1.ips ./SMOO/exefs/
|
||||
rm -rf ./atmosphere/
|
||||
-
|
||||
name : Upload artifacts
|
||||
uses : actions/upload-artifact@v3
|
||||
with:
|
||||
name : ${{ steps.env.outputs.filename }}
|
||||
path : ./starlight_patch_100/
|
||||
if-no-files-found : error
|
|
@ -0,0 +1,36 @@
|
|||
name: Create release
|
||||
|
||||
|
||||
inputs:
|
||||
tag:
|
||||
description : 'Version tag'
|
||||
required : true
|
||||
GITHUB_TOKEN:
|
||||
description : 'Secret GitHub token required to create the release'
|
||||
required : true
|
||||
|
||||
|
||||
outputs:
|
||||
id:
|
||||
value: ${{ steps.release.outputs.id }}
|
||||
html_url:
|
||||
value: ${{ steps.release.outputs.html_url }}
|
||||
upload_url:
|
||||
value: ${{ steps.release.outputs.upload_url }}
|
||||
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
-
|
||||
name : Create release
|
||||
id : release
|
||||
uses : actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ inputs.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name : ${{ inputs.tag }}
|
||||
release_name : ${{ inputs.tag }}
|
||||
body : ''
|
||||
draft : true
|
||||
prerelease : false
|
|
@ -0,0 +1,35 @@
|
|||
name: Build
|
||||
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- '**'
|
||||
- '!dev'
|
||||
tags:
|
||||
- '**'
|
||||
- '!v[0-9]+.[0-9]+.[0-9]+'
|
||||
- '!v[0-9]+.[0-9]+.[0-9]+\+*'
|
||||
- '!v[0-9]+.[0-9]+.[0-9]+-*'
|
||||
- '!latest-dev'
|
||||
pull_request:
|
||||
branches:
|
||||
- '**'
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
emu : [ Switch, Emulators ]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name : Checkout
|
||||
uses : actions/checkout@v3
|
||||
-
|
||||
name : Build artifacts
|
||||
uses : ./.github/actions/build
|
||||
with:
|
||||
emu : ${{ matrix.emu }}
|
|
@ -0,0 +1,95 @@
|
|||
name: Dev Release
|
||||
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- 'dev'
|
||||
|
||||
|
||||
env:
|
||||
TAG : 'latest-dev'
|
||||
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}
|
||||
cancel-in-progress: true
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
emu : [ Switch, Emulators ]
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
filename1: ${{ steps.set-output.outputs.filename-Switch }}
|
||||
filename2: ${{ steps.set-output.outputs.filename-Emulators }}
|
||||
steps:
|
||||
-
|
||||
name : Checkout
|
||||
uses : actions/checkout@v3
|
||||
-
|
||||
name : Environment
|
||||
id : env
|
||||
shell : bash
|
||||
run: |
|
||||
echo "prefix=$(date +'%Y%m%d_%H%M%S_' --utc)" >>$GITHUB_OUTPUT
|
||||
-
|
||||
name : Build artifacts
|
||||
id : build
|
||||
uses : ./.github/actions/build
|
||||
with:
|
||||
prefix : ${{ steps.env.outputs.prefix }}
|
||||
emu : ${{ matrix.emu }}
|
||||
-
|
||||
name : Set output
|
||||
id : set-output
|
||||
shell : bash
|
||||
run : |
|
||||
echo "filename-${{ matrix.emu }}=${{ steps.build.outputs.filename }}" >>$GITHUB_OUTPUT
|
||||
|
||||
attach:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name : Checkout
|
||||
uses : actions/checkout@v3
|
||||
-
|
||||
name : Get release info
|
||||
id : release
|
||||
shell : bash
|
||||
run: |
|
||||
url=`curl -sS --fail ${{ github.api_url }}/repos/${{ github.repository }}/releases/tags/${{ env.TAG }} | jq .upload_url -r`
|
||||
echo "upload_url=$url" >>$GITHUB_OUTPUT
|
||||
-
|
||||
name : Attach build artifacts to release (Switch)
|
||||
uses : ./.github/actions/attach
|
||||
with:
|
||||
filename : ${{ needs.build.outputs.filename1 }}
|
||||
upload_url : ${{ steps.release.outputs.upload_url }}
|
||||
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
|
||||
-
|
||||
name : Attach build artifacts to release (Emulators)
|
||||
uses : ./.github/actions/attach
|
||||
with:
|
||||
filename : ${{ needs.build.outputs.filename2 }}
|
||||
upload_url : ${{ steps.release.outputs.upload_url }}
|
||||
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
move:
|
||||
needs: attach
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name : Checkout
|
||||
uses : actions/checkout@v3
|
||||
-
|
||||
name : Move ${{ env.TAG }} tag
|
||||
shell : bash
|
||||
run: |
|
||||
git config user.email "${{ github.actor }}@users.noreply.github.com"
|
||||
git tag -f ${{ env.TAG }}
|
||||
git push --force origin ${{ env.TAG }}
|
|
@ -0,0 +1,67 @@
|
|||
name: Release
|
||||
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+'
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+\+*'
|
||||
- 'v[0-9]+.[0-9]+.[0-9]+-*'
|
||||
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
emu : [ Switch, Emulators ]
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
filename1: ${{ steps.set-output.outputs.filename-Switch }}
|
||||
filename2: ${{ steps.set-output.outputs.filename-Emulators }}
|
||||
steps:
|
||||
-
|
||||
name : Checkout
|
||||
uses : actions/checkout@v3
|
||||
-
|
||||
name : Build artifacts
|
||||
id : build
|
||||
uses : ./.github/actions/build
|
||||
with:
|
||||
tag : ${{ github.ref_name }}
|
||||
emu : ${{ matrix.emu }}
|
||||
-
|
||||
name : Set output
|
||||
id : set-output
|
||||
shell : bash
|
||||
run : |
|
||||
echo "::set-output name=filename-${{ matrix.emu }}::${{ steps.build.outputs.filename }}"
|
||||
|
||||
release:
|
||||
needs: build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
-
|
||||
name : Checkout
|
||||
uses : actions/checkout@v3
|
||||
-
|
||||
name : Create release
|
||||
id : release
|
||||
uses : ./.github/actions/release
|
||||
with:
|
||||
tag : ${{ github.ref_name }}
|
||||
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
|
||||
-
|
||||
name : Attach build artifacts to release (Switch)
|
||||
uses : ./.github/actions/attach
|
||||
with:
|
||||
filename : ${{ needs.build.outputs.filename1 }}
|
||||
upload_url : ${{ steps.release.outputs.upload_url }}
|
||||
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
|
||||
-
|
||||
name : Attach build artifacts to release (Emulators)
|
||||
uses : ./.github/actions/attach
|
||||
with:
|
||||
filename : ${{ needs.build.outputs.filename2 }}
|
||||
upload_url : ${{ steps.release.outputs.upload_url }}
|
||||
GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
|
|
@ -5,5 +5,7 @@ romfs stuff/**
|
|||
Crash Reports/**
|
||||
.cache/**
|
||||
Custom Stage Builds/**
|
||||
*.lst
|
||||
*.disabled
|
||||
|
||||
compile_commands.json
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
FROM devkitpro/devkita64:latest as builder
|
||||
|
||||
# install dependencies
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y \
|
||||
python3 \
|
||||
python3-pip \
|
||||
&& pip3 install keystone-engine \
|
||||
;
|
||||
|
||||
WORKDIR /app/
|
||||
|
||||
ENTRYPOINT make
|
26
Makefile
26
Makefile
|
@ -4,17 +4,19 @@
|
|||
.PHONY: all clean starlight send
|
||||
|
||||
SMOVER ?= 100
|
||||
BUILDVER ?= 99.37
|
||||
IP ?= 10.0.0.221
|
||||
BUILDVER ?= 101
|
||||
BUILDVERSTR ?= 1.0.1
|
||||
IP ?= 10.0.0.221 # ftp server ip (usually is switch's local IP)
|
||||
DEBUGLOG ?= 0 # defaults to disable debug logger
|
||||
SERVERIP ?= 0.0.0.0 # put debug logger server IP here
|
||||
ISEMU ?= 0 # set to 1 to compile for emulators
|
||||
|
||||
PROJNAME ?= StarlightBase
|
||||
|
||||
all: starlight
|
||||
|
||||
starlight:
|
||||
$(MAKE) all -f MakefileNSO SMOVER=$(SMOVER) BUILDVER=$(BUILDVER) DEBUGLOG=$(DEBUGLOG) SERVERIP=${SERVERIP}
|
||||
$(MAKE) all -f MakefileNSO SMOVER=$(SMOVER) BUILDVERSTR=$(BUILDVERSTR) BUILDVER=$(BUILDVER) DEBUGLOG=$(DEBUGLOG) SERVERIP=${SERVERIP} EMU=${ISEMU}
|
||||
$(MAKE) starlight_patch_$(SMOVER)/*.ips
|
||||
|
||||
mkdir -p starlight_patch_$(SMOVER)/atmosphere/exefs_patches/$(PROJNAME)/
|
||||
|
@ -23,15 +25,17 @@ starlight:
|
|||
mv starlight_patch_$(SMOVER)/3CA12DFAAF9C82DA064D1698DF79CDA1.ips starlight_patch_$(SMOVER)/atmosphere/exefs_patches/$(PROJNAME)/3CA12DFAAF9C82DA064D1698DF79CDA1.ips
|
||||
mv $(shell basename $(CURDIR))$(SMOVER).elf starlight_patch_$(SMOVER)/subsdk1.elf
|
||||
mv $(shell basename $(CURDIR))$(SMOVER).nso starlight_patch_$(SMOVER)/atmosphere/contents/0100000000010000/exefs/subsdk1
|
||||
|
||||
cp -R romfs starlight_patch_$(SMOVER)/atmosphere/contents/0100000000010000
|
||||
|
||||
starlight_patch_$(SMOVER)/*.ips: patches/*.slpatch patches/configs/$(SMOVER).config patches/maps/$(SMOVER)/*.map \
|
||||
build$(SMOVER)/$(shell basename $(CURDIR))$(SMOVER).map scripts/genPatch.py
|
||||
@rm -f starlight_patch_$(SMOVER)/*.ips
|
||||
python3 scripts/genPatch.py $(SMOVER)
|
||||
|
||||
# builds project with the file structure used in the yuzu emulator
|
||||
yuzu:
|
||||
$(MAKE) all -f MakefileNSO SMOVER=$(SMOVER) BUILDVER=$(BUILDVER)
|
||||
# builds project with the file structure and flags used for emulators
|
||||
emu:
|
||||
$(MAKE) all -f MakefileNSO SMOVER=$(SMOVER) BUILDVERSTR=$(BUILDVERSTR) BUILDVER=$(BUILDVER) EMU=1
|
||||
$(MAKE) starlight_patch_$(SMOVER)/*.ips
|
||||
|
||||
mkdir -p starlight_patch_$(SMOVER)/yuzu/
|
||||
|
@ -41,15 +45,15 @@ yuzu:
|
|||
mv $(shell basename $(CURDIR))$(SMOVER).nso starlight_patch_$(SMOVER)/yuzu/subsdk1
|
||||
# builds and sends project to FTP server hosted on provided IP
|
||||
send: all
|
||||
python3.8 scripts/sendPatch.py $(IP) $(PROJNAME)
|
||||
python3 scripts/sendPatch.py $(IP) $(PROJNAME)
|
||||
|
||||
log: all
|
||||
python3.8 scripts/tcpServer.py $(SERVERIP)
|
||||
python3 scripts/tcpServer.py $(SERVERIP)
|
||||
|
||||
sendlog: all
|
||||
python3.8 scripts/sendPatch.py $(IP) $(PROJNAME) $(USER) $(PASS)
|
||||
python3.8 scripts/tcpServer.py $(SERVERIP)
|
||||
python3 scripts/sendPatch.py $(IP) $(PROJNAME) $(USER) $(PASS)
|
||||
python3 scripts/tcpServer.py $(SERVERIP)
|
||||
|
||||
clean:
|
||||
$(MAKE) clean -f MakefileNSO
|
||||
@rm -fr starlight_patch_*
|
||||
@rm -fr starlight_patch_*
|
||||
|
|
|
@ -32,7 +32,8 @@ include $(DEVKITPRO)/libnx/switch_rules
|
|||
#---------------------------------------------------------------------------------
|
||||
TARGET ?= $(notdir $(CURDIR))$(SMOVER)
|
||||
BUILD ?= build$(SMOVER)
|
||||
SOURCES := source/sead/time source/sead source/puppets source/server source/layouts source/states source/cameras source
|
||||
SOURCES := source/sead/time source/sead source/puppets source/server/hns source/server/gamemode source/server/gamemode/modifiers source/server source/layouts source/states source/cameras source/nx source
|
||||
SOURCES += source/al/execute
|
||||
DATA := data
|
||||
INCLUDES := include include/sead
|
||||
|
||||
|
@ -44,14 +45,14 @@ ARCH := -march=armv8-a -mtune=cortex-a57 -mtp=soft -fPIC -ftls-model=local-exec
|
|||
CFLAGS := -g -Wall -ffunction-sections \
|
||||
$(ARCH) $(DEFINES)
|
||||
|
||||
CFLAGS += $(INCLUDE) -D__SWITCH__ -DSMOVER=$(SMOVER) -O3 -DNNSDK -DSWITCH -DBUILDVER=$(BUILDVER) -DDEBUGLOG=$(DEBUGLOG) -DSERVERIP=$(SERVERIP)
|
||||
CFLAGS += $(INCLUDE) -D__SWITCH__ -DSMOVER=$(SMOVER) -O3 -DNNSDK -DSWITCH -DBUILDVERSTR=$(BUILDVERSTR) -DBUILDVER=$(BUILDVER) -DDEBUGLOG=$(DEBUGLOG) -DSERVERIP=$(SERVERIP) -DEMU=$(EMU)
|
||||
|
||||
CXXFLAGS := $(CFLAGS) -fno-rtti -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -std=gnu++20
|
||||
CXXFLAGS := $(CFLAGS) -Wno-invalid-offsetof -Wno-volatile -fno-rtti -fomit-frame-pointer -fno-exceptions -fno-asynchronous-unwind-tables -fno-unwind-tables -std=gnu++20
|
||||
|
||||
ASFLAGS := -g $(ARCH)
|
||||
LDFLAGS = -specs=../switch.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) -Wl,--version-script=$(TOPDIR)/exported.txt -Wl,-init=__custom_init -Wl,-fini=__custom_fini -nostdlib
|
||||
|
||||
LIBS := -lnx
|
||||
LIBS :=
|
||||
|
||||
#---------------------------------------------------------------------------------
|
||||
# list of directories containing libraries, this must be the top level containing
|
||||
|
|
68
README.md
68
README.md
|
@ -10,63 +10,45 @@ Welcome to the official repository for the Super Mario Odyssey Online mod! Have
|
|||
* Moon Collection is shared between all players
|
||||
* Custom Configuration Menu (Accessible by holding ZL and selecting any option in the pause/start menu)
|
||||
* Support for custom gamemodes (WIP)
|
||||
### Available Gamemodes
|
||||
* Hide and Seek
|
||||
|
||||
|
||||
## SMO Version Support
|
||||
## Installation and Usage
|
||||
For the typical installation along with how to setup and use muliplayer/hide and seek, please visit the [Super Mario Odyssey Online website](https://smoo.it).
|
||||
|
||||
* 1.0
|
||||
<details>
|
||||
|
||||
## Installation Tutorial
|
||||
<summary>Developer build instructions</summary>
|
||||
|
||||
Before installing, Ensure that your switch is hacked. If not, follow [This Guide](https://switch.homebrew.guide/) to get your switch setup for modding. Make sure you set up a way to block Nintendo's servers as you will need to have your switch connected to the internet for this mod to work!
|
||||
### Building Prerequisites
|
||||
|
||||
1. Download the latest mod build from either [Gamebanana](https://gamebanana.com/games/6376) or from the [Releases](https://github.com/CraftyBoss/SuperMarioOdysseyOnline/releases) tab. (Alternatively, build from source)
|
||||
2. Extract the downloaded zip onto the root of your Switch's SD card.
|
||||
3. If you need to host an online server, head over to the [Super Mario Odyssey Online Server](https://github.com/Sanae6/SmoOnlineServer) repository and follow the instructions there to set up the server.
|
||||
4. Launch the game! Upon first time bootup, the mod should ask for a server IP to save to the games common save file. This IP address will be the server you wish to connect to every time you launch the game with the mod installed. (Note: un-installing the mod and launching the game will remove the server IP from the common save file.)
|
||||
- [devkitPro](https://devkitpro.org/)
|
||||
- Python 3
|
||||
- The [Keystone-Engine](https://www.keystone-engine.org/) Python Module
|
||||
|
||||
## Gamemode Info
|
||||
### Hide and Seek
|
||||
* Depending on Group size, select who will start as seekers at the beginning of each round and a kingdom to hide in.
|
||||
* Each player has a timer on the top right of the screen that will increase while they are hiding during a round.
|
||||
* When a seeker gets close enough to a player, the player will die and respawn as a seeker.
|
||||
* During the round, hiders who die by other means will also become seekers upon respawning.
|
||||
* If a hider loads into a new stage (via a pipe, door, etc.) the hider will get 5 seconds of tag invincibility to prevent spawn point camping.
|
||||
* The player with the most time at the end of a round (or set of rounds) is considered the winner.
|
||||
* While not a concrete rule, it's generally agreed upon that hiding should not be done out of bounds, inside objects that don't sync across games yet, and inside objects that completely conceal a player from others (such as trees).
|
||||
### Building
|
||||
|
||||
## Gamemode Controls
|
||||
### Hide and Seek
|
||||
- Left D-Pad: Decrease time
|
||||
- Right D-Pad: Increase Time
|
||||
- L + D-Pad Down: Reset Time
|
||||
- D-Pad Up: Switch from Hider/Seeker
|
||||
Build has only been tested on WSL2 running Ubuntu 20.04.1.
|
||||
|
||||
## Building Prerequisites
|
||||
Just run:
|
||||
```
|
||||
DEVKITPRO={path_to_devkitpro} make
|
||||
```
|
||||
|
||||
- [devkitPro](https://devkitpro.org/)
|
||||
- Python 3
|
||||
- The [Keystone-Engine](https://www.keystone-engine.org/) Python Module
|
||||
On Ubuntu (and other Debian-based systems), devkitPro will be installed to `/opt/devkitpro` by default:
|
||||
|
||||
## Building
|
||||
```
|
||||
DEVKITPRO=/opt/devkitpro/ make
|
||||
```
|
||||
|
||||
Build has only been tested on WSL2 running Ubuntu 20.04.1.
|
||||
### Installing (Atmosphère)
|
||||
|
||||
Just run:
|
||||
```
|
||||
DEVKITPRO={path_to_devkitpro} make
|
||||
```
|
||||
After a successful build, simply transfer the `atmosphere` folder located inside `starlight_patch_100` to the root of your switch's SD card.
|
||||
</details>
|
||||
|
||||
On Ubuntu (and other Debian-based systems), devkitPro will be installed to `/opt/devkitpro` by default:
|
||||
## Troubleshooting
|
||||
|
||||
```
|
||||
DEVKITPRO=/opt/devkitpro/ make
|
||||
```
|
||||
|
||||
## Installing (Atmosphère)
|
||||
|
||||
After a successful build, simply transfer the `atmosphere` folder located inside `starlight_patch_100` to the root of your switch's SD card.
|
||||
The [Super Mario Odyssey Online website](https://smoo.it) has a FAQ section that should solve many issues.
|
||||
However, for any further questions or help not covered by the site, please visit the [CraftyBoss Community Discord Server](discord.gg/jYCueK2BqD) and ask in the `help`/`help-2` channel.
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
#!/bin/bash
|
||||
|
||||
ISEMU=${1:-0}
|
||||
|
||||
export DOCKER_BUILDKIT=1
|
||||
docker build . -t smoo-client-build
|
||||
docker run --rm \
|
||||
-u $(id -u):$(id -g) \
|
||||
-v "/$PWD/":/app/ \
|
||||
-e ISEMU=${ISEMU} \
|
||||
smoo-client-build \
|
||||
;
|
||||
docker rmi smoo-client-build
|
||||
|
||||
cp -r ./romfs/ ./starlight_patch_*/atmosphere/contents/0100000000010000/.
|
|
@ -7,14 +7,15 @@
|
|||
#include "nn/swkbd/swkbd.h"
|
||||
|
||||
#include "logger.hpp"
|
||||
#include "sead/prim/seadSafeString.h"
|
||||
|
||||
typedef void (*KeyboardSetup)(nn::swkbd::KeyboardConfig&);
|
||||
|
||||
class Keyboard {
|
||||
public:
|
||||
Keyboard(ulong strSize);
|
||||
void keyboardThread();
|
||||
|
||||
void openKeyboard(const char* initialText);
|
||||
void openKeyboard(const char* initialText, KeyboardSetup setup);
|
||||
|
||||
const char* getResult() {
|
||||
if (mThread->isDone()) {
|
||||
|
@ -23,6 +24,8 @@ class Keyboard {
|
|||
return nullptr;
|
||||
};
|
||||
|
||||
bool isKeyboardCancelled() const { return mIsCancelled; }
|
||||
|
||||
bool isThreadDone() { return mThread->isDone(); }
|
||||
|
||||
void setHeaderText(const char16_t* text) { mHeaderText = text; }
|
||||
|
@ -33,12 +36,13 @@ class Keyboard {
|
|||
al::AsyncFunctorThread* mThread;
|
||||
nn::swkbd::String mResultString;
|
||||
|
||||
bool mIsDoneKeyboard;
|
||||
|
||||
sead::FixedSafeString<0x10> mInitialText;
|
||||
hostname mInitialText;
|
||||
KeyboardSetup mSetupFunc;
|
||||
|
||||
const char16_t *mHeaderText = u"Enter Server IP Here!";
|
||||
const char16_t *mSubText = u"Must be a Valid Address.";
|
||||
const char16_t* mSubText = u"Must be a Valid Address.";
|
||||
|
||||
bool mIsCancelled = false;
|
||||
|
||||
char* mWorkBuf;
|
||||
int mWorkBufSize;
|
||||
|
@ -46,4 +50,4 @@ class Keyboard {
|
|||
int mTextCheckSize;
|
||||
char* mCustomizeDicBuf;
|
||||
int mCustomizeDicSize;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -12,16 +12,17 @@ class SocketBase {
|
|||
SocketBase(const char *name);
|
||||
|
||||
virtual nn::Result init(const char * ip, u16 port) = 0;
|
||||
virtual bool closeSocket();
|
||||
|
||||
const char *getStateChar();
|
||||
u8 getLogState();
|
||||
s32 getSocket();
|
||||
s32 getFd();
|
||||
|
||||
void set_sock_flags(int flags);
|
||||
|
||||
bool closeSocket();
|
||||
|
||||
void setName(const char *name) {strcpy(sockName, name);};
|
||||
u32 socket_errno;
|
||||
|
||||
protected:
|
||||
s32 socket_log(const char* str);
|
||||
|
@ -31,9 +32,9 @@ class SocketBase {
|
|||
const char *sock_ip;
|
||||
|
||||
u16 port;
|
||||
u8 socket_log_state;
|
||||
u8 socket_log_state = SOCKET_LOG_UNINITIALIZED;
|
||||
s32 socket_log_socket;
|
||||
|
||||
|
||||
int sock_flags;
|
||||
};
|
||||
|
||||
|
|
|
@ -33,6 +33,16 @@ class PuppetActor : public al::LiveActor {
|
|||
virtual void movement(void) override;
|
||||
virtual void makeActorAlive(void) override;
|
||||
virtual void makeActorDead(void) override;
|
||||
virtual void calcAnim(void) override;
|
||||
|
||||
virtual void attackSensor(al::HitSensor *, al::HitSensor *) override;
|
||||
virtual bool receiveMsg(const al::SensorMsg*, al::HitSensor*, al::HitSensor*) override;
|
||||
|
||||
virtual const char* getName() const override {
|
||||
if (mInfo)
|
||||
return mInfo->puppetName;
|
||||
return mActorName;
|
||||
}
|
||||
|
||||
void initOnline(PuppetInfo *pupInfo);
|
||||
|
||||
|
@ -47,8 +57,6 @@ class PuppetActor : public al::LiveActor {
|
|||
|
||||
PuppetInfo* getInfo() { return mInfo; }
|
||||
|
||||
const char *getPuppetName() { return mInfo->puppetName; }
|
||||
|
||||
bool addCapture(PuppetHackActor *capture, const char *hackType);
|
||||
|
||||
al::LiveActor* getCurrentModel();
|
||||
|
@ -59,27 +67,34 @@ class PuppetActor : public al::LiveActor {
|
|||
|
||||
void debugTeleportCapture(const sead::Vector3f& pos, int index);
|
||||
|
||||
bool mIsDebug = false;
|
||||
void emitJoinEffect();
|
||||
|
||||
float mClosingSpeed = 0;
|
||||
bool mIsDebug = false;
|
||||
|
||||
NameTag *mNameTag = nullptr; // temp public
|
||||
private:
|
||||
void changeModel(const char* newModel);
|
||||
|
||||
bool setCapture(const char* captureName);
|
||||
|
||||
void syncPose();
|
||||
|
||||
|
||||
PlayerCostumeInfo *mCostumeInfo = nullptr;
|
||||
PuppetInfo *mInfo = nullptr;
|
||||
PuppetCapActor *mPuppetCap = nullptr;
|
||||
PlayerModelHolder *mModelHolder = nullptr;
|
||||
HackModelHolder* mCaptures = nullptr;
|
||||
NameTag *mNameTag = nullptr;
|
||||
|
||||
CaptureTypes::Type mCurCapture = CaptureTypes::Type::Unknown;
|
||||
|
||||
bool mIs2DModel = false;
|
||||
|
||||
bool mIsCaptureModel = false;
|
||||
|
||||
float mClosingSpeed = 0;
|
||||
};
|
||||
|
||||
PlayerCostumeInfo* initMarioModelPuppet(al::LiveActor* player, const al::ActorInitInfo& initInfo,
|
||||
char const* bodyName, char const* capName, int subActorNum,
|
||||
al::AudioKeeper* audioKeeper);
|
||||
PlayerHeadCostumeInfo* initMarioHeadCostumeInfo(al::LiveActor* player, const al::ActorInitInfo &initInfo, const char* headModelName, const char* capModelName, const char* headType, const char* headSuffix);
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include "RenderTargetColor.h"
|
||||
#include "RenderTargetDepth.h"
|
||||
#include "DrawContext.h"
|
||||
|
||||
#include "sead/gfx/seadFrameBuffer.h"
|
||||
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "al/sensor/HitSensorKeeper.h"
|
||||
#include "al/switch/StageSwitchKeeper.h"
|
||||
#include "al/actor/SubActorKeeper.h"
|
||||
#include "al/model/ModelKeeper.h"
|
||||
|
||||
// vtable for LiveActor: 1C4EB58
|
||||
|
||||
|
@ -31,7 +32,6 @@ namespace al
|
|||
class ActorScoreKeeper;
|
||||
class Collider;
|
||||
class CollisionParts;
|
||||
class ModelKeeper;
|
||||
class ShadowKeeper;
|
||||
class ActorPrePassLightKeeper;
|
||||
class ActorOcclusionKeeper;
|
||||
|
@ -61,8 +61,10 @@ namespace al
|
|||
virtual void draw() const;
|
||||
virtual void startClipped();
|
||||
virtual void endClipped();
|
||||
virtual void attackSensor(HitSensor *, HitSensor *);
|
||||
virtual bool receiveMsg(const SensorMsg *, HitSensor *, HitSensor *);
|
||||
// source = sensor belonging to this actor
|
||||
// target = sensor belonging to other actor
|
||||
virtual void attackSensor(HitSensor *source, HitSensor *target);
|
||||
virtual bool receiveMsg(const SensorMsg *msg, HitSensor *source, HitSensor *target);
|
||||
virtual bool receiveMsgScreenPoint(const SensorMsg *, ScreenPointer *, ScreenPointTarget *);
|
||||
|
||||
virtual const char *getName() const { return this->mActorName; };
|
||||
|
@ -91,11 +93,13 @@ namespace al
|
|||
virtual al::CameraDirector *getCameraDirector() const { return this->mSceneInfo->mCameraDirector; };
|
||||
|
||||
virtual void initStageSwitchKeeper() { this->mStageSwitchKeeper = new StageSwitchKeeper(); };
|
||||
|
||||
|
||||
virtual void control();
|
||||
|
||||
virtual void updateCollider();
|
||||
|
||||
void initSubActorKeeper(al::SubActorKeeper *);
|
||||
|
||||
const char *mActorName; // 0x48
|
||||
al::ActorPoseKeeperBase *mPoseKeeper; // 0x50
|
||||
al::ActorExecuteInfo *mLayoutExecuteInfo; // 0x58
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "game/Player/PlayerActorBase.h"
|
||||
#include "sead/math/seadVector.h"
|
||||
#include "al/scene/Scene.h"
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
|
@ -15,8 +16,8 @@ namespace al {
|
|||
PlayerHolder(int bufSize);
|
||||
void clear(void);
|
||||
void registerPlayer(al::LiveActor *, al::PadRumbleKeeper *);
|
||||
PlayerActorHakoniwa *getPlayer(int) const;
|
||||
PlayerActorHakoniwa *tryGetPlayer(int) const;
|
||||
PlayerActorBase *getPlayer(int) const;
|
||||
PlayerActorBase *tryGetPlayer(int) const;
|
||||
int getPlayerNum() const;
|
||||
int getBufferSize() const {return bufferSize;};
|
||||
bool isFull(void) const;
|
||||
|
|
|
@ -1,14 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "al/action/ActionEffectCtrl.h"
|
||||
|
||||
#include "al/resource/ActorResource.h"
|
||||
#include "sead/math/seadVector.h"
|
||||
|
||||
namespace al
|
||||
{
|
||||
class LiveActor;
|
||||
|
||||
class ActorResource;
|
||||
class ActionAnimCtrl;
|
||||
class NerveActionCtrl;
|
||||
class ActionFlagCtrl;
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
#include "al/scene/SceneObjHolder.h"
|
||||
#include "al/layout/LayoutInitInfo.h"
|
||||
#include "game/GameData/GameDataHolderBase.h"
|
||||
#include "al/gfx/GraphicsSystemInfo.h"
|
||||
|
||||
namespace al {
|
||||
|
||||
|
@ -19,7 +20,6 @@ namespace al {
|
|||
struct ScreenCoverCtrl;
|
||||
struct ShadowDirector;
|
||||
struct ModelGroup;
|
||||
struct GraphicsSystemInfo;
|
||||
struct PlayerHolder;
|
||||
struct ModelDrawBufferCounter;
|
||||
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
|
||||
#include "al/actor/ActorInitInfo.h"
|
||||
#include "container/seadPtrArray.h"
|
||||
|
||||
namespace al {
|
||||
struct SubActorInfo {
|
||||
struct LiveActor* mActor;
|
||||
|
@ -10,6 +11,13 @@ namespace al {
|
|||
};
|
||||
|
||||
class SubActorKeeper {
|
||||
public:
|
||||
SubActorKeeper(al::LiveActor*);
|
||||
static SubActorKeeper *tryCreate(al::LiveActor*, char const*, int);
|
||||
static SubActorKeeper *create(al::LiveActor*);
|
||||
void registerSubActor(al::LiveActor*, unsigned int);
|
||||
void init(al::ActorInitInfo const&, char const*, int);
|
||||
|
||||
al::LiveActor* mRootActor;
|
||||
sead::PtrArray<SubActorInfo> mArray;
|
||||
};
|
||||
|
|
|
@ -31,9 +31,9 @@ class ChangeStageInfo {
|
|||
|
||||
sead::FixedSafeString<0x80> changeStageId; // 0x0 (Size: 0x98)
|
||||
sead::FixedSafeString<0x80> changeStageName; // 0xA0
|
||||
sead::FixedSafeString<0x80> placementString; // 0x138
|
||||
sead::FixedSafeString<0x80> placementString; // 0x130
|
||||
bool isReturn; // 0x1C8
|
||||
int scenarioNo; // 0x1CC or 0x134
|
||||
int scenarioNo; // 0x1CC
|
||||
SubScenarioType subType; // 0x1D0
|
||||
sead::FixedSafeString<0x80> wipeType; // 0x1D8
|
||||
int hintPriority; // 0x270
|
||||
|
|
|
@ -1,8 +1,48 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/async/FunctorBase.h"
|
||||
|
||||
#include "IUseExecutor.h"
|
||||
#include "ExecuteSystemInitInfo.h"
|
||||
#include "ExecuteRequestKeeper.h"
|
||||
#include "ExecuteTableHolderDraw.h"
|
||||
#include "ExecuteTableHolderUpdate.h"
|
||||
#include "container/seadPtrArray.h"
|
||||
#include "container/seadBuffer.h"
|
||||
|
||||
namespace al
|
||||
{
|
||||
|
||||
class LiveActor;
|
||||
class LayoutActor;
|
||||
|
||||
class ExecuteDirector {
|
||||
public:
|
||||
public:
|
||||
ExecuteDirector(int);
|
||||
virtual ~ExecuteDirector();
|
||||
void init(al::ExecuteSystemInitInfo const&);
|
||||
void registerActorUpdate(al::LiveActor*, char const*);
|
||||
void registerActorDraw(al::LiveActor*, char const*);
|
||||
void registerActorModelDraw(al::LiveActor*, char const*);
|
||||
void registerLayoutUpdate(al::LayoutActor*, char const*);
|
||||
void registerLayoutDraw(al::LayoutActor*, char const*);
|
||||
void registerUser(al::IUseExecutor*, char const*);
|
||||
void registerFunctor(al::FunctorBase const&, char const*);
|
||||
void registerFunctorDraw(al::FunctorBase const&, char const*);
|
||||
void createExecutorListTable();
|
||||
void execute(char const*) const;
|
||||
void executeList(char const*, char const*) const;
|
||||
void draw(char const*) const;
|
||||
void drawList(char const*, char const*) const;
|
||||
void isActiveDraw(char const*) const;
|
||||
|
||||
int mRequestMax; // 0x8
|
||||
|
||||
int mUpdateTableCount;
|
||||
al::ExecuteTableHolderUpdate **mUpdateTables;
|
||||
int mDrawTableCount;
|
||||
al::ExecuteTableHolderDraw **mDrawTables;
|
||||
|
||||
al::ExecuteRequestKeeper *mRequestKeeper;
|
||||
};
|
||||
} // namespace al
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
#pragma once
|
||||
|
||||
namespace al {
|
||||
struct ExecuteOrder
|
||||
{
|
||||
const char *mListName;
|
||||
const char *mExecuteGroup;
|
||||
int mListMaxSize;
|
||||
const char *mGroupType;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
struct LiveActor;
|
||||
}
|
||||
|
||||
namespace al {
|
||||
class ExecuteRequestKeeper {
|
||||
public:
|
||||
ExecuteRequestKeeper(int);
|
||||
void executeRequestActorMovementAllOn();
|
||||
void executeRequestActorMovementAllOff();
|
||||
void executeRequestActorDrawAllOn();
|
||||
void executeRequestActorDrawAllOff();
|
||||
void request(al::LiveActor*, int);
|
||||
|
||||
void *mActorMovementAllOn; // 0x0
|
||||
void *mActorMovementAllOff; // 0x8
|
||||
void *mActorDrawAllOn; // 0x10
|
||||
void *mActorDrawAllOff; // 0x18
|
||||
|
||||
};
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include "agl/DrawContext.h"
|
||||
|
||||
namespace al {
|
||||
struct ExecuteSystemInitInfo {
|
||||
agl::DrawContext *mDrawCtx;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include "ExecuteOrder.h"
|
||||
|
||||
namespace al {
|
||||
struct ExecuteTable
|
||||
{
|
||||
const char *mName;
|
||||
const al::ExecuteOrder* mExecuteOrders;
|
||||
int mExecuteOrderCount;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
#pragma once
|
||||
|
||||
#include <cstring>
|
||||
#include <string_view>
|
||||
#include "ExecuteOrder.h"
|
||||
#include "al/async/FunctorBase.h"
|
||||
#include "al/execute/ExecuteTable.h"
|
||||
#include "al/execute/ExecutorListBase.h"
|
||||
#include "al/execute/IUseExecutor.h"
|
||||
|
||||
#include "container/seadPtrArray.h"
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
struct ExecuteSystemInitInfo;
|
||||
struct ExecutorListActorModelDrawBase;
|
||||
struct ExecutorListActorDraw;
|
||||
struct ExecutorListLayoutDrawBase;
|
||||
struct ExecutorListIUseExecutorDraw;
|
||||
struct ExecutorListFunctor;
|
||||
struct ExecutorListBase;
|
||||
struct LiveActor;
|
||||
struct LayoutActor;
|
||||
}
|
||||
|
||||
namespace al {
|
||||
class ExecuteTableHolderDraw {
|
||||
public:
|
||||
ExecuteTableHolderDraw();
|
||||
virtual ~ExecuteTableHolderDraw();
|
||||
void init(char const*, al::ExecuteSystemInitInfo const&, al::ExecuteOrder const*, int);
|
||||
void registerExecutorListActorModel(al::ExecutorListActorModelDrawBase*);
|
||||
void registerExecutorListActor(al::ExecutorListActorDraw*);
|
||||
void registerExecutorListLayout(al::ExecutorListLayoutDrawBase*);
|
||||
void registerExecutorListUser(al::ExecutorListIUseExecutorDraw*);
|
||||
void registerExecutorListFunctor(al::ExecutorListFunctor*);
|
||||
void registerExecutorListAll(al::ExecutorListBase*);
|
||||
void tryRegisterActor(al::LiveActor*, char const*);
|
||||
void tryRegisterActorModel(al::LiveActor*, char const*);
|
||||
void tryRegisterLayout(al::LayoutActor*, char const*);
|
||||
void tryRegisterUser(al::IUseExecutor*, char const*);
|
||||
void tryRegisterFunctor(al::FunctorBase const&, char const*);
|
||||
void createExecutorListTable();
|
||||
void execute() const;
|
||||
void executeList(char const*) const;
|
||||
bool isActive() const;
|
||||
|
||||
const char* mName;
|
||||
|
||||
sead::PtrArray<al::ExecutorListBase> mActiveExecutors;
|
||||
sead::PtrArray<al::ExecutorListBase> mExecutorsAll;
|
||||
sead::PtrArray<al::ExecutorListActorDraw> mExecutorsActor;
|
||||
sead::PtrArray<al::ExecutorListActorModelDrawBase> mExecutorsActorModel;
|
||||
sead::PtrArray<al::ExecutorListLayoutDrawBase> mExecutorsLayout;
|
||||
sead::PtrArray<al::ExecutorListIUseExecutorDraw> mExecutorsUser;
|
||||
sead::PtrArray<al::ExecutorListFunctor> mExecutorsFunctor;
|
||||
|
||||
};
|
||||
}
|
||||
|
||||
extern "C" al::ExecuteTable gameDrawTable[]; // pointer to original draw table found in the exefs
|
||||
|
||||
extern const al::ExecuteTable drawTable[];
|
||||
|
||||
extern int drawTableSize;
|
|
@ -0,0 +1,58 @@
|
|||
#pragma once
|
||||
|
||||
#include "ExecuteOrder.h"
|
||||
#include "al/async/FunctorBase.h"
|
||||
#include "al/execute/ExecuteTable.h"
|
||||
#include "al/execute/ExecutorListBase.h"
|
||||
#include "al/execute/IUseExecutor.h"
|
||||
#include "ExecuteSystemInitInfo.h"
|
||||
|
||||
#include "container/seadPtrArray.h"
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
struct ExecutorListActorExecuteBase;
|
||||
struct ExecutorListLayoutUpdate;
|
||||
struct ExecutorListIUseExecutorUpdate;
|
||||
struct ExecutorListFunctor;
|
||||
struct ExecutorListBase;
|
||||
struct LiveActor;
|
||||
struct LayoutActor;
|
||||
}
|
||||
|
||||
namespace al {
|
||||
class ExecuteTableHolderUpdate {
|
||||
public:
|
||||
ExecuteTableHolderUpdate();
|
||||
virtual ~ExecuteTableHolderUpdate();
|
||||
void init(char const*, al::ExecuteSystemInitInfo const&, al::ExecuteOrder const*, int);
|
||||
void registerExecutorListActor(al::ExecutorListActorExecuteBase*);
|
||||
void registerExecutorListLayout(al::ExecutorListLayoutUpdate*);
|
||||
void registerExecutorListUser(al::ExecutorListIUseExecutorUpdate*);
|
||||
void registerExecutorListFunctor(al::ExecutorListFunctor*);
|
||||
void registerExecutorListAll(al::ExecutorListBase*);
|
||||
void tryRegisterActor(al::LiveActor*, char const*);
|
||||
void tryRegisterLayout(al::LayoutActor*, char const*);
|
||||
void tryRegisterUser(al::IUseExecutor*, char const*);
|
||||
void tryRegisterFunctor(al::FunctorBase const&, char const*);
|
||||
void createExecutorListTable();
|
||||
void execute() const;
|
||||
void executeList(char const*) const;
|
||||
|
||||
const char *mName;
|
||||
sead::PtrArray<al::ExecutorListBase> mActiveExecutors;
|
||||
sead::PtrArray<al::ExecutorListBase> mExecutorsAll;
|
||||
sead::PtrArray<al::ExecutorListActorExecuteBase> mExecutorsActor;
|
||||
sead::PtrArray<al::ExecutorListLayoutUpdate> mExecutorsLayout;
|
||||
sead::PtrArray<al::ExecutorListIUseExecutorUpdate> mExecutorsUser;
|
||||
sead::PtrArray<al::ExecutorListFunctor> mExecutorsFunctor;
|
||||
|
||||
};
|
||||
} // namespace al
|
||||
|
||||
extern "C" al::ExecuteTable gameUpdateTable[]; // pointer to original update table found in the exefs
|
||||
|
||||
extern const al::ExecuteTable updateTable[];
|
||||
|
||||
extern int updateTableSize;
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
class ExecutorListBase {
|
||||
public:
|
||||
ExecutorListBase(char const*);
|
||||
virtual ~ExecutorListBase();
|
||||
virtual void executeList() const;
|
||||
virtual bool isActive() const;
|
||||
|
||||
const char *mName;
|
||||
};
|
||||
}
|
|
@ -0,0 +1,193 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/execute/ExecuteDirector.h"
|
||||
#include "al/model/ModelMaterialCategory.h"
|
||||
#include "al/resource/Resource.h"
|
||||
#include "container/seadPtrArray.h"
|
||||
#include "gfx/seadCamera.h"
|
||||
|
||||
#include "UniformBlock.h"
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
struct GraphicsInitArg;
|
||||
struct GraphicsUpdateInfo;
|
||||
struct GraphicsCalcGpuInfo;
|
||||
struct PartsGraphics;
|
||||
struct GraphicsRenderInfo;
|
||||
struct GraphicsCopyInfo;
|
||||
struct GraphicsComputeInfo;
|
||||
struct AreaObjDirector;
|
||||
struct EffectSystem;
|
||||
struct SceneCameraInfo;
|
||||
struct ShaderHolder;
|
||||
struct GBufferArray;
|
||||
struct Projection;
|
||||
struct RenderVariables;
|
||||
struct ShaderCubeMapKeeper;
|
||||
struct ShaderMirrorDirector;
|
||||
struct SubCameraRenderer;
|
||||
struct GraphicsParamFilePath;
|
||||
struct PlayerHolder;
|
||||
}
|
||||
|
||||
namespace agl {
|
||||
struct DrawContext;
|
||||
|
||||
namespace utl {
|
||||
struct ParameterOfBool { char size[0x20]; };
|
||||
struct ParameterOfInt { char size[0x20]; };
|
||||
struct ParameterOfFloat { char size[0x20]; };
|
||||
struct IParameterObj { char size[0x30]; };
|
||||
struct IParameterIO { char size[0x1D0]; };
|
||||
}
|
||||
}
|
||||
|
||||
namespace al {
|
||||
class GraphicsSystemInfo {
|
||||
public:
|
||||
GraphicsSystemInfo();
|
||||
~GraphicsSystemInfo();
|
||||
void getModelEnv() const;
|
||||
void getDrawContext() const;
|
||||
void getShaderCubeMapKeeper() const;
|
||||
void getViewIndexedUboArray(char const*) const;
|
||||
void setViewIndexedUboArray(char const*, sead::PtrArray<al::UniformBlock> const*);
|
||||
void initAtmosScatter(al::ExecuteDirector*);
|
||||
void init(al::GraphicsInitArg const&, al::AreaObjDirector*, al::ExecuteDirector*, al::EffectSystem*, al::PlayerHolder*, al::SceneCameraInfo*, al::ShaderHolder*);
|
||||
void initProjectResource();
|
||||
void initStageResource(al::Resource const*, char const*, char const*);
|
||||
void endInit();
|
||||
void initAfterPlacement();
|
||||
void initAfterCreateDrawTable();
|
||||
void setDrawEnv(int, al::GBufferArray*, sead::Camera const*, al::Projection const*);
|
||||
void clearGraphicsRequest();
|
||||
void cancelLerp();
|
||||
void updateGraphics();
|
||||
void updatePartsGraphics(al::GraphicsUpdateInfo const&);
|
||||
void preDrawGraphics(al::SceneCameraInfo const*);
|
||||
void calcGpuPartsGraphics(al::GraphicsCalcGpuInfo const&);
|
||||
void updateViewGpu(int, sead::Camera const*, al::Projection const*);
|
||||
void updateViewVolume(sead::Matrix34f const&, sead::Matrix44<float> const&);
|
||||
void clearViewVolume();
|
||||
void tryGetAtmosLightDir(sead::Vector3f*) const;
|
||||
void tryDirectionalLightInfo(sead::Vector3f*) const;
|
||||
void activateDirLitColorTex() const;
|
||||
void activateDirLitColorTex(agl::DrawContext*) const;
|
||||
void registPartsGraphics(al::PartsGraphics*);
|
||||
void drawSystemPartsGraphics(al::GraphicsRenderInfo const*) const;
|
||||
void doPartsGraphicsCommandBufferCopy(al::GraphicsCopyInfo const&) const;
|
||||
void doPartsGraphicsCompute(al::GraphicsComputeInfo const&) const;
|
||||
void drawPartsGraphics(al::GraphicsRenderInfo const&, al::RenderVariables const&) const;
|
||||
void drawPartsGraphicsGBufferAfterSky(al::GraphicsRenderInfo const&) const;
|
||||
void drawPartsGraphicsDeferred(al::GraphicsRenderInfo const&) const;
|
||||
void drawPartsGraphicsLdr(al::GraphicsRenderInfo const&) const;
|
||||
void drawPartsGraphicsIndirect(al::GraphicsRenderInfo const&, al::RenderVariables const&) const;
|
||||
void drawPartsGraphicsCubemap(al::GraphicsRenderInfo const&) const;
|
||||
|
||||
void *qword0;
|
||||
void *qword8;
|
||||
void *qword10;
|
||||
void *qword18;
|
||||
char gap20[5];
|
||||
char byte25;
|
||||
u16 word26;
|
||||
int dword28;
|
||||
int dword2C;
|
||||
int dword30;
|
||||
int dword34;
|
||||
int dword38;
|
||||
int dword3C;
|
||||
char byte40;
|
||||
int dword44;
|
||||
char byte48;
|
||||
int dword4C;
|
||||
int dword50;
|
||||
int dword54;
|
||||
int dword58;
|
||||
int dword5C;
|
||||
void *qword60;
|
||||
char char68;
|
||||
al::ShaderCubeMapKeeper **field_70;
|
||||
char gap78[56];
|
||||
al::ShadowDirector *field_B0;
|
||||
char gapB8[16];
|
||||
al::ShaderMirrorDirector *field_C8;
|
||||
char gapD0[320];
|
||||
char char210;
|
||||
void *qword218;
|
||||
void *qword220;
|
||||
void *qword228;
|
||||
void *qword230;
|
||||
al::MaterialCategoryKeeper *mMaterialCategoryKeeper;
|
||||
void *qword240;
|
||||
void *qword248;
|
||||
void *qword250;
|
||||
void *qword258;
|
||||
void *qword260;
|
||||
void *qword268;
|
||||
void *qword270;
|
||||
void *qword278;
|
||||
void *qword280;
|
||||
al::GpuMemAllocator *field_288;
|
||||
char gap290[8];
|
||||
void *qword298;
|
||||
void *qword2A0;
|
||||
char gap2A8[8];
|
||||
void *qword2B0;
|
||||
al::SubCameraRenderer *field_2B8;
|
||||
void *qword2C0;
|
||||
void *qword2C8;
|
||||
void *qword2D0;
|
||||
void *qword2D8;
|
||||
void *qword2E0;
|
||||
void *qword2E8;
|
||||
int dword2F0;
|
||||
__attribute__((packed)) __attribute__((aligned(1))) void *qword2F4;
|
||||
__attribute__((packed)) __attribute__((aligned(1))) void *qword2FC;
|
||||
__attribute__((packed)) __attribute__((aligned(1))) void *qword304;
|
||||
int dword30C;
|
||||
al::GraphicsParamFilePath *mParamFilePath;
|
||||
agl::utl::IParameterIO agl__utl__iparameterio318;
|
||||
agl::utl::IParameterObj agl__utl__iparameterobj4E8;
|
||||
agl::utl::ParameterOfInt field_518;
|
||||
agl::utl::ParameterOfInt field_538;
|
||||
agl::utl::ParameterOfBool field_558;
|
||||
agl::utl::ParameterOfBool field_578;
|
||||
agl::utl::ParameterOfInt field_598;
|
||||
agl::utl::IParameterIO field_5B8;
|
||||
agl::utl::IParameterObj field_788;
|
||||
agl::utl::ParameterOfBool field_7B8;
|
||||
agl::utl::ParameterOfBool field_7D8;
|
||||
agl::utl::ParameterOfBool field_7F8;
|
||||
agl::utl::ParameterOfFloat field_818;
|
||||
agl::utl::ParameterOfFloat field_838;
|
||||
agl::utl::ParameterOfFloat field_858;
|
||||
agl::utl::ParameterOfFloat field_878;
|
||||
agl::utl::ParameterOfFloat field_898;
|
||||
agl::utl::ParameterOfFloat field_8B8;
|
||||
agl::utl::ParameterOfFloat field_8D8;
|
||||
agl::utl::ParameterOfFloat field_8F8;
|
||||
void *qword918;
|
||||
void *qword920;
|
||||
void *qword928;
|
||||
void *qword930;
|
||||
void *qword938;
|
||||
void *qword940;
|
||||
void *qword948;
|
||||
void *qword950;
|
||||
void *qword958;
|
||||
int dword960;
|
||||
void *qword968;
|
||||
void *qword970;
|
||||
int dword978;
|
||||
void *qword980;
|
||||
al::ModelOcclusionCullingDirector *field_988;
|
||||
void *qword990;
|
||||
al::ModelShaderHolder *field_998;
|
||||
al::PrepassTriangleCulling *field_9A0;
|
||||
char byte9A8;
|
||||
void *field_9B0;
|
||||
|
||||
};
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
class UniformBlock {
|
||||
UniformBlock();
|
||||
~UniformBlock();
|
||||
void swap();
|
||||
|
||||
};
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
#pragma once
|
||||
|
||||
#include "agl/DisplayList.h"
|
||||
#include "al/resource/Resource.h"
|
||||
#include "math/seadMatrix.h"
|
||||
#include "nn/g3d/ResModel.h"
|
||||
|
||||
namespace al {
|
||||
struct ShaderHolder;
|
||||
struct ModelShaderHolder;
|
||||
struct ModelOcclusionCullingDirector;
|
||||
struct ShadowDirector;
|
||||
struct PrepassTriangleCulling;
|
||||
struct ModelLodCtrl;
|
||||
struct DitherAnimator;
|
||||
struct ModelMaterialCategory;
|
||||
struct GpuMemAllocator;
|
||||
}
|
||||
|
||||
namespace nn { namespace g3d {
|
||||
struct Sphere;
|
||||
}}
|
||||
|
||||
namespace al {
|
||||
class ModelCtrl {
|
||||
public:
|
||||
ModelCtrl();
|
||||
~ModelCtrl();
|
||||
void initialize(nn::g3d::ResModel*, int, int, sead::Heap*, al::ShaderHolder*);
|
||||
void tryBindShader();
|
||||
void tryUpdateModelAdditionalInfoUbo(int);
|
||||
void updateWorldMatrix(sead::Matrix34f const&, sead::Vector3f const&);
|
||||
void updateGpuBuffer(int);
|
||||
void calcBounding();
|
||||
void getLodLevel() const;
|
||||
void getLodLevelDepthShadow() const;
|
||||
void calcBoundingLod(int);
|
||||
void updateQueryBox();
|
||||
void updateModelDrawBuffer(int);
|
||||
void updateGpuBufferAll();
|
||||
void isShapeVisible(int) const;
|
||||
void setCubeMapIndexAllShape(int);
|
||||
void recreateDisplayList();
|
||||
void setMaterialProgrammable(int, bool);
|
||||
void isMaterialProgrammable(int);
|
||||
void setSkeletonUpdateInfo(bool, sead::Matrix34f const&, sead::Vector3f const&);
|
||||
void setDirtyTexture();
|
||||
void onZPrePass();
|
||||
void offZPrePass();
|
||||
void getEnvTexInfo(int) const;
|
||||
void requestModelAdditionalInfoUbo();
|
||||
void setLodCtrl(al::ModelLodCtrl*);
|
||||
void getLodLevelMax() const;
|
||||
void getLodLevelMaterial() const;
|
||||
void getLodLevelNoClamp() const;
|
||||
void setLodLevelForce(int);
|
||||
void updateLodCtrl();
|
||||
void setDitherAnimator(al::DitherAnimator*);
|
||||
void updateDitherAnimator();
|
||||
void checkChangeDisplayList();
|
||||
void addToDrawerCulling();
|
||||
void removeFromDrawerCulling();
|
||||
void updateSubMesh();
|
||||
void setModelMaterialCategory(al::ModelMaterialCategory const*);
|
||||
void setModelAlphaMask(float);
|
||||
void setModelUvOffset(sead::Vector2f const&);
|
||||
void setModelProjMtx0(sead::Matrix44<float> const&);
|
||||
void setModelProjMtx1(sead::Matrix44<float> const&);
|
||||
void setModelProjMtx2(sead::Matrix44<float> const&);
|
||||
void setModelProgProjMtx0(sead::Matrix44<float> const&);
|
||||
void setModelProgProjMtx1(sead::Matrix44<float> const&);
|
||||
void setModelProgProjMtx2(sead::Matrix44<float> const&);
|
||||
void setModelProgProjMtx3(sead::Matrix44<float> const&);
|
||||
void setModelProgConstant0(float);
|
||||
void setModelProgConstant1(float);
|
||||
void setModelProgConstant2(float);
|
||||
void setModelProgConstant3(float);
|
||||
void setModelProgConstant4(float);
|
||||
void setModelProgConstant5(float);
|
||||
void setModelProgConstant6(float);
|
||||
void setModelProgConstant7(float);
|
||||
void setNormalAxisXScale(float);
|
||||
void calcCameraToBoundingSphereDistance() const;
|
||||
void isUseLocalShadowMap() const;
|
||||
void validateOcclusionQuery();
|
||||
void invalidateOcclusionQuery();
|
||||
void isValidOcclusionQuery() const;
|
||||
void createUniqShader();
|
||||
void isCreateUniqShader(int);
|
||||
void getUniqModelShader(int);
|
||||
void getUniqModelShaderAssgin(int);
|
||||
void pushDisplayListModel(agl::DisplayList*);
|
||||
void pushDisplayListShape(agl::DisplayList*, int);
|
||||
void getModelShapeCtrl(int) const;
|
||||
void initResource(al::Resource*, al::Resource*);
|
||||
void initModel(al::GpuMemAllocator*, al::ModelShaderHolder*, al::ModelOcclusionCullingDirector*, al::ShadowDirector*, al::PrepassTriangleCulling*, int, int);
|
||||
void tryCreateCulledIndexBuffer();
|
||||
void show();
|
||||
void hide();
|
||||
void calc(sead::Matrix34f const&, sead::Vector3f const&);
|
||||
void calcView();
|
||||
void calcModelObjBoundingWithOffset(nn::g3d::Sphere*) const;
|
||||
void setCameraInfo(sead::Matrix34f const*, sead::Matrix34f const*, sead::Matrix44<float> const*, sead::Matrix44<float> const*);
|
||||
void getShapeObj(int) const;
|
||||
|
||||
};
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/resource/ActorResource.h"
|
||||
#include "math/seadMatrix.h"
|
||||
#include "types.h"
|
||||
#include "ModelCtrl.h"
|
||||
|
||||
namespace al {
|
||||
struct ModelLodCtrl;
|
||||
struct DitherAnimator;
|
||||
struct GpuMemAllocator;
|
||||
struct ModelShaderHolder;
|
||||
struct ModelOcclusionCullingDirector;
|
||||
struct ShadowDirector;
|
||||
struct PrepassTriangleCulling;
|
||||
}
|
||||
|
||||
namespace al {
|
||||
class ModelKeeper {
|
||||
public:
|
||||
ModelKeeper();
|
||||
virtual ~ModelKeeper();
|
||||
void initResource(al::ActorResource const*);
|
||||
void createMatAnimForProgram(int);
|
||||
void getAnimResource() const;
|
||||
void getModelResource() const;
|
||||
void setDisplayRootJointMtxPtr(sead::Matrix34f const*);
|
||||
void setModelLodCtrl(al::ModelLodCtrl*);
|
||||
void setDitherAnimator(al::DitherAnimator*);
|
||||
void initModel(int, al::GpuMemAllocator*, al::ModelShaderHolder*, al::ModelOcclusionCullingDirector*, al::ShadowDirector*, al::PrepassTriangleCulling*);
|
||||
void show();
|
||||
void hide();
|
||||
void update();
|
||||
void updateLast();
|
||||
void calc(sead::Matrix34f const&, sead::Vector3f const&);
|
||||
void getBaseMtx() const;
|
||||
void getWorldMtxPtrByIndex(int) const;
|
||||
|
||||
const char *mResourceName;
|
||||
al::ModelCtrl *mModelCtrl;
|
||||
const al::ActorResource *mResource;
|
||||
char gap20[67];
|
||||
bool field_63;
|
||||
|
||||
};
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include "ModelCtrl.h"
|
||||
#include "al/byaml/ByamlIter.h"
|
||||
|
||||
namespace al {
|
||||
struct MaterialCategoryKeeper;
|
||||
|
||||
class ModelMaterialCategory {
|
||||
public:
|
||||
ModelMaterialCategory(al::ModelCtrl*, al::MaterialCategoryKeeper*);
|
||||
void init(char const*);
|
||||
void init(al::ByamlIter const&);
|
||||
void getCategoryIdFromMaterialName(char const*) const;
|
||||
void getCategoryIdFromMaterialIndex(int) const;
|
||||
static void tryCreate(al::ModelCtrl*, al::Resource const*, char const*, al::MaterialCategoryKeeper*);
|
||||
static void tryCreate(al::ModelCtrl*, char const*, al::MaterialCategoryKeeper*);
|
||||
};
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
class PartsModel : public al::LiveActor {
|
||||
public:
|
||||
PartsModel(char const*);
|
||||
void endClipped() override;
|
||||
void calcAnim() override;
|
||||
void attackSensor(al::HitSensor*, al::HitSensor*) override;
|
||||
bool receiveMsg(al::SensorMsg const*, al::HitSensor*, al::HitSensor*) override;
|
||||
|
||||
void initPartsDirect(al::LiveActor*, al::ActorInitInfo const&, char const*, sead::Matrix34f const*, sead::Vector3f const&, sead::Vector3f const&, sead::Vector3f const&, bool);
|
||||
void initPartsSuffix(al::LiveActor*, al::ActorInitInfo const&, char const*, char const*, sead::Matrix34f const*, bool);
|
||||
void initPartsMtx(al::LiveActor*, al::ActorInitInfo const&, char const*, sead::Matrix34f const*, bool);
|
||||
void initPartsFixFile(al::LiveActor*, al::ActorInitInfo const&, char const*, char const*, char const*);
|
||||
void initPartsFixFileNoRegister(al::LiveActor*, al::ActorInitInfo const&, char const*,
|
||||
char const*, char const*);
|
||||
|
||||
void updatePose();
|
||||
void offSyncAppearAndHide();
|
||||
void onSyncAppearAndHide();
|
||||
|
||||
void *unkPtr1; // 0x108
|
||||
void* unkPtr2; // 0x110
|
||||
int unkInt1; // 0x118
|
||||
int unkInt2; // 0x11C
|
||||
int unkInt3; // 0x120
|
||||
int unkInt4; // 0x124
|
||||
int unkInt5; // 0x128
|
||||
int unkInt6; // 0x12C
|
||||
int unkInt7; // 0x130
|
||||
float unkFloat1; // 0x134
|
||||
float unkFloat2; // 0x138
|
||||
float unkFloat3; // 0x13C
|
||||
bool unkBool; // 0x140
|
||||
bool unkBool2; // 0x141
|
||||
bool unkBool3; // 0x142
|
||||
};
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
#pragma once
|
||||
|
||||
#include "prim/seadSafeString.h"
|
||||
#include "types.h"
|
||||
#include "Resource.h"
|
||||
|
||||
namespace al {
|
||||
|
||||
class AnimInfoTable { char size[0x18]; };
|
||||
|
||||
struct InitResourceDataAnim {
|
||||
al::AnimInfoTable *mInfoTable; // 0x0
|
||||
al::AnimInfoTable *mFclAnim; // 0x8
|
||||
al::AnimInfoTable *mFtsAnim; // 0x10
|
||||
al::AnimInfoTable *mFtpAnim; // 0x18
|
||||
al::AnimInfoTable *mInfoTable2; // 0x18
|
||||
};
|
||||
|
||||
class ActorResource {
|
||||
public:
|
||||
ActorResource(sead::SafeString const&, al::Resource*, al::Resource*);
|
||||
virtual ~ActorResource();
|
||||
|
||||
void initResourceData(char const*, bool);
|
||||
|
||||
sead::FixedSafeString<0x80> unkStr; // 0x8
|
||||
al::Resource *mResourceModel; // 0xA0
|
||||
al::Resource *mResourceAnim; // 0xA8
|
||||
bool unkBool1; // 0xB0
|
||||
al::InitResourceDataAnim *mAnimResData; // 0xB8
|
||||
void *unkPtr2; // 0xC0
|
||||
};
|
||||
}
|
||||
|
||||
static_assert(sizeof(al::ActorResource) == 0xC8, "ActorResource Size");
|
|
@ -0,0 +1,20 @@
|
|||
#pragma once
|
||||
|
||||
#include "Resource.h"
|
||||
#include "types.h"
|
||||
|
||||
namespace al {
|
||||
class ActorResourceHolder {
|
||||
|
||||
ActorResourceHolder(int);
|
||||
~ActorResourceHolder();
|
||||
|
||||
void tryFindActorResource(sead::SafeString const&);
|
||||
void findActorResourceImpl(sead::SafeString const&);
|
||||
void createActorResource(sead::SafeString const&, al::Resource*, al::Resource*);
|
||||
void removeAll();
|
||||
void eraseResourceUser(al::Resource*);
|
||||
void freeErasedActorResource();
|
||||
|
||||
};
|
||||
}
|
|
@ -0,0 +1,48 @@
|
|||
#pragma once
|
||||
|
||||
#include <heap/seadHeap.h>
|
||||
#include <prim/seadSafeString.h>
|
||||
#include <resource/seadArchiveRes.h>
|
||||
#include <filedevice/seadArchiveFileDevice.h>
|
||||
|
||||
#include "nn/g3d/g3d_ResFile.h"
|
||||
|
||||
namespace al {
|
||||
class Resource {
|
||||
public:
|
||||
Resource(sead::SafeString const&);
|
||||
Resource(sead::SafeString const&, sead::ArchiveRes*);
|
||||
|
||||
bool isExistFile(sead::SafeString const&) const;
|
||||
bool isExistByml(char const*) const;
|
||||
|
||||
int getSize() const;
|
||||
|
||||
int getEntryNum(sead::SafeString const&) const;
|
||||
const char *getEntryName(sead::BufferedSafeString*, sead::SafeString const&, unsigned int) const;
|
||||
|
||||
void getFileSize(sead::SafeString const&) const;
|
||||
void getByml(sead::SafeString const&) const;
|
||||
void getFile(sead::SafeString const&) const;
|
||||
void tryGetByml(sead::SafeString const&) const;
|
||||
void getKcl(sead::SafeString const&) const;
|
||||
void tryGetKcl(sead::SafeString const&) const;
|
||||
void getPa(sead::SafeString const&) const;
|
||||
void tryGetPa(sead::SafeString const&) const;
|
||||
void getOtherFile(sead::SafeString const&) const;
|
||||
const char* getArchiveName() const;
|
||||
|
||||
bool tryCreateResGraphicsFile(sead::SafeString const&, nn::g3d::ResFile*);
|
||||
void cleanupResGraphicsFile();
|
||||
|
||||
sead::ArchiveRes* mArc; // 0x0
|
||||
sead::ArchiveFileDevice *mFileDevice; // 0x8
|
||||
sead::FixedSafeString<0x80> mArcName; // 0x10
|
||||
sead::Heap* mCurrentHeap; // 0xA8
|
||||
void *unkPtr; // 0xB0
|
||||
nn::g3d::ResFile *mResGfxFile; // 0xB8
|
||||
|
||||
};
|
||||
} // namespace al
|
||||
|
||||
static_assert(sizeof(al::Resource) == 0xC0, "al::Resource Size");
|
|
@ -5,11 +5,19 @@
|
|||
#include "al/audio/AudioKeeper.h"
|
||||
#include "al/camera/CameraDirector.h"
|
||||
#include "al/scene/SceneObjHolder.h"
|
||||
#include "prim/seadSafeString.h"
|
||||
|
||||
namespace al
|
||||
{
|
||||
|
||||
class GraphicsInitArg;
|
||||
class StageResourceKeeper;
|
||||
class LiveActorKit;
|
||||
class LayoutKit;
|
||||
class SceneStopCtrl;
|
||||
class SceneMsgCtrl;
|
||||
class ScreenCoverCtrl;
|
||||
class AudioDirector;
|
||||
|
||||
class Scene : public al::NerveExecutor, public al::IUseAudioKeeper, public al::IUseCamera, public al::IUseSceneObjHolder
|
||||
{
|
||||
|
@ -32,6 +40,17 @@ namespace al
|
|||
|
||||
void initLiveActorKitWithGraphics(al::GraphicsInitArg const &, al::SceneInitInfo const &, int, int, int);
|
||||
|
||||
unsigned char _28[0xD8-0x28];
|
||||
bool mIsAlive;
|
||||
sead::FixedSafeString<0x40> mName;
|
||||
al::StageResourceKeeper *mStageResourceKeeper;
|
||||
al::LiveActorKit *mActorKit;
|
||||
al::LayoutKit *mLayoutKit;
|
||||
al::SceneObjHolder *mSceneObjHolder;
|
||||
al::SceneStopCtrl *mSceneStopCtrl;
|
||||
al::SceneMsgCtrl *mSceneMsgCtrl;
|
||||
al::ScreenCoverCtrl *mScreenCoverCtrl;
|
||||
al::AudioDirector *mAudioDirector;
|
||||
al::AudioKeeper *mAudioKeeper;
|
||||
al::NerveKeeper *mNerveKeeper;
|
||||
};
|
||||
};
|
|
@ -8,6 +8,6 @@ namespace al
|
|||
{
|
||||
public:
|
||||
virtual al::SceneCreator* getSceneCreator() const = 0;
|
||||
virtual al::SceneCreator* setSceneCreator() const = 0;
|
||||
virtual void setSceneCreator(al::SceneCreator* ) = 0;
|
||||
};
|
||||
};
|
|
@ -0,0 +1,89 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/scene/ISceneObj.h"
|
||||
#include "al/scene/SceneObjHolder.h"
|
||||
#include "SceneObjs.h"
|
||||
|
||||
al::ISceneObj *sub_4C4300(int objIndex) {
|
||||
switch (objIndex)
|
||||
{
|
||||
case 0:
|
||||
return new AmiiboNpcDirector();
|
||||
case 1:
|
||||
return new BgmAnimeSyncDirector();
|
||||
case 3:
|
||||
return new CapManHeroDemoDirector();
|
||||
case 4:
|
||||
return new CapMessageDirector();
|
||||
case 5:
|
||||
return new CapMessageMoonNotifier();
|
||||
case 7:
|
||||
return new CoinCollectHolder();
|
||||
case 8:
|
||||
return new CoinCollectWatcher();
|
||||
case 9:
|
||||
return new CollectBgmPlayer();
|
||||
case 11:
|
||||
return new EchoEmitterHolder();
|
||||
case 12:
|
||||
return new ElectricWireCameraTicketHolder();
|
||||
case 17:
|
||||
return new FukankunZoomObjHolder();
|
||||
case 21:
|
||||
return new GrowPlantDirector();
|
||||
case 22:
|
||||
return new GuidePosInfoHolder();
|
||||
case 23:
|
||||
return new HintPhotoLayoutHolder();
|
||||
case 26:
|
||||
return new HtmlViewerRequester();
|
||||
case 29:
|
||||
return new KidsModeLayoutAccessor();
|
||||
case 34:
|
||||
return new LoginLotteryDirector();
|
||||
case 36:
|
||||
return new MoviePlayer();
|
||||
case 39:
|
||||
return new PaintObjHolder();
|
||||
case 42:
|
||||
return new PlayerStartInfoHolder();
|
||||
case 44:
|
||||
return new QuestInfoHolder(64);
|
||||
case 49:
|
||||
return new RandomItemSelector();
|
||||
case 52:
|
||||
return nullptr;
|
||||
case 53:
|
||||
return new RhyhtmInfoWatcher("");
|
||||
case 55:
|
||||
return new RouteGuideDirector();
|
||||
case 56:
|
||||
return new SceneEventNotifier();
|
||||
case 60:
|
||||
return new al::StageSyncCounter();
|
||||
case 62:
|
||||
return new TalkNpcParamHolder();
|
||||
case 63:
|
||||
return new TalkNpcSceneEventSwitcher();
|
||||
case 64:
|
||||
return new TestStageTimeDirector();
|
||||
case 65:
|
||||
return new TimeBalloonDirector();
|
||||
case 70:
|
||||
return new TsukkunTraceHolder();
|
||||
case 71:
|
||||
return new WipeHolderRequester();
|
||||
case 72:
|
||||
return new YoshiFruitWatcher();
|
||||
case 73:
|
||||
return new HelpAmiiboDirector();
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
class SceneObjFactory {
|
||||
public:
|
||||
al::SceneObjHolder *createSceneObjHolder(void) { return new al::SceneObjHolder(&sub_4C4300, 0x4A);}
|
||||
};
|
||||
|
|
@ -4,9 +4,11 @@
|
|||
|
||||
namespace al {
|
||||
|
||||
typedef al::ISceneObj* (*SceneObjCreator)(int);
|
||||
|
||||
class SceneObjHolder {
|
||||
public:
|
||||
SceneObjHolder(al::ISceneObj* (*)(int), int);
|
||||
SceneObjHolder(SceneObjCreator, int);
|
||||
|
||||
ISceneObj *tryGetObj(int) const; // unsafe get still
|
||||
void setSceneObj(al::ISceneObj *,int);
|
||||
|
@ -15,8 +17,14 @@ namespace al {
|
|||
ISceneObj *getObj(int) const;
|
||||
void create(int);
|
||||
|
||||
SceneObjCreator mObjCreator;
|
||||
al::ISceneObj **mSceneObjs;
|
||||
int mMaxObjCount;
|
||||
|
||||
};
|
||||
|
||||
static_assert(sizeof(SceneObjHolder) == 0x18, "SceneObjHolder Size");
|
||||
|
||||
class IUseSceneObjHolder
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -0,0 +1,179 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/scene/ISceneObj.h"
|
||||
#include "al/scene/SceneObjHolder.h"
|
||||
#include "game/SceneObjs/RouteGuideDirector.h"
|
||||
|
||||
// temp header to cleanup SceneObjFactory
|
||||
|
||||
namespace al {
|
||||
struct StageSyncCounter : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
}
|
||||
|
||||
struct AmiiboNpcDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct BgmAnimeSyncDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct CapManHeroDemoDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct CapMessageDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct CapMessageMoonNotifier : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct CoinCollectHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct CoinCollectWatcher : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct CollectBgmPlayer : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct EchoEmitterHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct ElectricWireCameraTicketHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct FukankunZoomObjHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct GrowPlantDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct GuidePosInfoHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct HintPhotoLayoutHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct HtmlViewerRequester : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct KidsModeLayoutAccessor : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct LoginLotteryDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct MoviePlayer : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct PaintObjHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct PlayerStartInfoHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct RandomItemSelector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct SceneEventNotifier : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct TalkNpcParamHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct TalkNpcSceneEventSwitcher : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct TestStageTimeDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct TimeBalloonDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct TsukkunTraceHolder : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct WipeHolderRequester : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct YoshiFruitWatcher : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct HelpAmiiboDirector : public al::ISceneObj {
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
|
||||
struct QuestInfoHolder : public al::ISceneObj {
|
||||
QuestInfoHolder(int);
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
||||
struct RhyhtmInfoWatcher : public al::ISceneObj {
|
||||
RhyhtmInfoWatcher(const char*);
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
|
@ -1,7 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
#include "types.h"
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "al/sensor/SensorHitGroup.h"
|
||||
#include "sead/math/seadVector.h"
|
||||
#include "sead/math/seadMatrix.h"
|
||||
|
@ -9,6 +8,9 @@
|
|||
|
||||
namespace al
|
||||
{
|
||||
|
||||
class LiveActor;
|
||||
|
||||
class HitSensorKeeper
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -1,12 +1,61 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/audio/AudioDirector.h"
|
||||
#include "al/nerve/NerveExecutor.h"
|
||||
#include "al/audio/AudioKeeper.h"
|
||||
#include "al/scene/SceneCreator.h"
|
||||
#include "game/System/GameDrawInfo.h"
|
||||
|
||||
namespace al {
|
||||
|
||||
class GameSystemInfo;
|
||||
class SequenceInitInfo;
|
||||
class AudioSystemInfo;
|
||||
class Scene;
|
||||
|
||||
class Sequence : public al::NerveExecutor, public al::IUseAudioKeeper, public al::IUseSceneCreator {
|
||||
public:
|
||||
Sequence(const char *seqName);
|
||||
Sequence(const char* name);
|
||||
virtual ~Sequence() override;
|
||||
virtual void init(const al::SequenceInitInfo& initInfo);
|
||||
virtual void update();
|
||||
virtual void kill();
|
||||
virtual void drawMain() const;
|
||||
virtual void drawSub() const;
|
||||
virtual bool isDisposable() { return false; }
|
||||
al::Scene* getCurrentScene() const;
|
||||
al::SceneCreator* getSceneCreator() const override;
|
||||
void setSceneCreator(al::SceneCreator* sceneCreator) override;
|
||||
|
||||
al::AudioKeeper* getAudioKeeper() const override;
|
||||
void initAudio(const al::GameSystemInfo&, const char*, int, int, int, const char*);
|
||||
void initAudioKeeper(const char*);
|
||||
void initDrawSystemInfo(const al::SequenceInitInfo&);
|
||||
al::AudioSystemInfo* getAudioSystemInfo();
|
||||
|
||||
al::GameDrawInfo* getDrawInfo() const {
|
||||
return mGameDrawInfo;
|
||||
}
|
||||
|
||||
al::AudioDirector* getAudioDirector() const {
|
||||
return mAudioDirector;
|
||||
}
|
||||
|
||||
void setNextScene(al::Scene* scene) {
|
||||
mNextScene = scene;
|
||||
}
|
||||
|
||||
const sead::SafeString& getName() const {
|
||||
return mName;
|
||||
}
|
||||
|
||||
const sead::FixedSafeString<0x40> mName;
|
||||
al::Scene* mNextScene;
|
||||
al::Scene* mCurrentScene;
|
||||
al::SceneCreator* mSceneCreator;
|
||||
al::AudioDirector* mAudioDirector;
|
||||
al::AudioKeeper* mAudioKeeper;
|
||||
al::GameDrawInfo* mGameDrawInfo;
|
||||
bool mIsAlive;
|
||||
};
|
||||
}
|
|
@ -10,6 +10,7 @@
|
|||
#include "al/util/MathUtil.h"
|
||||
#include "al/util/NerveUtil.h"
|
||||
#include "al/util/CameraUtil.h"
|
||||
#include "al/util/KitUtil.h"
|
||||
|
||||
namespace al
|
||||
{
|
||||
|
@ -72,6 +73,9 @@ namespace al
|
|||
PlayerActorBase *tryGetPlayerActor(al::PlayerHolder const *, int);
|
||||
|
||||
sead::Heap *getCurrentHeap(void);
|
||||
sead::Heap* getStationedHeap();
|
||||
sead::Heap* getSequenceHeap();
|
||||
sead::Heap* getSceneHeap();
|
||||
|
||||
al::Projection *getProjection(al::IUseCamera const *, int);
|
||||
|
||||
|
@ -242,7 +246,7 @@ namespace al
|
|||
bool tryGetByamlColor(sead::Color4f *,al::ByamlIter const&);
|
||||
bool tryGetByamlColor(sead::Color4f *,al::ByamlIter const&,char const*);
|
||||
bool tryGetByamlBool(bool *,al::ByamlIter const&,char const*);
|
||||
bool tryGetByamlKeyStringOrNULL(al::ByamlIter const&,char const*);
|
||||
const char * tryGetByamlKeyStringOrNULL(al::ByamlIter const&,char const*);
|
||||
bool tryGetByamlKeyIntOrZero(al::ByamlIter const&,char const*);
|
||||
bool tryGetByamlKeyU32OrZero(al::ByamlIter const&,char const*);
|
||||
bool tryGetByamlKeyFloatOrZero(al::ByamlIter const&,char const*);
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/scene/Scene.h"
|
||||
|
||||
namespace al {
|
||||
|
||||
class LayoutKit;
|
||||
class LiveActorKit;
|
||||
|
||||
void updateKitList(al::Scene *,char const*,char const*);
|
||||
void updateKitList(al::Scene*, char const*);
|
||||
|
||||
void executeUpdateList(al::LayoutKit *,char const*,char const*);
|
||||
void executeUpdateList(al::LiveActorKit*, char const*, char const*);
|
||||
|
||||
void executeDrawList(al::LiveActorKit const*,char const*,char const*);
|
||||
}
|
|
@ -7,6 +7,7 @@
|
|||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "al/async/FunctorBase.h"
|
||||
#include "al/collision/Collider.h"
|
||||
#include "game/Player/PlayerActorBase.h"
|
||||
#include "game/Player/PlayerActorHakoniwa.h"
|
||||
#include "al/layout/LayoutActor.h"
|
||||
#include "al/layout/LayoutInitInfo.h"
|
||||
|
@ -25,11 +26,14 @@ namespace al {
|
|||
void onSyncClippingSubActor(LiveActor*, const LiveActor*);
|
||||
void onSyncHideSubActor(LiveActor*, const LiveActor*);
|
||||
void onSyncAlphaMaskSubActor(LiveActor*, const LiveActor*);
|
||||
void onSyncAppearSubActor(al::LiveActor *,al::LiveActor const*);
|
||||
void onSyncAppearSubActor(al::LiveActor *,char const*);
|
||||
void onSyncAppearSubActorAll(al::LiveActor *);
|
||||
void setMaterialProgrammable(LiveActor*);
|
||||
void startAction(LiveActor*, char const*);
|
||||
void startAction(IUseLayoutAction*, const char *, const char *);
|
||||
void startFreezeActionEnd(IUseLayoutAction *,char const*,char const*);
|
||||
void startHitReaction(LiveActor*, char const*);
|
||||
void startHitReaction(const LiveActor *, char const*);
|
||||
void invalidateClipping(const LiveActor *);
|
||||
void validateClipping(const LiveActor *);
|
||||
void setNerveAtActionEnd(LiveActor*, const al::Nerve*);
|
||||
|
@ -40,6 +44,8 @@ namespace al {
|
|||
void turnToTarget(LiveActor*, const al::LiveActor *, float);
|
||||
|
||||
void expandClippingRadiusByShadowLength(LiveActor *,sead::Vector3f *, float);
|
||||
void addPartialSklAnimPartsListRecursive(al::LiveActor*, char const*, int);
|
||||
void setMaterialProgrammable(al::LiveActor *);
|
||||
|
||||
void initJointLocalXRotator(const LiveActor *,const float *,const char *);
|
||||
void initJointLocalYRotator(const LiveActor *,const float *,const char *);
|
||||
|
@ -55,7 +61,23 @@ namespace al {
|
|||
void initActorPoseTQGSV(al::LiveActor *);
|
||||
void initActorPoseTQGMSV(al::LiveActor *);
|
||||
void initActorPoseT(al::LiveActor *,sead::Vector3<float> const&);
|
||||
void initActorPoseTR(al::LiveActor *,sead::Vector3<float> const&,sead::Vector3<float> const&);
|
||||
void initActorPoseTR(al::LiveActor*, sead::Vector3<float> const&, sead::Vector3<float> const&);
|
||||
|
||||
void initActorSRT(al::LiveActor*, al::ActorInitInfo const&);
|
||||
void initActorSceneInfo(al::LiveActor *, al::ActorInitInfo const&);
|
||||
void initActorModelKeeper(al::LiveActor *,al::ActorInitInfo const&,al::ActorResource const*,int);
|
||||
void initActorModelKeeper(al::LiveActor*, al::ActorInitInfo const&, char const*, int,
|
||||
char const*);
|
||||
void initActorEffectKeeper(al::LiveActor*, al::ActorInitInfo const&, char const*);
|
||||
void initActorActionKeeper(al::LiveActor *,al::ActorInitInfo const&,char const*,char const*);
|
||||
void initActorActionKeeper(al::LiveActor*, al::ActorResource const*, char const*, char const*);
|
||||
void initActorClipping(al::LiveActor *,al::ActorInitInfo const&);
|
||||
void initPartialSklAnim(al::LiveActor*, int, int, int);
|
||||
|
||||
bool tryGetActorInitFileIterAndName(al::ByamlIter *,sead::BufferedSafeStringBase<char> *,al::Resource const*,char const*,char const*);
|
||||
bool tryGetActorInitFileIter(al::ByamlIter *,al::Resource const*,char const*,char const*);
|
||||
bool tryGetActorInitFileIterAndName(al::ByamlIter *,sead::BufferedSafeStringBase<char> *,al::LiveActor const*,char const*,char const*);
|
||||
bool tryGetActorInitFileIter(al::ByamlIter *,al::LiveActor const*,char const*,char const*);
|
||||
|
||||
void initLayoutPartsActor(LayoutActor*, LayoutActor*, const LayoutInitInfo&, char const*,
|
||||
char const*);
|
||||
|
@ -91,7 +113,7 @@ namespace al {
|
|||
|
||||
bool tryOnSwitchDeadOn(IUseStageSwitch *);
|
||||
bool trySyncStageSwitchAppear(LiveActor *);
|
||||
PlayerActorHakoniwa* tryFindNearestPlayerActor(const LiveActor *);
|
||||
PlayerActorBase* tryFindNearestPlayerActor(const LiveActor *);
|
||||
bool tryFindNearestPlayerPos(sead::Vector3f *, const LiveActor *);
|
||||
bool tryAddRippleMiddle(LiveActor*);
|
||||
bool tryStartActionIfNotPlaying(LiveActor*, const char*);
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "al/resource/ActorResourceHolder.h"
|
||||
#include "al/resource/ActorResource.h"
|
||||
|
||||
namespace al {
|
||||
|
||||
al::ActorResource *findOrCreateActorResource(al::ActorResourceHolder *,char const*,char const*);
|
||||
al::ActorResource* findOrCreateActorResourceWithAnimResource(al::ActorResourceHolder*,
|
||||
char const*, char const*,
|
||||
char const*, bool);
|
||||
|
||||
al::Resource *getModelResource(al::LiveActor const*);
|
||||
al::Resource *getModelResourceYaml(al::LiveActor const*,char const*,char const*);
|
||||
|
||||
}
|
|
@ -0,0 +1,480 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/sensor/HitSensor.h"
|
||||
#include "al/sensor/HitSensorKeeper.h"
|
||||
#include "al/sensor/SensorHitGroup.h"
|
||||
|
||||
#include "al/LiveActor/LiveActor.h" // for SensorMsg
|
||||
|
||||
#include <math/seadVector.h>
|
||||
|
||||
struct SaveObjInfo;
|
||||
struct HackEndParam;
|
||||
struct IUsePlayerCollision;
|
||||
struct IUsePlayerHack;
|
||||
|
||||
struct DigPoint;
|
||||
struct TouchTargetInfo;
|
||||
struct WhipTargetInfo;
|
||||
struct CapTargetInfo;
|
||||
struct GotogotonMark;
|
||||
struct FishingFish;
|
||||
|
||||
typedef unsigned int uint;
|
||||
|
||||
namespace al
|
||||
{
|
||||
|
||||
struct ComboCounter;
|
||||
struct EventFlowExecutor;
|
||||
struct ParabolicPath;
|
||||
|
||||
sead::Vector3f *getSensorPos(al::HitSensor const *);
|
||||
sead::Vector3f* getActorTrans(al::HitSensor const*);
|
||||
|
||||
bool tryReceiveMsgPushAndAddVelocity(al::LiveActor*, al::SensorMsg const*, al::HitSensor const*,
|
||||
al::HitSensor const*, float);
|
||||
|
||||
bool isSensorTypeYoshiEnableSendPush(al::HitSensor const*);
|
||||
bool isSensorTypeYoshiMsgReceivable(al::HitSensor const*);
|
||||
bool isSensorValid(al::HitSensor const*);
|
||||
bool isSensorName(al::HitSensor const*, char const*);
|
||||
bool isSensorHostName(al::HitSensor const*, char const*);
|
||||
bool isSensorHost(al::HitSensor const*, al::LiveActor const*);
|
||||
bool isSensorValid(al::LiveActor const*, char const*);
|
||||
bool isSensorBindableAll(al::HitSensor const*);
|
||||
bool isSensorEnemy(al::HitSensor const*);
|
||||
bool isSensorEnemyAttack(al::HitSensor const*);
|
||||
bool isSensorEnemyBody(al::HitSensor const*);
|
||||
bool isSensorEye(al::HitSensor const*);
|
||||
bool isSensorMapObj(al::HitSensor const*);
|
||||
bool isSensorNpc(al::HitSensor const*);
|
||||
bool isSensorPlayerAll(al::HitSensor const*);
|
||||
bool isSensorRide(al::HitSensor const*);
|
||||
bool isSensorPlayerAttack(al::HitSensor const*);
|
||||
bool isSensorPlayer(al::HitSensor const*);
|
||||
bool isSensorPlayerFoot(al::HitSensor const*);
|
||||
bool isSensorPlayerDecoration(al::HitSensor const*);
|
||||
bool isSensorPlayerEye(al::HitSensor const*);
|
||||
bool isSensorPlayerOrPlayerWeapon(al::HitSensor const*);
|
||||
bool isSensorCollision(al::HitSensor const*);
|
||||
bool isSensorPlayerFireBall(al::HitSensor const*);
|
||||
bool isSensorHoldObj(al::HitSensor const*);
|
||||
bool isSensorLookAt(al::HitSensor const*);
|
||||
bool isSensorBindableGoal(al::HitSensor const*);
|
||||
bool isSensorBindableAllPlayer(al::HitSensor const*);
|
||||
bool isSensorBindableBubbleOutScreen(al::HitSensor const*);
|
||||
bool isSensorBindableKoura(al::HitSensor const*);
|
||||
bool isSensorBindableRouteDokan(al::HitSensor const*);
|
||||
bool isSensorBindableBubblePadInput(al::HitSensor const*);
|
||||
bool isSensorBindable(al::HitSensor const*);
|
||||
bool isSensorSimple(al::HitSensor const*);
|
||||
bool isSensorHitAnyPlane(al::HitSensor const*,al::HitSensor const*, sead::Vector3<float> const&);
|
||||
bool isSensorHitRingShape(al::HitSensor const*, al::HitSensor const*, float);
|
||||
|
||||
bool isMsgRequestPlayerStainWet(al::SensorMsg const *, int *);
|
||||
bool isMsgPushAll(al::SensorMsg const *);
|
||||
bool isMsgPush(al::SensorMsg const *);
|
||||
bool isMsgPushStrong(al::SensorMsg const *);
|
||||
bool isMsgPushVeryStrong(al::SensorMsg const *);
|
||||
bool isMsgHoldReleaseAll(al::SensorMsg const *);
|
||||
bool isMsgHoldCancel(al::SensorMsg const *);
|
||||
bool isMsgPlayerRelease(al::SensorMsg const *);
|
||||
bool isMsgPlayerReleaseBySwing(al::SensorMsg const *);
|
||||
bool isMsgPlayerReleaseDead(al::SensorMsg const *);
|
||||
bool isMsgPlayerReleaseDamage(al::SensorMsg const *);
|
||||
bool isMsgPlayerReleaseDemo(al::SensorMsg const *);
|
||||
bool isMsgItemGetDirectAll(al::SensorMsg const *);
|
||||
bool isMsgPlayerItemGet(al::SensorMsg const *);
|
||||
bool isMsgRideAllPlayerItemGet(al::SensorMsg const *);
|
||||
bool isMsgPlayerTailAttack(al::SensorMsg const *);
|
||||
bool isMsgItemGetByObjAll(al::SensorMsg const *);
|
||||
bool isMsgBallItemGet(al::SensorMsg const *);
|
||||
bool isMsgKickKouraItemGet(al::SensorMsg const *);
|
||||
bool isMsgKillerItemGet(al::SensorMsg const *);
|
||||
bool isMsgItemGetAll(al::SensorMsg const *);
|
||||
bool isMsgFloorTouch(al::SensorMsg const *);
|
||||
bool isMsgPlayerFloorTouch(al::SensorMsg const *);
|
||||
bool isMsgEnemyFloorTouch(al::SensorMsg const *);
|
||||
bool isMsgUpperPunch(al::SensorMsg const *);
|
||||
bool isMsgPlayerUpperPunch(al::SensorMsg const *);
|
||||
bool isMsgEnemyUpperPunch(al::SensorMsg const *);
|
||||
bool isMsgPlayerTrample(al::SensorMsg const *);
|
||||
bool isMsgPlayerTrampleReflect(al::SensorMsg const *);
|
||||
bool isMsgPlayerHipDropAll(al::SensorMsg const *);
|
||||
bool isMsgPlayerStatueDrop(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjHipDropAll(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjStatueDrop(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjHipDropReflectAll(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjStatueDropReflect(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjHipDropHighJump(al::SensorMsg const *);
|
||||
bool isMsgPlayerHipDropKnockDown(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjStatueDropReflectNoCondition(al::SensorMsg const *);
|
||||
bool isMsgPlayerStatueTouch(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjUpperPunch(al::SensorMsg const *);
|
||||
bool isMsgPlayerRollingAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerRollingReflect(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjRollingAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjRollingAttackFailure(al::SensorMsg const *);
|
||||
bool isMsgPlayerInvincibleAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerFireBallAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerRouteDokanFireBallAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerKick(al::SensorMsg const *);
|
||||
bool isMsgPlayerCatch(al::SensorMsg const *);
|
||||
bool isMsgPlayerSlidingAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerBoomerangAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerBoomerangAttackCollide(al::SensorMsg const *);
|
||||
bool isMsgPlayerBoomerangReflect(al::SensorMsg const *);
|
||||
bool isMsgPlayerBoomerangBreak(al::SensorMsg const *);
|
||||
bool isMsgPlayerBodyAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerBodyLanding(al::SensorMsg const *);
|
||||
bool isMsgPlayerBodyAttackReflect(al::SensorMsg const *);
|
||||
bool isMsgPlayerClimbAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerSpinAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerGiantAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerCooperationHipDrop(al::SensorMsg const *);
|
||||
bool isMsgPlayerClimbSlidingAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerClimbRollingAttack(al::SensorMsg const *);
|
||||
bool isMsgPlayerGiantHipDrop(al::SensorMsg const *);
|
||||
bool isMsgPlayerDisregard(al::SensorMsg const *);
|
||||
bool isMsgPlayerDash(al::SensorMsg const *);
|
||||
bool isMsgPlayerDamageTouch(al::SensorMsg const *);
|
||||
bool isMsgPlayerFloorTouchBind(al::SensorMsg const *);
|
||||
bool isMsgPlayerTouch(al::SensorMsg const *);
|
||||
bool isMsgPlayerInvincibleTouch(al::SensorMsg const *);
|
||||
bool isMsgPlayerGiantTouch(al::SensorMsg const *);
|
||||
bool isMsgPlayerObjTouch(al::SensorMsg const *);
|
||||
bool isMsgPlayerPutOnEquipment(al::SensorMsg const *);
|
||||
bool isMsgPlayerReleaseEquipment(al::SensorMsg const *);
|
||||
bool isMsgPlayerReleaseEquipmentGoal(al::SensorMsg const *);
|
||||
bool isMsgPlayerCarryFront(al::SensorMsg const *);
|
||||
bool isMsgPlayerCarryFrontWallKeep(al::SensorMsg const *);
|
||||
bool isMsgPlayerCarryUp(al::SensorMsg const *);
|
||||
bool isMsgPlayerCarryKeepDemo(al::SensorMsg const *);
|
||||
bool isMsgPlayerCarryWarp(al::SensorMsg const *);
|
||||
bool isMsgPlayerLeave(al::SensorMsg const *);
|
||||
bool isMsgPlayerToss(al::SensorMsg const *);
|
||||
bool isMsgEnemyAttack(al::SensorMsg const *);
|
||||
bool isMsgEnemyAttackFire(al::SensorMsg const *);
|
||||
bool isMsgEnemyAttackKnockDown(al::SensorMsg const *);
|
||||
bool isMsgEnemyAttackBoomerang(al::SensorMsg const *);
|
||||
bool isMsgEnemyAttackNeedle(al::SensorMsg const *);
|
||||
bool isMsgEnemyItemGet(al::SensorMsg const *);
|
||||
bool isMsgEnemyRouteDokanAttack(al::SensorMsg const *);
|
||||
bool isMsgEnemyRouteDokanFire(al::SensorMsg const *);
|
||||
bool isMsgExplosion(al::SensorMsg const *);
|
||||
bool isMsgExplosionCollide(al::SensorMsg const *);
|
||||
bool isMsgBindStart(al::SensorMsg const *);
|
||||
bool isMsgBindInit(al::SensorMsg const *);
|
||||
bool isMsgBindEnd(al::SensorMsg const *);
|
||||
bool isMsgBindCancel(al::SensorMsg const *);
|
||||
bool isMsgBindCancelByDemo(al::SensorMsg const *);
|
||||
bool isMsgBindDamage(al::SensorMsg const *);
|
||||
bool isMsgBindSteal(al::SensorMsg const *);
|
||||
bool isMsgBindGiant(al::SensorMsg const *);
|
||||
bool isMsgPressureDeath(al::SensorMsg const *);
|
||||
bool isMsgNpcTouch(al::SensorMsg const *);
|
||||
bool isMsgHit(al::SensorMsg const *);
|
||||
bool isMsgHitStrong(al::SensorMsg const *);
|
||||
bool isMsgHitVeryStrong(al::SensorMsg const *);
|
||||
bool isMsgKnockDown(al::SensorMsg const *);
|
||||
bool isMsgMapPush(al::SensorMsg const *);
|
||||
bool isMsgVanish(al::SensorMsg const *);
|
||||
bool isMsgChangeAlpha(al::SensorMsg const *);
|
||||
bool isMsgShowModel(al::SensorMsg const *);
|
||||
bool isMsgHideModel(al::SensorMsg const *);
|
||||
bool isMsgRestart(al::SensorMsg const *);
|
||||
bool isMsgEnemyTouch(al::SensorMsg const *);
|
||||
bool isMsgEnemyTrample(al::SensorMsg const *);
|
||||
bool isMsgMapObjTrample(al::SensorMsg const *);
|
||||
bool isMsgNeedleBallAttack(al::SensorMsg const *);
|
||||
bool isMsgPunpunFloorTouch(al::SensorMsg const *);
|
||||
bool isMsgInvalidateFootPrint(al::SensorMsg const *);
|
||||
bool isMsgKickKouraAttack(al::SensorMsg const *);
|
||||
bool isMsgKickKouraAttackCollide(al::SensorMsg const *);
|
||||
bool isMsgKickKouraReflect(al::SensorMsg const *);
|
||||
bool isMsgKickKouraCollideNoReflect(al::SensorMsg const *);
|
||||
bool isMsgKickKouraBreak(al::SensorMsg const *);
|
||||
bool isMsgKickKouraBlow(al::SensorMsg const *);
|
||||
bool isMsgKickStoneAttack(al::SensorMsg const *);
|
||||
bool isMsgKickStoneAttackCollide(al::SensorMsg const *);
|
||||
bool isMsgKickStoneAttackHold(al::SensorMsg const *);
|
||||
bool isMsgKickStoneAttackReflect(al::SensorMsg const *);
|
||||
bool isMsgKickStoneTrample(al::SensorMsg const *);
|
||||
bool isMsgKillerAttack(al::SensorMsg const *);
|
||||
bool isMsgLiftGeyser(al::SensorMsg const *);
|
||||
bool isMsgWarpStart(al::SensorMsg const *);
|
||||
bool isMsgWarpEnd(al::SensorMsg const *);
|
||||
bool isMsgHoleIn(al::SensorMsg const *);
|
||||
bool isMsgJumpInhibit(al::SensorMsg const *);
|
||||
bool isMsgGoalKill(al::SensorMsg const *);
|
||||
bool isMsgGoal(al::SensorMsg const *);
|
||||
bool isMsgBallAttack(al::SensorMsg const *);
|
||||
bool isMsgBallRouteDokanAttack(al::SensorMsg const *);
|
||||
bool isMsgBallAttackHold(al::SensorMsg const *);
|
||||
bool isMsgBallAttackDRCHold(al::SensorMsg const *);
|
||||
bool isMsgBallAttackCollide(al::SensorMsg const *);
|
||||
bool isMsgBallTrample(al::SensorMsg const *);
|
||||
bool isMsgBallTrampleCollide(al::SensorMsg const *);
|
||||
bool isMsgFireBallCollide(al::SensorMsg const *);
|
||||
bool isMsgFireBallFloorTouch(al::SensorMsg const *);
|
||||
bool isMsgDokanBazookaAttack(al::SensorMsg const *);
|
||||
bool isMsgSwitchOn(al::SensorMsg const *);
|
||||
bool isMsgSwitchOnInit(al::SensorMsg const *);
|
||||
bool isMsgSwitchOffInit(al::SensorMsg const *);
|
||||
bool isMsgSwitchKillOn(al::SensorMsg const *);
|
||||
bool isMsgSwitchKillOnInit(al::SensorMsg const *);
|
||||
bool isMsgSwitchKillOffInit(al::SensorMsg const *);
|
||||
bool isMsgAskSafetyPoint(al::SensorMsg const *);
|
||||
bool isMsgTouchAssist(al::SensorMsg const *);
|
||||
bool isMsgTouchAssistNoPat(al::SensorMsg const *);
|
||||
bool isMsgTouchAssistTrig(al::SensorMsg const *);
|
||||
bool isMsgTouchAssistTrigOff(al::SensorMsg const *);
|
||||
bool isMsgTouchAssistTrigNoPat(al::SensorMsg const *);
|
||||
bool isMsgTouchAssistBurn(al::SensorMsg const *);
|
||||
bool isMsgTouchAssistAll(al::SensorMsg const *);
|
||||
bool isMsgTouchCarryItem(al::SensorMsg const *);
|
||||
bool isMsgTouchReleaseItem(al::SensorMsg const *);
|
||||
bool isMsgTouchStroke(al::SensorMsg const *);
|
||||
bool isMsgIsNerveSupportFreeze(al::SensorMsg const *);
|
||||
bool isMsgOnSyncSupportFreeze(al::SensorMsg const *);
|
||||
bool isMsgOffSyncSupportFreeze(al::SensorMsg const *);
|
||||
bool isMsgScreenPointInvalidCollisionParts(al::SensorMsg const *);
|
||||
bool isMsgBlockUpperPunch(al::SensorMsg const *);
|
||||
bool isMsgBlockLowerPunch(al::SensorMsg const *);
|
||||
bool isMsgBlockItemGet(al::SensorMsg const *);
|
||||
bool isMsgPlayerKouraAttack(al::SensorMsg const *);
|
||||
bool isMsgLightFlash(al::SensorMsg const *);
|
||||
bool isMsgForceAbyss(al::SensorMsg const *);
|
||||
bool isMsgSwordAttackHigh(al::SensorMsg const *);
|
||||
bool isMsgSwordAttackHighLeft(al::SensorMsg const *);
|
||||
bool isMsgSwordAttackHighRight(al::SensorMsg const *);
|
||||
bool isMsgSwordAttackLow(al::SensorMsg const *);
|
||||
bool isMsgSwordAttackLowLeft(al::SensorMsg const *);
|
||||
bool isMsgSwordAttackLowRight(al::SensorMsg const *);
|
||||
bool isMsgSwordBeamAttack(al::SensorMsg const *);
|
||||
bool isMsgSwordBeamReflectAttack(al::SensorMsg const *);
|
||||
bool isMsgSwordAttackJumpUnder(al::SensorMsg const *);
|
||||
bool isMsgShieldGuard(al::SensorMsg const *);
|
||||
bool isMsgAskMultiPlayerEnemy(al::SensorMsg const *);
|
||||
bool isMsgItemGettable(al::SensorMsg const *);
|
||||
bool isMsgKikkiThrow(al::SensorMsg const *);
|
||||
bool isMsgIsKikkiThrowTarget(al::SensorMsg const *);
|
||||
bool isMsgPlayerCloudGet(al::SensorMsg const *);
|
||||
bool isMsgAutoJump(al::SensorMsg const *);
|
||||
bool isMsgPlayerTouchShadow(al::SensorMsg const *);
|
||||
bool isMsgPlayerPullOutShadow(al::SensorMsg const *);
|
||||
bool isMsgPlayerAttackShadow(al::SensorMsg const *);
|
||||
bool isMsgPlayerAttackShadowStrong(al::SensorMsg const *);
|
||||
bool isMsgPlayerAttackChangePos(al::SensorMsg const *);
|
||||
bool isMsgAtmosOnlineLight(al::SensorMsg const *);
|
||||
bool isMsgLightBurn(al::SensorMsg const *);
|
||||
bool isMsgMoonLightBurn(al::SensorMsg const *);
|
||||
bool isMsgString(al::SensorMsg const *);
|
||||
bool isMsgStringV4fPtr(al::SensorMsg const *);
|
||||
bool isMsgStringV4fSensorPtr(al::SensorMsg const *);
|
||||
bool isMsgStringVoidPtr(al::SensorMsg const *);
|
||||
bool isMsgPlayerTrampleForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *);
|
||||
bool isMsgPlayerTrampleReflectForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *);
|
||||
bool isMsgPlayerUpperPunchForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *, float);
|
||||
bool isMsgKickStoneTrampleForCrossoverSensor(al::SensorMsg const *, al::HitSensor const *, al::HitSensor const *);
|
||||
|
||||
bool sendMsgPlayerAttackTrample(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerTrampleReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerReflectOrTrample(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerObjHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerObjHipDropReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerObjHipDropHighJump(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerHipDropKnockDown(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerStatueDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerObjStatueDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerObjStatueDropReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerObjStatueDropReflectNoCondition(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerStatueTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerUpperPunch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerObjUpperPunch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerRollingAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerRollingReflect(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerObjRollingAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerObjRollingAttackFailure(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerInvincibleAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerFireBallAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerRouteDokanFireBallAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerTailAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerKick(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerCatch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerSlidingAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerBoomerangAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerBoomerangAttackCollide(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerBoomerangReflect(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerBoomerangBreak(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerBodyAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerBodyLanding(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerBodyAttackReflect(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerClimbAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerSpinAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerGiantAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerCooperationHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerClimbSlidingAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerClimbRollingAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerGiantHipDrop(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPlayerDisregard(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerItemGet(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerPutOnEquipment(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerReleaseEquipment(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerReleaseEquipmentGoal(al::HitSensor *, al::HitSensor *, uint);
|
||||
bool sendMsgPlayerFloorTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerDamageTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerCarryFront(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerCarryFrontWallKeep(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerCarryUp(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerCarryKeepDemo(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerCarryWarp(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerLeave(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerRelease(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerReleaseBySwing(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerReleaseDamage(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerReleaseDead(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerReleaseDemo(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerToss(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerInvincibleTouch(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgEnemyAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyAttackBoomerang(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyAttackFire(al::HitSensor *, al::HitSensor *, char const *);
|
||||
bool sendMsgEnemyAttackNeedle(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyFloorTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyItemGet(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyRouteDokanAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyRouteDokanFire(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyUpperPunch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyTrample(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgMapObjTrample(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPressureDeath(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgNpcTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgExplosion(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgExplosionCollide(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgPush(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPushStrong(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPushVeryStrong(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgHit(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgHitStrong(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgHitVeryStrong(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKnockDown(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgMapPush(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgVanish(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgChangeAlpha(al::LiveActor *, float);
|
||||
bool sendMsgShowModel(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgHideModel(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgRestart(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgNeedleBallAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPunpunFloorTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgInvalidateFootPrint(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickKouraAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgKickKouraAttackCollide(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgKickKouraGetItem(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickKouraReflect(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickKouraCollideNoReflect(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickKouraBreak(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickKouraBlow(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickStoneAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickStoneAttackCollide(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickStoneAttackHold(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickStoneAttackReflect(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKickStoneTrample(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKillerAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgLiftGeyser(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgWarpStart(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgWarpEnd(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgHoldCancel(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgHoleIn(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgJumpInhibit(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgGoalKill(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgGoal(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBindStart(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBindInit(al::HitSensor *, al::HitSensor *, uint);
|
||||
bool sendMsgBindEnd(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBindCancel(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBindCancelByDemo(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBindDamage(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBindSteal(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBindGiant(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBallAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgBallRouteDokanAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgBallAttackHold(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBallAttackDRCHold(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBallAttackCollide(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBallTrample(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgBallTrampleCollide(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBallItemGet(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgFireBalCollide(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgFireBallFloorTouch(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgDokanBazookaAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgRideAllPlayerItemGet(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgHideModel(al::LiveActor *);
|
||||
bool sendMsgShowModel(al::LiveActor *);
|
||||
bool sendMsgRestart(al::LiveActor *);
|
||||
bool sendMsgCollisionImpulse(al::HitSensor *, al::HitSensor *, sead::Vector3f *, sead::Vector3f const &, float, sead::Vector3f const &, float);
|
||||
bool sendMsgSwitchOn(al::LiveActor *);
|
||||
bool sendMsgSwitchOnInit(al::LiveActor *);
|
||||
bool sendMsgSwitchOffInit(al::LiveActor *);
|
||||
bool sendMsgSwitchKillOn(al::LiveActor *);
|
||||
bool sendMsgSwitchKillOnInit(al::LiveActor *);
|
||||
bool sendMsgSwitchKillOffInit(al::LiveActor *);
|
||||
bool sendMsgPlayerFloorTouchToColliderGround(al::LiveActor *, al::HitSensor *);
|
||||
bool sendMsgPlayerUpperPunchToColliderCeiling(al::LiveActor *, al::HitSensor *);
|
||||
bool sendMsgEnemyFloorTouchToColliderGround(al::LiveActor *, al::HitSensor *);
|
||||
bool sendMsgEnemyUpperPunchToColliderCeiling(al::LiveActor *, al::HitSensor *);
|
||||
bool sendMsgAskSafetyPoint(al::HitSensor *, al::HitSensor *, sead::Vector3f **);
|
||||
bool sendMsgAskSafetyPointToColliderGround(al::LiveActor *, al::HitSensor *, sead::Vector3f **);
|
||||
bool sendMsgTouchAssist(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgTouchAssistTrig(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgTouchStroke(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgScreenPointInvalidCollisionParts(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgBlockUpperPunch(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgBlockLowerPunch(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgBlockItemGet(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKillerItemGet(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerKouraAttack(al::HitSensor *, al::HitSensor *, al::ComboCounter *);
|
||||
bool sendMsgLightFlash(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgForceAbyss(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgIsNerveSupportFreeze(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgOnSyncSupportFreeze(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgOffSyncSupportFreeze(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgSwordAttackHighLeft(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgSwordAttackLowLeft(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgSwordAttackHighRight(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgSwordAttackLowRight(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgSwordAttackJumpUnder(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgSwordBeamAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgSwordBeamReflectAttack(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgShieldGuard(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyAttackKnockDown(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgAskMultiPlayerEnemy(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgItemGettable(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgKikkiThrow(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgIsKikkiThrowTarget(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerCloudGet(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgAutoJump(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerTouchShadow(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerPullOutShadow(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerAttackShadow(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerAttackShadowStrong(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPlayerAttackChangePos(al::HitSensor *, al::HitSensor *, sead::Vector3f *);
|
||||
bool sendMsgAtmosOnlineLight(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgLightBurn(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgMoonLightBurn(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgString(al::HitSensor *, al::HitSensor *, char const *);
|
||||
bool sendMsgStringV4fPtr(al::HitSensor *, al::HitSensor *, char const *, sead::Vector4f *);
|
||||
bool sendMsgStringV4fSensorPtr(al::HitSensor *, al::HitSensor *, char const *, sead::Vector4f *);
|
||||
bool sendMsgStringVoidPtr(al::HitSensor *, al::HitSensor *, char const *, void *);
|
||||
bool sendMsgEnemyAttackForCrossoverSensor(al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgEnemyAttackForCrossoverCylinderSensor(al::HitSensor *, al::HitSensor *, sead::Vector3f const &, sead::Vector3f const &, float);
|
||||
bool sendMsgPushAndKillVelocityToTarget(al::LiveActor *, al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgPushAndKillVelocityToTargetH(al::LiveActor *, al::HitSensor *, al::HitSensor *);
|
||||
bool sendMsgCollidePush(al::HitSensor *, al::HitSensor *, sead::Vector3f const &);
|
||||
bool sendMsgScreenPointTarget(al::SensorMsg const &, al::ScreenPointer *, al::ScreenPointTarget *);
|
||||
|
||||
} // namespace al
|
|
@ -488,6 +488,10 @@ namespace CaptureAnims {
|
|||
}
|
||||
|
||||
static constexpr const char *FindStr(Type type) {
|
||||
return s_Strs.at(ToValue(type));
|
||||
const s16 type_ = (s16)type;
|
||||
if (0 <= type_ && type_ < s_Strs.size())
|
||||
return s_Strs[type_];
|
||||
else
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -98,6 +98,10 @@ namespace CaptureTypes {
|
|||
}
|
||||
|
||||
static constexpr const char *FindStr(Type type) {
|
||||
return s_Strs.at(ToValue(type));
|
||||
const s16 type_ = (s16)type;
|
||||
if (0 <= type_ && type_ < s_Strs.size())
|
||||
return s_Strs[type_];
|
||||
else
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -1154,6 +1154,10 @@ namespace PlayerAnims {
|
|||
}
|
||||
|
||||
static constexpr const char *FindStr(Type type) {
|
||||
return s_Strs.at(ToValue(type));
|
||||
const s16 type_ = (s16)type;
|
||||
if (0 <= type_ && type_ < s_Strs.size())
|
||||
return s_Strs[type_];
|
||||
else
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -72,6 +72,10 @@ namespace WipeTypes {
|
|||
}
|
||||
|
||||
static constexpr const char *FindStr(Type type) {
|
||||
return s_Strs.at(ToValue(type));
|
||||
const s16 type_ = (s16)type;
|
||||
if (0 <= type_ && type_ < s_Strs.size())
|
||||
return s_Strs[type_];
|
||||
else
|
||||
return "";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,38 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/camera/CameraPoser.h"
|
||||
#include "al/nerve/NerveExecutor.h"
|
||||
#include "math/seadVector.h"
|
||||
|
||||
namespace al {
|
||||
class CameraVerticalAbsorber2DGalaxy : public al::NerveExecutor {
|
||||
public:
|
||||
CameraVerticalAbsorber2DGalaxy(void);
|
||||
|
||||
void start(al::CameraPoser const*);
|
||||
void update(al::CameraPoser const*);
|
||||
void applyLimit(sead::Vector3f* output);
|
||||
|
||||
void exeNone(void);
|
||||
void exeGround(void);
|
||||
void exeLimit(void);
|
||||
void exeLimitOver(void);
|
||||
void exeLimitAfter(void);
|
||||
|
||||
sead::Vector3f mTargetTrans;
|
||||
sead::Vector3f mTargetGravity;
|
||||
sead::Vector3f mTargetUp;
|
||||
bool mIsTargetCollideGround;
|
||||
sead::Vector3f mPrevTargetTrans;
|
||||
sead::Vector3f mPrevTargetGravity;
|
||||
float unkFloat;
|
||||
sead::Vector3f mLimit;
|
||||
sead::Vector3f unkVec;
|
||||
float unkFloat2;
|
||||
|
||||
};
|
||||
|
||||
static_assert(sizeof(CameraVerticalAbsorber2DGalaxy) == 0x70, "");
|
||||
|
||||
|
||||
}
|
|
@ -8,6 +8,12 @@
|
|||
#include "game/Interfaces/IUseDimension.h"
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
|
||||
enum ShineType { Normal, Dot, Grand };
|
||||
|
||||
namespace al {
|
||||
struct RateParamV3f;
|
||||
}
|
||||
|
||||
class Shine : public al::LiveActor , public IUseDimension {
|
||||
public:
|
||||
Shine(const char* actorName);
|
||||
|
@ -16,23 +22,79 @@ class Shine : public al::LiveActor , public IUseDimension {
|
|||
|
||||
void offAppear();
|
||||
void onAppear();
|
||||
|
||||
void getDirectWithDemo(void);
|
||||
void getDirect();
|
||||
void get();
|
||||
|
||||
void onSwitchGet(void);
|
||||
|
||||
bool isGot() const;
|
||||
|
||||
void setGrandShine(void);
|
||||
|
||||
unsigned char padding[0x10];
|
||||
// 0x11C mIsEmptyShine
|
||||
void *qword110;
|
||||
int dword118;
|
||||
bool mIsGotShine;
|
||||
ShineInfo *curShineInfo; // 0x120
|
||||
unsigned char padding_290[0x278 - 0x128];
|
||||
unsigned char padding_188[0x188 - 0x128];
|
||||
al::RateParamV3f *mRateParam;
|
||||
void * qword190;
|
||||
void * qword198;
|
||||
ShineType mModelType;
|
||||
void * qword1A8;
|
||||
bool byte1B0;
|
||||
void * qword1B8;
|
||||
int dword1C0;
|
||||
int dword1C4;
|
||||
sead::FixedSafeString<0x80> mShineLabel;
|
||||
void * qword260;
|
||||
int dword268;
|
||||
bool byte26C;
|
||||
void * qword270;
|
||||
QuestInfo *shineQuestInfo; // 0x278
|
||||
void *unkPtr1; // 0x280
|
||||
ActorDimensionKeeper *mDimensionKeeper; // 0x288
|
||||
int shineId; // 0x290
|
||||
};
|
||||
int mShineIdx; // 0x290
|
||||
bool mIsMainShine;
|
||||
void *qword298;
|
||||
void *qword2A0;
|
||||
void *qword2A8;
|
||||
void *qword2B0;
|
||||
void *qword2B8;
|
||||
int dword2C0;
|
||||
__attribute__((packed)) void * qword2C4;
|
||||
int dword2CC;
|
||||
int dword2D0;
|
||||
bool mIsAddHeight;
|
||||
int dword2D8;
|
||||
al::LiveActor *mModelEmpty;
|
||||
al::LiveActor *mModelShine;
|
||||
int dword2F0;
|
||||
u16 word2F4;
|
||||
int dword2F8;
|
||||
bool mIsNoRotate;
|
||||
void * qword300;
|
||||
bool mIsUseDemoCam;
|
||||
struct WaterSurfaceShadow *mWaterShadow;
|
||||
void * qword318;
|
||||
int dword320;
|
||||
int dword324;
|
||||
bool byte328;
|
||||
void * qword330;
|
||||
bool mIsCheckGroundHeightMoon;
|
||||
bool mIsHintPhoto;
|
||||
void * qword340;
|
||||
bool byte348;
|
||||
void * qword350;
|
||||
bool mIsUseAppearDemoForce;
|
||||
int dword35C;
|
||||
int dword360;
|
||||
int dword364;
|
||||
int dword368;
|
||||
bool mIsPowerStar;
|
||||
bool mIsAppearDemoHeightHigh;
|
||||
void * qword370;
|
||||
u16 word378;
|
||||
int dword37C;
|
||||
};
|
||||
|
||||
namespace rs {
|
||||
void setStageShineAnimFrame(al::LiveActor *,char const*,int,bool);
|
||||
}
|
|
@ -6,8 +6,11 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/scene/SceneObjHolder.h"
|
||||
#include "container/seadPtrArray.h"
|
||||
#include "prim/seadSafeString.h"
|
||||
#include "types.h"
|
||||
#include "UniqueObjInfo.h"
|
||||
#include "GameProgressData.h"
|
||||
|
||||
#include "sead/math/seadVector.h"
|
||||
#include "sead/stream/seadStream.h"
|
||||
|
@ -16,7 +19,24 @@ namespace al {
|
|||
class ActorInitInfo;
|
||||
class PlacementInfo;
|
||||
class PlacementId;
|
||||
}
|
||||
} // namespace al
|
||||
|
||||
class SphinxQuizData;
|
||||
class TimeBalloonSaveData;
|
||||
class WorldWarpTalkData;
|
||||
class VisitStageData;
|
||||
class MoonRockData;
|
||||
class BossSaveData;
|
||||
class AchievementSaveData;
|
||||
class SearchAmiiboDataTable;
|
||||
class NetworkUploadFlag;
|
||||
class SequenceDemoSkipData;
|
||||
class HintPhotoData;
|
||||
class ShopTalkData;
|
||||
class RaceRecord;
|
||||
|
||||
class PlayerHitPointData;
|
||||
|
||||
|
||||
class GameDataHolder;
|
||||
class ShineInfo;
|
||||
|
@ -24,7 +44,48 @@ class ShineInfo;
|
|||
class GameDataFile
|
||||
{
|
||||
public:
|
||||
GameDataFile(GameDataHolder *);
|
||||
GameDataFile(GameDataHolder*);
|
||||
|
||||
struct HintInfo {
|
||||
void clear(void);
|
||||
bool isDisableByWorldWarpHole(bool) const;
|
||||
bool isEnableUnlock(int, bool, int, bool) const;
|
||||
bool isHintStatusUnlock(int, int, bool) const;
|
||||
bool isHintStatusUnlockByNpc(void) const;
|
||||
bool isHintStatusUnlockByAmiibo(void) const;
|
||||
bool isEnableNameUnlockByScenario(int, int, bool) const;
|
||||
|
||||
sead::FixedSafeString<0x80> mStageName; // 0x0
|
||||
sead::FixedSafeString<0x80> mObjId; // 0x98
|
||||
sead::FixedSafeString<0x40> mScenarioName; // 0x130
|
||||
const char *mObjectName; // 0x188
|
||||
sead::Vector3f mTrans; // 0x190
|
||||
sead::Vector3f mTransAgain; // 0x19C
|
||||
void *unkPtr1; // 0x1A8
|
||||
void *unkPtr2; // 0x1B0
|
||||
void *unkPtr3; // 0x1B8
|
||||
void *unkPtr4; // 0x1C0
|
||||
s32 mMainScenarioNo; // 0x1C8
|
||||
int mWorldIndex; // 0x1CC
|
||||
bool mIsMoonRock; // 0x1D0
|
||||
bool unkBool1; // 0x1D1
|
||||
bool mIsAchievement; // 0x1D2
|
||||
bool mIsGrand; // 0x1D3
|
||||
bool mIsShopMoon; // 0x1D4
|
||||
int unkInt; // 0x1D8
|
||||
int unkInt2; // 0x1DC
|
||||
void *unkPtr6; // 0x1E0
|
||||
void *unkPtr7; // 0x1E8
|
||||
int mUniqueID; // 0x1F0
|
||||
int mHintIdx; // 0x1F4
|
||||
sead::FixedSafeString<0x20> mOptionalID; // 0x1F8
|
||||
uint mProcessBitflag; // 0x230
|
||||
bool unkBool2; // 0x234
|
||||
bool unkBool3; // 0x235
|
||||
};
|
||||
|
||||
static_assert(sizeof(HintInfo) == 0x238, "size of HintInfo");
|
||||
|
||||
void initializeData(void);
|
||||
void tryReadByamlData(uchar const*);
|
||||
void tryFindCoinCollectInfo(char const*,char const*);
|
||||
|
@ -132,7 +193,7 @@ class GameDataFile
|
|||
void wearCostume(char const*);
|
||||
void wearCap(char const*);
|
||||
void addHackDictionary(char const*);
|
||||
void findShine(int,int);
|
||||
HintInfo* findShine(int worldIndex, int shineIndex);
|
||||
void calcShineNumInOneShine(int,int);
|
||||
void checkAchievementShine(int,int);
|
||||
void winRace(void);
|
||||
|
@ -176,7 +237,7 @@ class GameDataFile
|
|||
void tryFindUniqueId(ShineInfo const*);
|
||||
void findUnlockShineNumCurrentWorld(bool *);
|
||||
void trySetCollectedBgm(char const*,char const*);
|
||||
// void setGotShine(GameDataFile::HintInfo const*);
|
||||
void setGotShine(GameDataFile::HintInfo const*);
|
||||
// void tryWriteByByaml(al::ByamlWriter *);
|
||||
|
||||
int getTotalShineNum(void);
|
||||
|
@ -210,7 +271,7 @@ class GameDataFile
|
|||
void getPlayerHitPointData(void);
|
||||
void getLastUpdateTime(void);
|
||||
void getPlayTimeTotal(void);
|
||||
void getMainScenarioNo(int);
|
||||
int getMainScenarioNo(int) const;
|
||||
void getCollectedBgmMaxNum(void);
|
||||
int getScenarioNo(void) const;
|
||||
void getMiniGameName(int);
|
||||
|
@ -295,16 +356,192 @@ class GameDataFile
|
|||
bool isGameClear(void) const;
|
||||
bool isEmpty(void) const;
|
||||
bool isKidsMode(void) const;
|
||||
|
||||
// custom methods
|
||||
|
||||
// custom impl of findShine that uses shine UID instead of index to get the right HintInfo
|
||||
HintInfo* findShine(int shineUid) {
|
||||
for (int x = 0; x < 0x400; x++) {
|
||||
GameDataFile::HintInfo* curInfo = &mShineHintList[x];
|
||||
if (curInfo->mUniqueID == shineUid) {
|
||||
return curInfo;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
undefined padding[0x5C8];
|
||||
UniqObjInfo** mUniqueInfo; // 0x5C8
|
||||
void *unkPtr1; // 0x5D0
|
||||
void *unkPtr2; // 0x5D8
|
||||
void *unkPtr3; // 0x5E0
|
||||
void* unkPtr4; // 0x5E8
|
||||
void* unkPtr5; // 0x5F0
|
||||
bool unkBool1; // 0x5F8
|
||||
bool unkBool2; // 0x5F9
|
||||
bool mIsCapEnable; // 0x5FA
|
||||
// end custom methods
|
||||
|
||||
ShineInfo **mShineInfoArray;
|
||||
ShineInfo **mShineInfoArray2;
|
||||
ShineInfo *mShineInfo;
|
||||
void *qword18;
|
||||
void *qword20;
|
||||
int dword28;
|
||||
int dword2C;
|
||||
sead::FixedSafeString<0x80> char30;
|
||||
sead::FixedSafeString<0x80> charC8;
|
||||
sead::FixedSafeString<0x80> char160;
|
||||
sead::FixedSafeString<0x80> char1F8;
|
||||
sead::FixedSafeString<0x80> char290;
|
||||
sead::FixedSafeString<0x80> char328;
|
||||
sead::FixedSafeString<0x80> char3C0;
|
||||
u16 word458;
|
||||
char gap45A[6];
|
||||
void *qword460;
|
||||
void *qword468;
|
||||
void *qword470;
|
||||
void *qword478;
|
||||
void *qword480;
|
||||
void *qword488;
|
||||
sead::FixedSafeString<0x100> char490;
|
||||
void *qword5A8;
|
||||
bool byte5B0;
|
||||
void *qword5B4;
|
||||
sead::FixedSafeString<0x80> *qword5C0;
|
||||
UniqObjInfo** mUniqueObjInfoArr;
|
||||
void *qword5D0;
|
||||
void *qword5D8;
|
||||
void *qword5E0;
|
||||
void *qword5E8;
|
||||
void *qword5F0;
|
||||
u16 word5F8;
|
||||
bool mIsEnableCap;
|
||||
void *qword600;
|
||||
int dword608;
|
||||
bool byte60C;
|
||||
SphinxQuizData *mSphinxQuizData;
|
||||
void *qword618;
|
||||
void *qword620;
|
||||
void *qword628;
|
||||
TimeBalloonSaveData *qword630;
|
||||
sead::FixedSafeString<0x40> char638;
|
||||
int dword690;
|
||||
WorldWarpTalkData *mWorldWarpTalkData;
|
||||
VisitStageData *mVisitStageData;
|
||||
GameProgressData *mGameProgressData;
|
||||
MoonRockData *mMoonRockData;
|
||||
BossSaveData *mBossSaveData;
|
||||
AchievementSaveData *mAchievementSaveData;
|
||||
SearchAmiiboDataTable *mSearchAmiiboDataTable;
|
||||
NetworkUploadFlag *mNetworkUploadFlag;
|
||||
SequenceDemoSkipData *mSequenceDemoSkipData;
|
||||
HintPhotoData *mHintPhotoData;
|
||||
void *qword6E8;
|
||||
void *qword6F0;
|
||||
void *qword6F8;
|
||||
void *qword700;
|
||||
void *qword708;
|
||||
sead::FixedSafeString<0x40> char710;
|
||||
sead::FixedSafeString<0x40> char768;
|
||||
u16 word7C0;
|
||||
void *qword7C8;
|
||||
u16 word7D0;
|
||||
void *qword7D8;
|
||||
sead::PtrArray<RaceRecord> mLatestRaceRecords;
|
||||
void *qword7F0;
|
||||
void *qword7F8;
|
||||
void *qword800;
|
||||
void *qword808;
|
||||
void *qword810;
|
||||
bool byte818;
|
||||
void *qword820;
|
||||
bool byte828;
|
||||
sead::PtrArrayImpl sead__ptrarrayimpl830;
|
||||
u16 word840;
|
||||
bool byte842;
|
||||
int dword844;
|
||||
bool byte848;
|
||||
GameDataHolder *mGameDataHolder;
|
||||
void *qword858;
|
||||
PlayerHitPointData *mPlayerHintPointData;
|
||||
sead::FixedSafeString<0x80> char868;
|
||||
bool byte900;
|
||||
bool byte901;
|
||||
int dword904;
|
||||
sead::FixedSafeString<0x80> char908;
|
||||
HintInfo *mShineHintList; // 0x9A0
|
||||
sead::PtrArrayImpl sead__ptrarrayimpl9A8;
|
||||
sead::PtrArrayImpl sead__ptrarrayimpl9B8;
|
||||
sead::PtrArrayImpl sead__ptrarrayimpl9C8;
|
||||
sead::PtrArrayImpl sead__ptrarrayimpl9D8;
|
||||
void *qword9E8;
|
||||
int mCurWorldID;
|
||||
void *qword9F8;
|
||||
void *qwordA00;
|
||||
u16 wordA08;
|
||||
bool byteA0A;
|
||||
void *qwordA10;
|
||||
void *qwordA18;
|
||||
int dwordA20;
|
||||
int dwordA24;
|
||||
int dwordA28;
|
||||
bool byteA2C;
|
||||
ChangeStageInfo *mChangeStageInfo;
|
||||
ChangeStageInfo *mChangeStageInfo2;
|
||||
void *qwordA40;
|
||||
void *qwordA48;
|
||||
void *qwordA50;
|
||||
void *qwordA58;
|
||||
ShopTalkData *mShopTalkData;
|
||||
void *qwordA68;
|
||||
bool byteA70;
|
||||
char gapA71[3];
|
||||
void *qwordA74;
|
||||
void *qwordA7C;
|
||||
int dwordA84;
|
||||
bool byteA88;
|
||||
char gapA89[3];
|
||||
void *qwordA8C;
|
||||
int dwordA94;
|
||||
bool byteA98;
|
||||
char gapA99[3];
|
||||
void *qwordA9C;
|
||||
int dwordAA4;
|
||||
bool byteAA8;
|
||||
char gapAA9[3];
|
||||
void *qwordAAC;
|
||||
int dwordAB4;
|
||||
bool byteAB8;
|
||||
char gapAB9[3];
|
||||
void *qwordABC;
|
||||
int dwordAC4;
|
||||
bool byteAC8;
|
||||
char gapAC9[3];
|
||||
void *qwordACC;
|
||||
int dwordAD4;
|
||||
bool byteAD8;
|
||||
char gapAD9[3];
|
||||
void *qwordADC;
|
||||
int dwordAE4;
|
||||
bool byteAE8;
|
||||
char gapAE9[3];
|
||||
void *qwordAEC;
|
||||
int dwordAF4;
|
||||
bool byteAF8;
|
||||
char gapAF9[3];
|
||||
void *qwordAFC;
|
||||
int dwordB04;
|
||||
bool byteB08;
|
||||
char gapB09[3];
|
||||
void *qwordB0C;
|
||||
int dwordB14;
|
||||
bool byteB18;
|
||||
char gapB19[3];
|
||||
void *qwordB1C;
|
||||
int dwordB24;
|
||||
bool byteB28;
|
||||
char gapB29[7];
|
||||
void *qwordB30;
|
||||
bool byteB38;
|
||||
char gapB39[7];
|
||||
void *qwordB40;
|
||||
int dwordB48;
|
||||
char gapB4C[4];
|
||||
void *qwordB50;
|
||||
int dwordB58;
|
||||
int dwordB5C;
|
||||
int dwordB60;
|
||||
u16 wordB64;
|
||||
};
|
||||
|
|
@ -67,6 +67,12 @@ public:
|
|||
// checks save file if shine is collected by shine index only (0 through 725)
|
||||
static bool isGotShine(GameDataHolderAccessor, int);
|
||||
|
||||
// checks save file if shine is collected using the shines ShineInfo
|
||||
static bool isGotShine(GameDataHolderAccessor, ShineInfo const*);
|
||||
|
||||
// checks save file if shine is collected using the shines stage and obj ID
|
||||
static bool isGotShine(GameDataHolderAccessor, const char *stageName, const char *objID);
|
||||
|
||||
// Gets Index for X Kingdom
|
||||
static s32 getWorldIndexWaterfall(void);
|
||||
static s32 getWorldIndexMoon(void);
|
||||
|
@ -138,4 +144,32 @@ public:
|
|||
// subtracts the supplied int value from the current coin count
|
||||
static void subCoin(GameDataHolderWriter, int value);
|
||||
|
||||
};
|
||||
static bool isUnlockedWorld(GameDataHolderAccessor, int);
|
||||
|
||||
static bool isUnlockedNextWorld(GameDataHolderAccessor);
|
||||
|
||||
static bool isUnlockedAllWorld(GameDataHolderAccessor);
|
||||
|
||||
static bool isUnlockedCurrentWorld(GameDataHolderAccessor);
|
||||
|
||||
static bool isUnlockWorld(int);
|
||||
|
||||
static bool isUnlockFirstForest(void);
|
||||
|
||||
static bool isUnlockFirstSea(void);
|
||||
};
|
||||
|
||||
namespace CustomGameDataFunction {
|
||||
static GameDataFile::HintInfo* getHintInfoByUniqueID(GameDataHolderAccessor accessor, int uid) {
|
||||
return accessor.mData->mGameDataFile->findShine(uid);
|
||||
}
|
||||
|
||||
static const GameDataFile::HintInfo* getHintInfoByIndex(GameDataHolderAccessor accessor, int index) {
|
||||
return &accessor.mData->mGameDataFile->mShineHintList[index];
|
||||
}
|
||||
|
||||
static const GameDataFile::HintInfo* getHintInfoByIndex(al::LiveActor* actor, int index) {
|
||||
GameDataHolderAccessor accessor(actor);
|
||||
return getHintInfoByIndex(accessor, index);
|
||||
}
|
||||
}
|
|
@ -18,4 +18,5 @@ class GameDataHolderAccessor : public GameDataHolderWriter
|
|||
public:
|
||||
GameDataHolderAccessor(al::IUseSceneObjHolder const *IUseObjHolder) {mData = (GameDataHolder*)al::getSceneObj(IUseObjHolder, 18);}
|
||||
GameDataHolderAccessor(al::SceneObjHolder const *objHolder) {mData = (GameDataHolder*)objHolder->getObj(18); }
|
||||
GameDataHolderAccessor() {mData = nullptr; } // default ctor
|
||||
};
|
|
@ -21,12 +21,18 @@
|
|||
#include "HakoniwaStateSimpleDemo.h"
|
||||
#include "HakoniwaStateBootLoadData.h"
|
||||
|
||||
namespace al
|
||||
{
|
||||
namespace al {
|
||||
class WipeHolder;
|
||||
class ScreenCaptureExecutor;
|
||||
class BootLayout;
|
||||
} // namespace al
|
||||
class SeadAudioPlayer;
|
||||
class AudioBusSendFader;
|
||||
class SimpleAudioUser;
|
||||
} // namespace al
|
||||
|
||||
class BootLayout;
|
||||
class TimeBalloonSequenceInfo;
|
||||
class CollectBgmPlayer;
|
||||
class LoadLayoutCtrl;
|
||||
|
||||
class HakoniwaSequence : public al::Sequence {
|
||||
public:
|
||||
|
@ -40,62 +46,59 @@ class HakoniwaSequence : public al::Sequence {
|
|||
void update(void);
|
||||
bool isEnableSave(void);
|
||||
void drawMain(void);
|
||||
al::Scene *getCurrentScene(void) const; // {return this->curScene}
|
||||
al::Scene* getCurrentScene(void) const; // {return this->curScene}
|
||||
|
||||
void* qword20;
|
||||
void* qword28;
|
||||
void* qword30;
|
||||
void* qword38;
|
||||
void* qword40;
|
||||
void* qword48;
|
||||
void* qword50;
|
||||
void* qword58;
|
||||
void* qword60;
|
||||
void* qword68;
|
||||
void* qword70;
|
||||
void* qword78;
|
||||
void* qword80;
|
||||
void* qword88;
|
||||
al::AudioDirector *mAudioDirector; // 0x90
|
||||
void *qword98;
|
||||
void *qwordA0;
|
||||
void *qwordA8;
|
||||
al::Scene *curScene; // 0xB0
|
||||
GameDataHolderAccessor mGameDataHolder; // 0xB8
|
||||
al::GamePadSystem *mGamepadSys; // 0xC0
|
||||
HakoniwaStateDemoOpening *mDemoOpening; // 0xC8
|
||||
HakoniwaStateDemoEnding *mDemoEnding; // 0xD0
|
||||
void exeBootLoadData();
|
||||
void exeDemoOpening();
|
||||
void exeLoadWorldResource();
|
||||
void exeLoadWorldResourceWithBoot();
|
||||
void exeLoadStage();
|
||||
void exePlayStage();
|
||||
void exeDemoWorldWarp();
|
||||
void exeDemoEnding();
|
||||
void exeDestroy();
|
||||
void exeMiss();
|
||||
void exeMissCoinSub();
|
||||
void exeMissEnd();
|
||||
void exeDemoLava();
|
||||
void exeFadeToNewGame();
|
||||
|
||||
al::Scene *curScene; // 0xB0
|
||||
GameDataHolderAccessor mGameDataHolder; // 0xB8
|
||||
al::GamePadSystem *mGamepadSys; // 0xC0
|
||||
HakoniwaStateDemoOpening *mDemoOpening; // 0xC8
|
||||
HakoniwaStateDemoEnding *mDemoEnding; // 0xD0
|
||||
HakoniwaStateDemoWorldWarp *mDemoWorldWarp; // 0xD8
|
||||
HakoniwaStateSimpleDemo *mSimpleDemo; // 0xE0
|
||||
HakoniwaStateBootLoadData *mBootLoadData; // 0xE8
|
||||
HakoniwaStateDeleteScene *mDeleteScene; // 0xF0
|
||||
al::LayoutKit* mLytKit; // 0xF8
|
||||
|
||||
// al::initSceneCreator(al::IUseSceneCreator *,al::SequenceInitInfo const&,al::GameDataHolderBase *,al::AudioDirector *,al::ScreenCaptureExecutor *,alSceneFunction::SceneFactory *) .text 00000000009F2270 0000007C 00000050 FFFFFFFFFFFFFFF8 R . . . B . .
|
||||
|
||||
|
||||
// undefined * * field_0x0;
|
||||
// undefined padding_120[0x120];
|
||||
// al::Scene * curScene;
|
||||
// undefined padding_8[0x8];
|
||||
// al::AudioDirector * field_0x90;
|
||||
// undefined padding_24[0x24];
|
||||
// StageScene * stageScene;
|
||||
// GameDataHolderAccessor *gameDataHolder;
|
||||
// undefined padding_024[0x24];
|
||||
// HakoniwaStateDemoWorldWarp * stateDemoWorldWarp;
|
||||
// undefined padding_192[0x192];
|
||||
// int nextScenarioNo;
|
||||
// undefined padding_12[0x12];
|
||||
// al::WipeHolder * field_0x1b0;
|
||||
// undefined padding_0024[0x24];
|
||||
// long * field_0x1d0;
|
||||
// undefined padding_48[0x48];
|
||||
// WorldResourceLoader * worldResourceLoader;
|
||||
// undefined padding_0x16[0x16];
|
||||
// undefined * field_0x220;
|
||||
// undefined padding_0x144[0x144];
|
||||
// undefined * field_0x2b8;
|
||||
// undefined padding_0x160[0x160];
|
||||
// undefined8 field_0x360;
|
||||
HakoniwaStateSimpleDemo *mSimpleDemo; // 0xE0
|
||||
HakoniwaStateBootLoadData *mBootLoadData; // 0xE8
|
||||
HakoniwaStateDeleteScene *mDeleteScene; // 0xF0
|
||||
al::LayoutKit* mLytKit; // 0xF8
|
||||
bool mYBalls;
|
||||
sead::FixedSafeString<0x80> stageName;
|
||||
int scenarioNum;
|
||||
al::ScreenCaptureExecutor* mScreenCapExecutor;
|
||||
al::WipeHolder* mWipeHolder;
|
||||
bool mMissEnd;
|
||||
al::SimpleLayoutAppearWaitEnd* mCounterMiss;
|
||||
int mCurCoins;
|
||||
int mFinalCoins;
|
||||
BootLayout* mBootLayout;
|
||||
al::EffectSystem* mEffectSystem;
|
||||
al::AsyncFunctorThread* mInitThread;
|
||||
bool mInitialized;
|
||||
al::SeadAudioPlayer* mSeAudioPlayer;
|
||||
al::SeadAudioPlayer* mBgmAudioPlayer;
|
||||
al::AudioBusSendFader* mBusSendFader;
|
||||
WorldResourceLoader* mResourceLoader;
|
||||
sead::Heap* mPlayerResHeap;
|
||||
sead::FixedSafeString<0x80> mCapName;
|
||||
sead::FixedSafeString<0x80> mCostumeName;
|
||||
al::SimpleAudioUser* mPlayerAudioUser;
|
||||
bool mHackEnd;
|
||||
TimeBalloonSequenceInfo* mBalloonSeqInfo;
|
||||
CollectBgmPlayer* mCollectBgmPlayer;
|
||||
sead::FixedSafeString<0x80> mLanguage;
|
||||
int mFileId;
|
||||
LoadLayoutCtrl* mLoadLayoutCtrl;
|
||||
bool mKidsMode;
|
||||
};
|
|
@ -30,7 +30,7 @@ class ShineInfo {
|
|||
|
||||
sead::FixedSafeString<0x80> stageName = sead::FixedSafeString<0x80>(); // 0x0 (Size: 0x98)
|
||||
sead::FixedSafeString<0x80> objectId = sead::FixedSafeString<0x80>(); // 0xA0
|
||||
sead::FixedSafeString<0x80> scenObjId = sead::FixedSafeString<0x80>(); // 0x138
|
||||
sead::FixedSafeString<0x80> mShineLabel = sead::FixedSafeString<0x80>(); // 0x138
|
||||
|
||||
int shineId; // 1C8
|
||||
const QuestInfo *curQuest; // 1D0
|
||||
|
|
|
@ -6,5 +6,6 @@
|
|||
*/
|
||||
|
||||
class IUsePlayerHack {
|
||||
|
||||
public:
|
||||
virtual struct PlayerHackKeeper *getPlayerHackKeeper() const = 0;
|
||||
};
|
|
@ -6,7 +6,10 @@
|
|||
#include "prim/seadSafeString.h"
|
||||
|
||||
struct RollPartsData {
|
||||
|
||||
int mRollMsgCount = 0; // 0x0
|
||||
const char16_t **mRollMsgList; // 0x8
|
||||
int unkInt1 = 0; // 0x10
|
||||
bool mUnkBool = false; // 0x14
|
||||
};
|
||||
|
||||
class CommonVerticalList : public al::NerveExecutor {
|
||||
|
@ -75,14 +78,14 @@ public:
|
|||
void *unkPtr3; // 0x50
|
||||
sead::Vector2f mCursorPos; // 0x58
|
||||
void *unkPtr4; // 0x60
|
||||
void *unkPtr5; // 0x68
|
||||
int unkInt1; // 0x68
|
||||
sead::WFixedSafeString<0x200> **mStringDataArr; // 0x70
|
||||
sead::FixedSafeString<0x90> **mPaneNameList; // 0x78
|
||||
void *unkPtr8; // 0x80
|
||||
void *unkPtr9; // 0x88
|
||||
const bool *mIsEnableData; // 0x90
|
||||
int mStringDataCount; // 0x98
|
||||
int unkInt2; // 0x9C
|
||||
int mDataCount; // 0x9C
|
||||
void *unkPtr12; // 0xA0
|
||||
void *unkPtr13; // 0xA8
|
||||
void *unkPtr14; // 0xB0
|
||||
|
|
|
@ -14,9 +14,9 @@
|
|||
|
||||
#include "HackCapThrowParam.h"
|
||||
#include "HackCap/HackCapJointControlKeeper.h"
|
||||
#include "HackCap/PlayerCapActionHistory.h"
|
||||
|
||||
class PlayerWallActionHistory;
|
||||
class PlayerCapActionHistory;
|
||||
class PlayerEyeSensorHitHolder;
|
||||
class IUsePlayerHeightCheck;
|
||||
class PlayerWetControl;
|
||||
|
@ -201,6 +201,9 @@ class HackCap : public al::LiveActor {
|
|||
al::LiveActor *mCapEyes; // 0x120
|
||||
PlayerActorHakoniwa *mPlayerActor; // 0x128
|
||||
unsigned char padding_220[0x220-0x130];
|
||||
HackCapThrowParam throwParam; // 0x220
|
||||
HackCapThrowParam *throwParam; // 0x220
|
||||
unsigned char padding_2B8[0x2B8-0x228];
|
||||
PlayerCapActionHistory *mCapActionHistory; // 0x2B8
|
||||
unsigned char padding_2E0[0x2E0-0x2C0];
|
||||
HackCapJointControlKeeper *mJointKeeper; // 0x2E0
|
||||
};
|
|
@ -0,0 +1,29 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "game/Interfaces/IUsePlayerCollision.h"
|
||||
#include "game/Player/PlayerConst.h"
|
||||
#include "math/seadVector.h"
|
||||
|
||||
class PlayerCapActionHistory {
|
||||
public:
|
||||
PlayerCapActionHistory(al::LiveActor const*,PlayerConst const*,struct PlayerTrigger const*,IUsePlayerCollision const*);
|
||||
void update(void);
|
||||
void clearLandLimit(void);
|
||||
void clearLimitHeight(void);
|
||||
void clearCapJump(void);
|
||||
void clearLandLimitStandAngle(void);
|
||||
void clearWallAirLimit(void);
|
||||
void recordLimitHeight(void);
|
||||
bool isOverLimitHeight(void) const;
|
||||
|
||||
al::LiveActor* mHostActor; // 0x0
|
||||
PlayerConst* mPlayerConst; // 0x8
|
||||
PlayerTrigger* mPlayerTrigger; // 0x10
|
||||
IUsePlayerCollision* mCollider; // 0x18
|
||||
struct PlayerCounterAfterCapCatch* mCapCatchCounter; // 0x20
|
||||
bool mIsCapBounced = false; // 0x28
|
||||
sead::Vector3f mUnkVec = sead::Vector3f::zero; // 0x2C
|
||||
bool mIsCapJumpReady = true; // 0x38
|
||||
bool mIsLimited = true; // 0x39 (unsure what this actually is called)
|
||||
};
|
|
@ -7,11 +7,61 @@
|
|||
|
||||
#include "PlayerHackKeeper.h"
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "game/Interfaces/IUsePlayerCollision.h"
|
||||
#include "game/Interfaces/IUsePlayerHack.h"
|
||||
#include "game/Player/PlayerCollider.h"
|
||||
#include "game/Player/PlayerInfo.h"
|
||||
#include "game/Player/PlayerInitInfo.h"
|
||||
#include "game/Player/PlayerPuppet.h"
|
||||
|
||||
class PlayerActorBase : public al::LiveActor , public IUsePlayerHack {
|
||||
class PlayerActorBase : public al::LiveActor, public IUsePlayerHack {
|
||||
public:
|
||||
PlayerHackKeeper *getPlayerHackKeeper() const;
|
||||
void movement(void);
|
||||
int getPortNo();
|
||||
PlayerActorBase(char const*);
|
||||
|
||||
virtual void movement(void) override;
|
||||
virtual void init(al::ActorInitInfo const&) override;
|
||||
virtual void initPlayer(al::ActorInitInfo const&, PlayerInitInfo const&);
|
||||
virtual int getPortNo(void);
|
||||
virtual sead::Matrix34f *getViewMtx(void) const;
|
||||
virtual IUsePlayerCollision* getPlayerCollision(void) const;
|
||||
virtual PlayerHackKeeper* getPlayerHackKeeper() const override;
|
||||
|
||||
virtual bool isEnableDemo(void);
|
||||
virtual void startDemo(void);
|
||||
virtual void endDemo(void);
|
||||
|
||||
virtual void startDemoPuppetable(void);
|
||||
virtual void endDemoPuppetable(void);
|
||||
|
||||
virtual void startDemoShineGet(void);
|
||||
virtual void endDemoShineGet(void);
|
||||
|
||||
virtual void startDemoMainShineGet(void);
|
||||
virtual void endDemoMainShineGet(void);
|
||||
|
||||
virtual void startDemoHack(void);
|
||||
virtual void endDemoHack(void);
|
||||
|
||||
virtual void startDemoKeepBind(void);
|
||||
virtual void noticeDemoKeepBindExecute(void);
|
||||
virtual void endDemoKeepBind(void);
|
||||
|
||||
virtual void startDemoKeepCarry(void);
|
||||
virtual void endDemoKeepCarry(void);
|
||||
|
||||
virtual void getDemoActor(void);
|
||||
virtual void getDemoAnimator(void);
|
||||
|
||||
virtual bool isDamageStopDemo(void) const;
|
||||
|
||||
virtual PlayerPuppet *getPlayerPuppet(void);
|
||||
virtual PlayerInfo *getPlayerInfo(void) const;
|
||||
|
||||
virtual bool checkDeathArea(void);
|
||||
virtual void sendCollisionMsg(void);
|
||||
|
||||
virtual bool receivePushMsg(al::SensorMsg const*,al::HitSensor *,al::HitSensor *,float);
|
||||
|
||||
sead::Matrix34f* mViewMtx; // 0x110
|
||||
int mPortNo; // 0x118
|
||||
};
|
|
@ -25,7 +25,9 @@
|
|||
|
||||
#include "Attacks/PlayerSpinCapAttack.h"
|
||||
|
||||
#define PACTORSIZE 0xC8
|
||||
namespace al {
|
||||
class WaterSurfaceFinder;
|
||||
}
|
||||
|
||||
class PlayerActorHakoniwa : public PlayerActorBase , public IUseDimension {
|
||||
public:
|
||||
|
@ -36,11 +38,10 @@ class PlayerActorHakoniwa : public PlayerActorBase , public IUseDimension {
|
|||
void startPlayerPuppet(void);
|
||||
void initPlayer(al::ActorInitInfo const&, PlayerInitInfo const&);
|
||||
|
||||
unsigned char padding[0x18]; // 0x108
|
||||
PlayerInfo *mPlayerInfo; // 0x128
|
||||
PlayerConst *mPlayerConst; // 0x130
|
||||
PlayerInput *mPlayerInput; //0x138
|
||||
unsigned char padding_148[0x8]; // PlayerTrigger
|
||||
PlayerTrigger *mPlayerTrigger; // 0x140
|
||||
HackCap *mHackCap; // 0x148
|
||||
ActorDimensionKeeper *mDimKeeper; // 0x150
|
||||
PlayerModelKeeper *mPlayerModelKeeper; // 0x158
|
||||
|
@ -48,27 +49,117 @@ class PlayerActorHakoniwa : public PlayerActorBase , public IUseDimension {
|
|||
PlayerAnimator *mPlayerAnimator; // 0x168
|
||||
PlayerColliderHakoniwa *mPlayerCollider; // 0x170
|
||||
PlayerPuppet *mPlayerPuppet; // 0x178
|
||||
// 0x180 PlayerAreaChecker
|
||||
// 0x188 WaterSurfaceFinder
|
||||
// 0x190 unk
|
||||
// 0x198 unk
|
||||
// 0x1A0 unk
|
||||
// 0x1A8 unk
|
||||
// 0x1B0 unk
|
||||
// 0x1B8 unk
|
||||
// 0x1C0 unk
|
||||
// 0x1C8 unk
|
||||
// 0x1D0 unk
|
||||
// 0x1D8 unk
|
||||
// 0x1E0 unk
|
||||
// 0x1E8 unk
|
||||
// 0x1F0 unk
|
||||
// 0x1F8 PlayerBindKeeper
|
||||
unsigned char padding_208[0x208 - 0x180];
|
||||
PlayerAreaChecker *mAreaChecker; // 0x180
|
||||
al::WaterSurfaceFinder *mWaterSurfaceFinder; // 0x188
|
||||
PlayerOxygen* mPlayerOxygen; // 0x190
|
||||
PlayerDamageKeeper* mPlayerDamageKeeper; // 0x198
|
||||
PlayerDemoActionFlag* mPlayerDemoActionFlag; // 0x1A0
|
||||
PlayerCapActionHistory* mPlayerCapActionHistory; // 0x1A8
|
||||
PlayerCapManHeroEyesControl* mPlayerCapManHeroEyesControl; // 0x1B0
|
||||
struct PlayerContinuousJump* mPlayerContinuousJump; // 0x1B8
|
||||
struct PlayerContinuousLongJump* mPlayerContinuousLongJump; // 0x1C0
|
||||
struct PlayerCounterAfterUpperPunch* mPlayerCounterAfterUpperPunch; // 0x1C8
|
||||
struct PlayerCounterForceRun* mPlayerCounterForceRun; // 0x1D0
|
||||
PlayerCounterIceWater* mPlayerCounterIceWater; // 0x1D8
|
||||
struct PlayerCounterQuickTurnJump* mPlayerCounterQuickTurnJump; // 0x1E0
|
||||
PlayerWallActionHistory* mPlayerWallActionHistory; // 0x1E8
|
||||
PlayerBindKeeper* mPlayerBindKeeper; // 0x1F0
|
||||
PlayerCarryKeeper* mPlayerCarryKeeper; // 0x1F8
|
||||
PlayerEquipmentUser* mPlayerEquipmentUser; // 0x200
|
||||
PlayerHackKeeper *mHackKeeper; // 0x208
|
||||
PlayerFormSensorCollisionArranger *mCollArranger; // 0x210
|
||||
void *unkPtr2; // 0x218
|
||||
void *unkPtr3; // 0x220
|
||||
PlayerSpinCapAttack *mSpinCapAttack; // 0x228
|
||||
|
||||
struct PlayerJumpMessageRequest* mPlayerJumpMessageRequest; // 0x218
|
||||
struct PlayerSandSinkAffect* mPlayerSandSinkAffect; // 0x220
|
||||
PlayerSpinCapAttack* mSpinCapAttack; // 0x228
|
||||
struct PlayerActionDiveInWater* mPlayerActionDiveInWater;
|
||||
struct PlayerEffect* mPlayerEffect;
|
||||
PlayerEyeSensorHitHolder* mPlayerEyeSensorHitHolder;
|
||||
struct PlayerPushReceiver* mPlayerPushReceiver;
|
||||
struct PlayerHitPush* mPlayerHitPush;
|
||||
struct PlayerExternalVelocity* mPlayerExternalVelocity;
|
||||
PlayerJointControlKeeper* mPlayerJointControlKeeper;
|
||||
PlayerPainPartsKeeper* mPlayerPainPartsKeeper;
|
||||
PlayerRecoverySafetyPoint* mPlayerRecoverySafetyPoint;
|
||||
struct PlayerRippleGenerator* mPlayerRippleGenerator;
|
||||
PlayerSeparateCapFlag* mPlayerSeparateCapFlag;
|
||||
PlayerWetControl* mPlayerWetControl;
|
||||
PlayerStainControl* mPlayerStainControl;
|
||||
al::FootPrintHolder* mFootPrintHolder;
|
||||
struct GaugeAir* mGaugeAir;
|
||||
struct WaterSurfaceShadow* mWaterSurfaceShadow;
|
||||
WorldEndBorderKeeper* mWorldEndBorderKeeper;
|
||||
void* gap;
|
||||
struct PlayerSeCtrl* mPlayerSeCtrl;
|
||||
al::HitSensor* mBodyHitSensor;
|
||||
bool mIsLongShadow;
|
||||
struct PlayerStateWait* mPlayerStateWait;
|
||||
struct PlayerStateSquat* mPlayerStateSquat;
|
||||
struct PlayerStateRunHakoniwa2D3D* mPlayerStateRunHakoniwa2D3D;
|
||||
struct PlayerStateSlope* mPlayerStateSlope;
|
||||
struct PlayerStateRolling* mPlayerStateRolling;
|
||||
struct PlayerStateSpinCap* mPlayerStateSpinCap;
|
||||
struct PlayerStateJump* mPlayerStateJump;
|
||||
struct PlayerStateCapCatchPop* mPlayerStateCapCatchPop;
|
||||
struct PlayerStateWallAir* mPlayerStateWallAir;
|
||||
struct PlayerStateWallCatch* mPlayerStateWallCatch;
|
||||
struct PlayerStateGrabCeil* mPlayerStateGrabCeil;
|
||||
struct PlayerStatePoleClimb* mPlayerStatePoleClimb;
|
||||
struct PlayerStateHipDrop* mPlayerStateHipDrop;
|
||||
struct PlayerStateHeadSliding* mPlayerStateHeadSliding;
|
||||
struct PlayerStateLongJump* mPlayerStateLongJump;
|
||||
struct PlayerStateFallHakoniwa* mPlayerStateFallHakoniwa;
|
||||
struct PlayerStateSandSink* mPlayerStateSandSink;
|
||||
struct ActorStateSandGeyser* mActorStateSandGeyser;
|
||||
struct PlayerStateRise* mPlayerStateRise;
|
||||
struct PlayerStateSwim* mPlayerStateSwim;
|
||||
struct PlayerStateDamageLife* mPlayerStateDamageLife;
|
||||
struct PlayerStateDamageSwim* mPlayerStateDamageSwim;
|
||||
struct PlayerStateDamageFire* mPlayerStateDamageFire;
|
||||
struct PlayerStatePress* mPlayerStatePress;
|
||||
struct PlayerStateBind* mPlayerStateBind;
|
||||
struct PlayerStateHack* mPlayerStateHack;
|
||||
struct PlayerStateEndHack* mPlayerStateEndHack;
|
||||
struct PlayerStateCameraSubjective* mPlayerStateCameraSubjective;
|
||||
struct PlayerStateAbyss* mPlayerStateAbyss;
|
||||
struct PlayerJudgeAirForceCount* mPlayerJudgeAirForceCount;
|
||||
struct PlayerJudgeCameraSubjective* mPlayerJudgeCameraSubjective;
|
||||
struct PlayerJudgeCapCatchPop* mPlayerJudgeCapCatchPop;
|
||||
struct PlayerJudgeDeadWipeStart* mPlayerJudgeDeadWipeStart;
|
||||
struct PlayerJudgeDirectRolling* mPlayerJudgeDirectRolling;
|
||||
struct PlayerJudgeEnableStandUp* mPlayerJudgeEnableStandUp;
|
||||
struct PlayerJudgeForceLand* mPlayerJudgeForceLand;
|
||||
struct PlayerJudgeForceSlopeSlide* mPlayerJudgeForceSlopeSlide;
|
||||
struct PlayerJudgeForceRolling* mPlayerJudgeForceRolling;
|
||||
struct PlayerJudgeGrabCeil* mPlayerJudgeGrabCeil;
|
||||
struct PlayerJudgeInWater* mPlayerJudgeInWater1;
|
||||
struct PlayerJudgeInWater* mPlayerJudgeInWater2;
|
||||
struct PlayerJudgeInWater* mPlayerJudgeInWater3;
|
||||
struct PlayerJudgeInWater* mPlayerJudgeInWater4;
|
||||
struct PlayerJudgeInvalidateInputFall* mPlayerJudgeInvalidateInputFall;
|
||||
struct PlayerJudgeLongFall* mPlayerJudgeLongFall;
|
||||
struct PlayerJudgeOutInWater* mPlayerJudgeOutInWater;
|
||||
struct PlayerJudgeRecoveryLifeFast* mPlayerJudgeRecoveryLifeFast;
|
||||
struct PlayerJudgeSandSink* mPlayerJudgeSandSink;
|
||||
struct PlayerJudgeSpeedCheckFall* mPlayerJudgeSpeedCheckFall;
|
||||
struct PlayerJudgeStartHipDrop* mPlayerJudgeStartHipDrop;
|
||||
struct PlayerJudgeStartRise* mPlayerJudgeStartRise;
|
||||
struct PlayerJudgeStartRolling* mPlayerJudgeStartRolling;
|
||||
struct PlayerJudgeStartRun* mPlayerJudgeStartRun;
|
||||
struct PlayerJudgeStartSquat* mPlayerJudgeStartSquat;
|
||||
struct PlayerJudgeStartWaterSurfaceRun* mPlayerJudgeStartWaterSurfaceRun;
|
||||
struct PlayerJudgeSlopeSlide* mPlayerJudgeSlopeSlide;
|
||||
struct PlayerJudgePoleClimb* mPlayerJudgePoleClimb;
|
||||
struct PlayerJudgePreInputJump* mPlayerJudgePreInputJump;
|
||||
struct PlayerJudgePreInputCapThrow* mPlayerJudgePreInputCapThrow;
|
||||
struct PlayerJudgePreInputHackAction* mPlayerJudgePreInputHackAction;
|
||||
struct HackCapJudgePreInputHoveringJump* mHackCapJudgePreInputHoveringJump;
|
||||
struct HackCapJudgePreInputSeparateThrow* mHackCapJudgePreInputSeparateThrow;
|
||||
struct HackCapJudgePreInputSeparateJump* mHackCapJudgePreInputSeparateJump;
|
||||
struct PlayerJudgeWallCatch* mPlayerJudgeWallCatch;
|
||||
struct PlayerJudgeWallCatchInputDir* mPlayerJudgeWallCatchInputDir;
|
||||
struct PlayerJudgeWallHitDown* mPlayerJudgeWallHitDown;
|
||||
struct PlayerJudgeWallHitDownForceRun* mPlayerJudgeWallHitDownForceRun;
|
||||
struct PlayerJudgeWallHitDownRolling* mPlayerJudgeWallHitDownRolling;
|
||||
struct PlayerJudgeWallKeep* mPlayerJudgeWallKeep;
|
||||
void* gap_2;
|
||||
};
|
|
@ -0,0 +1,9 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/resource/Resource.h"
|
||||
#include "game/Player/PlayerCostumeInfo.h"
|
||||
|
||||
namespace PlayerCostumeFunction {
|
||||
PlayerBodyCostumeInfo *createBodyCostumeInfo(al::Resource *,char const*);
|
||||
PlayerHeadCostumeInfo *createHeadCostumeInfo(al::Resource *,char const*,bool);
|
||||
}
|
|
@ -1,11 +1,26 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "al/actor/ActorInitInfo.h"
|
||||
#include "al/actor/SubActorKeeper.h"
|
||||
#include "al/byaml/ByamlIter.h"
|
||||
#include "al/model/ModelCtrl.h"
|
||||
#include "al/model/ModelMaterialCategory.h"
|
||||
#include "al/model/PartsModel.h"
|
||||
#include "al/resource/ActorResource.h"
|
||||
#include "al/string/StringTmp.h"
|
||||
#include "al/util.hpp"
|
||||
#include "al/util/LiveActorUtil.h"
|
||||
#include "al/util/ResourceUtil.h"
|
||||
|
||||
#include "game/Player/PlayerCostumeFunction.h"
|
||||
#include "game/Player/PlayerJointControlPartsDynamics.h"
|
||||
#include "game/Player/PlayerConst.h"
|
||||
|
||||
#include "rs/util/LiveActorUtil.h"
|
||||
|
||||
#include "PlayerCostumeInfo.h"
|
||||
#include "math/seadVector.h"
|
||||
|
||||
namespace al {
|
||||
class Resource;
|
||||
|
@ -31,7 +46,33 @@ class PlayerFunction
|
|||
static al::Resource *initCapModelActor(al::LiveActor *, al::ActorInitInfo const &, char const *);
|
||||
static al::Resource *initCapModelActorDemo(al::LiveActor *, al::ActorInitInfo const &, char const *);
|
||||
static PlayerCostumeInfo *initMarioModelActor(al::LiveActor *player, const al::ActorInitInfo &initInfo, const char *modelName, const char *capType, al::AudioKeeper *keeper, bool isCloset);
|
||||
// joint, init, pconst, nosescale, earscale
|
||||
static PlayerCostumeInfo *initMarioModelActorDemo(PlayerJointControlPartsDynamics **jointCtrlPtr, al::LiveActor *player, const al::ActorInitInfo &initInfo, char const *bodyName, char const *capName, PlayerConst const *pConst,sead::Vector3f *noseScale, sead::Vector3f *earScale, bool isCloset);
|
||||
static PlayerCostumeInfo *initMarioModelCommon(al::LiveActor *player, const al::ActorInitInfo &initInfo, char const *bodyName, char const *capName, int subActorNum, bool isDemo, al::AudioKeeper *audioKeeper, bool guessIsChromaKey, bool isCloset);
|
||||
|
||||
static PlayerCostumeInfo* initMarioModelActorDemo(PlayerJointControlPartsDynamics** jointCtrlPtr,
|
||||
al::LiveActor* player, const al::ActorInitInfo& initInfo,
|
||||
char const* bodyName, char const* capName,
|
||||
PlayerConst const* pConst, sead::Vector3f* noseScale,
|
||||
sead::Vector3f* earScale, bool isCloset);
|
||||
|
||||
static PlayerCostumeInfo* initMarioModelCommon(al::LiveActor* player,
|
||||
const al::ActorInitInfo& initInfo,
|
||||
char const* bodyName, char const* capName,
|
||||
int subActorNum, bool isDemo,
|
||||
al::AudioKeeper* audioKeeper,
|
||||
bool guessIsChromaKey, bool isCloset);
|
||||
// not a real symbol, func at 0x445A24
|
||||
static void initMarioAudio(al::LiveActor* player, const al::ActorInitInfo& initInfo,
|
||||
al::Resource* modelRes, bool isDemo,
|
||||
al::AudioKeeper* audioKeeper);
|
||||
// not a real symbol, func at 0x448B8C
|
||||
static void initMarioSubModel(al::LiveActor* subactor, const al::ActorInitInfo& initInfo,
|
||||
bool isInvisible, bool isDemo, bool isChromaKey,
|
||||
bool isCloset);
|
||||
// not a real symbol, func at 0x445128
|
||||
static PlayerHeadCostumeInfo* initMarioHeadCostumeInfo(al::LiveActor* player,
|
||||
const al::ActorInitInfo& initInfo,
|
||||
const char*, const char*,
|
||||
const char*, const char*, bool, bool,
|
||||
bool, bool, bool);
|
||||
// not a real symbol, func at 0x445DF4
|
||||
static void initMarioDepthModel(al::LiveActor *player, bool isDemo, bool isChromaKey);
|
||||
};
|
|
@ -9,6 +9,10 @@
|
|||
#include "PlayerCostumeInfo.h"
|
||||
#include "PlayerModelChangerHakoniwa.h"
|
||||
|
||||
namespace al {
|
||||
struct FootPrintHolder;
|
||||
}
|
||||
|
||||
class PlayerInfo {
|
||||
public:
|
||||
PlayerInfo();
|
||||
|
@ -26,7 +30,7 @@ class PlayerInfo {
|
|||
struct PlayerJointControlKeeper *pJoinControlKeeper; // 0x50
|
||||
struct PlayerCounterIceWater *pCounterIceWater; // 0x58
|
||||
struct PlayerStainControl *pStainControl; // 0x60
|
||||
struct FootPrintHolder *mFootPrintHolder; // 0x68
|
||||
al::FootPrintHolder *mFootPrintHolder; // 0x68
|
||||
al::HitSensor *mHitSensor; // 0x70
|
||||
struct PlayerFormSensorCollisionArranger *pSensorCollArranger; // 0x78
|
||||
PlayerInput *pInput; // 0x80
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
#pragma once
|
||||
|
||||
#include "game/GameData/GameDataHolder.h"
|
||||
|
||||
namespace SaveDataAccessFunction {
|
||||
void startSaveDataInit(GameDataHolder *);
|
||||
void startSaveDataInitSync(GameDataHolder *);
|
||||
void startSaveDataLoadFile(GameDataHolder *);
|
||||
void startSaveDataReadSync(GameDataHolder *);
|
||||
void startSaveDataReadAll(GameDataHolder *);
|
||||
void startSaveDataWrite(GameDataHolder *);
|
||||
void startSaveDataWriteWithWindow(GameDataHolder *);
|
||||
void startSaveDataCopyWithWindow(GameDataHolder *,int,int);
|
||||
void startSaveDataDeleteWithWindow(GameDataHolder *,int);
|
||||
void startSaveDataWriteSync(GameDataHolder *);
|
||||
bool updateSaveDataAccess(GameDataHolder *,bool);
|
||||
bool isEnableSave(GameDataHolder const*);
|
||||
bool isDoneSave(GameDataHolder *);
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
#pragma once
|
||||
|
||||
#include "al/LiveActor/LiveActor.h"
|
||||
#include "al/scene/ISceneObj.h"
|
||||
|
||||
class RouteGuideDirector : public al::LiveActor, public al::ISceneObj {
|
||||
public:
|
||||
RouteGuideDirector();
|
||||
|
||||
void initAfterPlacementSceneObj(al::ActorInitInfo const&) override;
|
||||
|
||||
bool isValidate(void) const;
|
||||
void offGuideSystem(void);
|
||||
void deactivateGuide(void);
|
||||
void onGuideSystem(void);
|
||||
void activateGuide(void);
|
||||
void offGuideByActor(al::LiveActor *);
|
||||
void addInvidateList(al::LiveActor *);
|
||||
void onGuideByActor(al::LiveActor *);
|
||||
void removeInvidateList(al::LiveActor const*);
|
||||
void addRouteGuidePointBufferCount(int);
|
||||
void registerRouteGuidePoint(struct RouteGuidePoint *);
|
||||
void addRouteGuideArrowBufferCount(int);
|
||||
void registerRouteGuideArrow(struct RouteGuideArrowBase*);
|
||||
|
||||
void exeOff(void);
|
||||
void exeOn(void);
|
||||
|
||||
virtual const char* getSceneObjName() override;
|
||||
virtual void initSceneObj(void) override;
|
||||
};
|
|
@ -0,0 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
class SequenceFactory {
|
||||
public:
|
||||
static void createSequence(const char *);
|
||||
};
|
|
@ -4,22 +4,113 @@
|
|||
#include "game/StageScene/StageSceneLayout.h"
|
||||
#include "game/StageScene/StageSceneStatePauseMenu.h"
|
||||
|
||||
#define INHERITSIZE sizeof(al::Scene)
|
||||
namespace al {
|
||||
struct LayoutTextureRenderer;
|
||||
struct SimpleAudioUser;
|
||||
struct ParabolicPath;
|
||||
struct DemoSyncedEventKeeper;
|
||||
struct ChromakeyDrawer;
|
||||
struct WipeHolder;
|
||||
}
|
||||
|
||||
class StageScene : public al::Scene
|
||||
{
|
||||
public:
|
||||
bool isPause() const;
|
||||
// 0x88 StageResourceKeeper *
|
||||
// 0x90 LiveActorKit *
|
||||
// 0x98 LayoutKit *
|
||||
// 0xA0 SceneObjHolder *
|
||||
// 0xA8 SceneStopCtrl *
|
||||
|
||||
unsigned char padding_180[0x180 - INHERITSIZE];
|
||||
StageSceneStatePauseMenu *mStatePauseMenu; // 0x180
|
||||
unsigned char padding_2D0[0x148];
|
||||
GameDataHolderAccessor mHolder; // 0x2D0
|
||||
unsigned char padding_2F8[0x20];
|
||||
StageSceneLayout *stageSceneLayout; // 0x2F8
|
||||
sead::FixedSafeString<0x40> mStageName;
|
||||
int field_130;
|
||||
struct StageSceneStateWorldMap *field_138;
|
||||
struct StageSceneStateShop *field_140;
|
||||
struct StageSceneStateSnapShot *field_148;
|
||||
struct StageSceneStateGetShine *field_150;
|
||||
struct StageSceneStateGetShineMain *field_158;
|
||||
struct StageSceneStateGetShineGrand *field_160;
|
||||
struct StageSceneStateCollectBgm *field_168;
|
||||
struct StageSceneStateCollectionList *field_170;
|
||||
struct StageSceneStateMiniGameRanking *field_178;
|
||||
struct StageSceneStatePauseMenu *field_180;
|
||||
struct StageSceneStateCloset *field_188;
|
||||
struct StageSceneStateSkipDemo *field_190;
|
||||
struct StageSceneStateCheckpointWarp *field_198;
|
||||
struct StageSceneStateCarryMeat *field_1A0;
|
||||
void *field_1A8;
|
||||
void *field_1B0;
|
||||
struct StageSceneStateMiss *field_1B8;
|
||||
struct StageSceneStateYukimaruRace *field_1C0;
|
||||
struct StageSceneStateYukimaruRaceTutorial *field_1C8;
|
||||
struct StageSceneStateRaceManRace *field_1D0;
|
||||
struct StageSceneStateRadicon *field_1D8;
|
||||
struct StageSceneStateScenarioCamera *field_1E0;
|
||||
struct StageSceneStateRecoverLife *field_1E8;
|
||||
struct StageSceneStateGetShineMainSandWorld *field_1F0;
|
||||
void *field_1F8;
|
||||
struct StageSceneStateWarp *field_200;
|
||||
void *field_208;
|
||||
struct ScenarioStartCameraHolder *field_210;
|
||||
sead::FixedSafeString<0x40> field_218;
|
||||
sead::FixedSafeString<0x40> field_270;
|
||||
void *qword2C8;
|
||||
GameDataHolderAccessor mHolder;
|
||||
void *qword2D8;
|
||||
al::LayoutTextureRenderer *qword2E0;
|
||||
struct PlayGuideSkip *qword2E8;
|
||||
struct CinemaCaption *qword2F0;
|
||||
StageSceneLayout *mSceneLayout;
|
||||
char field_300;
|
||||
char field_301;
|
||||
al::SimpleLayoutAppearWaitEnd *char308;
|
||||
al::SimpleLayoutAppearWaitEnd *field_310;
|
||||
al::SimpleLayoutAppearWaitEnd *field_318;
|
||||
struct ControllerGuideSnapShotCtrl *field_320;
|
||||
InputSeparator *field_328;
|
||||
al::WipeSimple *field_330;
|
||||
al::WipeHolder *field_338;
|
||||
void *field_340;
|
||||
al::WindowConfirm *field_348;
|
||||
struct MiniGameMenu *field_350;
|
||||
bool field_358;
|
||||
char gap359[15];
|
||||
char char368;
|
||||
struct MapLayout *field_370;
|
||||
al::SimpleLayoutAppearWaitEnd *field_378;
|
||||
al::LiveActorGroup *field_380;
|
||||
void *field_388;
|
||||
void *mKoopaLv1Actor;
|
||||
struct TimeBalloonNpc *mTimeBalloonNpc;
|
||||
struct ProjectItemDirector *field_3A0;
|
||||
struct Pyramid *field_3A8;
|
||||
void *field_3B0;
|
||||
al::Nerve *field_3B8;
|
||||
SceneAudioSystemPauseController *field_3C0;
|
||||
struct DemoSoundSynchronizer *mDemoSoundSynchronizer;
|
||||
al::SimpleAudioUser *mStageStartAtmosSe;
|
||||
al::SimpleAudioUser *mSePlayArea;
|
||||
al::SimpleAudioUser *mSnapShotCameraCtrlAudio;
|
||||
struct ProjectSeNamedList *field_3E8;
|
||||
void *field_3F0;
|
||||
struct TimeBalloonDirector *mTimeBalloonDirector;
|
||||
struct TimeBalloonSequenceInfo *mTimeBalloonSequenceInfo;
|
||||
void *qword408;
|
||||
void *qword410;
|
||||
sead::Vector3f qword418;
|
||||
sead::Vector3f qword424;
|
||||
void *qword430;
|
||||
int dword438;
|
||||
const al::LiveActor *field_440;
|
||||
al::ParabolicPath *field_448;
|
||||
al::LiveActor *field_450;
|
||||
void *qword458;
|
||||
int dword460;
|
||||
struct CollectBgmPlayer *qword468;
|
||||
struct CollectBgmRegister *qword470;
|
||||
struct BgmAnimeSyncDirector *qword478;
|
||||
al::DemoSyncedEventKeeper *field_480;
|
||||
void *field_488;
|
||||
int field_490;
|
||||
struct NpcEventDirector *qword498;
|
||||
al::ChromakeyDrawer *field_4A0;
|
||||
void *qword4A8;
|
||||
ProjectNfpDirector *qword4B0;
|
||||
void *qword4B8;
|
||||
};
|
||||
|
|
|
@ -44,7 +44,7 @@ class StageSceneLayout : public al::NerveStateBase {
|
|||
void startShineChipCompleteAnim(void);
|
||||
void tryStartDemoGetLifeMaxUpItem(bool);
|
||||
void startCloset(void);
|
||||
void startShineCountAnim(bool);
|
||||
void startShineCountAnim(bool isGameClear);
|
||||
|
||||
void exeAppear(void);
|
||||
void exeWait(void);
|
||||
|
|
|
@ -125,4 +125,6 @@ class StageSceneStateOption : public al::HostStateBase<al::Scene>, public al::IU
|
|||
bool field_0x180;
|
||||
al::MessageSystem *mMsgSystem;
|
||||
InputSeparator *mInputSeperator;
|
||||
};
|
||||
};
|
||||
|
||||
static_assert(sizeof(StageSceneStateOption) == 0x198, "StageSceneStateOption Size");
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include "logger.hpp"
|
||||
#include "server/gamemode/GameModeConfigMenu.hpp"
|
||||
#include "server/gamemode/GameModeConfigMenuFactory.hpp"
|
||||
|
||||
class FooterParts;
|
||||
|
||||
|
@ -28,8 +29,8 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
|
|||
enum ServerConfigOption {
|
||||
GAMEMODECONFIG,
|
||||
GAMEMODESWITCH,
|
||||
RECONNECT,
|
||||
SETIP
|
||||
SETIP,
|
||||
SETPORT
|
||||
};
|
||||
|
||||
virtual al::MessageSystem* getMessageSystem(void) const override;
|
||||
|
@ -38,10 +39,11 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
|
|||
virtual void kill(void) override;
|
||||
|
||||
void exeMainMenu();
|
||||
void exeOpenKeyboard();
|
||||
void exeRestartServer();
|
||||
void exeOpenKeyboardIP();
|
||||
void exeOpenKeyboardPort();
|
||||
void exeGamemodeConfig();
|
||||
void exeGamemodeSelect();
|
||||
void exeSaveData();
|
||||
|
||||
void endSubMenu();
|
||||
|
||||
|
@ -58,25 +60,30 @@ class StageSceneStateServerConfig : public al::HostStateBase<al::Scene>, public
|
|||
|
||||
SimpleLayoutMenu* mCurrentMenu = nullptr;
|
||||
CommonVerticalList* mCurrentList = nullptr;
|
||||
// Root Page, contains buttons for gamemode config, server reconnecting, and server ip address changing
|
||||
// Root Page, contains buttons for gamemode config, and server ip address changing
|
||||
SimpleLayoutMenu* mMainOptions = nullptr;
|
||||
CommonVerticalList *mMainOptionsList = nullptr;
|
||||
// Sub-Page for Mode configuration, has buttons for selecting current gamemode and configuring currently selected mode (if no mode is chosen, button will not do anything)
|
||||
SimpleLayoutMenu* mGamemodeConfig = nullptr;
|
||||
CommonVerticalList* mGameModeConfigList = nullptr;
|
||||
// Sub-Page of Mode config, used to select a gamemode for the client to use
|
||||
SimpleLayoutMenu* mModeSelect = nullptr;
|
||||
CommonVerticalList* mModeSelectList = nullptr;
|
||||
// Controls what shows up in specific gamemode config page
|
||||
GameModeConfigMenu *mGamemodeConfigMenu = nullptr;
|
||||
|
||||
// Sub-Pages for Mode configuration, has buttons for selecting current gamemode and configuring currently selected mode (if no mode is chosen, button will not do anything)
|
||||
struct GameModeEntry {
|
||||
GameModeConfigMenu* mMenu;
|
||||
SimpleLayoutMenu* mLayout = nullptr;
|
||||
CommonVerticalList* mList = nullptr;
|
||||
};
|
||||
sead::SafeArray<GameModeEntry, GameModeConfigMenuFactory::getMenuCount()> mGamemodeConfigMenus;
|
||||
GameModeEntry *mGamemodeConfigMenu = nullptr;
|
||||
|
||||
bool mIsDecideConfig = false;
|
||||
};
|
||||
|
||||
namespace {
|
||||
NERVE_HEADER(StageSceneStateServerConfig, MainMenu)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, OpenKeyboard)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, RestartServer)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, OpenKeyboardIP)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, OpenKeyboardPort)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, GamemodeConfig)
|
||||
NERVE_HEADER(StageSceneStateServerConfig, GamemodeSelect)
|
||||
}
|
||||
NERVE_HEADER(StageSceneStateServerConfig, SaveData)
|
||||
}
|
||||
|
|
|
@ -37,8 +37,8 @@ namespace al {
|
|||
al::GameDrawInfo *mDrawInfo; // 0x38 from Application::sInstance + 0x30
|
||||
ProjectNfpDirector *mProjNfpDirector; // 0x48
|
||||
al::HtmlViewer *mHtmlViewer; // 0x50
|
||||
ApplicationMessageReceiver *mMessageReciever; // 0x58
|
||||
ApplicationMessageReceiver *mMessageReceiver; // 0x58
|
||||
al::WaveVibrationHolder *mWaveVibrationHolder; // 0x60
|
||||
void *gap2;
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,48 @@
|
|||
#pragma once
|
||||
|
||||
class WorldResourceLoader {
|
||||
public:
|
||||
void loadWorldResource(int,int,bool,char const *);
|
||||
bool requestLoadWorldHomeStageResource(int worldIndex, int scenario);
|
||||
};
|
||||
#include "al/async/AsyncFunctorThread.h"
|
||||
#include "al/hio/HioNode.h"
|
||||
#include "game/GameData/GameDataHolder.h"
|
||||
#include "heap/seadHeap.h"
|
||||
|
||||
|
||||
class WorldResourceLoader : public al::HioNode {
|
||||
public:
|
||||
WorldResourceLoader(GameDataHolder *);
|
||||
virtual ~WorldResourceLoader();
|
||||
|
||||
void loadResource(void);
|
||||
void cancelLoadWorldResource(void);
|
||||
void tryDestroyWorldResource(void);
|
||||
bool requestLoadWorldHomeStageResource(int worldIndex, int scenario);
|
||||
bool isEndLoadWorldResource(void) const; // { return mResourceLoadThread->isDone(); };
|
||||
void requestLoadWorldResourceCommon(int);
|
||||
void requestLoadWorldResource(int);
|
||||
void createResourcePlayer(void);
|
||||
void tryDestroyWorldResourceOnlyCap(void);
|
||||
void calcLoadPercent(void);
|
||||
void getLoadWorldId(void);
|
||||
bool tryLoadResource(char const*,char const*,char const*);
|
||||
void loadWorldResource(int,int,bool,char const*);
|
||||
void calcWorldResourceHeapSize(void);
|
||||
|
||||
al::AsyncFunctorThread* mResourceLoadThread; // 0x8
|
||||
sead::Heap* mWorldResHeap = nullptr; // 0x10
|
||||
sead::Heap* mCapHeap = nullptr; // 0x18
|
||||
sead::Heap* mWaterfallHeap = nullptr; // 0x20
|
||||
int mCurWorld = -1; // 0x28
|
||||
int mCurScenario = -1; // 0x2C
|
||||
bool unkBool = true; // 0x30
|
||||
bool mIsCancelLoad = true; // 0x31
|
||||
void *unkPtr4 = nullptr; // 0x38
|
||||
void* unkPtr5 = nullptr; // 0x40
|
||||
int unkInt3 = 0; // 0x48
|
||||
bool unkBool3 = true; // 0x4C
|
||||
int unkInt4 = 0; // 0x50
|
||||
int unkInt5 = 1; // 0x5C
|
||||
GameDataHolder* mDataHolder; // 0x58
|
||||
bool mIsDoneLoadingArcs = false; // 0x60
|
||||
int mArcCount = 0; // 0x64
|
||||
};
|
||||
|
||||
static_assert(sizeof(WorldResourceLoader) == 0x68, "WorldResourceLoader size");
|
|
@ -14,14 +14,6 @@
|
|||
|
||||
#include "game/GameData/GameDataFunction.h"
|
||||
|
||||
#define RAD(deg) (deg * (M_PI / 180)) // converts Degrees to Radians
|
||||
#define DEG(rad) (rad * (180 / M_PI)) // converts Radians to Degrees
|
||||
#define BTOC(bool) (bool ? "True" : "False") // converts boolean to true/false char
|
||||
#define ACNT(arr) (sizeof(arr) / sizeof(arr[0])) // returns size of inputted array
|
||||
// used to convert macro values to strings
|
||||
#define STRINGIFY(x) #x
|
||||
#define TOSTRING(x) STRINGIFY(x)
|
||||
|
||||
bool isPartOf(const char* w1, const char* w2);
|
||||
|
||||
int indexOf(char *w1, char c1);
|
||||
|
|
|
@ -51,8 +51,6 @@
|
|||
#include "Keyboard.hpp"
|
||||
#include "server/DeltaTime.hpp"
|
||||
|
||||
static const int playBufSize = 8;
|
||||
|
||||
static bool isInGame = false;
|
||||
|
||||
static bool debugMode = false;
|
||||
|
|
|
@ -33,7 +33,11 @@ namespace nn
|
|||
return *this;
|
||||
}
|
||||
|
||||
inline void print() {
|
||||
inline bool isEmpty() const {
|
||||
return *this == EmptyId;
|
||||
}
|
||||
|
||||
inline void print() const {
|
||||
Logger::log("Player ID: 0x");
|
||||
Logger::disableName();
|
||||
for (size_t i = 0; i < 0x10; i++) { Logger::log("%02X", data[i]); }
|
||||
|
@ -41,13 +45,15 @@ namespace nn
|
|||
Logger::enableName();
|
||||
}
|
||||
|
||||
inline void print(const char *prefix) {
|
||||
inline void print(const char *prefix) const {
|
||||
Logger::log("%s: 0x", prefix);
|
||||
Logger::disableName();
|
||||
for (size_t i = 0; i < 0x10; i++) { Logger::log("%02X", data[i]); }
|
||||
Logger::log("\n");
|
||||
Logger::enableName();
|
||||
}
|
||||
|
||||
static const Uid EmptyId;
|
||||
};
|
||||
|
||||
typedef u64 NetworkServiceAccountId;
|
||||
|
|
|
@ -2,6 +2,12 @@
|
|||
|
||||
#include "../types.h"
|
||||
|
||||
struct pollfd
|
||||
{
|
||||
s32 fd;
|
||||
s16 events;
|
||||
s16 revents;
|
||||
};
|
||||
|
||||
struct in_addr
|
||||
{
|
||||
|
@ -17,6 +23,15 @@ struct sockaddr
|
|||
u8 _8[8]; // 8
|
||||
};
|
||||
|
||||
struct hostent
|
||||
{
|
||||
char* h_name;
|
||||
char** h_aliases;
|
||||
int h_addrtype;
|
||||
int h_length;
|
||||
char** h_addr_list;
|
||||
};
|
||||
|
||||
|
||||
namespace nn { namespace socket {
|
||||
|
||||
|
@ -29,9 +44,19 @@ s32 Connect(s32 socket, const sockaddr* address, u32 addressLen);
|
|||
Result Close(s32 socket);
|
||||
|
||||
s32 Send(s32 socket, const void* data, ulong dataLen, s32 flags);
|
||||
s32 SendTo(s32 socket, const void* data, ulong dataLen, s32 flags, const struct sockaddr* to, u32 toLen);
|
||||
s32 Recv(s32 socket, void* out, ulong outLen, s32 flags);
|
||||
s32 RecvFrom(s32 socket, void* out, ulong outLen, s32 flags, struct sockaddr* from, u32* fromLen);
|
||||
|
||||
s32 GetSockName(s32 socket, struct sockaddr* name, u32* dataLen);
|
||||
u16 InetHtons(u16 val);
|
||||
u16 InetNtohs(u16 val);
|
||||
s32 InetAton(const char* addressStr, in_addr* addressOut);
|
||||
|
||||
struct hostent* GetHostByName(const char* name);
|
||||
|
||||
u32 GetLastErrno();
|
||||
s32 Bind(s32 fd, sockaddr* addr, u32 addrlen);
|
||||
s32 Poll(struct pollfd* fd, u64 addr, s32 timeout);
|
||||
|
||||
} }
|
||||
|
|
|
@ -2,13 +2,23 @@
|
|||
|
||||
#include <cstdint>
|
||||
#include <cstdlib>
|
||||
#include "types.h"
|
||||
typedef unsigned long int ulong;
|
||||
typedef unsigned short int ushort;
|
||||
typedef unsigned int uint;
|
||||
typedef unsigned char uchar;
|
||||
|
||||
namespace nn
|
||||
{
|
||||
namespace nn {
|
||||
|
||||
namespace applet {
|
||||
enum ExitReason {
|
||||
Normal = 0,
|
||||
Canceled = 1,
|
||||
Abnormal = 2,
|
||||
Unexpected = 10
|
||||
};
|
||||
}
|
||||
|
||||
namespace swkbd
|
||||
{
|
||||
enum Preset
|
||||
|
@ -103,40 +113,18 @@ namespace nn
|
|||
Max_DictionaryLang
|
||||
};
|
||||
|
||||
enum CloseResult
|
||||
{
|
||||
Enter,
|
||||
Cancel
|
||||
};
|
||||
|
||||
struct DictionaryInfo
|
||||
{
|
||||
uint offset; // 0x0
|
||||
ushort size; // 0x4
|
||||
DictionaryLang lang; // 0x6
|
||||
};
|
||||
|
||||
// KeyboardMode keyboardMode; // 0x0
|
||||
// const char okText[0x8]; // 0x8
|
||||
// char leftOptionalSymbolKey; // 0x10
|
||||
// char rightOptionalSymbolKey; // 0x12
|
||||
// bool isPredictionEnabled; // 0x14
|
||||
// InvalidChar invalidCharFlag; // 0x18
|
||||
// InitialCursorPos initialCursorPos; // 0x1C
|
||||
// const char headerText[0x40]; // 0x20
|
||||
// const char subText[0x80]; // 0x28
|
||||
// const char guideText[0x100]; // 0x30
|
||||
// int textMaxLength; // 0x38
|
||||
// int textMinLength; // 0x3C
|
||||
// PasswordMode passwordMode; // 0x40
|
||||
// InputFormMode inputFormMode; // 0x44
|
||||
// bool isUseNewLine; // 0x48
|
||||
// bool isUseUtf8; // 0x49
|
||||
// bool isUseBlurBackground; // 0x4A
|
||||
// int _initialStringOffset; // 0x4C
|
||||
// int _initialStringLength; // 0x50
|
||||
// int _userDictionaryOffset; // 0x54
|
||||
// int _userDictionaryNum; // 0x58
|
||||
// bool _isUseTextCheck; // 0x5C
|
||||
// void *_textCheckCallback; // 0x60
|
||||
// int* separateTextPos; // 0x68
|
||||
// DictionaryInfo* _customizedDicInfoList; // 0x70
|
||||
// unsigned char _customizedDicCount; // 0x78
|
||||
// unsigned char* _reserved; // 0x80
|
||||
|
||||
struct KeyboardConfig
|
||||
{
|
||||
|
@ -193,6 +181,7 @@ namespace nn
|
|||
|
||||
ulong GetRequiredWorkBufferSize(bool);
|
||||
ulong GetRequiredStringBufferSize(void);
|
||||
nn::applet::ExitReason getExitReason();
|
||||
void MakePreset(nn::swkbd::KeyboardConfig *,nn::swkbd::Preset);
|
||||
//void SetHeaderText(nn::swkbd::KeyboardConfig *,char16_t const*);
|
||||
//void SetSubText(nn::swkbd::KeyboardConfig*, char16_t const*);
|
||||
|
@ -211,7 +200,9 @@ namespace nn
|
|||
void SetInitialText(nn::swkbd::ShowKeyboardArg *,char16_t const*);
|
||||
void SetInitialTextUtf8(nn::swkbd::ShowKeyboardArg *,char const*);
|
||||
//void SetUserWordList(nn::swkbd::ShowKeyboardArg *,nn::swkbd::UserWord const*,int);
|
||||
void ShowKeyboard(nn::swkbd::String *,nn::swkbd::ShowKeyboardArg const&);
|
||||
int ShowKeyboard(nn::swkbd::String*, nn::swkbd::ShowKeyboardArg const&);
|
||||
|
||||
__attribute__((used)) static nn::applet::ExitReason g_ExitReason;
|
||||
|
||||
} // namespace swkbd
|
||||
} // namespace nn
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
; Disable uploading error reports to Nintendo
|
||||
[eupld]
|
||||
; upload_enabled = u8!0x0
|
||||
; Control whether RO should ease its validation of NROs.
|
||||
; (note: this is normally not necessary, and ips patches can be used.)
|
||||
[ro]
|
||||
; ease_nro_restriction = u8!0x1
|
||||
; Atmosphere custom settings
|
||||
[atmosphere]
|
||||
; Reboot from fatal automatically after some number of milliseconds.
|
||||
; If field is not present or 0, fatal will wait indefinitely for user input.
|
||||
; fatal_auto_reboot_interval = u64!0x0
|
||||
; Make the power menu's "reboot" button reboot to payload.
|
||||
; Set to "normal" for normal reboot, "rcm" for rcm reboot.
|
||||
; power_menu_reboot_function = str!payload
|
||||
; Controls whether dmnt cheats should be toggled on or off by
|
||||
; default. 1 = toggled on by default, 0 = toggled off by default.
|
||||
; dmnt_cheats_enabled_by_default = u8!0x1
|
||||
; Controls whether dmnt should always save cheat toggle state
|
||||
; for restoration on new game launch. 1 = always save toggles,
|
||||
; 0 = only save toggles if toggle file exists.
|
||||
; dmnt_always_save_cheat_toggles = u8!0x0
|
||||
; Enable writing to BIS partitions for HBL.
|
||||
; This is probably undesirable for normal usage.
|
||||
; enable_hbl_bis_write = u8!0x0
|
||||
; Enable reading the CAL0 partition for HBL.
|
||||
; This is probably undesirable for normal usage.
|
||||
; enable_hbl_cal_read = u8!0x0
|
||||
; Controls whether fs.mitm should redirect save files
|
||||
; to directories on the sd card.
|
||||
; 0 = Do not redirect, 1 = Redirect.
|
||||
; NOTE: EXPERIMENTAL
|
||||
; If you do not know what you are doing, do not touch this yet.
|
||||
; fsmitm_redirect_saves_to_sd = u8!0x0
|
||||
; Controls whether to enable the deprecated hid mitm
|
||||
; to fix compatibility with old homebrew.
|
||||
; 0 = Do not enable, 1 = Enable.
|
||||
; Please note this setting may be removed in a
|
||||
; future release of Atmosphere.
|
||||
; enable_deprecated_hid_mitm = u8!0x0
|
||||
; Controls whether am sees system settings "DebugModeFlag" as
|
||||
; enabled or disabled.
|
||||
; 0 = Disabled (not debug mode), 1 = Enabled (debug mode)
|
||||
; enable_am_debug_mode = u8!0x0
|
||||
[hbloader]
|
||||
; Controls the size of the homebrew heap when running as applet.
|
||||
; If set to zero, all available applet memory is used as heap.
|
||||
; The default is zero.
|
||||
; applet_heap_size = u64!0x0
|
||||
; Controls the amount of memory to reserve when running as applet
|
||||
; for usage by other applets. This setting has no effect if
|
||||
; applet_heap_size is non-zero. The default is 0x8600000.
|
||||
; applet_heap_reservation_size = u64!0x8600000
|
|
@ -0,0 +1,20 @@
|
|||
/**
|
||||
* @file svc.h
|
||||
* @brief Wrappers for kernel syscalls.
|
||||
* @copyright libnx Authors
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
extern "C" {
|
||||
|
||||
/**
|
||||
* @brief Outputs debug text, if used during debugging.
|
||||
* @param[in] str Text to output.
|
||||
* @param[in] size Size of the text in bytes.
|
||||
* @return Result code.
|
||||
* @note Syscall number 0x27.
|
||||
*/
|
||||
Result svcOutputDebugString(const char *str, u64 size);
|
||||
|
||||
|
||||
}
|
|
@ -2,12 +2,12 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct CaptureInf : Packet {
|
||||
struct PACKED CaptureInf : Packet {
|
||||
CaptureInf() : Packet() {
|
||||
this->mType = PacketType::CAPTUREINF;
|
||||
mPacketSize = sizeof(CaptureInf) - sizeof(Packet);
|
||||
};
|
||||
|
||||
char hackName[0x20] = {};
|
||||
|
||||
|
||||
};
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct ChangeStagePacket : Packet {
|
||||
struct PACKED ChangeStagePacket : Packet {
|
||||
ChangeStagePacket() : Packet() {
|
||||
this->mType = PacketType::CHANGESTAGE;
|
||||
mPacketSize = sizeof(ChangeStagePacket) - sizeof(Packet);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct CostumeInf : Packet {
|
||||
struct PACKED CostumeInf : Packet {
|
||||
CostumeInf() : Packet() {this->mType = PacketType::COSTUMEINF; mPacketSize = sizeof(CostumeInf) - sizeof(Packet);};
|
||||
CostumeInf(const char* body, const char* cap) : Packet() {
|
||||
this->mType = PacketType::COSTUMEINF;
|
||||
|
|
|
@ -3,10 +3,10 @@
|
|||
#include "Packet.h"
|
||||
#include "al/util.hpp"
|
||||
|
||||
struct GameInf : Packet {
|
||||
struct PACKED GameInf : Packet {
|
||||
GameInf() : Packet() {this->mType = PacketType::GAMEINF; mPacketSize = sizeof(GameInf) - sizeof(Packet);};
|
||||
bool is2D = false;
|
||||
u8 scenarioNo = -1;
|
||||
bool1 is2D = false;
|
||||
u8 scenarioNo = 255;
|
||||
char stageName[0x40] = {};
|
||||
|
||||
bool operator==(const GameInf &rhs) const {
|
||||
|
@ -19,4 +19,4 @@ struct GameInf : Packet {
|
|||
|
||||
bool operator!=(const GameInf& rhs) const { return !operator==(rhs); }
|
||||
|
||||
};
|
||||
};
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct HackCapInf : Packet {
|
||||
struct PACKED HackCapInf : Packet {
|
||||
HackCapInf() : Packet() {this->mType = PacketType::HACKCAPINF; mPacketSize = sizeof(HackCapInf) - sizeof(Packet);};
|
||||
sead::Vector3f capPos;
|
||||
sead::Quatf capQuat;
|
||||
bool isCapVisible = false;
|
||||
bool1 isCapVisible = false;
|
||||
char capAnim[PACKBUFSIZE] = {};
|
||||
};
|
|
@ -0,0 +1,7 @@
|
|||
#pragma once
|
||||
|
||||
#include "Packet.h"
|
||||
|
||||
struct PACKED HolePunch : Packet {
|
||||
HolePunch() : Packet() {this->mType = PacketType::HOLEPUNCH; mPacketSize = sizeof(HolePunch) - sizeof(Packet);};
|
||||
};
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct InitPacket : Packet {
|
||||
struct PACKED InitPacket : Packet {
|
||||
InitPacket() : Packet() {this->mType = PacketType::CLIENTINIT; mPacketSize = sizeof(InitPacket) - sizeof(Packet);};
|
||||
u16 maxPlayers = 0;
|
||||
};
|
|
@ -5,6 +5,8 @@
|
|||
|
||||
#include "nn/account.h"
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#define PACKBUFSIZE 0x30
|
||||
#define COSTUMEBUFSIZE 0x20
|
||||
|
||||
|
@ -23,12 +25,16 @@ enum PacketType : short {
|
|||
SHINECOLL,
|
||||
CAPTUREINF,
|
||||
CHANGESTAGE,
|
||||
CMD
|
||||
CMD,
|
||||
UDPINIT,
|
||||
HOLEPUNCH,
|
||||
End // end of enum for bounds checking
|
||||
};
|
||||
|
||||
// attribute otherwise the build log is spammed with unused warnings
|
||||
__attribute((used)) static const char *packetNames[] = {
|
||||
USED static const char *packetNames[] = {
|
||||
"Unknown",
|
||||
"Client Initialization",
|
||||
"Player Info",
|
||||
"Player Cap Info",
|
||||
"Game Info",
|
||||
|
@ -38,7 +44,10 @@ __attribute((used)) static const char *packetNames[] = {
|
|||
"Costume Info",
|
||||
"Moon Collection",
|
||||
"Capture Info",
|
||||
"Server Command"
|
||||
"Change Stage",
|
||||
"Server Command",
|
||||
"Udp Initialization",
|
||||
"Hole punch",
|
||||
};
|
||||
|
||||
enum SenderType {
|
||||
|
@ -59,7 +68,7 @@ static const char *senderNames[] = {
|
|||
};
|
||||
*/
|
||||
|
||||
struct Packet {
|
||||
struct PACKED Packet {
|
||||
nn::account::Uid mUserID; // User ID of the packet owner
|
||||
PacketType mType = PacketType::UNKNOWN;
|
||||
short mPacketSize = 0; // represents packet size without size of header
|
||||
|
@ -78,4 +87,6 @@ struct Packet {
|
|||
#include "packets/CaptureInf.h"
|
||||
#include "packets/HackCapInf.h"
|
||||
#include "packets/ChangeStagePacket.h"
|
||||
#include "packets/InitPacket.h"
|
||||
#include "packets/InitPacket.h"
|
||||
#include "packets/UdpPacket.h"
|
||||
#include "packets/HolePunchPacket.h"
|
||||
|
|
|
@ -2,9 +2,11 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct PlayerConnect : Packet {
|
||||
#include <cstdint>
|
||||
|
||||
struct PACKED PlayerConnect : Packet {
|
||||
PlayerConnect() : Packet() {this->mType = PacketType::PLAYERCON; mPacketSize = sizeof(PlayerConnect) - sizeof(Packet);};
|
||||
ConnectionTypes conType;
|
||||
u16 maxPlayerCount;
|
||||
u16 maxPlayerCount = USHRT_MAX;
|
||||
char clientName[COSTUMEBUFSIZE] = {};
|
||||
};
|
|
@ -2,6 +2,6 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct PlayerDC : Packet {
|
||||
struct PACKED PlayerDC : Packet {
|
||||
PlayerDC() : Packet() {this->mType = PacketType::PLAYERDC; mPacketSize = sizeof(PlayerDC) - sizeof(Packet);};
|
||||
};
|
|
@ -4,9 +4,9 @@
|
|||
#include "al/util.hpp"
|
||||
#include "algorithms/PlayerAnims.h"
|
||||
|
||||
struct PlayerInf : Packet {
|
||||
struct PACKED PlayerInf : Packet {
|
||||
PlayerInf() : Packet() {mType = PacketType::PLAYERINF; mPacketSize = sizeof(PlayerInf) - sizeof(Packet);};
|
||||
sead::Vector3f playerPos;
|
||||
sead::Vector3f playerPos;
|
||||
sead::Quatf playerRot;
|
||||
float animBlendWeights[6];
|
||||
PlayerAnims::Type actName;
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct ServerCommand : Packet {
|
||||
struct PACKED ServerCommand : Packet {
|
||||
ServerCommand(const char *command) : Packet() {this->mType = PacketType::CMD; strcpy(srvCmd, command); mPacketSize = sizeof(ServerCommand) - sizeof(Packet);};
|
||||
char srvCmd[PACKBUFSIZE] = {};
|
||||
};
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
#include "Packet.h"
|
||||
|
||||
struct ShineCollect : Packet {
|
||||
struct PACKED ShineCollect : Packet {
|
||||
ShineCollect() : Packet() {this->mType = PacketType::SHINECOLL; mPacketSize = sizeof(ShineCollect) - sizeof(Packet);};
|
||||
int shineId = -1;
|
||||
bool isGrand = false;
|
||||
bool1 isGrand = false;
|
||||
};
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue